[
  {
    "path": ".changeset/README.md",
    "content": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works\nwith multi-package repos, or single-package repos to help you version and publish your code. You can\nfind the full documentation for it [in our repository](https://github.com/changesets/changesets).\n\nWe have a quick list of common questions to get you started engaging with this project in\n[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md).\n"
  },
  {
    "path": ".changeset/config.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/@changesets/config@3.1.3/schema.json\",\n  \"changelog\": \"@changesets/cli/changelog\",\n  \"commit\": false,\n  \"fixed\": [],\n  \"linked\": [],\n  \"access\": \"public\",\n  \"baseBranch\": \"main\",\n  \"updateInternalDependencies\": \"patch\",\n  \"ignore\": []\n}\n"
  },
  {
    "path": ".changeset/eleven-towns-brush.md",
    "content": "---\n\"executor\": patch\n---\n\nAuto migrate sources on startup\n"
  },
  {
    "path": ".changeset/fiery-pianos-argue.md",
    "content": "---\n\"executor\": patch\n---\n\nMove execution to adapters rather than IR model\n"
  },
  {
    "path": ".changeset/nice-bananas-hammer.md",
    "content": "---\n\"executor\": patch\n---\n\nFix legacy format parsing\n"
  },
  {
    "path": ".changeset/pre.json",
    "content": "{\n  \"mode\": \"pre\",\n  \"tag\": \"beta\",\n  \"initialVersions\": {\n    \"@executor/docs\": \"0.0.0\",\n    \"executor\": \"1.2.3\",\n    \"@executor/mcp-elicitation-demo\": \"0.0.0\",\n    \"@executor/web\": \"0.0.0\",\n    \"@executor/serve-skills-via-mcp-demo\": \"0.0.0\",\n    \"@executor/auth-mcp-oauth\": \"0.0.0\",\n    \"@executor/auth-oauth2\": \"0.0.0\",\n    \"@executor/react\": \"0.0.0\",\n    \"@executor/kitchen-sink\": \"0.0.0\",\n    \"@executor/ai-sdk-adapter\": \"0.0.0\",\n    \"@executor/executor-mcp\": \"0.0.0\",\n    \"@executor/codemode-core\": \"0.0.0\",\n    \"@executor/ir\": \"0.0.0\",\n    \"@executor/runtime-deno-subprocess\": \"0.0.0\",\n    \"@executor/runtime-quickjs\": \"0.0.0\",\n    \"@executor/runtime-ses\": \"0.0.0\",\n    \"@executor/control-plane\": \"0.0.0\",\n    \"@executor/server\": \"0.0.0\",\n    \"@executor/source-builtins\": \"0.0.0\",\n    \"@executor/source-core\": \"0.0.0\",\n    \"@executor/source-google-discovery\": \"0.0.0\",\n    \"@executor/source-graphql\": \"0.0.0\",\n    \"@executor/source-mcp\": \"0.0.0\",\n    \"@executor/source-openapi\": \"0.0.0\"\n  },\n  \"changesets\": [\n    \"eleven-towns-brush\",\n    \"fiery-pianos-argue\",\n    \"nice-bananas-hammer\",\n    \"rude-shrimps-teach\",\n    \"two-vans-attend\"\n  ]\n}\n"
  },
  {
    "path": ".changeset/rude-shrimps-teach.md",
    "content": "---\n\"executor\": patch\n---\n\nFix Google Discovery tool execution for sources stored with discovery document endpoints\n"
  },
  {
    "path": ".changeset/two-vans-attend.md",
    "content": "---\n\"executor\": patch\n---\n\nFix build\n"
  },
  {
    "path": ".executor/executor.jsonc",
    "content": "{\n  \"sources\": {\n    \"vercel\": {\n      \"kind\": \"openapi\",\n      \"name\": \"Vercel API\",\n      \"connection\": {\n        \"endpoint\": \"https://api.vercel.com/\"\n      },\n      \"binding\": {\n        \"specUrl\": \"https://openapi.vercel.sh/\",\n        \"defaultHeaders\": null\n      }\n    }\n  }\n}\n"
  },
  {
    "path": ".github/workflows/publish-executor-package.yml",
    "content": "name: Publish Executor\nrun-name: \"${{ format('publish executor {0}', github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name) }}\"\n\non:\n  push:\n    tags:\n      - \"v*\"\n  workflow_dispatch:\n    inputs:\n      tag:\n        description: Git tag to publish\n        required: true\n        type: string\n\npermissions:\n  contents: write\n  id-token: write\n\nconcurrency:\n  group: publish-executor-package-${{ github.ref }}\n  cancel-in-progress: false\n\njobs:\n  publish:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n          ref: ${{ github.event_name == 'workflow_dispatch' && format('refs/tags/{0}', inputs.tag) || github.ref }}\n\n      - name: Setup Bun\n        uses: oven-sh/setup-bun@v2\n\n      - name: Setup Node\n        uses: actions/setup-node@v4\n        with:\n          node-version: 24\n          registry-url: https://registry.npmjs.org\n\n      - name: Update npm for trusted publishing\n        run: |\n          npm install -g npm@latest\n          npm --version\n\n      - name: Install dependencies\n        run: bun install --frozen-lockfile\n\n      - name: Run executor checks\n        run: |\n          bun run --cwd apps/executor typecheck\n          bun run --cwd apps/executor test\n\n      - name: Publish package and create release\n        env:\n          GH_TOKEN: ${{ github.token }}\n          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}\n          RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && inputs.tag || github.ref_name }}\n        run: |\n          export GITHUB_REF_TYPE=tag\n          export GITHUB_REF_NAME=\"$RELEASE_TAG\"\n          export GITHUB_REF=\"refs/tags/$RELEASE_TAG\"\n          if [ -n \"${NPM_TOKEN:-}\" ]; then\n            export NODE_AUTH_TOKEN=\"$NPM_TOKEN\"\n          fi\n          bun run --cwd apps/executor release:publish\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\nrun-name: \"prepare release\"\n\non:\n  push:\n    branches:\n      - main\n\npermissions:\n  actions: write\n  contents: write\n  id-token: write\n  pull-requests: write\n\nconcurrency:\n  group: release-${{ github.ref }}\n  cancel-in-progress: false\n\njobs:\n  release:\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - name: Setup Bun\n        uses: oven-sh/setup-bun@v2\n\n      - name: Setup Node\n        uses: actions/setup-node@v4\n        with:\n          node-version: 24\n\n      - name: Install dependencies\n        run: bun install --frozen-lockfile\n\n      - name: Create or update release pull request\n        id: changesets\n        uses: changesets/action@v1\n        with:\n          version: bun run changeset:version\n          commit: Version Packages\n          title: Version Packages\n          createGithubReleases: false\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Detect release version change\n        if: steps.changesets.outputs.hasChangesets == 'false'\n        id: detect_release\n        run: |\n          before=\"${{ github.event.before }}\"\n          if [ \"$before\" = \"0000000000000000000000000000000000000000\" ]; then\n            before=\"$(git rev-list --max-count=1 HEAD^ 2>/dev/null || true)\"\n          fi\n\n          version=\"$(node -e \"console.log(JSON.parse(require('fs').readFileSync('apps/executor/package.json', 'utf8')).version)\")\"\n          if [ -n \"$before\" ] && git cat-file -e \"$before:apps/executor/package.json\" 2>/dev/null; then\n            previous_version=\"$(git show \"$before:apps/executor/package.json\" | node -e \"let data = ''; process.stdin.setEncoding('utf8'); process.stdin.on('data', (chunk) => { data += chunk; }); process.stdin.on('end', () => { console.log(JSON.parse(data).version ?? ''); });\")\"\n          else\n            previous_version=\"\"\n          fi\n\n          if [ -n \"$previous_version\" ] && [ \"$previous_version\" != \"$version\" ]; then\n            echo \"changed=true\" >> \"$GITHUB_OUTPUT\"\n          else\n            echo \"changed=false\" >> \"$GITHUB_OUTPUT\"\n          fi\n\n          echo \"version=$version\" >> \"$GITHUB_OUTPUT\"\n\n      - name: Create and push release tag\n        if: steps.changesets.outputs.hasChangesets == 'false' && steps.detect_release.outputs.changed == 'true'\n        run: |\n          tag=\"v${{ steps.detect_release.outputs.version }}\"\n          if git ls-remote --exit-code --tags origin \"refs/tags/$tag\" >/dev/null 2>&1; then\n            echo \"Tag $tag already exists.\"\n            exit 0\n          fi\n\n          git config user.name \"github-actions[bot]\"\n          git config user.email \"41898282+github-actions[bot]@users.noreply.github.com\"\n          git tag \"$tag\"\n          git push origin \"$tag\"\n\n      - name: Trigger publish workflow\n        if: steps.changesets.outputs.hasChangesets == 'false' && steps.detect_release.outputs.changed == 'true'\n        env:\n          GH_TOKEN: ${{ github.token }}\n        run: |\n          tag=\"v${{ steps.detect_release.outputs.version }}\"\n          gh workflow run publish-executor-package.yml --ref \"$tag\" -f tag=\"$tag\"\n"
  },
  {
    "path": ".gitignore",
    "content": "# Environment variables\n.env\n.env.*\n!.env.example\n.env*.local\n\n# Vercel\n.vercel\n\n# Next.js\n.next/\n\n# Turbo\n.turbo/\n.turbo-prune-check/\n\n# Executor\n.executor-v2/\n.executor/*\n!.executor/executor.json\n!.executor/executor.jsonc\n.executor/artifacts/\n.executor/state/\n.executor/types/\n\n# Cloudflare Workers local state\n**/.wrangler/\n**/.dev.vars\n\n# Dependencies\n**/node_modules/\n\n# TypeScript build info\n*.tsbuildinfo\n\n# Output / build artifacts\nout\ndist\n*.tgz\n\n# Rust / Cargo build artifacts\n**/target/\ntools/openapi-extractor-rs/pkg-*/\n\n# Code coverage\ncoverage\n*.lcov\n\n# Logs\nlogs\n*.log\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Caches\n.eslintcache\n.cache\n\n# IntelliJ based IDEs\n.idea\n\n# Finder (macOS)\n.DS_Store\n\n# Convex local backend state\nconvex_local_backend.sqlite3\nconvex_local_storage/\n\n# Local OpenAPI sources service state\nsources/data/*.sqlite\nsources/data/*.sqlite-shm\nsources/data/*.sqlite-wal\n\n# Composio toolkit scrape outputs\nsources/composio-scrape/data/\n\n# Dev runner PID file\n.dev.pids\n\n# Misc\n*.har\n.chat-links.json\n.reference/\npersonal-notes/\n.tmp/\nexecutor/.env.executor-push\nignored/"
  },
  {
    "path": ".oxlintrc.jsonc",
    "content": "{\n  \"$schema\": \"./node_modules/oxlint/configuration_schema.json\",\n\n  // Keep the built-in default plugin set explicit so monorepo lint behavior\n  // does not drift when oxlint changes its defaults.\n  \"plugins\": [\"typescript\", \"oxc\", \"unicorn\"],\n\n  \"categories\": {\n    \"correctness\": \"warn\",\n  },\n\n  \"ignorePatterns\": [\n    \"**/node_modules/**\",\n    \"**/.turbo/**\",\n    \"**/dist/**\",\n    \"**/coverage/**\",\n    \"**/.next/**\",\n    \"**/.mint/**\",\n  ],\n\n  \"settings\": {\n    \"executorMonorepo\": {\n      \"packageScopes\": [\"@executor/\"],\n    },\n  },\n\n  \"jsPlugins\": [\n    {\n      \"name\": \"executor-monorepo\",\n      \"specifier\": \"./tools/oxlint/plugin.mjs\",\n    },\n  ],\n\n  \"rules\": {\n    // This repo uses Effect.gen heavily. The underlying generator syntax is an\n    // implementation detail, so \"no yield\" is not a useful signal here.\n    \"require-yield\": \"off\",\n\n    \"no-unused-vars\": \"warn\",\n\n    // Monorepo-specific rules.\n    \"executor-monorepo/no-async-effect-vitest-tests\": \"error\",\n    \"executor-monorepo/no-cross-workspace-relative-imports\": \"error\",\n    \"executor-monorepo/no-direct-effect-tag-read\": \"error\",\n    \"executor-monorepo/no-effect-run-in-effect-vitest-tests\": \"error\",\n    \"executor-monorepo/no-node-fs-with-effect-imports\": \"error\",\n    \"executor-monorepo/no-raw-effect-fail-errors\": \"error\",\n    \"executor-monorepo/no-yield-effect-fail\": \"error\",\n    \"executor-monorepo/no-workspace-src-imports\": \"warn\",\n  },\n\n  \"overrides\": [\n    {\n      // JSON Schema conditionals legitimately use a `then` key.\n      \"files\": [\n        \"packages/platform/control-plane/src/runtime/catalog/source/runtime.ts\",\n      ],\n      \"rules\": {\n        \"unicorn/no-thenable\": \"off\",\n      },\n    },\n    {\n      // This stack-integrity check intentionally prefers invariant failures in cleanup.\n      \"files\": [\"packages/sources/core/src/catalog-json-schema.ts\"],\n      \"rules\": {\n        \"no-unsafe-finally\": \"off\",\n      },\n    },\n    {\n      // Generated wasm glue is vendored into the repo and not hand-maintained.\n      \"files\": [\n        \"packages/sources/openapi/src/openapi-extractor-wasm/openapi_extractor.js\",\n      ],\n      \"rules\": {\n        \"no-unused-vars\": \"off\",\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "ARCHITECTURE.md",
    "content": "# Architecture\n\nThis document explains the active v3 architecture at a high level.\n\nIf `README.md` answers \"what is this product and how do I use it?\", this file answers \"what are the major moving parts and how do they fit together?\"\n\n## One-line view\n\n`executor` is a local daemonized control plane that turns connected sources into a workspace tool catalog and then runs TypeScript against that catalog, pausing for user interaction whenever a tool or auth flow needs it.\n\n## System shape\n\n```text\n                +-----------------------+\n                |   CLI / executor      |\n                |  apps/executor        |\n                +-----------+-----------+\n                            |\n                            | HTTP\n                            v\n+-------------+   +---------+---------+   +----------------+\n| Browser UI  |-->| local server      |<--| MCP clients    |\n| apps/web    |   | packages/platform |   | via /mcp       |\n|             |   | /server           |   |                |\n+-------------+   +---------+---------+   +----------------+\n                            |\n                            | provides runtime layer\n                            v\n                  +---------+---------+\n                  | control plane      |\n                  | packages/platform/ |\n                  | control-plane      |\n                  +----+-----+----+----+\n                       |     |    |\n         persistence --+     |    +-- source auth / discovery / inspection\n                             |\n                             +-- execution environment resolver\n                             |\n                             +-- live execution manager\n                             v\n                  +---------+---------+\n                  | QuickJS sandboxed  |\n                  | executor runtime   |\n                  | packages/kernel/   |\n                  | runtime-quickjs    |\n                  | default executor   |\n                  +--------------------+\n```\n\n## Design goals reflected in the code\n\nThe current architecture optimizes for a few specific ideas:\n\n- local-first operation with one daemon instead of many disconnected tools\n- one shared runtime for CLI, browser UI, and MCP access\n- schema-rich tool usage instead of raw HTTP from prompts\n- reusable source connections that become workspace-scoped tools\n- human-in-the-loop execution that can pause and resume cleanly\n- adapters for multiple source kinds without hardwiring product logic to one protocol\n\n## Major components\n\n### `apps/executor`: installed CLI and daemon manager\n\nThis is the main user entrypoint.\n\nResponsibilities:\n\n- exposes commands such as `up`, `down`, `status`, `doctor`, `call`, and `resume`\n- ensures the local daemon is running before execution\n- submits TypeScript executions to the local control plane\n- handles paused interaction flows, including opening browser URLs when needed\n- includes a few dev-only seed helpers for demo sources\n\nConceptually, the CLI is not the business logic. It is a thin user-facing shell over the local runtime.\n\n### `packages/platform/server`: one local process for API, MCP, and UI\n\nThis package hosts the actual local server.\n\nResponsibilities:\n\n- creates the control-plane runtime\n- mounts the control-plane HTTP API at `/v1`\n- mounts the `executor` MCP endpoint at `/mcp`\n- serves the web UI assets for normal browser routes\n- writes PID metadata for daemon lifecycle management\n\nThis is an important architectural choice: the API and UI are served by the same local process, so the product behaves like one install rather than a pile of separate services.\n\n### `packages/platform/control-plane`: product core\n\nThis is the center of the system.\n\nIt contains the runtime layer, persistence integration, and the business logic for:\n\n- local installation bootstrap\n- accounts, organizations, and workspaces\n- source discovery and connection\n- source auth and credential flows\n- source inspection and tool indexing\n- secret and credential handling\n- execution creation, resumption, and state tracking\n- policy-aware tool invocation\n\nIf you want to understand the behavior of the product, this is the most important package.\n\n### `packages/kernel/runtime-quickjs`: default code execution runtime\n\nThis package provides the TypeScript execution environment used by the local product.\n\nAt a high level it receives:\n\n- an executor implementation\n- a tool catalog\n- a tool invoker\n\nand runs user-authored code against that environment.\n\nThe default runtime executes code inside a QuickJS WebAssembly sandbox so tool calls stay proxied through the control plane.\n\nThe workspace can override that in `.executor/executor.jsonc` with `runtime: \"quickjs\" | \"ses\" | \"deno\"`.\n\n### Adapter packages\n\nSeveral packages exist to turn external systems into callable tools:\n\n- `packages/kernel/core`: shared tool abstractions, discovery, schemas, and system tools\n- `packages/sources/mcp`: MCP tool loading and invocation\n- `packages/sources/openapi`: OpenAPI extraction, manifests, and tool generation\n- `packages/hosts/mcp`: exposes the local runtime itself as an MCP server\n- `packages/clients/react`: React hooks and client state wrappers for the local UI\n\nThese packages are what let the control plane treat multiple source kinds as one logical tool catalog.\n\n## Runtime model\n\n### Local installation bootstrap\n\nOn first startup, the control plane provisions a local installation automatically.\n\nThat bootstrap creates:\n\n- one local account\n- one personal organization\n- one default workspace\n- one local installation record that points at them\n\nThis means the product can work out of the box as a local single-user system without requiring an external identity or tenant setup step.\n\n### Single daemon, shared state\n\nAll main entrypoints talk to the same local daemon:\n\n- CLI commands call the local HTTP API\n- the web app calls the same local HTTP API\n- MCP hosts talk to the `/mcp` handler exposed by that same process\n\nBecause of that, these surfaces share:\n\n- the same workspace\n- the same connected sources\n- the same secrets and credentials\n- the same execution history and interaction state\n\n## Persistence model\n\nThe persistence layer is local-file-backed.\n\nDefault behavior:\n\n- workspace config and state are stored in local files\n\nOptional behavior:\n\n- future cloud backends can plug in behind Effect service boundaries\n\nAt a high level, the local control plane stores these domains:\n\n- installation identity: local installation identity for the workspace\n- source state: sources, auth sessions, source credential bindings\n- tool model: tool artifacts and related metadata extracted from sources\n- secret state: credentials and secret materials\n- execution state: executions and execution interactions\n- governance state: policies\n\nThis is why `executor` can reconnect sources once, inspect them later, and run multiple executions over time without rebuilding everything from scratch on every prompt.\n\n## Source lifecycle\n\nThe source lifecycle is one of the defining architectural paths in the system.\n\n### 1. Discovery\n\nThe Add Source flow starts with URL discovery.\n\nThe discovery service probes a URL and tries, in order, to determine whether it looks like:\n\n- an OpenAPI source\n- a GraphQL source\n- an MCP source\n- or an unknown endpoint\n\nDiscovery also produces metadata such as:\n\n- inferred source kind\n- confidence level\n- probable auth style\n- optional spec URL\n- warnings\n- potential namespace and transport hints\n\n### 2. Connection and auth\n\nOnce a source is identified, the auth service drives the connection flow.\n\nDepending on the source, that may involve:\n\n- connecting immediately with no auth\n- asking for a bearer token or other credential material\n- creating an OAuth session and handing the user into a browser flow\n- persisting auth bindings back to the source\n\nThe important architecture point is that source connection is not just a CRUD write. It is a runtime workflow that can branch into interactive auth.\n\n### 3. Tool indexing\n\nAfter a source is connected, `executor` materializes a workspace-visible tool model.\n\nThe exact extraction path depends on the source kind:\n\n- OpenAPI sources are transformed from the OpenAPI document into tool manifests and typed operations\n- GraphQL sources are introspected into callable query and mutation tools\n- MCP sources are represented through persisted tool artifacts and runtime invocation metadata\n\nThis indexed representation is what powers search, inspection, and execution without re-parsing everything in the UI.\n\n### 4. Inspection\n\nThe source inspection service reconstructs a rich inspection bundle for the UI.\n\nThat bundle includes:\n\n- source metadata\n- namespace and pipeline kind\n- tool summaries\n- tool detail payloads\n- raw document text when available\n- manifest and definitions JSON when available\n\nThe UI uses this to show both a tree view of tools and a search-oriented discovery view.\n\n## Execution architecture\n\nExecution is the other defining path in the system.\n\n### 1. Create execution\n\nAn execution begins when the CLI, API, or MCP bridge submits TypeScript code.\n\nThe control plane creates an execution record with status such as:\n\n- `pending`\n- `running`\n- `waiting_for_interaction`\n- `completed`\n- `failed`\n\n### 2. Resolve the workspace execution environment\n\nBefore code runs, the runtime builds the execution environment for the current workspace.\n\nThat environment combines:\n\n- built-in system tools from `codemode-core`\n- `executor` internal tools such as `executor.sources.add`\n- persisted tools generated from connected OpenAPI, GraphQL, and MCP sources\n\nThe resolver returns three things:\n\n- the SES code executor\n- the workspace tool catalog\n- the tool invoker that actually dispatches calls\n\nThis resolver is the composition point where the whole product becomes one callable tool surface.\n\n### 3. Run TypeScript\n\nThe code then runs inside the local SES sandbox runtime.\n\nThe intended calling pattern is:\n\n1. discover a tool by intent\n2. inspect its schema if needed\n3. call the selected `tools.*` path\n\nThe runtime is deliberately opinionated here: the product is built around tool calls, not ad hoc `fetch` requests from user code.\n\n### 4. Invoke tools through the control plane\n\nWhen code calls a tool, the control plane decides how to handle it.\n\nPossible paths include:\n\n- built-in system tool invocation\n- internal `executor` tool invocation\n- OpenAPI tool invocation with resolved auth headers\n- GraphQL tool invocation with resolved auth headers\n- MCP tool invocation through the MCP connector\n\nThis is also the point where policy checks and source auth resolution happen.\n\n### 5. Persist results and surface interactions\n\nThe execution service updates persistent execution state as the run progresses.\n\nIf a tool call or auth flow needs user interaction, the live execution manager:\n\n- creates an execution interaction record\n- marks the execution as `waiting_for_interaction`\n- stores enough payload to resume later\n- waits for a structured elicitation response\n\nOnce the response arrives, the manager moves the execution back to `running` and the code continues.\n\n## Human interaction model\n\nA major architectural feature of `executor` is that interactions are first-class runtime state.\n\nThis is handled by the live execution manager and the execution interaction tables.\n\nThat gives the product a clean pause/resume loop instead of forcing every host to improvise its own half-finished approval flow.\n\nInteraction types include:\n\n- URL-based flows, such as opening a secure credential page or OAuth URL\n- form-like elicitation where a host can provide a structured response\n\nThis same idea is used both for direct CLI execution and for the MCP-facing `execute` and `resume` tools.\n\n## API and MCP surfaces\n\n### HTTP API\n\nThe control-plane HTTP API is mounted under `/v1`.\n\nMajor groups include:\n\n- local installation and secret management\n- OAuth\n- organizations and memberships\n- workspaces\n- sources\n- policies\n- executions\n\nThe web UI is a client of this API.\n\n### MCP bridge\n\n`packages/hosts/mcp` exposes the local runtime as an MCP server.\n\nThe bridge registers two main tools:\n\n- `execute`: run TypeScript against the local runtime\n- `resume`: continue a paused execution\n\nWhen the MCP host supports managed elicitation, the bridge can drive the interaction loop directly through MCP instead of requiring the caller to implement custom resume handling.\n\n## Frontend architecture\n\nThe web app lives in `apps/web` and is a React app built with Vite.\n\nAt a high level:\n\n- routes are managed with TanStack Router\n- data access is wrapped by `@executor/react`\n- the UI is focused on sources, source inspection, and secrets\n- production assets are served by the local server\n- development runs Vite separately while still embedding the same backend behavior\n\nThe frontend is intentionally thin. It is mostly a presentation layer over the control-plane API.\n\n## Why the architecture is shaped this way\n\nThe system is trying to solve a specific product problem:\n\n- give agents a better way to use tools than pasting giant manifests into prompts\n- keep auth, credentials, and user interactions in a durable runtime\n- let many protocols look like one workspace tool surface\n- make CLI, UI, and MCP hosts all operate on the same local state\n\nThat is why the architecture keeps converging on the same central idea:\n\n`executor` is not just a CLI and not just an MCP server. It is a local runtime that owns source connection, tool indexing, execution, and interaction state.\n\n## Current boundaries\n\nA few practical boundaries are worth calling out:\n\n- the active implementation is local-first and single-daemon\n- the current web app is React/Vite, not the older architectures mentioned in planning notes\n- `legacy/` and `legacy2/` are historical context, not the active runtime\n- policy infrastructure exists in the core, but the central product loop today is source connection plus execution\n\n## Read next\n\n- `README.md` for the product view and usage guidance\n- `apps/executor/src/cli/main.ts` for the CLI surface\n- `packages/platform/server/src/index.ts` for how the local server is assembled\n- `packages/platform/control-plane/src/runtime/` for the core runtime flows\n"
  },
  {
    "path": "PLAN.md",
    "content": "Executor:\n\nProject goal: Build an execution environment for agents to interact with APIs, MCPs, GraphQL, and other services via writing TypeScript.\n\nThe way things work today is if people want to interact with services, they either add an mcp or they call it through a cli. for mcp servers when someone adds it to their agent, it blows up the context window of tokens. the agent isn't able to call it in an efficient way and it adds a lot of bloat so people have ended up using clis instead.\n\nthe problem with the cli is people run things in dangerously allowable permissions. along with that you don't have typing and information about what clis are installed, what they can do, et cetera. by creating this typescript code execution environment we're able to handle both those problems. you can read the article code mode to understand deeper the benefits of this approach.\n\nthe basic premise is that you give the agent the ability to search over what can be called from typescript and write code to call it. it can see the typings properly through typescript.\n\nlet's look at some examples.\n\nlet's say the agent wants to list the github issues for a repository. the agent call is executed through an mcp call and it parses typescript code from that. that typescript code will basically just be\n\n`tools.discover` and then the query which is github issues list.\n\nso `tools.discover(\"github issues list\")`\n\nthat then returns the callable paths and then the agent writes another line of code. that is await tools.github.issues.list. that executes in a sandbox and it calls a proxy object which makes a fetch to run the call and then that runs that call in the secure environment. that call completes and the results are given to the sandbox and the sandbox resumes.\n\nanother instance is the case where a tool needs some form of user action. the example that i will give is approvals and if it's a create issue for example, the agent would write `await tools.github.issues.create`. that would then call the proxy object. the proxy object would trigger the interaction and then once the user approves that interaction it resumes.\n\na note on the interaction model: i believe we want to model this off of mcp elicitation which you can see the spec for in references. the reason we want to model it off of mcp elicitation is that for apis for example that will just be a standard approve/deny model but for something like this since we support calling mcp servers those mcp servers could actually try and elicit input for the user.\n\nSo let's talk about interaction model a little bit. Executor is going to be configurable through Executor, and so you would be able to add a source, for example, by just prompting: \"Hey, please add Axiom as a source.\" What it would do is it would call tools.executor.AddSource, which calls the MCP server. That MCP server matches kind of the web flow where there's information or an action you need to elicit from the user. What that information action looks like is in the OAUTH flow. It's: they have to go sign in somewhere; there's some callback that happens, and then something's created for that. It's details on that, but we get them onto a web page in the browser to sign in. A similar thing would be if a source required an API key. It's the same concept if you open up a web page to securely input that.\n\nCurrent state:\n\nWe are on v3 of this codebase which is a completely fresh start, the original codebase is in legacy/, the v2 is in legacy2/.\n\nArchitecture I like:\n\nDatabase:\nLocal-file-backed control plane for local use, with room for future hosted backends\n\nServer:\n\n- API\n  The web dashboard calls the API via effect-atom.\n\n- MCP\n  Executor is configurable via executor. A user can enter the prompt \"Please add the https://mcp.notion.com/mcp to my workspace\"\n\nWe use MCP here instead of the API as the user has to perform actions in many cases. An example of this is OAuthing to an MCP server or opening a page to set a secret in. This prevents the secrets from being pasted over a chat\n\nDoing MCP here w/ MCP elicitation allows us to not give special treatment to the executor app while also giving a nice UX\n\nIdeally the MCP server shares a lot of logic between API\n\nClients:\n\n- Web client\n  Cloud product hosted at executor.sh, local one just on localhost\n  This is a next.js app, so we will actually host the api/ in a route handler on it however it's important we implement the API in a standalone package and it just exposes a standard web request / response handler\n- CLI\n  Connects to either the cloud api endpoint\n\nStandalone:\n\n- SDK\n  Allows for people to use everything we've built in their own apps, including ingesting API specs / MCPs for calling\n\nRuntimes:\n\n- Deno\n- In process\n- Cloudflare worker runtime\n\nOther:\n\n- Avoid hardcoding strings in the core libraries, prefer programming to interfaces, this is because it allows people to build custom adapters without having to modify the core\n- Aim for composability of adapters. For example, the cloud product may eventually store secrets in a hosted backend while still supporting BYO 1Password. This does not need to be implemented today but is worth noting.\n- This is a fresh start so we can make whatever changes we need.\n\nRough architecture is: Turborepo monorepo, effect-vitest for testing, bun for package manager / running apps (but we leverage Effect wherever possible rather than bun's apis i.e for the server), Next.js for web app\n\nReferences:\nhttps://blog.cloudflare.com/code-mode/ - concept we are implementing\nhttps://mcp.axiom.co/mcp - MCP server that requires auth\nhttps://modelcontextprotocol.io/specification/draft/client/elicitation - How we are going to be handling interactions from the user\nlegacy/ original implementation\nlegacy2\n"
  },
  {
    "path": "README.md",
    "content": "# executor\n\n\nhttps://github.com/user-attachments/assets/11225f83-e848-42ba-99b2-a993bcc88dad\n\n\n`executor` is a local-first execution environment for AI agents.\n\nIt gives an agent a TypeScript runtime, a discoverable tool catalog, and a single local place to connect external systems such as MCP servers, OpenAPI APIs, and GraphQL APIs. Instead of pasting large MCP manifests into every chat or giving an agent broad shell access, you run code inside `executor` and let it call typed `tools.*` functions.\n\n## Community\n\nJoin the Discord community: https://discord.gg/eF29HBHwM6\n\nAt runtime, `executor` behaves like one local product:\n\n- a CLI for starting the runtime and executing code\n- a local API server\n- a local web UI for connecting sources, inspecting tools, and managing secrets\n- an MCP endpoint for hosts that want to drive `executor` through MCP\n\nThe current codebase lives in `apps/` and `packages/`. Older experiments stay in `legacy/` and `legacy2/`.\n\n## Attribution\n\n- [Crystian](https://www.linkedin.com/in/crystian/) provided the npm package name `executor`.\n- The `codemode` concept in this project is inspired by Cloudflare's [Code Mode announcement](https://blog.cloudflare.com/code-mode/).\n\n## Why this exists\n\n`executor` is built around a simple idea: agents should work against a structured tool environment instead of guessing at raw HTTP calls, carrying huge MCP definitions in context, or running arbitrary local commands with broad permissions.\n\nIn practice that means:\n\n- sources are connected once and turned into a reusable workspace tool catalog\n- the agent discovers tools by intent, inspects schemas, and then calls typed functions\n- secrets and OAuth flows stay in the local runtime and web UI instead of being pasted into chat\n- human interaction can pause an execution and resume it cleanly\n\n## Mental model\n\nThink of `executor` as a local control plane for agent tool use.\n\n1. You start a local `executor` daemon.\n2. You connect sources such as an MCP server, an OpenAPI document, or a GraphQL endpoint.\n3. `executor` indexes those sources into a workspace tool catalog.\n4. An agent runs TypeScript against that catalog through `executor call` or through the MCP bridge.\n5. If a tool needs credentials or user input, execution pauses, opens a local flow, and then resumes.\n\n## What it does today\n\n### Connect external tool sources\n\n`executor` currently supports these source types:\n\n- `mcp`: remote MCP servers, including transport selection for streamable HTTP or SSE\n- `openapi`: REST APIs described by an OpenAPI document\n- `graphql`: GraphQL endpoints that can be introspected into callable tools\n\nThe add-source flow can:\n\n- probe a URL and infer what kind of source it is\n- infer likely authentication requirements\n- prompt for credentials when discovery or connection needs them\n- start OAuth when a source requires it\n- persist the source and its indexed tool metadata in the local workspace\n\nThe web app also includes templates for common providers so you can start from real examples instead of filling every field by hand.\n\n### Run agent code against tools\n\nThe main CLI workflow is `executor call`.\n\nThe runtime expects the agent to use the built-in discovery workflow:\n\n```ts\nconst matches = await tools.discover({ query: \"github issues\", limit: 5 });\nconst path = matches.bestPath;\nconst detail = await tools.describe.tool({ path, includeSchemas: true });\n\nreturn await tools.github.issues.list({\n  owner: \"vercel\",\n  repo: \"next.js\",\n});\n```\n\nA few important rules shape the execution model:\n\n- write TypeScript, not raw shell pipelines\n- use `tools.*`, not direct `fetch`\n- discover first when the exact tool path is not known\n- inspect schemas before calling complex tools\n\n### Handle credentials and user interaction\n\nWhen a source or tool needs human input, `executor` can pause the execution and create an interaction record.\n\nThat interaction may ask you to:\n\n- open a secure local credential page\n- complete an OAuth flow in the browser\n- respond to a structured elicitation from a tool host\n- resume a paused execution from the CLI\n\nThis is the core human-in-the-loop behavior that lets `executor` keep secrets and approvals outside the agent's raw context.\n\n### Inspect the connected tool model\n\nThe web UI is not just a setup surface. It is also where you can inspect what `executor` learned from a source.\n\nFor each source you can:\n\n- browse its tool tree\n- search for tools by intent\n- inspect input and output schemas\n- view generated manifests, definitions, and raw source documents when available\n- edit source settings and authentication details\n\n## Quick start\n\nIf you want to use this a package distribution, install it via npm:\n\n```bash\nnpm install -g executor\nexecutor up\n```\n\nThen either tell your agent to use the CLI or to open the web UI and copy the MCP CLI install command.\n\nThen you can run the CLI as `executor`.\n\nIf you are working from this repository locally, the easiest path is:\n\n```bash\nbun install\nbun dev\n```\n\nThat starts the local runtime. The default base URL is:\n\n```text\nhttp://127.0.0.1:8788\n```\n\nFrom there:\n\n1. Open the web UI in your browser.\n2. Add a source from `/sources/add`.\n3. If needed, store credentials in `/secrets`.\n4. Run TypeScript with `bun run executor call ...`.\n\nIf you are using a packaged distribution, the command name is simply `executor` instead of `bun run executor`.\n\n## Core CLI commands\n\n```bash\nexecutor up\nexecutor down\nexecutor status --json\nexecutor doctor --json\nexecutor call --file script.ts\nexecutor resume --execution-id exec_123\n```\n\n`executor call` accepts code in three ways:\n\n- inline as a positional argument\n- from `--file`\n- from standard input with `--stdin`\n\nExamples:\n\n```bash\nexecutor call 'const matches = await tools.discover({ query: \"repo details\", limit: 1 }); return matches;'\nexecutor call --file script.ts\ncat script.ts | executor call --stdin\nexecutor call --no-open --file script.ts\n```\n\nIf an execution pauses, resume it with:\n\n```bash\nexecutor resume --execution-id exec_123\n```\n\n## Adding a source\n\nThere are two main ways to add a source.\n\n### In the web UI\n\nUse the Add Source flow to:\n\n- paste a URL\n- run discovery\n- review the inferred kind, namespace, transport, and auth\n- connect the source\n- complete credential or OAuth setup if required\n\nThis is the easiest path for most users.\n\n### From inside an execution\n\nThe runtime also exposes `tools.executor.sources.add(...)`, which lets an agent add a source from code.\n\nExamples:\n\n```ts\nreturn await tools.executor.sources.add({\n  endpoint: \"https://example.com/mcp\",\n  name: \"Example\",\n  namespace: \"example\",\n});\n```\n\n```ts\nreturn await tools.executor.sources.add({\n  kind: \"openapi\",\n  endpoint: \"https://api.github.com\",\n  specUrl:\n    \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\",\n  name: \"GitHub\",\n  namespace: \"github\",\n});\n```\n\nFor HTTP-style sources, `executor` can drive the credential flow for you.\n\n## How execution works\n\nAt a high level, every execution follows the same loop:\n\n1. `executor` resolves the current local installation and workspace.\n2. It builds a tool catalog from built-in tools plus all connected workspace sources.\n3. It runs your TypeScript inside the configured sandbox runtime. QuickJS is the default, and `.executor/executor.jsonc` can set `\"runtime\": \"quickjs\" | \"ses\" | \"deno\"`.\n4. Tool calls are dispatched through `executor` rather than directly from your code.\n5. If a tool needs interaction, the run pauses and records a pending interaction.\n6. Once the interaction is resolved, the execution continues and eventually completes or fails.\n\nExample:\n\n```jsonc\n{\n  \"runtime\": \"ses\",\n  \"sources\": {}\n}\n```\n\nThis gives you a stable surface for agent automation:\n\n- the agent sees a coherent catalog\n- connected sources become reusable namespace-based tools\n- auth stays attached to sources and secret material\n- the runtime can track execution state instead of losing it inside a one-shot prompt\n\n## Web UI overview\n\nThe React web app is served from the same local server as the API.\n\nMain screens:\n\n- `/`: list connected sources in the current local workspace\n- `/sources/add`: discover and connect new sources\n- `/sources/:sourceId`: inspect tools, search tools, and browse source artifacts\n- `/sources/:sourceId/edit`: edit source settings and auth\n- `/secrets`: create, update, and delete locally stored secrets\n\nThe UI uses the same control-plane API as the CLI, so both surfaces are operating on the same local runtime state.\n\n## Local-first runtime behavior\n\nBy default `executor` runs as a single local daemon process.\n\nIt serves:\n\n- `/v1` for the local control-plane API\n- `/mcp` for the `executor` MCP endpoint\n- the web UI for normal browser routes\n\nDefault network location:\n\n- host: `127.0.0.1`\n- port: `8788`\n\nDefault data locations are OS-aware:\n\n- Linux data: `~/.local/share/executor`\n- Linux runtime state: `~/.local/state/executor/run`\n- macOS: `~/Library/Application Support/Executor`\n- Windows: `%LOCALAPPDATA%\\Executor`\n\nThe server also maintains local PID and log files in its runtime directory.\n\n## Persistence and data\n\n`executor` persists the local control plane to local files.\n\nPersisted concepts include:\n\n- local installation identity\n- connected sources\n- indexed tool artifacts and related metadata\n- credentials and secret material bindings\n- source auth sessions\n- execution and interaction state\n- executions and execution interactions\n- policies\n\nOn first start, `executor` provisions a local account, a personal organization, and a default workspace automatically.\n\n## Security and trust model\n\n`executor` is designed to narrow how agents interact with external systems.\n\nCompared with direct shell or raw API usage, the model is intentionally more structured:\n\n- tool calls are routed through a controlled runtime\n- secrets are stored separately from prompt text\n- OAuth and credential capture happen through local flows\n- executions can pause for interaction instead of guessing or failing silently\n- source auth and tool metadata live with the workspace rather than inside each prompt\n\nThis does not make the system magically risk-free, but it gives the runtime places to enforce policy, collect approvals, and keep sensitive material out of the agent's immediate context.\n\n## Repository layout\n\nIf you are exploring the repo, these are the directories that matter most:\n\n- `apps/executor`: packaged CLI entrypoint and daemon lifecycle commands\n- `apps/web`: local React web UI\n- `packages/platform/server`: local HTTP server that serves API, MCP, and UI\n- `packages/platform/control-plane`: source management, secrets, persistence, execution, and inspection\n- `packages/kernel/runtime-deno-subprocess`: optional Deno subprocess runtime for TypeScript execution\n- `packages/kernel/runtime-quickjs`: default QuickJS sandbox runtime for TypeScript execution\n- `packages/kernel/runtime-ses`: optional SES sandbox runtime for TypeScript execution\n- `packages/hosts/mcp`: MCP bridge for `execute` and `resume`\n- `packages/kernel/core` plus `packages/sources/*`: core tool abstractions and first-party source integrations\n\n## Releasing\n\n- Add a changeset in any PR that should release: `bun run changeset`.\n- Merge that PR to `main`. `.github/workflows/release.yml` opens or updates a `Version Packages` release PR for version bumps and changelog updates.\n- Merge the `Version Packages` PR. The release workflow pushes the matching git tag and dispatches `.github/workflows/publish-executor-package.yml`, which publishes to npm and creates the GitHub release.\n- Do not edit `apps/executor/package.json` by hand for normal releases. Changesets owns the version.\n- For a beta train, enter prerelease mode with `bun run release:beta:start`, commit `.changeset/pre.json`, and merge it. Release PRs will then use `-beta.x` versions until you exit with `bun run release:beta:stop`.\n- `bun run --cwd apps/executor release:publish` remains the publish implementation used by CI.\n- To build and pack the publish artifact locally without publishing, run `bun run --cwd apps/executor release:publish:dry-run`.\n- `.github/workflows/publish-executor-package.yml` can also be run manually with a tag input if a publish needs to be retried for an already-created version tag.\n- One-time npm setup: either configure npm trusted publishing for `RhysSullivan/executor` with the workflow file `.github/workflows/publish-executor-package.yml`, or add a GitHub Actions secret named `NPM_TOKEN` that can publish the `executor` package.\n- Stable releases use a normal semver like `1.2.3` and publish to npm under `latest`.\n- Beta releases use a prerelease semver like `1.3.0-beta.1` and publish to npm under `beta`.\n- When a release should become an upgrade test fixture, capture a real workspace snapshot with `bun run fixture:release:capture -- ...` and commit it under [`packages/platform/control-plane/src/runtime/__fixtures__`](./packages/platform/control-plane/src/runtime/__fixtures__/README.md).\n\n## Project status\n\nThis repository is explicitly on its third major architecture iteration.\n\n- `apps/` and `packages/` are the active implementation\n- `legacy/` is the original codebase\n- `legacy2/` is the second generation\n\nIf you want the system view instead of the product view, read [`ARCHITECTURE.md`](./ARCHITECTURE.md).\n"
  },
  {
    "path": "TRACING.md",
    "content": "# Local Tracing\n\nStart Jaeger locally:\n\n```bash\nbun run trace:up\n```\n\nRun the web/server dev process with tracing enabled:\n\n```bash\nEXECUTOR_TRACE_ENABLED=1 \\\nEXECUTOR_TRACE_SERVICE_NAME=executor-local \\\nEXECUTOR_TRACE_OTLP_ENDPOINT=http://127.0.0.1:4317 \\\nbun run dev\n```\n\nThen open Jaeger:\n\n- UI: `http://127.0.0.1:16686/search?service=executor-local`\n\nYou can also query traces over HTTP:\n\n```bash\ncurl \"http://127.0.0.1:16686/api/traces?service=executor-local&limit=20\"\n```\n\nUseful operations to search for:\n\n- `source.connect.http`\n- `source.catalog.sync`\n- `graphql.syncCatalog`\n- `graphql.introspection.fetch`\n- `graphql.manifest.extract`\n- `graphql.definitions.compile`\n- `graphql.operations.build`\n- `graphql.snapshot.build`\n\nStop Jaeger:\n\n```bash\nbun run trace:down\n```\n"
  },
  {
    "path": "apps/docs/CHANGELOG.md",
    "content": "# @executor/docs\n\n## null\n"
  },
  {
    "path": "apps/docs/developer/adapters-and-formats.mdx",
    "content": "---\ntitle: \"Adapters And Formats\"\ndescription: \"How executor supports multiple integration types without hardwiring the core to one protocol.\"\n---\n\nAdapters are the main extensibility boundary in executor.\n\nThey let executor support multiple integration styles without turning the control plane into a long chain of provider-specific branches.\n\n## What an adapter does\n\nAn adapter owns the format-specific or protocol-specific behavior for a source.\n\nThat includes:\n\n- connect payload shape\n- binding config serialization and decoding\n- source validation\n- source config extraction\n- materialization\n- manifest parsing\n- operation description\n- invocation\n\nThe control plane owns the generic lifecycle around that.\n\n## Why adapters exist\n\nExecutor needs to support integrations that do not all look the same at the source boundary:\n\n- OpenAPI specs\n- GraphQL APIs\n- MCP servers\n- future Google Discovery imports\n- future Postman collections\n- future snippet bundles\n\nIf the core storage model were shaped around one of those directly, every new integration type would cause another redesign.\n\nAdapters prevent that.\n\n## Adapter vs format\n\nIt is important not to confuse the adapter with the import format.\n\nExamples:\n\n- OpenAPI and GraphQL are different adapters even though both import HTTP-shaped API descriptions\n- MCP is its own adapter because it has distinct session, discovery, and resume semantics\n\nThis lets executor share a thin catalog model without pretending every source has the same runtime behavior.\n\n## What gets stored\n\nAdapters do **not** get to invent arbitrary top-level storage models.\n\nThey compile into the same canonical layers:\n\n- recipe\n- revision\n- raw documents\n- schema bundles\n- operations\n\nThat means the control plane can stay generic while adapters remain flexible.\n\n## Why binding config is adapter-owned\n\nAdapter-owned binding config is one of the most important anti-churn decisions in the codebase.\n\nInstead of adding more and more provider columns to the source model, the adapter carries its own binding payload and version.\n\nThat makes it much cheaper to evolve formats without reopening the core schema for every field addition.\n\n## Why provider-specific detail still exists\n\nExecutor does still store some provider-shaped detail in operation metadata and bundle/document kinds.\n\nThat is intentional, but the direction is:\n\n- keep the generic IR thin\n- keep provider-specific detail in adapter code or typed provider metadata\n\nThe goal is not to erase differences between formats. The goal is to stop those differences from dominating the core architecture.\n\nFor the current fidelity tradeoffs and known lossy areas across adapters, see [Import Fidelity](/developer/import-fidelity).\n\n## What a good new adapter should do\n\nA good new adapter should:\n\n- compile into the canonical recipe/revision/operation model\n- use adapter-owned binding config\n- avoid requiring new generic tables or provider columns unless truly necessary\n- expose stable tool paths and search text\n- make auth needs explicit through the existing auth slot model\n\nIf an integration needs a new primitive outside the source/tool model entirely, that is a sign it may not belong as just another adapter.\n"
  },
  {
    "path": "apps/docs/developer/cli.mdx",
    "content": "---\ntitle: \"CLI\"\ndescription: \"How the executor CLI fits into the system and why it stays thin.\"\n---\n\nThe CLI lives in `apps/executor`.\n\nIts job is to be the installed user-facing shell around the local daemon, not the place where product logic is implemented.\n\n## Responsibilities\n\nThe CLI is responsible for:\n\n- starting and stopping the local daemon\n- checking daemon health and installation state\n- submitting executions\n- resuming paused interactions\n- packaging and distribution concerns for the installed binary\n\n## What it should not own\n\nThe CLI should not own:\n\n- source persistence rules\n- auth workflows\n- tool discovery\n- execution state machines\n- tool invocation behavior\n\nThose belong in the control plane.\n\n## Why this boundary matters\n\nThis split is intentional.\n\nIt means the browser UI, CLI, and local MCP entrypoint all talk to the same product core instead of each carrying their own business logic. That keeps behavior consistent across entrypoints and avoids reimplementing source, credential, and execution rules in multiple places.\n\n## How it talks to the rest of the system\n\nAt a high level, the CLI:\n\n1. ensures the local daemon is available\n2. calls the local HTTP API exposed by `packages/platform/server`\n3. hands off real work to `packages/platform/control-plane`\n\nThat makes the CLI a stable shell over a shared local runtime rather than a second product core.\n\n## Why this is flexible\n\nBecause the CLI is thin, new product capabilities usually do not require redesigning the CLI architecture.\n\nMost new work lands in:\n\n- control-plane runtime logic\n- source adapters\n- codemode packages\n- server/API surfaces\n\nThe CLI mostly needs new commands or command wiring on top of those primitives.\n"
  },
  {
    "path": "apps/docs/developer/codemode.mdx",
    "content": "---\ntitle: \"Code Mode\"\ndescription: \"The shared tool abstractions and adapter packages that connect sources to execution.\"\n---\n\nThe codemode packages are the bridge between imported integrations and executable tools.\n\nThey provide the shared tool abstractions that both the control plane and runtime can depend on.\n\n## Core role\n\nThe codemode layer is where executor turns \"some external thing\" into a discoverable and invokable tool surface.\n\nThat is why it exists as a separate layer instead of being buried directly inside each product surface.\n\n## Main packages\n\n### `packages/kernel/core`\n\nThis package holds the common tool model:\n\n- tool definitions\n- tool catalogs\n- tool invokers\n- discovery helpers\n- schema-aware tool contracts\n- shared system-tool concepts\n\nThis is the main abstraction boundary that other layers build on.\n\n### `packages/sources/openapi`\n\nThis package handles OpenAPI-specific extraction and tool generation.\n\nIts job is to understand OpenAPI and compile it into the shared codemode tool model, not to own workspace persistence or auth lifecycle.\n\n### `packages/sources/mcp`\n\nThis package handles MCP-specific tool discovery and invocation behavior and adapts remote MCP tools into the same shared tool model.\n\n## Why this layer exists\n\nWithout the codemode layer, the control plane would have to understand every source format and execution detail directly.\n\nInstead, executor keeps the core model broad and pushes format-specific transformation logic into focused packages.\n\nThat is what makes the system extensible:\n\n- new adapters can target the same internal tool model\n- the runtime can execute against one logical tool surface\n- the same abstractions can be reused outside the control plane, including SDK-style consumers\n\n## How it fits with the control plane\n\nThe control plane owns:\n\n- bindings\n- credentials\n- revisions and materialization\n- tool indexing\n- policy and invocation lifecycle\n\nThe codemode layer owns:\n\n- how external formats become tools\n- how those tools are described\n- how format-specific invocation helpers are implemented\n\nThat boundary is what keeps the architecture adapter-based instead of turning the control plane into one large protocol-specific switch statement.\n"
  },
  {
    "path": "apps/docs/developer/core-model.mdx",
    "content": "---\ntitle: \"Core Model\"\ndescription: \"The main data and runtime concepts in executor today.\"\n---\n\nThe most important thing to understand about executor is that it does **not** model the system as one flat `source` row.\n\nThe current model has a few separate concepts that each exist for a different reason.\n\n## The primary concepts\n\n### Source binding\n\nA source is the workspace-local installation record.\n\nIt answers:\n\n- what is this integration called in this workspace?\n- is it enabled?\n- what namespace should its tools use?\n- what install-local config does it have?\n\nThis is why a source carries local concerns like name, namespace, enabled state, binding config, and status.\n\n### Recipe\n\nA recipe is the shareable integration identity.\n\nIt answers:\n\n- what integration definition is this?\n- what adapter produced it?\n- what broad catalog kind does it belong to?\n\nA recipe is meant to converge across workspaces when the underlying integration definition is the same.\n\n### Revision / materialization\n\nA recipe revision is the compiled result of an import.\n\nIt answers:\n\n- what source config produced this compiled shape?\n- what manifest, documents, schema bundles, and operations belong to it?\n\nThis is the durable execution artifact layer.\n\n### Operation IR\n\nOperations are the canonical callable tool index.\n\nThey answer:\n\n- what tools exist?\n- how should they be searched and described?\n- how does invocation find the right persisted operation quickly?\n\nThe operation layer exists because raw upstream documents are not a good direct query surface for search, policy, and invocation lookup.\n\n### Credential\n\nCredentials are private auth bindings.\n\nThey answer:\n\n- who can authenticate for this binding?\n- for which slot?\n- using what auth kind and secret refs?\n\nCredentials are actor-scoped by default because two users in the same workspace may connect different identities to the same source.\n\n## Why the split matters\n\nThis split fixes a few old problems:\n\n- shareable definition is no longer confused with workspace-local installation\n- auth is no longer implicitly one-token-per-source\n- materialized tool content is no longer stored directly under one workspace source\n- provider-specific import details do not need to become universal top-level columns\n\n## Binding config\n\nSource-specific connection config now lives in adapter-owned binding payloads:\n\n- `bindingVersion`\n- `binding`\n\nThat means the core model does not need built-in fields forever for every provider-specific connection knob.\n\nExamples:\n\n- OpenAPI binding can carry `specUrl` and `defaultHeaders`\n- MCP binding can carry `transport`, `queryParams`, and `headers`\n- internal bindings can be empty\n\nThe adapter owns serialization, decoding, defaults, and validation for that payload.\n\n## Catalog kinds vs adapters\n\nExecutor separates broad catalog kinds from adapter keys.\n\nCatalog kinds:\n\n- `imported`\n- `internal`\n\nAdapters are more specific:\n\n- `openapi`\n- `graphql`\n- `mcp`\n- `google_discovery`\n- future `postman_collection`\n- future `snippet_bundle`\n\nThe important distinction is that execution now belongs to adapters. The shared catalog stays broad and stable, while connect/auth/invoke behavior is described through adapter strategies instead of one top-level runtime family enum.\n\n## Why this is the right shape\n\nThe current model is designed so that new support usually means:\n\n- add or evolve an adapter\n- compile into the same recipe/revision/operation layers\n\nand not:\n\n- redesign how source persistence fundamentally works\n\nThat is the main goal of the current architecture.\n"
  },
  {
    "path": "apps/docs/developer/credentials-and-auth.mdx",
    "content": "---\ntitle: \"Credentials And Auth\"\ndescription: \"How executor models auth, interactive flows, and actor-scoped credential ownership.\"\n---\n\nAuth in executor is not treated as a side detail on the source row.\n\nIt is modeled as its own layer because auth has different ownership and lifecycle semantics from source bindings and recipe materialization.\n\n## Auth ownership\n\nCredentials are scoped to:\n\n- workspace\n- source binding\n- actor\n- slot\n\nThis is important because different users in the same workspace may connect different identities to the same source.\n\n## Auth slots\n\nExecutor distinguishes where auth is used.\n\nImportant current slots:\n\n- `runtime`\n- `import`\n\nWhy this matters:\n\n- some integrations use the same auth for both\n- some need auth only to fetch or generate the materialization\n- some may eventually need setup/bootstrap-specific auth\n\nThis is why source auth is more than a single token field.\n\n## Static credentials\n\nThe common case today is still static auth backed by secret references.\n\nExamples:\n\n- bearer token\n- OAuth access token\n- OAuth refresh token\n\nThe control plane stores secret refs, not raw secret values inline on the source or credential rows.\n\n## Interactive auth sessions\n\nInteractive auth, such as OAuth flows, is modeled separately from stored credentials.\n\nThat separation exists because:\n\n- a pending auth flow has state and lifecycle of its own\n- it may be tied to an interaction or execution\n- it is not the same thing as a resolved credential\n\nThis is why executor has auth sessions and credentials as separate concepts.\n\n## Shareable config vs private state\n\nProject config under `.executor/executor.jsonc` is intended to stay portable and committable.\n\nPrivate auth state does not belong in the workspace tree:\n\n- actor-scoped credentials\n- OAuth sessions\n- refresh leases\n- secret material\n\nThat state lives in the local control-plane store under the user's home-scoped executor state instead of the project `.executor/state` directory.\n\n## Why actor scope matters\n\nThe old one-token-per-source assumption does not hold once:\n\n- multiple users share a workspace\n- each user connects their own Google account, GitHub account, or other external identity\n\nActor-scoped ownership is the durable fix for that.\n\n## The next auth primitive\n\nOne important extension area is dynamic credentials.\n\nStatic secret refs are not always enough for integrations that:\n\n- derive short-lived auth by calling login or refresh endpoints\n- need app-specific runtime headers\n- require token renewal logic\n\nThe likely next auth-layer primitive is an auth provider or auth material resolver:\n\n- configured with secret refs and stable inputs\n- produces runtime auth material on demand\n- caches it with expiry metadata\n\nThat is broader than sources and should be reusable by future source adapters, tool providers, and code bundles.\n\n## Why auth is separated from recipes\n\nRecipes are shareable integration definitions.\nCredentials are private installation-specific state.\n\nThat separation is important both for correctness and for shareability:\n\n- a recipe can be portable\n- a source binding can be local\n- credentials stay private\n\nThis is the main reason auth is not modeled as part of the shareable recipe layer.\n"
  },
  {
    "path": "apps/docs/developer/extending-executor.mdx",
    "content": "---\ntitle: \"Extending Executor\"\ndescription: \"How to add new source support without breaking the current architecture.\"\n---\n\nThe best way to extend executor is to respect the current boundaries instead of stretching the core model.\n\n## First question: is it really a source?\n\nNot every new integration should be modeled as a source.\n\nUse the source model when the thing is:\n\n- a persistent external system\n- with install-local configuration\n- with auth state\n- that materializes into callable tools\n\nIf the new thing is really:\n\n- a local tool library\n- a package bundle\n- a browser automation runtime\n\nthen it may need a different top-level primitive instead of being shoved into the source model.\n\n## If it is a source, add an adapter\n\nThe happy path for a new integration is:\n\n1. define the adapter key, catalog kind, and strategies\n2. define the connect and binding config shape\n3. materialize into documents, schema bundles, and operations\n4. implement invocation\n5. add tests against the canonical model\n\nThe adapter should absorb provider-specific logic so the core does not have to.\n\n## What a new adapter should not do\n\nAvoid these patterns:\n\n- adding new provider-specific columns to generic tables because one adapter wants them\n- storing expanded presentation output as canonical truth\n- bypassing the operation layer and invoking directly from raw documents\n- treating auth as provider-specific ad hoc fields on the source row\n\nThose are the patterns that lead back to churn.\n\n## The standard for a good extension\n\nA good new adapter should make the core system feel boring.\n\nThat means:\n\n- persistence still looks like recipe/revision/operations\n- auth still flows through the same credential/session primitives\n- discovery and inspection still work through the same catalog ideas\n- execution still delegates through the same tool and adapter boundaries\n\nIf a new adapter needs deep new behavior in all of those places, that is usually a sign it may be a new primitive, not just a new adapter.\n\n## What feels like the next natural extensions\n\nThe current architecture is well-suited to future additions like:\n\n- Google Discovery imports\n- Postman collection imports\n- snippet bundles\n- richer auth material providers\n\nThose should mostly be adapter and auth-layer work, not another persistence redesign.\n\n## Why this is the best setup\n\nThe current setup is not trying to be abstract for its own sake.\nIt is trying to keep the codebase in a state where:\n\n- core concepts stay stable\n- new support lands as extensions\n- source support does not require philosophy rewrites every few weeks\n\nThat is the real reason the system is shaped around adapters, recipes, revisions, operations, and actor-scoped credentials.\n"
  },
  {
    "path": "apps/docs/developer/import-fidelity.mdx",
    "content": "---\ntitle: \"Import Fidelity\"\ndescription: \"What executor preserves, normalizes, and currently loses when importing external formats.\"\n---\n\nExecutor should normalize syntax, not meaning.\n\nThat means the import pipeline can simplify surface differences between OpenAPI, GraphQL, Google Discovery, and MCP, but it should not silently erase semantics that change execution, trust, or user understanding.\n\nThe practical shape is:\n\n- keep the raw source document or manifest\n- keep adapter-native metadata that does not fit the common model cleanly\n- promote execution-relevant semantics into first-class IR\n\n## The fidelity buckets\n\nThis audit uses four buckets:\n\n- `Raw source`: the original imported document or manifest\n- `Adapter/native`: typed provider data or native blobs attached during import\n- `IR`: first-class catalog symbols and capability metadata\n- `UI today`: what current inspection surfaces directly\n\nCurrent inspection is still narrow. It mostly shows projected schemas plus `tool.executable.native[0]`, not all preserved native blobs or capability-native metadata.\n\n## OpenAPI\n\n| Source detail | Raw source | Adapter/native | IR | UI today | Notes |\n| --- | --- | --- | --- | --- | --- |\n| Operation auth requirements and security schemes | Yes | No | No | No | Operation `security` is not promoted; imported capabilities currently use `auth: none`. |\n| Exact response variants, status codes, and headers | Yes | Partial | No | Partial | Import chooses one preferred response, then projects one synthetic `2XX` response set. |\n| Parameter serialization (`style`, `explode`, `allowReserved`, content-based params) | Yes | Mostly no | No | No | The IR can model these, but the OpenAPI importer currently only takes parameter `schema`. |\n| Multiple request and response media types | Yes | Partial | Partial | Partial | Import picks a preferred content entry for typing; response docs keep content types only for the chosen response. |\n| `servers` defaults | Yes | No | No | No | The IR can represent scope server defaults, but OpenAPI import does not populate them. |\n| Rich schema semantics beyond the importer subset | Yes | Partial | Partial | Partial | Unsupported JSON Schema shapes fall back to `unknown` plus native preservation. |\n\n## GraphQL\n\n| Source detail | Raw source | Adapter/native | IR | UI today | Notes |\n| --- | --- | --- | --- | --- | --- |\n| Subscription root fields as tools | Yes | Partial | No | No | The manifest records `subscriptionTypeName`, but tool generation only materializes query and mutation fields. |\n| Full field result shapes for generated field tools | Yes | Partial | Partial | Partial | Field-tool outputs are heuristic projections, not full result types. |\n| Union and deep nested selections | Yes | Partial | Partial | Partial | Unions degrade to `__typename`; nested selection stops after depth 2 in generated field tools. |\n| Arbitrary caller-selected field projections | Yes | Partial | No | No | Generated field tools are compiled with fixed selections; the raw `request` tool is the escape hatch. |\n| Deprecation reasons | Yes | Partial | Partial | No | GraphQL schemas emit `deprecated: true` plus `x-deprecationReason`, but the generic schema importer only keeps `deprecated` as first-class shape metadata. |\n\nGraphQL is a special case: the main loss is not the raw source being discarded, but the generated field-tool projection being intentionally narrower than the schema. That tradeoff is reasonable for discoverability, but only if the system continues to preserve and expose the raw request path.\n\n## Google Discovery\n\n| Source detail | Raw source | Adapter/native | IR | UI today | Notes |\n| --- | --- | --- | --- | --- | --- |\n| OAuth scope descriptions | Yes | Partial | No | No | Document-level scope descriptions are extracted, but the IR security scheme rewrites scopes to `{ scope: scope }`. |\n| Rich media upload metadata | Yes | Partial | Partial | Partial | Upload support is collapsed to booleans such as `supportsMediaUpload` and `supportsMediaDownload`. |\n| Service-level metadata (`title`, `description`, `batchPath`, `documentationLink`) | Yes | Partial | No | No | The extracted manifest has these fields, but per-operation provider data does not carry them into the catalog. |\n| Parameter descriptions, repeated-ness, enums, defaults | Yes | Yes | Mostly yes | Mostly yes | This area is comparatively good. |\n| Request and response schemas | Yes | Yes | Yes | Yes | Core schema structure is preserved reasonably well. |\n\nGoogle Discovery is less lossy than OpenAPI on request and response typing, but it still loses useful service metadata and the human meaning attached to OAuth scopes.\n\n## MCP\n\n| Source detail | Raw source | Adapter/native | IR | UI today | Notes |\n| --- | --- | --- | --- | --- | --- |\n| Non-tool MCP resources such as prompts or resources | No | No | No | No | The adapter only discovers `listTools()`. Anything outside the tool list never enters import. |\n| Extra tool metadata beyond `name`, `description`, `inputSchema` or `parameters`, and `outputSchema` | Partial | Partial | No | No | The manifest schema keeps only a narrow subset of listed tool fields. |\n| Tool-level safety or effect hints, if present | Partial | No | No | No | Imported MCP operations are currently hardcoded to `effect: action`. |\n| Tool input and output schemas | Yes | Yes | Yes | Yes | This is the strongest part of the current MCP import. |\n| Server-level metadata outside the tool list | No | No | No | No | The stored MCP \"document\" is a synthesized tool manifest, not a richer upstream server description. |\n\nMCP is the most structurally lossy adapter today because the discovery step itself only imports tools and already narrows their metadata aggressively.\n\n## Cross-cutting UI caveat\n\nEven when data is preserved natively, the current inspection UI often does not show it directly.\n\nToday inspection primarily exposes:\n\n- projected call and result schemas\n- capability summary text\n- the first executable native blob\n\nThat means \"preserved in native data\" and \"visible to a user\" are still different states.\n\n## What should be first-class in IR\n\nThese semantics are worth promoting into the common model because they affect execution or trust:\n\n- auth and security requirements described by the source format\n- response and status variants\n- HTTP parameter serialization\n- upload, download, and streaming traits\n- GraphQL selection and subscription semantics\n- source-provided safety or idempotency hints\n\nBy contrast, many provider-specific labels, service metadata fields, and raw source extras are fine to keep in adapter-native metadata as long as they remain inspectable.\n\n## Recommended priority order\n\n### P0\n\n- OpenAPI auth and security requirements\n- OpenAPI response variants and status distinctions\n- Google Discovery scope descriptions\n- MCP discovery breadth: decide whether executor intends to import only tools or broader MCP surface area\n\n### P1\n\n- OpenAPI parameter serialization\n- GraphQL subscription modeling\n- GraphQL field-tool projection metadata so the fixed-selection behavior is explicit\n- Google Discovery service metadata surfacing\n- MCP tool metadata preservation beyond the current narrow manifest\n\n### P2\n\n- Better UI fallback to native/provider metadata\n- Richer diagnostics for intentionally lossy normalization\n- A fixture-backed audit matrix test per adapter\n\n## The IR boundary\n\nThe right boundary is:\n\n- `raw source` remains the source of truth\n- `adapter-native metadata` keeps source-specific details close to their format\n- `IR` stays unified, but it must be lossless for downstream semantics\n\nIf executor keeps that line clear, a standardized representation is a strength.\n\nIf executor lets semantically important details live only in hidden native blobs, the standardized representation becomes misleading.\n"
  },
  {
    "path": "apps/docs/developer/mcp.mdx",
    "content": "---\ntitle: \"MCP\"\ndescription: \"How executor uses MCP both as an adapter and as an external interface.\"\n---\n\nMCP shows up in executor in two different ways.\n\n## 1. Executor can connect to MCP servers\n\nThis is the source side of MCP.\n\nWhen a user connects an MCP endpoint, executor treats it as an adapter with MCP-specific connection, discovery, and invocation behavior. The control plane persists the binding and credential state, while MCP-specific execution behavior lives behind the adapter and codemode layers.\n\nThis is why MCP is modeled as its own adapter instead of being flattened into a generic HTTP execution model.\n\n## 2. Executor can expose itself as an MCP server\n\nThis is the outward-facing side of MCP.\n\n`packages/hosts/mcp` and the `/mcp` route in `packages/platform/server` let external MCP clients talk to the local executor runtime.\n\nThat means external MCP hosts can:\n\n- discover executor tools\n- trigger executions\n- resume paused interactions\n- work against the same local workspace state as the CLI and browser UI\n\n## Why the distinction matters\n\nThese two roles are related, but they are not the same thing:\n\n- inbound MCP means executor is acting as a client to a remote MCP server\n- outbound MCP means executor is acting as a server for external MCP clients\n\nKeeping that distinction clear avoids collapsing very different responsibilities into one vague \"MCP integration\" concept.\n\n## Where the logic lives\n\nBroadly:\n\n- control plane owns workspace state, bindings, credentials, and execution lifecycle\n- `packages/sources/mcp` owns MCP tool loading and invocation helpers\n- `packages/hosts/mcp` owns the local MCP server surface\n- `packages/platform/server` mounts the `/mcp` handler\n\n## Why MCP stays flexible in this model\n\nBecause MCP keeps its own adapter/runtime behavior, executor can support protocol-specific features such as sessions, elicitation, and resume without bending the generic imported-tool model to fit them.\n\nThat is the main reason MCP is a first-class category in the architecture.\n"
  },
  {
    "path": "apps/docs/developer/overview.mdx",
    "content": "---\ntitle: \"Control Plane Overview\"\ndescription: \"How the control plane is structured today and how the major pieces fit together.\"\n---\n\nExecutor is built around one central idea:\n\n- turn connected systems into a durable, discoverable tool catalog\n- run TypeScript against that catalog inside a controlled runtime\n- keep connection state, auth, execution, and inspection in one local control plane\n\n## One-line architecture\n\nExecutor is a local control plane that:\n\n1. stores connected integrations as sources\n2. materializes those sources into callable tools\n3. exposes those tools to the runtime, the UI, and MCP clients\n4. resolves auth and policy at invocation time\n\n## Major packages\n\n### `apps/executor`\n\nThe CLI and daemon manager.\n\nResponsibilities:\n\n- start and stop the local daemon\n- submit executions\n- resume paused interactions\n- seed and inspect sources in development flows\n\n### `packages/platform/server`\n\nThe local server shell around the control plane.\n\nResponsibilities:\n\n- mount the HTTP API at `/v1`\n- mount the local MCP server at `/mcp`\n- serve the web UI\n\n### `packages/platform/control-plane`\n\nThe product core.\n\nResponsibilities:\n\n- source connection and lifecycle\n- auth and credential state\n- persistence\n- tool discovery and inspection\n- execution management\n- policy-aware invocation\n\n### Runtime and codemode packages\n\nThese packages provide the execution and tool abstractions:\n\n- `packages/kernel/runtime-ses`\n- `packages/kernel/core`\n- `packages/sources/openapi`\n- `packages/sources/mcp`\n- `packages/clients/react`\n\n## The mental model\n\nThe current architecture is easiest to understand if you think of it as an adapter-based compiler pipeline:\n\n- adapters ingest external formats and protocols\n- the control plane stores a canonical internal representation\n- the runtime executes against that representation\n\nThat is why executor has strong internal concepts like:\n\n- source bindings\n- recipes and revisions\n- materialized operations\n- schema bundles\n- actor-scoped credentials\n\nThose are not UI concepts. They are the durable internal model that lets executor support multiple integration styles without rewriting the core every time.\n\n## What is intentionally centralized\n\nExecutor intentionally centralizes a few things that many products split across multiple services:\n\n- local identity and workspace bootstrap\n- source connection state\n- secret material references\n- tool inspection data\n- execution history\n- interaction/resume state\n\nThis is why the UI, CLI, and local MCP entrypoint can all behave like one system instead of separate tools bolted together.\n\n## Why the architecture is shaped this way\n\nThe current implementation optimizes for:\n\n- local-first operation\n- strong schema-aware tool usage\n- reusable connected integrations\n- minimal provider-specific logic in the control plane core\n- extensibility through adapters instead of one-off execution paths\n\nThe rest of the developer docs explain how those goals show up in the current model.\n"
  },
  {
    "path": "apps/docs/developer/persistence-and-migrations.mdx",
    "content": "---\ntitle: \"Persistence And Migrations\"\ndescription: \"How executor stores source state today and how migration logic is intended to work.\"\n---\n\nExecutor persistence is designed around durable runtime state, not just CRUD storage.\n\nThat means the database stores:\n\n- installation and workspace identity\n- source bindings\n- recipes and revisions\n- raw documents\n- schema bundles\n- operations\n- credentials and auth sessions\n- executions and interactions\n\n## Why the storage is layered\n\nThe storage model is layered because these concerns have different reuse and ownership semantics.\n\nExamples:\n\n- raw documents are provenance\n- revisions are compiled materializations\n- operations are the hot-path query surface\n- source bindings are workspace-local\n- credentials are private and actor-scoped\n\nTrying to collapse those into one table or one document shape causes churn quickly.\n\n## What is normalized vs serialized\n\nExecutor intentionally uses both relational columns and serialized JSON.\n\nNormalized:\n\n- ownership\n- ids and references\n- search and lookup fields\n- status and visibility\n- auth/session ownership\n\nSerialized:\n\n- adapter-owned binding config\n- source config blobs\n- provider metadata\n- some session payloads\n\nThis is deliberate.\nThe rule is to normalize what the core system queries and enforces, and serialize what belongs to adapter-specific contracts.\n\n## Migrations philosophy\n\nThe intended migration model is:\n\n- SQL migrations move structural schema into the new shape\n- one-shot code migrations repair or rebuild data that SQL cannot derive sanely\n- steady-state runtime paths should not carry compatibility branches forever\n\nThat last point matters.\nCompatibility logic belongs in upgrade code, not in normal reads and writes.\n\n## What is still acceptable in migration code\n\nOne-shot rebuilds are still acceptable when:\n\n- the old data shape is structurally valid but not yet in the best compiled form\n- the rebuild can be derived from already-stored documents\n- the logic is ledgered and run once\n\nWhat is not acceptable:\n\n- provider-specific legacy fallbacks in steady-state runtime logic\n- carrying old columns indefinitely because one path still reads them\n\n## Why this supports extensibility\n\nThis persistence shape is meant to let new integrations land in one of two ways:\n\n- add a new adapter that compiles into the same source model\n- add a genuinely new top-level primitive if the thing is not really a source\n\nThat is how executor avoids turning every new integration into another schema redesign.\n"
  },
  {
    "path": "apps/docs/developer/tool-catalog-and-execution.mdx",
    "content": "---\ntitle: \"Tool Catalog And Execution\"\ndescription: \"How source materialization becomes callable tools and how invocation works.\"\n---\n\nExecutor turns connected integrations into a workspace tool catalog.\n\nThat catalog is the thing the runtime actually executes against.\n\nThe execution sandbox is selected from `.executor/executor.jsonc`:\n\n```jsonc\n{\n  \"runtime\": \"quickjs\"\n}\n```\n\nSupported values are `quickjs` (default), `ses`, and `deno`.\n\n## How tools are produced\n\nAt a high level:\n\n1. an adapter materializes a source\n2. the materialization writes documents, schema bundles, and operations\n3. the control plane loads those persisted operations into a workspace tool index\n4. the runtime invokes one tool at a time through the control plane\n\nThis means executor does not rebuild every integration from scratch on every execution.\n\n## Why operations exist as a separate layer\n\nThe operation layer exists to support:\n\n- search\n- inspection\n- policy\n- fast tool lookup\n- tool description without loading huge raw documents every time\n\nRaw upstream documents are still kept, but they are not the best hot-path query surface.\n\n## Schema transport\n\nExecutor uses compact operation-root schemas plus shared schema bundles.\n\nThis is better than storing expanded per-tool schema blobs because it avoids:\n\n- massive duplicate schema payloads\n- slow formatting and rendering\n- treating presentation output as canonical storage\n\nThe result is:\n\n- smaller payloads\n- more reusable schema graphs\n- cleaner tool detail responses\n\n## Tool catalog shape\n\nThe tool catalog is built from:\n\n- persisted source tools\n- built-in executor tools\n\nThat lets executor present one unified discovery and invocation surface even though the underlying tools come from different places.\n\n## Invocation flow\n\nAt a high level, invocation works like this:\n\n1. resolve the persisted operation by tool path\n2. run policy and approval checks\n3. resolve auth material for the correct slot\n4. load the manifest and schema bundle needed for the call\n5. delegate actual invocation to the adapter\n\nThis is the key point:\n\n- the control plane orchestrates\n- the adapter performs the protocol-specific call\n\n## Why this is flexible\n\nThis architecture is flexible because it keeps a stable middle:\n\n- the runtime only needs tools and invokers\n- the control plane only needs the canonical operation and auth model\n- adapters can vary widely at the source boundary without changing the runtime contract\n\nThat is what makes it possible to add more source types without constantly rewriting execution logic.\n"
  },
  {
    "path": "apps/docs/docs.json",
    "content": "{\n  \"$schema\": \"https://mintlify.com/docs.json\",\n  \"theme\": \"mint\",\n  \"name\": \"Executor\",\n  \"description\": \"A local-first execution environment for AI agents.\",\n  \"colors\": {\n    \"primary\": \"#0D9373\",\n    \"light\": \"#07C983\",\n    \"dark\": \"#0D9373\"\n  },\n  \"navigation\": {\n    \"tabs\": [\n      {\n        \"tab\": \"Product\",\n        \"groups\": [\n          {\n            \"group\": \"Introduction\",\n            \"pages\": [\n              \"introduction\"\n            ]\n          }\n        ]\n      },\n      {\n        \"tab\": \"Developer\",\n        \"groups\": [\n          {\n            \"group\": \"Control Plane\",\n            \"pages\": [\n              \"developer/overview\",\n              \"developer/core-model\",\n              \"developer/adapters-and-formats\",\n              \"developer/credentials-and-auth\",\n              \"developer/tool-catalog-and-execution\",\n              \"developer/persistence-and-migrations\",\n              \"developer/extending-executor\"\n            ]\n          },\n          {\n            \"group\": \"CLI\",\n            \"pages\": [\n              \"developer/cli\"\n            ]\n          },\n          {\n            \"group\": \"MCP\",\n            \"pages\": [\n              \"developer/mcp\"\n            ]\n          },\n          {\n            \"group\": \"Code Mode\",\n            \"pages\": [\n              \"developer/codemode\"\n            ]\n          }\n        ]\n      }\n    ]\n  },\n  \"footer\": {\n    \"socials\": {\n      \"github\": \"https://github.com/anomalyco/executor\",\n      \"discord\": \"https://discord.gg/eF29HBHwM6\"\n    }\n  }\n}\n"
  },
  {
    "path": "apps/docs/introduction.mdx",
    "content": "---\ntitle: \"Introduction\"\ndescription: \"A local-first execution environment for AI agents.\"\n---\n\n`executor` is a local-first execution environment for AI agents. It gives an agent a TypeScript runtime, a discoverable tool catalog, and a single local place to connect external systems such as MCP servers, OpenAPI APIs, and GraphQL APIs.\n\nThis docs site is split into two documentation surfaces:\n\n- product-facing docs for how to install and use executor\n- developer-facing docs for how executor is built and how to extend it\n\nThe product-facing section will come later. The current docs start with the developer-facing architecture and implementation model.\n\nIf you are trying to understand the current system shape, start with:\n\n- [Control Plane](/developer/overview)\n- [CLI](/developer/cli)\n- [MCP](/developer/mcp)\n- [Code Mode](/developer/codemode)\n"
  },
  {
    "path": "apps/docs/package.json",
    "content": "{\n  \"name\": \"@executor/docs\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"bunx --bun mint dev --no-open --port 3337\",\n    \"typecheck\": \"echo 'No typecheck for @executor/docs'\",\n    \"validate\": \"bunx --bun mint validate\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "apps/executor/CHANGELOG.md",
    "content": "# executor\n\n## 1.2.4-beta.4\n\n### Patch Changes\n\n- ec5e3a3: Fix Google Discovery tool execution for sources stored with discovery document endpoints\n\n## 1.2.4-beta.3\n\n### Patch Changes\n\n- dc94998: Auto migrate sources on startup\n\n## 1.2.4-beta.2\n\n### Patch Changes\n\n- f0a3802: Fix legacy format parsing\n\n## 1.2.4-beta.1\n\n### Patch Changes\n\n- 5869ddb: Fix build\n\n## 1.2.4-beta.0\n\n### Patch Changes\n\n- 74185a9: Move execution to adapters rather than IR model\n\n## 1.2.3\n\n### Patch Changes\n\n- eda1217: Always request maximal scope for Google Apis\n\n## 1.2.2\n\n### Patch Changes\n\n- 661ed29: Support selecting runtime\n\n## 1.2.1\n\n### Patch Changes\n\n- 329cc41: fix migration\n- 86d4d4d: package the PGlite runtime assets in the published CLI bundle\n\n## 1.2.0\n\n### Minor Changes\n\n- 7574535: add multiple sources at same time\n\n### Patch Changes\n\n- a2ada62: Google workspace support, folder based config\n  - @executor/codemode-core@null\n  - @executor/control-plane@null\n  - @executor/executor-mcp@null\n  - @executor/server@null\n\n## 1.2.0-beta.7\n\n### Minor Changes\n\n- 7574535: add multiple sources at same time\n\n## 1.1.10-beta.6\n\n### Patch Changes\n\n- a2ada62: Google workspace support, folder based config\n"
  },
  {
    "path": "apps/executor/bin/executor",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\nSCRIPT_DIR=\"$(cd \"$(dirname \"$0\")\" && pwd)\"\nexec bun \"$SCRIPT_DIR/../src/cli/main.ts\" \"$@\"\n"
  },
  {
    "path": "apps/executor/package.json",
    "content": "{\n  \"name\": \"executor\",\n  \"version\": \"1.2.4-beta.4\",\n  \"description\": \"Local AI executor with a CLI, local API server, and web UI.\",\n  \"keywords\": [\n    \"executor\",\n    \"ai\",\n    \"agent\",\n    \"cli\",\n    \"automation\",\n    \"local-first\"\n  ],\n  \"homepage\": \"https://github.com/RhysSullivan/executor\",\n  \"bugs\": {\n    \"url\": \"https://github.com/RhysSullivan/executor/issues\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/RhysSullivan/executor.git\"\n  },\n  \"license\": \"MIT\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"bin\": {\n    \"executor\": \"bin/executor\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"start\": \"bun src/cli/main.ts\",\n    \"release:publish:dry-run\": \"bun src/distribution/publish.ts --dry-run\",\n    \"release:publish\": \"bun src/distribution/publish.ts\"\n  },\n  \"dependencies\": {\n    \"@effect/cli\": \"catalog:\",\n    \"@effect/platform\": \"catalog:\",\n    \"@effect/platform-node\": \"catalog:\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"@executor/control-plane\": \"workspace:*\",\n    \"@executor/executor-mcp\": \"workspace:*\",\n    \"@executor/server\": \"workspace:*\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@executor/mcp-elicitation-demo\": \"workspace:*\",\n    \"@executor/runtime-ses\": \"workspace:*\",\n    \"@effect/vitest\": \"catalog:\",\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\",\n    \"zod\": \"catalog:\"\n  }\n}\n"
  },
  {
    "path": "apps/executor/src/cli/dev.ts",
    "content": "import {\n  type ControlPlaneClient,\n  WorkspaceIdSchema,\n} from \"@executor/control-plane\";\nimport * as Effect from \"effect/Effect\";\n\nconst readBindingString = (binding: Record<string, unknown>, key: string): string | null =>\n  typeof binding[key] === \"string\" ? String(binding[key]) : null;\n\ntype SeedDemoMcpSourceInput = {\n  client: ControlPlaneClient;\n  workspaceId: string;\n  endpoint: string;\n  name: string;\n  namespace: string;\n};\n\ntype SeedDemoMcpSourceResult =\n  | {\n      action: \"noop\";\n      sourceId: string;\n      workspaceId: string;\n      endpoint: string;\n    }\n  | {\n      action: \"updated\" | \"created\";\n      sourceId: string;\n      workspaceId: string;\n      endpoint: string;\n    };\n\ntype SeedGithubOpenApiSourceInput = {\n  client: ControlPlaneClient;\n  workspaceId: string;\n  endpoint: string;\n  specUrl: string;\n  name: string;\n  namespace: string;\n  credentialEnvVar?: string;\n};\n\nexport const seedDemoMcpSourceInWorkspace = (\n  input: SeedDemoMcpSourceInput,\n): Effect.Effect<SeedDemoMcpSourceResult, unknown, never> =>\n  Effect.gen(function* () {\n    const workspaceId = WorkspaceIdSchema.make(input.workspaceId);\n\n    const existing = yield* input.client.sources.list({\n      path: {\n        workspaceId,\n      },\n    });\n\n    const existingByName = existing.find(\n      (source) => source.kind === \"mcp\" && source.name === input.name,\n    );\n\n    const expected = {\n      endpoint: input.endpoint,\n      namespace: input.namespace,\n      transport: \"streamable-http\" as const,\n    };\n\n    if (\n      existingByName !== undefined\n      && existingByName.endpoint === expected.endpoint\n      && existingByName.namespace === expected.namespace\n      && readBindingString(existingByName.binding, \"transport\") === expected.transport\n      && existingByName.auth.kind === \"none\"\n    ) {\n      return {\n        action: \"noop\",\n        sourceId: existingByName.id,\n        workspaceId: input.workspaceId,\n        endpoint: existingByName.endpoint,\n      };\n    }\n\n    if (existingByName !== undefined) {\n      const updated = yield* input.client.sources.update({\n        path: {\n          workspaceId,\n          sourceId: existingByName.id,\n        },\n        payload: {\n          endpoint: input.endpoint,\n          status: \"connected\",\n          enabled: true,\n          namespace: input.namespace,\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      return {\n        action: \"updated\",\n        sourceId: updated.id,\n        workspaceId: input.workspaceId,\n        endpoint: updated.endpoint,\n      };\n    }\n\n    const created = yield* input.client.sources.create({\n      path: {\n        workspaceId,\n      },\n      payload: {\n        name: input.name,\n        kind: \"mcp\",\n        endpoint: input.endpoint,\n        status: \"connected\",\n        enabled: true,\n        namespace: input.namespace,\n        binding: {\n          transport: \"streamable-http\",\n          queryParams: null,\n          headers: null,\n        },\n        auth: {\n          kind: \"none\",\n        },\n      },\n    });\n\n    return {\n      action: \"created\",\n      sourceId: created.id,\n      workspaceId: input.workspaceId,\n      endpoint: created.endpoint,\n    };\n  });\n\nexport const seedGithubOpenApiSourceInWorkspace = (\n  input: SeedGithubOpenApiSourceInput,\n): Effect.Effect<SeedDemoMcpSourceResult, unknown, never> =>\n  Effect.gen(function* () {\n    const workspaceId = WorkspaceIdSchema.make(input.workspaceId);\n\n    const existing = yield* input.client.sources.list({\n      path: {\n        workspaceId,\n      },\n    });\n\n    const existingByName = existing.find(\n      (source) => source.kind === \"openapi\" && source.name === input.name,\n    );\n\n    const auth = {\n      kind: \"bearer\" as const,\n      headerName: \"Authorization\",\n      prefix: \"Bearer \",\n      token: {\n        providerId: \"env\",\n        handle: input.credentialEnvVar ?? \"GITHUB_TOKEN\",\n      },\n    };\n\n    if (\n      existingByName !== undefined\n      && existingByName.endpoint === input.endpoint\n      && existingByName.namespace === input.namespace\n      && readBindingString(existingByName.binding, \"specUrl\") === input.specUrl\n      && JSON.stringify(existingByName.binding.defaultHeaders ?? null) === JSON.stringify(null)\n      && JSON.stringify(existingByName.auth) === JSON.stringify(auth)\n    ) {\n      return {\n        action: \"noop\",\n        sourceId: existingByName.id,\n        workspaceId: input.workspaceId,\n        endpoint: existingByName.endpoint,\n      };\n    }\n\n    if (existingByName !== undefined) {\n      const updated = yield* input.client.sources.update({\n        path: {\n          workspaceId,\n          sourceId: existingByName.id,\n        },\n        payload: {\n          endpoint: input.endpoint,\n          status: \"connected\",\n          enabled: true,\n          namespace: input.namespace,\n          binding: {\n            specUrl: input.specUrl,\n            defaultHeaders: null,\n          },\n          auth,\n        },\n      });\n\n      return {\n        action: \"updated\",\n        sourceId: updated.id,\n        workspaceId: input.workspaceId,\n        endpoint: updated.endpoint,\n      };\n    }\n\n    const created = yield* input.client.sources.create({\n      path: {\n        workspaceId,\n      },\n      payload: {\n        name: input.name,\n        kind: \"openapi\",\n        endpoint: input.endpoint,\n        status: \"connected\",\n        enabled: true,\n        namespace: input.namespace,\n        binding: {\n          specUrl: input.specUrl,\n          defaultHeaders: null,\n        },\n        auth,\n      },\n    });\n\n    return {\n      action: \"created\",\n      sourceId: created.id,\n      workspaceId: input.workspaceId,\n      endpoint: created.endpoint,\n    };\n  });\n"
  },
  {
    "path": "apps/executor/src/cli/interaction-handling.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\n\nimport { decideInteractionHandling } from \"./interaction-handling\";\n\ndescribe(\"interaction-handling\", () => {\n  it(\"keeps URL interactions distinct even when the terminal is non-interactive\", () => {\n    expect(decideInteractionHandling({\n      parsed: {\n        mode: \"url\",\n        message: \"Connect Axiom\",\n        url: \"https://mcp.axiom.co/authorize\",\n      },\n      isInteractiveTerminal: false,\n    })).toBe(\"url_paused\");\n  });\n\n  it(\"waits on URL interactions in an interactive terminal\", () => {\n    expect(decideInteractionHandling({\n      parsed: {\n        mode: \"url\",\n        message: \"Connect Axiom\",\n        url: \"https://mcp.axiom.co/authorize\",\n      },\n      isInteractiveTerminal: true,\n    })).toBe(\"url_interactive\");\n  });\n\n  it(\"falls back to form pause handling for non-interactive prompts\", () => {\n    expect(decideInteractionHandling({\n      parsed: {\n        mode: \"form\",\n        message: \"Approve tool call\",\n      },\n      isInteractiveTerminal: false,\n    })).toBe(\"form_paused\");\n  });\n});\n"
  },
  {
    "path": "apps/executor/src/cli/interaction-handling.ts",
    "content": "import type { ParsedInteractionPayload } from \"./pending-interaction-output\";\n\nexport type InteractionHandling =\n  | \"url_interactive\"\n  | \"url_paused\"\n  | \"form_interactive\"\n  | \"form_paused\";\n\nexport const decideInteractionHandling = (input: {\n  parsed: ParsedInteractionPayload | null;\n  isInteractiveTerminal: boolean;\n}): InteractionHandling => {\n  if (input.parsed?.mode === \"url\") {\n    return input.isInteractiveTerminal ? \"url_interactive\" : \"url_paused\";\n  }\n\n  return input.isInteractiveTerminal ? \"form_interactive\" : \"form_paused\";\n};\n"
  },
  {
    "path": "apps/executor/src/cli/main.ts",
    "content": "import { spawn } from \"node:child_process\";\nimport { createRequire } from \"node:module\";\nimport { dirname } from \"node:path\";\nimport { createInterface } from \"node:readline/promises\";\nimport { FileSystem } from \"@effect/platform\";\nimport { Args, Command, Options } from \"@effect/cli\";\nimport {\n  NodeFileSystem,\n  NodePath,\n  NodeRuntime,\n} from \"@effect/platform-node\";\nimport {\n  EXECUTOR_SOURCES_ADD_HELP_LINES,\n  ExecutionIdSchema,\n  RuntimeExecutionResolverService,\n  createControlPlaneClient,\n  createControlPlaneRuntime,\n  type ControlPlaneClient,\n  type ExecutionEnvelope,\n  type ExecutionInteraction,\n  type ControlPlaneRuntime,\n} from \"@executor/control-plane\";\nimport type { ToolCatalog } from \"@executor/codemode-core\";\n\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport * as Option from \"effect/Option\";\nimport * as Cause from \"effect/Cause\";\n\nimport {\n  DEFAULT_SERVER_BASE_URL,\n  DEFAULT_SERVER_HOST,\n  DEFAULT_LOCAL_DATA_DIR,\n  DEFAULT_SERVER_LOG_FILE,\n  DEFAULT_SERVER_PID_FILE,\n  DEFAULT_SERVER_PORT,\n  SERVER_POLL_INTERVAL_MS,\n  SERVER_START_TIMEOUT_MS,\n  runLocalExecutorServer,\n} from \"@executor/server\";\nimport {\n  seedDemoMcpSourceInWorkspace,\n  seedGithubOpenApiSourceInWorkspace,\n} from \"./dev\";\nimport {\n  resolveRuntimeWebAssetsDir,\n  resolveSelfCommand,\n} from \"./runtime-paths\";\nimport {\n  buildPausedExecutionOutput,\n  parseInteractionPayload,\n} from \"./pending-interaction-output\";\nimport { decideInteractionHandling } from \"./interaction-handling\";\nimport {\n  executorAppEffectError,\n  type LocalServerReachabilityTimeoutError,\n  localServerReachabilityTimeoutError,\n} from \"../effect-errors\";\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst sleep = (ms: number) =>\n  Effect.promise(() => new Promise<void>((resolve) => setTimeout(resolve, ms)));\n\nconst openUrlInBrowser = (url: string): Effect.Effect<void, never, never> =>\n  Effect.sync(() => {\n    const cmd =\n      process.platform === \"darwin\"\n        ? [\"open\", url]\n        : process.platform === \"win32\"\n          ? [\"cmd\", \"/c\", \"start\", \"\", url]\n          : [\"xdg-open\", url];\n\n    try {\n      const child = spawn(cmd[0]!, cmd.slice(1), {\n        detached: true,\n        stdio: \"ignore\",\n      });\n      child.on(\"error\", () => undefined);\n      child.unref();\n    } catch {\n      // Best-effort browser launch only; always leave the URL in stdout.\n    }\n  }).pipe(Effect.catchAll(() => Effect.void));\n\nconst promptLine = (prompt: string): Effect.Effect<string, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      const rl = createInterface({\n        input: process.stdin,\n        output: process.stdout,\n      });\n\n      try {\n        return await rl.question(prompt);\n      } finally {\n        rl.close();\n      }\n    },\n    catch: toError,\n  });\n\nconst readStdin = (): Effect.Effect<string, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      let contents = \"\";\n      process.stdin.setEncoding(\"utf8\");\n      for await (const chunk of process.stdin) {\n        contents += chunk;\n      }\n      return contents;\n    },\n    catch: toError,\n  });\n\nconst readCode = (input: {\n  code?: string;\n  file?: string;\n  stdin?: boolean;\n}): Effect.Effect<string, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    if (input.code && input.code.trim().length > 0) {\n      return input.code;\n    }\n\n    if (input.file && input.file.trim().length > 0) {\n      const fs = yield* FileSystem.FileSystem;\n      const contents = yield* fs.readFileString(input.file!, \"utf8\").pipe(\n        Effect.mapError(toError),\n      );\n      if (contents.trim().length > 0) {\n        return contents;\n      }\n    }\n\n    const shouldReadStdin = input.stdin === true || !process.stdin.isTTY;\n    if (shouldReadStdin) {\n      const contents = yield* readStdin();\n      if (contents.trim().length > 0) {\n        return contents;\n      }\n    }\n\n    return yield* executorAppEffectError(\"cli/main\", \"Provide code as a positional argument, use --file, or pipe code over stdin.\");\n  });\n\nconst getBootstrapClient = (baseUrl: string = DEFAULT_SERVER_BASE_URL) =>\n  createControlPlaneClient({ baseUrl });\n\nconst decodeExecutionId = Schema.decodeUnknown(ExecutionIdSchema);\nconst require = createRequire(import.meta.url);\nconst CLI_NAME = \"executor\";\nconst CLI_VERSION = (() => {\n  const candidatePaths = [\n    \"../package.json\",\n    \"../../package.json\",\n  ];\n\n  for (const candidatePath of candidatePaths) {\n    try {\n      const metadata = require(candidatePath) as { version?: string };\n      if (metadata.version && metadata.version.trim().length > 0) {\n        return metadata.version;\n      }\n    } catch {\n      // Fall through to the default version below.\n    }\n  }\n\n  return \"0.0.0-local\";\n})();\nconst HELP_TOKENS = [\"--help\", \"-h\", \"help\"] as const;\n\nconst isHelpToken = (value: string | undefined): boolean =>\n  value !== undefined && HELP_TOKENS.includes(value as (typeof HELP_TOKENS)[number]);\n\nconst normalizeCliArgs = (rawArgs: readonly string[]): string[] => {\n  return rawArgs[0] === \"run\"\n    ? [\"call\", ...rawArgs.slice(1)]\n    : [...rawArgs];\n};\n\nconst getCliArgs = (): string[] => normalizeCliArgs(process.argv.slice(2));\n\nconst toEffectCliArgv = (args: readonly string[]): string[] => [\n  process.execPath || CLI_NAME,\n  CLI_NAME,\n  ...args,\n];\n\nconst buildWorkflowText = (namespaces: readonly string[] = []): string =>\n  [\n    \"Execute TypeScript in sandbox; call tools via discovery workflow.\",\n    ...(namespaces.length > 0\n      ? [\n          \"Available namespaces:\",\n          ...namespaces.map((namespace) => `- ${namespace}`),\n        ]\n      : []),\n    \"Workflow:\",\n    '1) const matches = await tools.discover({ query: \"<intent>\", limit: 12 });',\n    \"2) const details = await tools.describe.tool({ path, includeSchemas: true });\",\n    \"3) Call selected tools.<path>(input).\",\n    '4) To connect a source, call tools.executor.sources.add(...) for MCP, OpenAPI, or GraphQL APIs.',\n    ...EXECUTOR_SOURCES_ADD_HELP_LINES,\n    \"5) If execution pauses for interaction, resume it with `executor resume --execution-id ...`.\",\n    \"Do not use fetch; use tools.* only.\",\n  ].join(\"\\n\");\n\nconst DEFAULT_RUN_WORKFLOW = buildWorkflowText();\n\nconst indentBlock = (value: string, prefix: string = \"  \"): string =>\n  value\n    .split(\"\\n\")\n    .map((line) => (line.length > 0 ? `${prefix}${line}` : \"\"))\n    .join(\"\\n\");\n\nconst formatCauseMessage = (cause: Cause.Cause<unknown>): string => {\n  const failure = Option.getOrUndefined(Cause.failureOption(cause));\n  if (failure instanceof Error && failure.message.length > 0) {\n    return failure.message;\n  }\n  if (typeof failure === \"string\" && failure.length > 0) {\n    return failure;\n  }\n\n  const defect = Option.getOrUndefined(Cause.dieOption(cause));\n  if (defect instanceof Error && defect.message.length > 0) {\n    return defect.message;\n  }\n  if (typeof defect === \"string\" && defect.length > 0) {\n    return defect;\n  }\n\n  return Cause.pretty(cause).split(\"\\n\").find((line) => line.trim().length > 0) ?? \"unknown error\";\n};\n\nconst formatCatalogUnavailableMessage = (cause: Cause.Cause<unknown>): string => {\n  const message = formatCauseMessage(cause);\n  return message === \"Error: An error has occurred\"\n    ? \"Current workspace catalog unavailable.\"\n    : `Current workspace catalog unavailable: ${message}`;\n};\n\nconst closeRuntime = (runtime: ControlPlaneRuntime) =>\n  Effect.tryPromise({\n    try: () => runtime.close(),\n    catch: toError,\n  }).pipe(Effect.catchAll(() => Effect.void));\n\nconst buildRunWorkflowText = (\n  catalog?: ToolCatalog,\n): Effect.Effect<string, Error, never> => {\n  if (!catalog) {\n    return Effect.succeed(DEFAULT_RUN_WORKFLOW);\n  }\n\n  return catalog.listNamespaces({ limit: 200 }).pipe(\n    Effect.map((namespaces) =>\n      buildWorkflowText(\n        namespaces.length > 0\n          ? namespaces.map((namespace) => namespace.displayName ?? namespace.namespace)\n          : [\"none discovered yet\"],\n      )\n    ),\n    Effect.mapError(toError),\n  );\n};\n\nconst loadRunWorkflowText = (): Effect.Effect<string, Error, never> =>\n  Effect.acquireUseRelease(\n    createControlPlaneRuntime({\n      localDataDir: DEFAULT_LOCAL_DATA_DIR,\n    }).pipe(Effect.mapError(toError)),\n    (runtime) =>\n      Effect.gen(function* () {\n        const environment = yield* Effect.gen(function* () {\n          const resolveExecutionEnvironment = yield* RuntimeExecutionResolverService;\n          return yield* resolveExecutionEnvironment({\n            workspaceId: runtime.localInstallation.workspaceId,\n            accountId: runtime.localInstallation.accountId,\n            executionId: ExecutionIdSchema.make(\"exec_help\"),\n          });\n        }).pipe(\n          Effect.provide(runtime.runtimeLayer),\n          Effect.mapError(toError),\n        );\n\n        return yield* buildRunWorkflowText(environment.catalog);\n      }),\n    closeRuntime,\n  ).pipe(\n    Effect.catchAllCause((cause) =>\n      Effect.succeed(\n        [\n          DEFAULT_RUN_WORKFLOW,\n          \"\",\n          formatCatalogUnavailableMessage(cause),\n        ].join(\"\\n\"),\n      )\n    ),\n  );\n\nconst printRootHelp = (workflow: string) =>\n  Effect.sync(() => {\n    console.log([\n      `${CLI_NAME} ${CLI_VERSION}`,\n      \"\",\n      \"USAGE\",\n      \"\",\n      \"  executor call [code] [--file text] [--stdin] [--base-url text] [--no-open]\",\n      \"  executor resume --execution-id text [--base-url text] [--no-open]\",\n      \"\",\n      \"CALL WORKFLOW\",\n      \"\",\n      indentBlock(workflow),\n      \"\",\n      \"COMMANDS\",\n      \"\",\n      \"  call\",\n      \"    Execute code against the local executor server.\",\n      \"  resume\",\n      \"    Resume a paused execution.\",\n      \"\",\n      \"TIP\",\n      \"\",\n      \"  Run `executor call --help` for more examples.\",\n    ].join(\"\\n\"));\n  });\n\nconst printCallHelp = (workflow: string) =>\n  Effect.sync(() => {\n    console.log([\n      \"executor call\",\n      \"\",\n      \"USAGE\",\n      \"\",\n      \"  executor call [code] [--file text] [--stdin] [--base-url text] [--no-open]\",\n      \"\",\n      \"DESCRIPTION\",\n      \"\",\n      \"  Execute code against the local executor server.\",\n      \"\",\n      \"WORKFLOW\",\n      \"\",\n      indentBlock(workflow),\n      \"\",\n      \"OPTIONS\",\n      \"\",\n      \"  [code]\",\n      \"    Inline code to execute.\",\n      \"  --file text\",\n      \"    Read code from a file.\",\n      \"  --stdin\",\n      \"    Read code from stdin.\",\n      \"  --base-url text\",\n      \"    Override the executor server base URL.\",\n      \"  --no-open\",\n      \"    Print interaction URLs without opening a browser.\",\n      \"\",\n      \"EXAMPLES\",\n      \"\",\n      '  executor call \\'const matches = await tools.discover({ query: \"github issues\", limit: 5 }); return matches;\\'',\n      '  executor call \\'const matches = await tools.discover({ query: \"repo details\", limit: 1 }); const path = matches.bestPath; return await tools.describe.tool({ path, includeSchemas: true });\\'',\n      '  executor call \\'return await tools.executor.sources.add({ endpoint: \"https://example.com/mcp\", name: \"Example\", namespace: \"example\" });\\'',\n      '  executor call \\'return await tools.executor.sources.add({ kind: \"openapi\", endpoint: \"https://api.github.com\", specUrl: \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\", name: \"GitHub\", namespace: \"github\" });\\'',\n      \"  cat script.ts | executor call --stdin\",\n      \"  executor call --file script.ts\",\n      \"  executor call --no-open --file script.ts\",\n      \"  executor resume --execution-id exec_123\",\n    ].join(\"\\n\"));\n  });\n\nconst helpOverride = (): Effect.Effect<void, Error, never> | null => {\n  const args = getCliArgs();\n\n  if (args.length === 0 || (args.length === 1 && isHelpToken(args[0]))) {\n    return loadRunWorkflowText().pipe(Effect.flatMap(printRootHelp));\n  }\n\n  if (args[0] === \"call\" && args.length === 2 && isHelpToken(args[1])) {\n    return loadRunWorkflowText().pipe(Effect.flatMap(printCallHelp));\n  }\n\n  return null;\n};\n\nconst getLocalAuthedClient = (baseUrl: string = DEFAULT_SERVER_BASE_URL) =>\n  Effect.gen(function* () {\n    const bootstrapClient = yield* getBootstrapClient(baseUrl);\n    const installation = yield* bootstrapClient.local.installation({});\n    const client = yield* createControlPlaneClient({\n      baseUrl,\n      accountId: installation.accountId,\n    });\n\n    return {\n      installation,\n      client,\n    } as const;\n  });\n\nconst isServerReachable = (baseUrl: string) =>\n  getBootstrapClient(baseUrl).pipe(\n    Effect.flatMap((client) => client.local.installation({})),\n    Effect.as(true),\n    Effect.catchAll(() => Effect.succeed(false)),\n  );\n\nconst getDefaultServerOptions = (port: number = DEFAULT_SERVER_PORT) => {\n  const assetsDir = resolveRuntimeWebAssetsDir();\n\n  return {\n    host: DEFAULT_SERVER_HOST,\n    port,\n    localDataDir: DEFAULT_LOCAL_DATA_DIR,\n    pidFile: DEFAULT_SERVER_PID_FILE,\n    ui: assetsDir ? { assetsDir } : undefined,\n  };\n};\n\nconst startServerInBackground = (port: number) =>\n  Effect.scoped(\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const command = resolveSelfCommand([\"__local-server\", \"--port\", String(port)]);\n      yield* fs.makeDirectory(dirname(DEFAULT_SERVER_LOG_FILE), {\n        recursive: true,\n      }).pipe(Effect.mapError(toError));\n      const logHandle = yield* fs.open(DEFAULT_SERVER_LOG_FILE, {\n        flag: \"a\",\n      }).pipe(Effect.mapError(toError));\n\n      yield* Effect.try({\n        try: () => {\n          const fd = Number(logHandle.fd);\n          const child = spawn(command[0]!, command.slice(1), {\n            detached: true,\n            stdio: [\"ignore\", fd, fd],\n          });\n          child.unref();\n        },\n        catch: toError,\n      });\n    }),\n  );\n\ntype LocalServerPidRecord = {\n  pid?: number;\n  port?: number;\n  host?: string;\n  baseUrl?: string;\n  startedAt?: number;\n  logFile?: string;\n};\n\nconst readPidRecord = (): Effect.Effect<\n  LocalServerPidRecord | null,\n  never,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const contents = yield* fs.readFileString(DEFAULT_SERVER_PID_FILE, \"utf8\").pipe(\n      Effect.catchAll(() => Effect.succeed<string | null>(null)),\n    );\n    if (contents === null) {\n      return null;\n    }\n\n    return JSON.parse(contents) as LocalServerPidRecord;\n  }).pipe(Effect.catchAll(() => Effect.succeed(null)));\n\nconst isPidRunning = (pid: number): boolean => {\n  try {\n    process.kill(pid, 0);\n    return true;\n  } catch (error) {\n    return error instanceof Error && \"code\" in error && error.code === \"EPERM\";\n  }\n};\n\n\nconst readServerLogTail = (\n  logFile: string = DEFAULT_SERVER_LOG_FILE,\n  maxLines: number = 40,\n  maxChars: number = 6000,\n): Effect.Effect<string | null, never, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const contents = yield* fs.readFileString(logFile, \"utf8\").pipe(\n      Effect.catchAll(() => Effect.succeed<string | null>(null)),\n    );\n\n    if (contents === null) {\n      return null;\n    }\n\n    const lines = contents.split(/\\r?\\n/u).filter((line) => line.length > 0);\n    const tail = lines.slice(-maxLines).join(\"\\n\");\n    return tail.length > maxChars ? tail.slice(-maxChars) : tail;\n  });\n\nconst failReachabilityTimeout = (input: {\n  baseUrl: string;\n  expected: boolean;\n  logFile?: string;\n}): Effect.Effect<never, LocalServerReachabilityTimeoutError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const logFile = input.logFile ?? DEFAULT_SERVER_LOG_FILE;\n    const logTail = yield* readServerLogTail(logFile);\n\n    return yield* localServerReachabilityTimeoutError({\n      baseUrl: input.baseUrl,\n      expected: input.expected,\n      logFile,\n      logTail,\n    });\n  });\n\nconst waitForReachability = (baseUrl: string, expected: boolean) =>\n  Effect.gen(function* () {\n    const startedAt = Date.now();\n    while (Date.now() - startedAt < SERVER_START_TIMEOUT_MS) {\n      const reachable = yield* isServerReachable(baseUrl);\n      if (reachable === expected) {\n        return;\n      }\n      yield* sleep(SERVER_POLL_INTERVAL_MS);\n    }\n\n    return yield* failReachabilityTimeout({ baseUrl, expected });\n  });\n\ntype LocalServerStatus = {\n  baseUrl: string;\n  reachable: boolean;\n  pidFile: string;\n  pid: number | null;\n  pidRunning: boolean;\n  logFile: string;\n  localDataDir: string;\n  webAssetsDir: string | null;\n  installation: {\n    accountId: string;\n    workspaceId: string;\n  } | null;\n  denoVersion: string | null;\n};\n\nconst renderDenoSandboxDetail = (denoVersion: string | null): string =>\n  denoVersion !== null\n    ? `deno ${denoVersion}`\n    : \"deno not found (run `executor sandbox` to install)\";\n\nconst getServerStatus = (\n  baseUrl: string,\n): Effect.Effect<LocalServerStatus, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const pidRecord = yield* readPidRecord();\n    const reachable = yield* isServerReachable(baseUrl);\n    const installation = reachable\n      ? yield* getBootstrapClient(baseUrl).pipe(\n          Effect.flatMap((client) => client.local.installation({})),\n          Effect.catchAll(() => Effect.succeed(null)),\n        )\n      : null;\n\n    const pid = typeof pidRecord?.pid === \"number\" ? pidRecord.pid : null;\n    const pidRunning = pid !== null ? isPidRunning(pid) : false;\n    const logFile = pidRecord?.logFile ?? DEFAULT_SERVER_LOG_FILE;\n    const denoVersion = yield* getDenoVersion();\n\n    return {\n      baseUrl,\n      reachable,\n      pidFile: DEFAULT_SERVER_PID_FILE,\n      pid,\n      pidRunning,\n      logFile,\n      localDataDir: DEFAULT_LOCAL_DATA_DIR,\n      webAssetsDir: resolveRuntimeWebAssetsDir(),\n      installation,\n      denoVersion,\n    } satisfies LocalServerStatus;\n  });\n\nconst renderStatus = (status: LocalServerStatus): string =>\n  [\n    `baseUrl: ${status.baseUrl}`,\n    `reachable: ${status.reachable ? \"yes\" : \"no\"}`,\n    `pid: ${status.pid ?? \"none\"}`,\n    `pidRunning: ${status.pidRunning ? \"yes\" : \"no\"}`,\n    `pidFile: ${status.pidFile}`,\n    `logFile: ${status.logFile}`,\n    `localDataDir: ${status.localDataDir}`,\n    `webAssetsDir: ${status.webAssetsDir ?? \"missing\"}`,\n    `workspaceId: ${status.installation?.workspaceId ?? \"unavailable\"}`,\n    `denoSandbox: ${renderDenoSandboxDetail(status.denoVersion)}`,\n  ].join(\"\\n\");\n\nconst getDoctorReport = (baseUrl: string) =>\n  getServerStatus(baseUrl).pipe(\n    Effect.map((status) => {\n      const checks = {\n        serverReachable: {\n          ok: status.reachable,\n          detail: status.reachable ? `reachable at ${status.baseUrl}` : `not reachable at ${status.baseUrl}`,\n        },\n        pidFile: {\n          ok: status.pid !== null,\n          detail: status.pid !== null ? `pid ${status.pid}` : `missing pid file at ${status.pidFile}`,\n        },\n        process: {\n          ok: status.pidRunning,\n          detail: status.pidRunning ? `pid ${status.pid}` : \"no live daemon process recorded\",\n        },\n        database: {\n          ok: status.localDataDir.length > 0,\n          detail: status.localDataDir,\n        },\n        webAssets: {\n          ok: status.webAssetsDir !== null,\n          detail: status.webAssetsDir ?? \"missing bundled web assets\",\n        },\n        installation: {\n          ok: status.installation !== null,\n          detail: status.installation\n            ? `workspace ${status.installation.workspaceId}`\n            : \"local installation unavailable\",\n        },\n        denoSandbox: {\n          ok: status.denoVersion !== null,\n          detail: renderDenoSandboxDetail(status.denoVersion),\n        },\n      } as const;\n\n      return {\n        ok: Object.values(checks).every((check) => check.ok),\n        status,\n        checks,\n      };\n    }),\n  );\n\nconst printJson = (value: unknown) =>\n  Effect.sync(() => {\n    console.log(JSON.stringify(value, null, 2));\n  });\n\nconst printText = (value: string) =>\n  Effect.sync(() => {\n    console.log(value);\n  });\n\nconst stopServer = (baseUrl: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const removePidFile = fs.remove(DEFAULT_SERVER_PID_FILE, {\n      force: true,\n    }).pipe(Effect.ignore);\n    const pidRecord = yield* readPidRecord();\n    const pid = typeof pidRecord?.pid === \"number\" ? pidRecord.pid : null;\n\n    if (pid === null) {\n      yield* removePidFile;\n      return false;\n    }\n\n    if (!isPidRunning(pid)) {\n      yield* removePidFile;\n      return false;\n    }\n\n\n    yield* Effect.sync(() => {\n      process.kill(pid, \"SIGTERM\");\n    });\n\n    yield* waitForReachability(baseUrl, false).pipe(\n      Effect.catchAll(() =>\n        removePidFile.pipe(\n          Effect.ignore,\n          Effect.zipRight(Effect.fail(executorAppEffectError(\"cli/main\", `Timed out stopping local executor server pid ${pid}`))),\n        ),\n      ),\n    );\n\n    return true;\n  });\n\nconst ensureServer = (baseUrl: string = DEFAULT_SERVER_BASE_URL) =>\n  Effect.gen(function* () {\n    const reachable = yield* isServerReachable(baseUrl);\n    if (reachable) {\n      return;\n    }\n\n    const url = new URL(baseUrl);\n    const port = Number(url.port || DEFAULT_SERVER_PORT);\n    yield* startServerInBackground(port);\n\n    yield* waitForReachability(baseUrl, true);\n  });\n\n\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ntype PromptField = {\n  name: string;\n  label: string;\n  description?: string;\n  type: string;\n  required: boolean;\n  enumValues?: readonly unknown[];\n};\n\nconst getPromptFields = (requestedSchema: Record<string, unknown> | undefined): PromptField[] => {\n  if (!requestedSchema || !isRecord(requestedSchema.properties)) {\n    return [];\n  }\n\n  const required = new Set(\n    Array.isArray(requestedSchema.required)\n      ? requestedSchema.required.filter((value): value is string => typeof value === \"string\")\n      : [],\n  );\n\n  return Object.entries(requestedSchema.properties).flatMap(([name, property]) => {\n    if (!isRecord(property)) {\n      return [];\n    }\n\n    return [{\n      name,\n      label:\n        typeof property.title === \"string\" && property.title.trim().length > 0\n          ? property.title.trim()\n          : name,\n      description:\n        typeof property.description === \"string\" && property.description.trim().length > 0\n          ? property.description.trim()\n          : undefined,\n      type: typeof property.type === \"string\" ? property.type : \"string\",\n      required: required.has(name),\n      enumValues: Array.isArray(property.enum) ? property.enum : undefined,\n    }];\n  });\n};\n\nconst parsePromptValue = (field: PromptField, raw: string):\n  | { ok: true; value: unknown }\n  | { ok: false; message: string } => {\n  if (field.enumValues && field.enumValues.length > 0) {\n    const normalized = field.enumValues.map((value) => String(value));\n    if (!normalized.includes(raw)) {\n      return {\n        ok: false,\n        message: `Enter one of: ${normalized.join(\", \")}`,\n      };\n    }\n  }\n\n  if (field.type === \"boolean\") {\n    const normalized = raw.trim().toLowerCase();\n    if ([\"y\", \"yes\", \"true\"].includes(normalized)) {\n      return { ok: true, value: true };\n    }\n    if ([\"n\", \"no\", \"false\"].includes(normalized)) {\n      return { ok: true, value: false };\n    }\n    return { ok: false, message: \"Enter yes or no\" };\n  }\n\n  if (field.type === \"number\" || field.type === \"integer\") {\n    const value = Number(raw);\n    if (!Number.isFinite(value)) {\n      return { ok: false, message: \"Enter a number\" };\n    }\n    if (field.type === \"integer\" && !Number.isInteger(value)) {\n      return { ok: false, message: \"Enter an integer\" };\n    }\n    return { ok: true, value };\n  }\n\n  if (field.type === \"object\" || field.type === \"array\") {\n    try {\n      return { ok: true, value: JSON.parse(raw) };\n    } catch {\n      return { ok: false, message: \"Enter valid JSON\" };\n    }\n  }\n\n  return { ok: true, value: raw };\n};\n\nconst promptStructuredInteraction = (parsed: {\n  message: string;\n  requestedSchema?: Record<string, unknown>;\n}) =>\n  Effect.gen(function* () {\n    const fields = getPromptFields(parsed.requestedSchema);\n    if (fields.length === 0) {\n      return null as Record<string, unknown> | null;\n    }\n\n    yield* Effect.sync(() => {\n      process.stdout.write(`${parsed.message}\\n`);\n    });\n\n    const content: Record<string, unknown> = {};\n    for (const field of fields) {\n      if (field.description) {\n        yield* Effect.sync(() => {\n          process.stdout.write(`${field.description}\\n`);\n        });\n      }\n\n      while (true) {\n        const raw = yield* promptLine(\n          `${field.label}${field.required ? \"\" : \" (optional)\"}: `,\n        );\n        const trimmed = raw.trim();\n        if (trimmed.length === 0) {\n          if (field.required) {\n            return null;\n          }\n          break;\n        }\n\n        const parsedValue = parsePromptValue(field, trimmed);\n        if (parsedValue.ok) {\n          content[field.name] = parsedValue.value;\n          break;\n        }\n\n        yield* Effect.sync(() => {\n          process.stdout.write(`${parsedValue.message}\\n`);\n        });\n      }\n    }\n\n    return content;\n  });\n\nconst printUrlInteraction = (input: {\n  message: string;\n  url: string | null;\n  shouldOpen: boolean;\n}) =>\n  Effect.gen(function* () {\n    yield* Effect.sync(() => {\n      process.stdout.write(`${input.message}\\n${input.url ?? \"\"}\\n`);\n    });\n\n    if (input.shouldOpen && input.url) {\n      yield* openUrlInBrowser(input.url);\n    }\n  });\n\nconst executionInteractionMode = (): \"live_form\" | \"detach\" =>\n  process.stdin.isTTY && process.stdout.isTTY ? \"live_form\" : \"detach\";\n\nconst promptInteraction = (input: {\n  interaction: ExecutionInteraction;\n  shouldOpenUrls: boolean;\n}) =>\n  Effect.gen(function* () {\n    const parsed = parseInteractionPayload(input.interaction);\n\n    if (!process.stdin.isTTY || !process.stdout.isTTY || parsed === null) {\n      return null;\n    }\n\n    if (parsed.mode === \"url\") {\n      yield* printUrlInteraction({\n        message: parsed.message,\n        url: parsed.url ?? null,\n        shouldOpen: input.shouldOpenUrls,\n      });\n      return null;\n    }\n\n    const structured = yield* promptStructuredInteraction(parsed);\n    if (structured !== null) {\n      return JSON.stringify({\n        action: \"accept\",\n        content: structured,\n      });\n    }\n\n    const line = yield* promptLine(`${parsed.message} [y/N] `);\n    const normalized = line.trim().toLowerCase();\n    if (normalized.length === 0) {\n      return null;\n    }\n    if (normalized !== \"y\" && normalized !== \"yes\" && normalized !== \"n\" && normalized !== \"no\") {\n      return null;\n    }\n    const accepted = normalized === \"y\" || normalized === \"yes\";\n\n    return JSON.stringify({\n      action: accepted ? \"accept\" : \"decline\",\n      content: {\n        approve: accepted,\n      },\n    });\n  });\n\nconst waitForExecutionProgress = (input: {\n  client: ControlPlaneClient;\n  workspaceId: ExecutionEnvelope[\"execution\"][\"workspaceId\"];\n  executionId: ExecutionEnvelope[\"execution\"][\"id\"];\n  pendingInteractionId: ExecutionInteraction[\"id\"];\n}) =>\n  Effect.gen(function* () {\n    while (true) {\n      yield* sleep(SERVER_POLL_INTERVAL_MS);\n\n      const next = yield* input.client.executions.get({\n        path: {\n          workspaceId: input.workspaceId,\n          executionId: input.executionId,\n        },\n      });\n\n      if (\n        next.execution.status !== \"waiting_for_interaction\"\n        || next.pendingInteraction === null\n        || next.pendingInteraction.id !== input.pendingInteractionId\n      ) {\n        return next;\n      }\n    }\n  });\n\nconst printExecution = (envelope: ExecutionEnvelope) =>\n  Effect.sync(() => {\n    const execution = envelope.execution;\n    if (execution.status === \"completed\") {\n      if (execution.resultJson) {\n        console.log(execution.resultJson);\n      } else {\n        console.log(\"completed\");\n      }\n      return;\n    }\n\n    if (execution.status === \"failed\") {\n      console.error(execution.errorText ?? \"Execution failed\");\n      process.exitCode = 1;\n      return;\n    }\n    if (execution.status === \"waiting_for_interaction\" && envelope.pendingInteraction !== null) {\n      return;\n    }\n\n\n    console.log(JSON.stringify({\n      id: execution.id,\n      status: execution.status,\n    }));\n  });\n\nconst seedDemoMcpSource = (input: {\n  baseUrl: string;\n  endpoint: string;\n  name: string;\n  namespace: string;\n}) =>\n  Effect.gen(function* () {\n    yield* ensureServer(input.baseUrl);\n    const { installation, client } = yield* getLocalAuthedClient(input.baseUrl);\n    const result = yield* seedDemoMcpSourceInWorkspace({\n      client,\n      workspaceId: installation.workspaceId,\n      endpoint: input.endpoint,\n      name: input.name,\n      namespace: input.namespace,\n    });\n\n    yield* Effect.sync(() => {\n      console.log(JSON.stringify(result));\n    });\n  });\n\nconst seedGithubOpenApiSource = (input: {\n  baseUrl: string;\n  endpoint: string;\n  specUrl: string;\n  name: string;\n  namespace: string;\n  credentialEnvVar?: string;\n}) =>\n  Effect.gen(function* () {\n    yield* ensureServer(input.baseUrl);\n    const { installation, client } = yield* getLocalAuthedClient(input.baseUrl);\n    const result = yield* seedGithubOpenApiSourceInWorkspace({\n      client,\n      workspaceId: installation.workspaceId,\n      endpoint: input.endpoint,\n      specUrl: input.specUrl,\n      name: input.name,\n      namespace: input.namespace,\n      credentialEnvVar: input.credentialEnvVar,\n    });\n\n    yield* Effect.sync(() => {\n      console.log(JSON.stringify(result));\n    });\n  });\n\nconst driveExecution = (input: {\n  client: ControlPlaneClient;\n  workspaceId: ExecutionEnvelope[\"execution\"][\"workspaceId\"];\n  envelope: ExecutionEnvelope;\n  baseUrl: string;\n  shouldOpenUrls: boolean;\n}) =>\n  Effect.gen(function* () {\n    let current = input.envelope;\n\n    while (current.execution.status === \"waiting_for_interaction\") {\n      const pending = current.pendingInteraction;\n\n      if (pending === null) {\n        return current;\n      }\n\n      const parsed = parseInteractionPayload(pending);\n      const handling = decideInteractionHandling({\n        parsed,\n        isInteractiveTerminal: process.stdin.isTTY && process.stdout.isTTY,\n      });\n\n      if (handling === \"url_interactive\" && parsed?.mode === \"url\") {\n        yield* printUrlInteraction({\n          message: parsed.message,\n          url: parsed.url ?? null,\n          shouldOpen: input.shouldOpenUrls,\n        });\n\n        current = yield* waitForExecutionProgress({\n          client: input.client,\n          workspaceId: input.workspaceId,\n          executionId: current.execution.id,\n          pendingInteractionId: pending.id,\n        });\n        continue;\n      }\n\n      if (handling === \"url_paused\") {\n        if (input.shouldOpenUrls && parsed?.mode === \"url\" && parsed.url) {\n          yield* openUrlInBrowser(parsed.url);\n        }\n\n        const paused = buildPausedExecutionOutput({\n          executionId: current.execution.id,\n          interaction: pending,\n          baseUrl: input.baseUrl,\n          shouldOpenUrls: input.shouldOpenUrls,\n          cliName: CLI_NAME,\n        });\n        yield* Effect.sync(() => {\n          console.log(JSON.stringify(paused));\n          process.exitCode = 20;\n        });\n        return current;\n      }\n\n      if (handling === \"form_paused\") {\n        const paused = buildPausedExecutionOutput({\n          executionId: current.execution.id,\n          interaction: pending,\n          baseUrl: input.baseUrl,\n          shouldOpenUrls: input.shouldOpenUrls,\n          cliName: CLI_NAME,\n        });\n        yield* Effect.sync(() => {\n          console.log(JSON.stringify(paused));\n          process.exitCode = 20;\n        });\n        return current;\n      }\n\n      const responseJson = yield* promptInteraction({\n        interaction: pending,\n        shouldOpenUrls: input.shouldOpenUrls,\n      });\n      if (responseJson === null) {\n        const paused = buildPausedExecutionOutput({\n          executionId: current.execution.id,\n          interaction: pending,\n          baseUrl: input.baseUrl,\n          shouldOpenUrls: input.shouldOpenUrls,\n          cliName: CLI_NAME,\n        });\n        yield* Effect.sync(() => {\n          console.log(JSON.stringify(paused));\n          process.exitCode = 20;\n        });\n        return current;\n      }\n\n      current = yield* input.client.executions.resume({\n        path: {\n          workspaceId: input.workspaceId,\n          executionId: current.execution.id,\n        },\n        payload: {\n          responseJson,\n          interactionMode: executionInteractionMode(),\n        },\n      });\n    }\n\n    return current;\n  });\n\nconst serverStartCommand = Command.make(\n  \"start\",\n  {\n    port: Options.integer(\"port\").pipe(Options.withDefault(DEFAULT_SERVER_PORT)),\n  },\n  ({ port }) => runLocalExecutorServer(getDefaultServerOptions(port)),\n).pipe(Command.withDescription(\"Start the local executor server\"));\n\nconst serverCommand = Command.make(\"server\").pipe(\n  Command.withSubcommands([serverStartCommand] as const),\n  Command.withDescription(\"Local server commands\"),\n);\n\nconst upCommand = Command.make(\n  \"up\",\n  {\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n  },\n  ({ baseUrl }) =>\n    ensureServer(baseUrl).pipe(\n      Effect.zipRight(getServerStatus(baseUrl)),\n      Effect.flatMap((status) => printText(renderStatus(status))),\n    ),\n).pipe(Command.withDescription(\"Ensure the local executor server is running\"));\n\nconst downCommand = Command.make(\n  \"down\",\n  {\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n  },\n  ({ baseUrl }) =>\n    stopServer(baseUrl).pipe(\n      Effect.flatMap((stopped) =>\n        printText(stopped ? \"Stopped local executor server.\" : \"Local executor server is not running.\"),\n      ),\n    ),\n).pipe(Command.withDescription(\"Stop the local executor server\"));\n\nconst statusCommand = Command.make(\n  \"status\",\n  {\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n    json: Options.boolean(\"json\").pipe(Options.withDefault(false)),\n  },\n  ({ baseUrl, json }) =>\n    getServerStatus(baseUrl).pipe(\n      Effect.flatMap((status) => json ? printJson(status) : printText(renderStatus(status))),\n    ),\n).pipe(Command.withDescription(\"Show local executor server status\"));\n\nconst doctorCommand = Command.make(\n  \"doctor\",\n  {\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n    json: Options.boolean(\"json\").pipe(Options.withDefault(false)),\n  },\n  ({ baseUrl, json }) =>\n    getDoctorReport(baseUrl).pipe(\n      Effect.flatMap((report) => json\n        ? printJson(report)\n        : printText([\n            `ok: ${report.ok ? \"yes\" : \"no\"}`,\n            ...Object.entries(report.checks).map(([name, check]) => `${name}: ${check.ok ? \"ok\" : \"fail\"} - ${check.detail}`),\n          ].join(\"\\n\"))),\n    ),\n).pipe(Command.withDescription(\"Check local executor install and daemon health\"));\n\nconst getDenoVersion = (): Effect.Effect<string | null, never, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const configuredDenoExecutable = process.env.DENO_BIN?.trim();\n    const bundledDenoExecutable = process.env.HOME?.trim()\n      ? `${process.env.HOME.trim()}/.deno/bin/deno`\n      : null;\n    const bundledDenoExists = bundledDenoExecutable === null\n      ? false\n      : yield* fs.exists(bundledDenoExecutable).pipe(\n          Effect.catchAll(() => Effect.succeed(false)),\n        );\n    const denoExecutable = configuredDenoExecutable\n      || (bundledDenoExists ? bundledDenoExecutable : null)\n      || \"deno\";\n\n    return yield* Effect.tryPromise({\n      try: () =>\n        new Promise<string | null>((resolveVersion) => {\n          const child = spawn(denoExecutable, [\"--version\"], {\n            stdio: [\"ignore\", \"pipe\", \"ignore\"],\n            timeout: 5000,\n          });\n\n          let stdout = \"\";\n          child.stdout?.setEncoding(\"utf8\");\n          child.stdout?.on(\"data\", (chunk: string) => {\n            stdout += chunk;\n          });\n\n          child.once(\"error\", () => resolveVersion(null));\n          child.once(\"close\", (code) => {\n            if (code !== 0) {\n              resolveVersion(null);\n              return;\n            }\n\n            const match = /deno\\s+(\\S+)/i.exec(stdout);\n            resolveVersion(match ? match[1] : null);\n          });\n        }),\n      catch: () => null,\n    }).pipe(Effect.catchAll(() => Effect.succeed(null)));\n  }).pipe(Effect.catchAll(() => Effect.succeed(null)));\n\nconst sandboxCommand = Command.make(\n  \"sandbox\",\n  {},\n  () =>\n    Effect.gen(function* () {\n      const version = yield* getDenoVersion();\n\n      if (version !== null) {\n        yield* printText(`Deno sandbox is ready (deno ${version}).`);\n        return;\n      }\n\n      yield* printText(\n        [\n          \"Deno is not installed.\",\n          \"\",\n          \"The executor sandbox requires Deno to run code in a secure, isolated subprocess.\",\n          \"\",\n          \"Install Deno:\",\n          \"  curl -fsSL https://deno.land/install.sh | sh\",\n          \"\",\n          \"Or see: https://docs.deno.com/runtime/getting_started/installation/\",\n        ].join(\"\\n\"),\n      );\n\n      process.exitCode = 1;\n    }),\n).pipe(Command.withDescription(\"Check whether the Deno sandbox runtime is available\"));\n\n\nconst callCommand = Command.make(\n  \"call\",\n  {\n    code: Args.text({ name: \"code\" }).pipe(\n      Args.withDescription(\"Inline code to execute.\"),\n      Args.optional,\n    ),\n    file: Options.text(\"file\").pipe(Options.optional),\n    stdin: Options.boolean(\"stdin\").pipe(Options.withDefault(false)),\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n    noOpen: Options.boolean(\"no-open\").pipe(Options.withDefault(false)),\n  },\n  ({ code, file, stdin, baseUrl, noOpen }) =>\n    Effect.gen(function* () {\n      const resolvedCode = yield* readCode({\n        code: Option.getOrUndefined(code),\n        file: Option.getOrUndefined(file),\n        stdin,\n      });\n\n      yield* ensureServer(baseUrl);\n      const { installation, client } = yield* getLocalAuthedClient(baseUrl);\n      const created = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: resolvedCode,\n          interactionMode: executionInteractionMode(),\n        },\n      });\n\n      const settled = yield* driveExecution({\n        client,\n        workspaceId: installation.workspaceId,\n        envelope: created,\n        baseUrl,\n        shouldOpenUrls: !noOpen,\n      });\n\n      yield* printExecution(settled);\n    }),\n).pipe(Command.withDescription(\"Execute code against the local executor server\"));\n\nconst resumeCommand = Command.make(\n  \"resume\",\n  {\n    executionId: Options.text(\"execution-id\"),\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n    noOpen: Options.boolean(\"no-open\").pipe(Options.withDefault(false)),\n  },\n  ({ executionId, baseUrl, noOpen }) =>\n    Effect.gen(function* () {\n      yield* ensureServer(baseUrl);\n      const { installation, client } = yield* getLocalAuthedClient(baseUrl);\n      const decodedExecutionId = yield* decodeExecutionId(executionId).pipe(\n        Effect.mapError((cause) => toError(cause)),\n      );\n      const execution = yield* client.executions.get({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: decodedExecutionId,\n        },\n      });\n\n      const settled = yield* driveExecution({\n        client,\n        workspaceId: installation.workspaceId,\n        envelope: execution,\n        baseUrl,\n        shouldOpenUrls: !noOpen,\n      });\n\n      yield* printExecution(settled);\n    }),\n).pipe(Command.withDescription(\"Resume a paused execution\"));\n\nconst devSeedMcpDemoCommand = Command.make(\n  \"seed-mcp-demo\",\n  {\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n    endpoint: Options.text(\"endpoint\").pipe(\n      Options.withDefault(\"http://127.0.0.1:58506/mcp\"),\n    ),\n    name: Options.text(\"name\").pipe(Options.withDefault(\"Demo\")),\n    namespace: Options.text(\"namespace\").pipe(Options.withDefault(\"demo\")),\n  },\n  ({ baseUrl, endpoint, name, namespace }) =>\n    seedDemoMcpSource({\n      baseUrl,\n      endpoint,\n      name,\n      namespace,\n    }),\n).pipe(\n  Command.withDescription(\n    \"Seed the localhost MCP elicitation demo source into the default workspace\",\n  ),\n);\n\nconst devSeedGithubCommand = Command.make(\n  \"seed-github\",\n  {\n    baseUrl: Options.text(\"base-url\").pipe(Options.withDefault(DEFAULT_SERVER_BASE_URL)),\n    endpoint: Options.text(\"endpoint\").pipe(\n      Options.withDefault(\"https://api.github.com\"),\n    ),\n    specUrl: Options.text(\"spec-url\").pipe(\n      Options.withDefault(\n        \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json\",\n      ),\n    ),\n    name: Options.text(\"name\").pipe(Options.withDefault(\"GitHub\")),\n    namespace: Options.text(\"namespace\").pipe(Options.withDefault(\"github\")),\n    credentialEnvVar: Options.text(\"credential-env-var\").pipe(\n      Options.withDefault(\"GITHUB_TOKEN\"),\n    ),\n  },\n  ({ baseUrl, endpoint, specUrl, name, namespace, credentialEnvVar }) =>\n    seedGithubOpenApiSource({\n      baseUrl,\n      endpoint,\n      specUrl,\n      name,\n      namespace,\n      credentialEnvVar,\n    }),\n).pipe(\n  Command.withDescription(\n    \"Seed a GitHub OpenAPI source into the default workspace\",\n  ),\n);\n\nconst devCommand = Command.make(\"dev\").pipe(\n  Command.withSubcommands([devSeedMcpDemoCommand, devSeedGithubCommand] as const),\n  Command.withDescription(\"Development helpers\"),\n);\n\nconst root = Command.make(\"executor\").pipe(\n  Command.withSubcommands([\n    serverCommand,\n    upCommand,\n    downCommand,\n    statusCommand,\n    doctorCommand,\n    sandboxCommand,\n    callCommand,\n    resumeCommand,\n    devCommand,\n  ] as const),\n  Command.withDescription(\"Executor local CLI\"),\n);\n\nconst runCli = Command.run(root, {\n  name: CLI_NAME,\n  version: CLI_VERSION,\n  executable: CLI_NAME,\n});\n\nconst hiddenServer = (): Effect.Effect<void, Error, never> | null => {\n  const args = getCliArgs();\n  if (args[0] !== \"__local-server\") {\n    return null;\n  }\n\n  const portFlagIndex = args.findIndex((arg) => arg === \"--port\");\n  const port = portFlagIndex >= 0 ? Number(args[portFlagIndex + 1]) : DEFAULT_SERVER_PORT;\n\n  return runLocalExecutorServer({\n    ...getDefaultServerOptions(\n      Number.isInteger(port) && port > 0 ? port : DEFAULT_SERVER_PORT,\n    ),\n  });\n};\n\nconst program = (hiddenServer()\n  ?? helpOverride()\n  ?? runCli(toEffectCliArgv(getCliArgs())).pipe(Effect.mapError(toError)))\n  .pipe(Effect.provide(NodeFileSystem.layer))\n  .pipe(Effect.provide(NodePath.layer))\n  .pipe(\n    Effect.catchAllCause((cause) =>\n      Effect.sync(() => {\n        console.error(Cause.pretty(cause));\n        process.exitCode = 1;\n      }),\n    ),\n  );\n\n// Effect CLI's environment does not fully narrow at the process boundary.\nNodeRuntime.runMain(program as Effect.Effect<void, never, never>);\n"
  },
  {
    "path": "apps/executor/src/cli/pending-interaction-output.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport type { ExecutionInteraction } from \"@executor/control-plane\";\n\nimport {\n  buildPausedExecutionOutput,\n  parseInteractionPayload,\n} from \"./pending-interaction-output\";\n\nconst makeInteraction = (patch: Partial<ExecutionInteraction> = {}): ExecutionInteraction => ({\n  id: \"exec_123:tool_execution_gate:call_1\" as never,\n  executionId: \"exec_123\" as never,\n  status: \"pending\",\n  kind: \"form\",\n  purpose: \"tool_execution_gate\",\n  payloadJson: JSON.stringify({\n    elicitation: {\n      mode: \"form\",\n      message: \"Allow DELETE /v2/domains/{domain}/records/{recordId}?\",\n      requestedSchema: {\n        type: \"object\",\n        properties: {\n          approve: {\n            type: \"boolean\",\n            description: \"Whether to approve the tool call\",\n          },\n        },\n        required: [\"approve\"],\n        additionalProperties: false,\n      },\n    },\n  }),\n  responseJson: null,\n  responsePrivateJson: null,\n  createdAt: 1,\n  updatedAt: 1,\n  ...patch,\n});\n\ndescribe(\"pending-interaction-output\", () => {\n  it(\"parses requested schema from interaction payload\", () => {\n    const parsed = parseInteractionPayload(makeInteraction());\n\n    expect(parsed).not.toBeNull();\n    expect(parsed?.mode).toBe(\"form\");\n    expect(parsed?.requestedSchema).toEqual({\n      type: \"object\",\n      properties: {\n        approve: {\n          type: \"boolean\",\n          description: \"Whether to approve the tool call\",\n        },\n      },\n      required: [\"approve\"],\n      additionalProperties: false,\n    });\n  });\n\n  it(\"builds a structured paused execution instruction with full resume command\", () => {\n    const output = buildPausedExecutionOutput({\n      executionId: \"exec_123\",\n      interaction: makeInteraction(),\n      baseUrl: \"http://127.0.0.1:8788\",\n      shouldOpenUrls: false,\n    });\n\n    expect(output.resumeCommand).toBe(\n      \"executor resume --execution-id exec_123 --base-url http://127.0.0.1:8788 --no-open\",\n    );\n    expect(output.interaction.requestedSchema).toEqual({\n      type: \"object\",\n      properties: {\n        approve: {\n          type: \"boolean\",\n          description: \"Whether to approve the tool call\",\n        },\n      },\n      required: [\"approve\"],\n      additionalProperties: false,\n    });\n    expect(output.instruction).toContain(\"requires approval\");\n    expect(output.instruction).toContain(\"Allow DELETE /v2/domains/{domain}/records/{recordId}?\");\n    expect(output.instruction).toContain(output.resumeCommand);\n    expect(output.instruction).toContain(\"interaction.requestedSchema\");\n  });\n\n  it(\"describes URL interactions with the next command to run\", () => {\n    const output = buildPausedExecutionOutput({\n      executionId: \"exec_456\",\n      interaction: makeInteraction({\n        id: \"exec_456:source_connect_oauth2:call_1\" as never,\n        executionId: \"exec_456\" as never,\n        kind: \"url\",\n        purpose: \"source_connect_oauth2\",\n        payloadJson: JSON.stringify({\n          elicitation: {\n            mode: \"url\",\n            message: \"Finish connecting Vercel\",\n            url: \"https://vercel.com/oauth/start\",\n          },\n        }),\n      }),\n      baseUrl: \"http://127.0.0.1:8788\",\n      shouldOpenUrls: true,\n    });\n\n    expect(output.interaction.mode).toBe(\"url\");\n    expect(output.interaction.url).toBe(\"https://vercel.com/oauth/start\");\n    expect(output.instruction).toContain(\"https://vercel.com/oauth/start\");\n    expect(output.instruction).toContain(\n      \"executor resume --execution-id exec_456 --base-url http://127.0.0.1:8788\",\n    );\n  });\n});\n"
  },
  {
    "path": "apps/executor/src/cli/pending-interaction-output.ts",
    "content": "import type { ExecutionInteraction } from \"@executor/control-plane\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport type ParsedInteractionPayload = {\n  message: string;\n  mode: \"form\" | \"url\";\n  url?: string;\n  requestedSchema?: Record<string, unknown>;\n};\n\nexport const parseInteractionPayload = (\n  interaction: ExecutionInteraction,\n): ParsedInteractionPayload | null => {\n  try {\n    const parsed = JSON.parse(interaction.payloadJson) as {\n      elicitation?: {\n        message?: string;\n        mode?: \"form\" | \"url\";\n        url?: string;\n        requestedSchema?: Record<string, unknown>;\n      };\n    };\n\n    if (!parsed.elicitation || typeof parsed.elicitation.message !== \"string\") {\n      return null;\n    }\n\n    return {\n      message: parsed.elicitation.message,\n      mode: parsed.elicitation.mode === \"url\" ? \"url\" : \"form\",\n      url: parsed.elicitation.url,\n      requestedSchema:\n        isRecord(parsed.elicitation.requestedSchema)\n          ? parsed.elicitation.requestedSchema\n          : undefined,\n    };\n  } catch {\n    return null;\n  }\n};\n\nconst shellEscape = (value: string): string => {\n  if (/^[A-Za-z0-9_./:=+-]+$/.test(value)) {\n    return value;\n  }\n\n  return `'${value.replace(/'/g, `'\"'\"'`)}'`;\n};\n\nconst renderCommand = (argv: readonly string[]): string => argv.map(shellEscape).join(\" \");\n\nconst describePauseReason = (interaction: ExecutionInteraction): string => {\n  switch (interaction.purpose) {\n    case \"tool_execution_gate\":\n      return \"this tool call requires approval before executor can continue\";\n    case \"source_connect_oauth2\":\n      return \"executor needs browser authentication to finish connecting the source\";\n    case \"source_connect_secret\":\n      return \"executor needs credentials to finish connecting the source\";\n    default:\n      return \"executor needs additional input before it can continue\";\n  }\n};\n\nconst buildInstruction = (input: {\n  interaction: ExecutionInteraction;\n  parsed: ParsedInteractionPayload | null;\n  resumeCommand: string;\n}): string => {\n  const reason = describePauseReason(input.interaction);\n  const prompt = input.parsed?.message ?? \"Interaction required\";\n\n  if (input.parsed?.mode === \"url\") {\n    const url = input.parsed.url?.trim();\n    return url && url.length > 0\n      ? `Execution paused because ${reason}. Open ${url} and complete the requested flow for \"${prompt}\", then run ${input.resumeCommand} to continue if it does not resume automatically.`\n      : `Execution paused because ${reason}. Run ${input.resumeCommand} to continue and complete the requested flow for \"${prompt}\".`;\n  }\n\n  if (input.parsed?.requestedSchema) {\n    return `Execution paused because ${reason}. The interaction prompt is \"${prompt}\". Run ${input.resumeCommand} in an interactive terminal and respond with input matching interaction.requestedSchema.`;\n  }\n\n  return `Execution paused because ${reason}. The interaction prompt is \"${prompt}\". Run ${input.resumeCommand} in an interactive terminal to continue.`;\n};\n\nexport const buildPausedExecutionOutput = (input: {\n  executionId: string;\n  interaction: ExecutionInteraction;\n  baseUrl: string;\n  shouldOpenUrls: boolean;\n  cliName?: string;\n}) => {\n  const cliName = input.cliName ?? \"executor\";\n  const argv = [cliName, \"resume\", \"--execution-id\", input.executionId, \"--base-url\", input.baseUrl];\n  if (!input.shouldOpenUrls) {\n    argv.push(\"--no-open\");\n  }\n\n  const command = renderCommand(argv);\n  const parsed = parseInteractionPayload(input.interaction);\n\n  return {\n    id: input.executionId,\n    status: \"waiting_for_interaction\" as const,\n    interactionId: input.interaction.id,\n    message: parsed?.message ?? \"Interaction required\",\n    resumeCommand: command,\n    interaction: {\n      id: input.interaction.id,\n      purpose: input.interaction.purpose,\n      mode: parsed?.mode ?? (input.interaction.kind === \"url\" ? \"url\" : \"form\"),\n      message: parsed?.message ?? \"Interaction required\",\n      url: parsed?.url ?? null,\n      requestedSchema: parsed?.requestedSchema ?? null,\n    },\n    resume: {\n      command,\n      argv,\n    },\n    instruction: buildInstruction({\n      interaction: input.interaction,\n      parsed,\n      resumeCommand: command,\n    }),\n  };\n};\n"
  },
  {
    "path": "apps/executor/src/cli/runtime-paths.ts",
    "content": "import { existsSync } from \"node:fs\";\nimport { dirname, extname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n  EXECUTOR_WEB_ASSETS_DIR_ENV,\n} from \"@executor/server\";\n\nconst sourceDir = dirname(fileURLToPath(import.meta.url));\n\nconst trim = (value: string | undefined): string | undefined => {\n  const candidate = value?.trim();\n  return candidate && candidate.length > 0 ? candidate : undefined;\n};\n\nconst resolveIfExists = (value: string | undefined): string | null => {\n  const candidate = trim(value);\n  if (!candidate) {\n    return null;\n  }\n\n  const resolved = resolve(candidate);\n  return existsSync(resolved) ? resolved : null;\n};\n\nconst getSourceEntrypoint = (): string | null => {\n  const candidate = trim(process.argv[1]);\n  if (!candidate) {\n    return null;\n  }\n\n  const resolved = resolve(candidate);\n  const extension = extname(resolved).toLowerCase();\n  return [\".ts\", \".tsx\", \".js\", \".mjs\", \".cjs\"].includes(extension)\n    ? resolved\n    : null;\n};\n\nconst resolveBundledNodeLauncher = (): string | null => {\n  const candidate = resolve(sourceDir, \"executor.js\");\n  return existsSync(candidate) ? candidate : null;\n};\n\n\nconst resolveRuntimeResourcesRoot = (): string | null => {\n  const compiledCandidate = resolve(dirname(process.execPath), \"../resources\");\n  if (existsSync(compiledCandidate)) {\n    return compiledCandidate;\n  }\n\n  const bundledCandidateFromModule = resolve(sourceDir, \"../resources\");\n  if (existsSync(bundledCandidateFromModule)) {\n    return bundledCandidateFromModule;\n  }\n\n  const sourceEntrypoint = getSourceEntrypoint();\n  if (sourceEntrypoint) {\n    const bundledCandidate = resolve(dirname(sourceEntrypoint), \"../resources\");\n    if (existsSync(bundledCandidate)) {\n      return bundledCandidate;\n    }\n  }\n\n  return null;\n};\n\nexport const resolveSelfCommand = (args: readonly string[]): readonly string[] => {\n  const bundledLauncher = resolveBundledNodeLauncher();\n  if (bundledLauncher !== null) {\n    return [process.execPath, bundledLauncher, ...args];\n  }\n\n  const sourceEntrypoint = getSourceEntrypoint();\n  return sourceEntrypoint === null\n    ? [process.execPath, ...args]\n    : [process.execPath, sourceEntrypoint, ...args];\n};\n\nexport const resolveRuntimeWebAssetsDir = (): string | null => {\n  const explicit = resolveIfExists(process.env[EXECUTOR_WEB_ASSETS_DIR_ENV]);\n  if (explicit) {\n    return explicit;\n  }\n\n  const resourcesRoot = resolveRuntimeResourcesRoot();\n  const bundled = resourcesRoot\n    ? resolveIfExists(resolve(resourcesRoot, \"web\"))\n    : null;\n  if (bundled) {\n    return bundled;\n  }\n\n  return resolveIfExists(resolve(sourceDir, \"../../../web/dist\"));\n};\n"
  },
  {
    "path": "apps/executor/src/distribution/artifact.ts",
    "content": "import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { chmod, cp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport { readDistributionPackageMetadata, repoRoot } from \"./metadata\";\n\nconst defaultOutputDir = resolve(repoRoot, \"apps/executor/dist/npm\");\n\n\nexport type BuildDistributionPackageOptions = {\n  outputDir?: string;\n  packageName?: string;\n  packageVersion?: string;\n  buildWeb?: boolean;\n};\n\nexport type DistributionPackageArtifact = {\n  packageDir: string;\n  launcherPath: string;\n  bundlePath: string;\n  resourcesDir: string;\n};\n\ntype CommandInput = {\n  command: string;\n  args: ReadonlyArray<string>;\n  cwd: string;\n};\n\nconst runCommand = async (input: CommandInput): Promise<void> => {\n  const child = spawn(input.command, [...input.args], {\n    cwd: input.cwd,\n    env: process.env,\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n  });\n\n  let stdout = \"\";\n  let stderr = \"\";\n\n  child.stdout?.setEncoding(\"utf8\");\n  child.stdout?.on(\"data\", (chunk) => {\n    stdout += chunk;\n  });\n\n  child.stderr?.setEncoding(\"utf8\");\n  child.stderr?.on(\"data\", (chunk) => {\n    stderr += chunk;\n  });\n\n  const exitCode = await new Promise<number>((resolveExitCode, reject) => {\n    child.once(\"error\", reject);\n    child.once(\"close\", (code) => {\n      resolveExitCode(code ?? -1);\n    });\n  });\n\n  if (exitCode === 0) {\n    return;\n  }\n\n  throw new Error(\n    [\n      `${input.command} ${input.args.join(\" \")} exited with code ${exitCode}`,\n      stdout.trim().length > 0 ? `stdout:\\n${stdout.trim()}` : null,\n      stderr.trim().length > 0 ? `stderr:\\n${stderr.trim()}` : null,\n    ]\n      .filter((part) => part !== null)\n      .join(\"\\n\\n\"),\n  );\n};\n\nconst resolveQuickJsWasmPath = (): string => {\n  const requireFromQuickJsRuntime = createRequire(\n    join(repoRoot, \"packages/kernel/runtime-quickjs/package.json\"),\n  );\n  const quickJsPackagePath = requireFromQuickJsRuntime.resolve(\n    \"quickjs-emscripten/package.json\",\n  );\n  const wasmPath = resolve(\n    dirname(quickJsPackagePath),\n    \"../@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.wasm\",\n  );\n\n  if (!existsSync(wasmPath)) {\n    throw new Error(`Unable to locate QuickJS wasm asset at ${wasmPath}`);\n  }\n\n  return wasmPath;\n};\n\n\nconst createPackageJson = (input: {\n  packageName: string;\n  packageVersion: string;\n  description: string;\n  keywords: ReadonlyArray<string>;\n  homepage?: string;\n  bugs?: {\n    url?: string;\n  };\n  repository?: {\n    type?: string;\n    url?: string;\n  };\n  license?: string;\n}) => {\n  const packageJson = {\n    name: input.packageName,\n    version: input.packageVersion,\n    description: input.description,\n    keywords: input.keywords,\n    homepage: input.homepage,\n    bugs: input.bugs,\n    repository: input.repository,\n    license: input.license ?? \"MIT\",\n    type: \"module\",\n    private: false,\n    bin: {\n      executor: \"bin/executor.js\",\n    },\n    files: [\n      \"bin\",\n      \"resources\",\n      \"README.md\",\n      \"package.json\",\n    ],\n    engines: {\n      node: \">=20\",\n    },\n  };\n\n  return JSON.stringify(packageJson, null, 2) + \"\\n\";\n};\n\nconst createLauncherSource = () => [\n  \"#!/usr/bin/env node\",\n  'import \"./executor.mjs\";',\n  \"\",\n].join(\"\\n\");\n\nexport const buildDistributionPackage = async (\n  options: BuildDistributionPackageOptions = {},\n): Promise<DistributionPackageArtifact> => {\n  const defaults = await readDistributionPackageMetadata();\n  const packageDir = resolve(options.outputDir ?? defaultOutputDir);\n  const binDir = join(packageDir, \"bin\");\n  const resourcesDir = join(packageDir, \"resources\");\n  const webDir = join(resourcesDir, \"web\");\n  const bundlePath = join(binDir, \"executor.mjs\");\n  const launcherPath = join(binDir, \"executor.js\");\n  const quickJsWasmPath = resolveQuickJsWasmPath();\n\n  const webDistDir = join(repoRoot, \"apps/web/dist\");\n  const readmePath = join(repoRoot, \"README.md\");\n  const packageName = options.packageName ?? defaults.name;\n  const packageVersion = options.packageVersion ?? defaults.version;\n  await rm(packageDir, { recursive: true, force: true });\n  await mkdir(binDir, { recursive: true });\n  await mkdir(resourcesDir, { recursive: true });\n\n  if ((options.buildWeb ?? true) || !existsSync(webDistDir)) {\n    await runCommand({\n      command: \"bun\",\n      args: [\"run\", \"build\"],\n      cwd: join(repoRoot, \"apps/web\"),\n    });\n  }\n\n  if (!existsSync(webDistDir)) {\n    throw new Error(`Missing built web assets at ${webDistDir}`);\n  }\n\n  await runCommand({\n    command: \"bun\",\n    args: [\n      \"build\",\n      \"./apps/executor/src/cli/main.ts\",\n      \"--target\",\n      \"node\",\n      \"--outfile\",\n      bundlePath,\n    ],\n    cwd: repoRoot,\n  });\n\n  await cp(webDistDir, webDir, { recursive: true });\n  await cp(quickJsWasmPath, join(binDir, \"emscripten-module.wasm\"));\n\n  await mkdir(join(binDir, \"openapi-extractor-wasm\"), { recursive: true });\n  await cp(\n    join(repoRoot, \"packages/sources/openapi/src/openapi-extractor-wasm/openapi_extractor_bg.wasm\"),\n    join(binDir, \"openapi-extractor-wasm/openapi_extractor_bg.wasm\"),\n  );\n  await cp(\n    join(repoRoot, \"packages/kernel/runtime-deno-subprocess/src/deno-subprocess-worker.mjs\"),\n    join(binDir, \"deno-subprocess-worker.mjs\"),\n  );\n  await runCommand({\n    command: \"bun\",\n    args: [\n      \"build\",\n      \"./packages/kernel/runtime-ses/src/sandbox-worker.mjs\",\n      \"--target\",\n      \"node\",\n      \"--outfile\",\n      join(binDir, \"sandbox-worker.mjs\"),\n    ],\n    cwd: repoRoot,\n  });\n  await writeFile(join(packageDir, \"package.json\"), createPackageJson({\n    packageName,\n    packageVersion,\n    description: defaults.description,\n    keywords: defaults.keywords,\n    homepage: defaults.homepage,\n    bugs: defaults.bugs,\n    repository: defaults.repository,\n    license: defaults.license,\n  }));\n  await cp(readmePath, join(packageDir, \"README.md\"));\n  await writeFile(launcherPath, createLauncherSource());\n  await chmod(launcherPath, 0o755);\n\n  return {\n    packageDir,\n    launcherPath,\n    bundlePath,\n    resourcesDir,\n  };\n};\n"
  },
  {
    "path": "apps/executor/src/distribution/distribution.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  DistributionHarness,\n  LocalDistributionHarnessLive,\n} from \"./harness\";\n\ndescribe(\"distribution flow\", () => {\n  const verifyInstallFlow = <R>(\n    runCommand: (\n      args: ReadonlyArray<string>,\n      options?: {\n        readonly okExitCodes?: ReadonlyArray<number>;\n      },\n    ) => Effect.Effect<{ stdout: string; stderr: string }, Error, R>,\n  ) =>\n    Effect.gen(function* () {\n      const harness = yield* DistributionHarness;\n\n      yield* harness.writeProjectConfig(`{\n  \"runtime\": \"ses\",\n  // local workspace config\n  \"sources\": {},\n}\n`);\n\n      const initialDoctor = yield* runCommand([\n        \"doctor\",\n        \"--json\",\n        \"--base-url\",\n        harness.baseUrl,\n      ]);\n      const initialDoctorJson = JSON.parse(initialDoctor.stdout) as {\n        ok: boolean;\n        checks: Record<string, { ok: boolean }>;\n      };\n      expect(initialDoctorJson.ok).toBe(false);\n      expect(initialDoctorJson.checks.webAssets?.ok).toBe(true);\n      expect(initialDoctorJson.checks.database?.ok).toBe(true);\n\n      yield* runCommand([\"up\", \"--base-url\", harness.baseUrl]);\n\n      const statusResult = yield* runCommand([\n        \"status\",\n        \"--json\",\n        \"--base-url\",\n        harness.baseUrl,\n      ]);\n      const status = JSON.parse(statusResult.stdout) as {\n        reachable: boolean;\n        pidRunning: boolean;\n        installation: { workspaceId: string; accountId: string } | null;\n      };\n\n      expect(status.reachable).toBe(true);\n      expect(status.pidRunning).toBe(true);\n      expect(status.installation).not.toBeNull();\n\n      const html = yield* harness.fetchText(\"/\");\n      expect(html.status).toBe(200);\n      expect(html.contentType).toContain(\"text/html\");\n      expect(html.body).toContain(\"<div id=\\\"root\\\"></div>\");\n\n      const installationResponse = yield* harness.fetchText(\"/v1/local/installation\");\n      expect(installationResponse.status).toBe(200);\n      const installation = JSON.parse(installationResponse.body) as {\n        workspaceId: string;\n        accountId: string;\n      };\n\n      const sesCall = yield* runCommand(\n        [\n          \"call\",\n          'await fetch(\"https://example.com\"); return 1;',\n          \"--base-url\",\n          harness.baseUrl,\n        ],\n        { okExitCodes: [1] },\n      );\n      expect(sesCall.stderr).toContain(\"fetch is disabled in SES executor\");\n\n      yield* runCommand([\"down\", \"--base-url\", harness.baseUrl]);\n      yield* runCommand([\"up\", \"--base-url\", harness.baseUrl]);\n\n      const installationAfterRestartResponse = yield* harness.fetchText(\"/v1/local/installation\");\n      expect(installationAfterRestartResponse.status).toBe(200);\n      const installationAfterRestart = JSON.parse(\n        installationAfterRestartResponse.body,\n      ) as {\n        workspaceId: string;\n        accountId: string;\n      };\n\n      expect(installationAfterRestart.workspaceId).toBe(installation.workspaceId);\n      expect(installationAfterRestart.accountId).toBe(installation.accountId);\n\n      yield* runCommand([\"down\", \"--base-url\", harness.baseUrl]);\n    });\n\n  it.live(\"boots a staged package artifact in a fresh home\", () =>\n    verifyInstallFlow((args, options) =>\n      Effect.flatMap(DistributionHarness, (harness) => harness.run(args, options))\n    )\n      .pipe(Effect.provide(LocalDistributionHarnessLive)), 240_000);\n\n  it.live(\"boots an npm-installed package in a fresh home\", () =>\n    verifyInstallFlow((args, options) =>\n      Effect.flatMap(DistributionHarness, (harness) => harness.runInstalled(args, options))\n    ).pipe(Effect.provide(LocalDistributionHarnessLive)), 240_000);\n});\n"
  },
  {
    "path": "apps/executor/src/distribution/harness.ts",
    "content": "import { spawn } from \"node:child_process\";\nimport { createServer } from \"node:net\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport { buildDistributionPackage } from \"./artifact\";\nimport { executorAppEffectError } from \"../effect-errors\";\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\ntype CommandResult = {\n  readonly stdout: string;\n  readonly stderr: string;\n  readonly exitCode: number;\n};\n\nexport class DistributionHarness extends Context.Tag(\n  \"@executor/apps/executor/distribution/DistributionHarness\",\n)<\n  DistributionHarness,\n  {\n    readonly packageDir: string;\n    readonly launcherPath: string;\n    readonly tarballPath: string;\n    readonly executorHome: string;\n    readonly baseUrl: string;\n    readonly writeProjectConfig: (\n      contents: string,\n    ) => Effect.Effect<void, Error, never>;\n    readonly run: (\n      args: ReadonlyArray<string>,\n      options?: {\n        readonly okExitCodes?: ReadonlyArray<number>;\n      },\n    ) => Effect.Effect<CommandResult, Error, never>;\n    readonly runInstalled: (\n      args: ReadonlyArray<string>,\n      options?: {\n        readonly okExitCodes?: ReadonlyArray<number>;\n      },\n    ) => Effect.Effect<CommandResult, Error, never>;\n    readonly fetchText: (\n      pathname: string,\n    ) => Effect.Effect<{\n      readonly status: number;\n      readonly body: string;\n      readonly contentType: string | null;\n    }, Error, never>;\n  }\n>() {}\n\nconst runCommand = (input: {\n  readonly command: string;\n  readonly args: ReadonlyArray<string>;\n  readonly cwd: string;\n  readonly env?: NodeJS.ProcessEnv;\n  readonly okExitCodes?: ReadonlyArray<number>;\n}): Effect.Effect<CommandResult, Error, never> =>\n  Effect.async((resume) => {\n    const child = spawn(input.command, [...input.args], {\n      cwd: input.cwd,\n      env: input.env,\n      stdio: [\"ignore\", \"pipe\", \"pipe\"],\n    });\n\n    let stdout = \"\";\n    let stderr = \"\";\n\n    child.stdout?.setEncoding(\"utf8\");\n    child.stdout?.on(\"data\", (chunk) => {\n      stdout += chunk;\n    });\n\n    child.stderr?.setEncoding(\"utf8\");\n    child.stderr?.on(\"data\", (chunk) => {\n      stderr += chunk;\n    });\n\n    child.once(\"error\", (error) => {\n      resume(Effect.fail(error));\n    });\n\n    child.once(\"close\", (code) => {\n      const exitCode = code ?? -1;\n      const result = {\n        stdout: stdout.trim(),\n        stderr: stderr.trim(),\n        exitCode,\n      } satisfies CommandResult;\n      const okExitCodes = input.okExitCodes ?? [0];\n\n      if (okExitCodes.includes(exitCode)) {\n        resume(Effect.succeed(result));\n        return;\n      }\n\n      resume(Effect.fail(executorAppEffectError(\"distribution/harness\", \n        [\n          `${input.command} ${input.args.join(\" \")} exited with code ${exitCode}`,\n          stdout.length > 0 ? `stdout:\\n${stdout.trim()}` : null,\n          stderr.length > 0 ? `stderr:\\n${stderr.trim()}` : null,\n        ].filter((part) => part !== null).join(\"\\n\\n\"),\n      )));\n    });\n\n    return Effect.sync(() => {\n      child.kill(\"SIGTERM\");\n    });\n  });\n\nconst allocatePort = (): Effect.Effect<number, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      return await new Promise<number>((resolvePort, reject) => {\n        const server = createServer();\n        server.once(\"error\", reject);\n        server.listen(0, \"127.0.0.1\", () => {\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            server.close(() => reject(new Error(\"Failed to allocate test port\")));\n            return;\n          }\n\n          server.close((error) => {\n            if (error) {\n              reject(error);\n              return;\n            }\n\n            resolvePort(address.port);\n          });\n        });\n      });\n    },\n    catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nconst buildPackage = (packageDir: string) =>\n  Effect.tryPromise({\n    try: () => buildDistributionPackage({\n      outputDir: packageDir,\n      buildWeb: false,\n    }),\n    catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nconst packPackage = (packageDir: string, outputDir: string) =>\n  runCommand({\n    command: \"npm\",\n    args: [\"pack\", packageDir],\n    cwd: outputDir,\n  }).pipe(\n    Effect.flatMap((result) => {\n      const tarballName = result.stdout\n        .split(/\\s+/)\n        .map((part) => part.trim())\n        .filter((part) => part.length > 0)\n        .at(-1);\n\n      if (!tarballName) {\n        return Effect.fail(\n          executorAppEffectError(\"distribution/harness\", `Unable to determine tarball name from npm pack output: ${result.stdout}`),\n        );\n      }\n\n      return Effect.succeed(join(outputDir, tarballName));\n    }),\n  );\n\nexport const LocalDistributionHarnessLive = Layer.scoped(\n  DistributionHarness,\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const tempRoot = yield* Effect.acquireRelease(\n      fs.makeTempDirectory({\n        directory: tmpdir(),\n        prefix: \"executor-distribution-\",\n      }).pipe(Effect.mapError(toError)),\n      (path) =>\n        fs.remove(path, { recursive: true, force: true }).pipe(\n          Effect.mapError(toError),\n          Effect.orDie,\n        ),\n    );\n\n    const packageDir = join(tempRoot, \"package\");\n    const prefixDir = join(tempRoot, \"prefix\");\n    const homeDir = join(tempRoot, \"home\");\n    const executorHome = join(homeDir, \".executor\");\n    const stagedWorkspaceRoot = packageDir;\n    const installedWorkspaceRoot = tempRoot;\n    const baseUrl = `http://127.0.0.1:${yield* allocatePort()}`;\n\n    yield* Effect.all([\n      fs.makeDirectory(prefixDir, { recursive: true }),\n      fs.makeDirectory(homeDir, { recursive: true }),\n      fs.makeDirectory(executorHome, { recursive: true }),\n    ]).pipe(Effect.mapError(toError));\n\n    const artifact = yield* buildPackage(packageDir);\n    const tarballPath = yield* packPackage(packageDir, tempRoot);\n\n\n    const env = {\n      ...process.env,\n      HOME: homeDir,\n      EXECUTOR_HOME: executorHome,\n    } satisfies NodeJS.ProcessEnv;\n\n    const installedEnv = {\n      ...env,\n      NPM_CONFIG_PREFIX: prefixDir,\n      PATH: `${join(prefixDir, \"bin\")}:${process.env.PATH ?? \"\"}`,\n    } satisfies NodeJS.ProcessEnv;\n\n    yield* runCommand({\n      command: \"npm\",\n      args: [\"install\", \"-g\", tarballPath],\n      cwd: tempRoot,\n      env: installedEnv,\n    });\n\n    const run = (\n      args: ReadonlyArray<string>,\n      options?: { readonly okExitCodes?: ReadonlyArray<number> },\n    ) =>\n      runCommand({\n        command: \"node\",\n        args: [artifact.launcherPath, ...args],\n        cwd: dirname(artifact.launcherPath),\n        env,\n        okExitCodes: options?.okExitCodes,\n      });\n\n    const runInstalled = (\n      args: ReadonlyArray<string>,\n      options?: { readonly okExitCodes?: ReadonlyArray<number> },\n    ) =>\n      runCommand({\n        command: \"executor\",\n        args,\n        cwd: tempRoot,\n        env: installedEnv,\n        okExitCodes: options?.okExitCodes,\n      });\n\n    const fetchText = (pathname: string) =>\n      Effect.tryPromise({\n        try: async () => {\n          const response = await fetch(new URL(pathname, baseUrl));\n          return {\n            status: response.status,\n            body: await response.text(),\n            contentType: response.headers.get(\"content-type\"),\n          };\n        },\n        catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n      });\n\n    const writeProjectConfig = (contents: string) =>\n      Effect.forEach(\n        [stagedWorkspaceRoot, installedWorkspaceRoot],\n        (workspaceRoot) =>\n          Effect.gen(function* () {\n            const configDir = join(workspaceRoot, \".executor\");\n            yield* fs.makeDirectory(configDir, { recursive: true }).pipe(\n              Effect.mapError(toError),\n            );\n            yield* fs.writeFileString(\n              join(configDir, \"executor.jsonc\"),\n              contents,\n            ).pipe(Effect.mapError(toError));\n          }),\n        { discard: true },\n      );\n\n    return DistributionHarness.of({\n      packageDir,\n      launcherPath: artifact.launcherPath,\n      tarballPath,\n      executorHome,\n      baseUrl,\n      writeProjectConfig,\n      run,\n      runInstalled,\n      fetchText,\n    });\n  }).pipe(Effect.provide(NodeFileSystem.layer)),\n);\n"
  },
  {
    "path": "apps/executor/src/distribution/metadata.ts",
    "content": "import { readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), \"../../../..\");\nconst packageMetadataPath = resolve(repoRoot, \"apps/executor/package.json\");\n\nexport type DistributionPackageMetadata = {\n  name: string;\n  version: string;\n  description: string;\n  keywords: ReadonlyArray<string>;\n  homepage?: string;\n  bugs?: {\n    url?: string;\n  };\n  repository?: {\n    type?: string;\n    url?: string;\n  };\n  license?: string;\n};\n\nexport const readDistributionPackageMetadata = async (): Promise<DistributionPackageMetadata> => {\n  const contents = await readFile(packageMetadataPath, \"utf8\");\n  const metadata = JSON.parse(contents) as Partial<DistributionPackageMetadata>;\n\n  return {\n    name: metadata.name ?? \"executor\",\n    version: metadata.version ?? \"0.0.0-local\",\n    description: metadata.description ?? \"Local AI executor with a CLI, local API server, and web UI.\",\n    keywords: Array.isArray(metadata.keywords) ? metadata.keywords.filter((value): value is string => typeof value === \"string\") : [\"executor\", \"ai\", \"agent\", \"cli\"],\n    homepage: metadata.homepage,\n    bugs: metadata.bugs,\n    repository: metadata.repository,\n    license: metadata.license ?? \"MIT\",\n  };\n};\n"
  },
  {
    "path": "apps/executor/src/distribution/publish.ts",
    "content": "import { spawn } from \"node:child_process\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\n\nimport { buildDistributionPackage } from \"./artifact\";\nimport { readDistributionPackageMetadata, repoRoot } from \"./metadata\";\n\nconst defaultReleaseDir = resolve(repoRoot, \"apps/executor/dist/release\");\nconst semverPattern =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/;\n\ntype PublishCliOptions = {\n  dryRun: boolean;\n};\n\ntype CommandInput = {\n  command: string;\n  args: ReadonlyArray<string>;\n  cwd: string;\n};\n\ntype CommandOutput = {\n  stdout: string;\n  stderr: string;\n};\n\ntype PackResult = {\n  filename?: string;\n};\n\nconst parseArgs = (argv: ReadonlyArray<string>): PublishCliOptions => {\n  const options: PublishCliOptions = {\n    dryRun: false,\n  };\n\n  for (const arg of argv) {\n    if (arg === \"--dry-run\") {\n      options.dryRun = true;\n      continue;\n    }\n\n    throw new Error(`Unknown argument: ${arg}`);\n  }\n\n  return options;\n};\n\nconst runCommand = async (input: CommandInput): Promise<CommandOutput> => {\n  const child = spawn(input.command, [...input.args], {\n    cwd: input.cwd,\n    env: process.env,\n    stdio: [\"ignore\", \"pipe\", \"pipe\"],\n  });\n\n  let stdout = \"\";\n  let stderr = \"\";\n\n  child.stdout?.setEncoding(\"utf8\");\n  child.stdout?.on(\"data\", (chunk) => {\n    stdout += chunk;\n  });\n\n  child.stderr?.setEncoding(\"utf8\");\n  child.stderr?.on(\"data\", (chunk) => {\n    stderr += chunk;\n  });\n\n  const exitCode = await new Promise<number>((resolveExitCode, reject) => {\n    child.once(\"error\", reject);\n    child.once(\"close\", (code) => {\n      resolveExitCode(code ?? -1);\n    });\n  });\n\n  if (exitCode !== 0) {\n    throw new Error(\n      [\n        `${input.command} ${input.args.join(\" \")} exited with code ${exitCode}`,\n        stdout.trim().length > 0 ? `stdout:\\n${stdout.trim()}` : null,\n        stderr.trim().length > 0 ? `stderr:\\n${stderr.trim()}` : null,\n      ]\n        .filter((part) => part !== null)\n        .join(\"\\n\\n\"),\n    );\n  }\n\n  return {\n    stdout: stdout.trim(),\n    stderr: stderr.trim(),\n  };\n};\n\nconst resolveTagFromEnvironment = (): string | undefined => {\n  const refName = process.env.GITHUB_REF_NAME?.trim();\n  if (process.env.GITHUB_REF_TYPE === \"tag\" && refName) {\n    return refName;\n  }\n\n  const ref = process.env.GITHUB_REF?.trim();\n  if (ref?.startsWith(\"refs/tags/\")) {\n    return ref.slice(\"refs/tags/\".length);\n  }\n\n  return undefined;\n};\n\nconst resolveGitHubRepository = (): string => {\n  const repository = process.env.GH_REPO?.trim() || process.env.GITHUB_REPOSITORY?.trim();\n  if (!repository) {\n    throw new Error(\"Set GH_REPO or GITHUB_REPOSITORY before creating a GitHub release.\");\n  }\n\n  return repository;\n};\n\nconst validateVersion = (version: string): void => {\n  if (!semverPattern.test(version)) {\n    throw new Error(`apps/executor/package.json version is not valid semver: ${version}`);\n  }\n};\n\nconst resolveChannel = (version: string): \"latest\" | \"beta\" =>\n  version.includes(\"-\") ? \"beta\" : \"latest\";\n\nconst packDistributionPackage = async (releaseDir: string): Promise<string> => {\n  const output = await runCommand({\n    command: \"npm\",\n    args: [\"pack\", \"./apps/executor/dist/npm\", \"--pack-destination\", releaseDir, \"--json\"],\n    cwd: repoRoot,\n  });\n  const [result] = JSON.parse(output.stdout) as ReadonlyArray<PackResult>;\n  const filename = result?.filename;\n\n  if (!filename) {\n    throw new Error(`npm pack did not report an output filename. stdout:\\n${output.stdout}`);\n  }\n\n  return join(releaseDir, filename);\n};\n\nconst publishDistributionPackage = async (channel: \"latest\" | \"beta\"): Promise<void> => {\n  const args = [\"publish\", \"./dist/npm\", \"--access\", \"public\", \"--tag\", channel];\n  if (process.env.GITHUB_ACTIONS === \"true\") {\n    args.push(\"--provenance\");\n  }\n\n  await runCommand({\n    command: \"npm\",\n    args,\n    cwd: resolve(repoRoot, \"apps/executor\"),\n  });\n};\n\nconst createGitHubRelease = async (input: {\n  tag: string;\n  channel: \"latest\" | \"beta\";\n  assetPath: string;\n}): Promise<void> => {\n  if (!process.env.GH_TOKEN?.trim()) {\n    throw new Error(\"GH_TOKEN is required to create a GitHub release.\");\n  }\n\n  const args = [\n    \"release\",\n    \"create\",\n    input.tag,\n    input.assetPath,\n    \"--repo\",\n    resolveGitHubRepository(),\n    \"--title\",\n    input.tag,\n    \"--generate-notes\",\n    \"--verify-tag\",\n  ];\n\n  if (input.channel === \"beta\") {\n    args.push(\"--prerelease\");\n  } else {\n    args.push(\"--latest\");\n  }\n\n  await runCommand({\n    command: \"gh\",\n    args,\n    cwd: repoRoot,\n  });\n};\n\nconst main = async () => {\n  const options = parseArgs(process.argv.slice(2));\n  const metadata = await readDistributionPackageMetadata();\n  const version = metadata.version;\n  const tag = `v${version}`;\n  const refTag = resolveTagFromEnvironment();\n\n  validateVersion(version);\n\n  if (refTag && refTag !== tag) {\n    throw new Error(`GitHub tag ${refTag} does not match apps/executor/package.json version ${version}`);\n  }\n\n  const channel = resolveChannel(version);\n  await rm(defaultReleaseDir, { recursive: true, force: true });\n  await mkdir(defaultReleaseDir, { recursive: true });\n\n  await buildDistributionPackage();\n  const archivePath = await packDistributionPackage(defaultReleaseDir);\n\n  process.stdout.write(`Prepared executor@${version} for ${channel}\\n`);\n  process.stdout.write(`${archivePath}\\n`);\n\n  if (options.dryRun) {\n    return;\n  }\n\n  await publishDistributionPackage(channel);\n  await createGitHubRelease({\n    tag,\n    channel,\n    assetPath: archivePath,\n  });\n};\n\nawait main();\n"
  },
  {
    "path": "apps/executor/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class ExecutorAppEffectError extends Data.TaggedError(\n  \"ExecutorAppEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const executorAppEffectError = (\n  module: string,\n  message: string,\n) => new ExecutorAppEffectError({ module, message });\n\nexport class LocalServerReachabilityTimeoutError extends Data.TaggedError(\n  \"LocalServerReachabilityTimeoutError\",\n)<{\n  readonly baseUrl: string;\n  readonly action: \"start\" | \"shutdown\";\n  readonly logFile: string;\n  readonly logTail: string | null;\n  readonly message: string;\n}> {}\n\nexport const localServerReachabilityTimeoutError = (input: {\n  baseUrl: string;\n  expected: boolean;\n  logFile: string;\n  logTail: string | null;\n}) =>\n  new LocalServerReachabilityTimeoutError({\n    baseUrl: input.baseUrl,\n    action: input.expected ? \"start\" : \"shutdown\",\n    logFile: input.logFile,\n    logTail: input.logTail,\n    message:\n      input.logTail === null\n        ? `Timed out waiting for local executor server ${input.expected ? \"start\" : \"shutdown\"} at ${input.baseUrl}\\n\\nDaemon log: ${input.logFile}`\n        : `Timed out waiting for local executor server ${input.expected ? \"start\" : \"shutdown\"} at ${input.baseUrl}\\n\\nRecent daemon log (${input.logFile}):\\n${input.logTail}`,\n  });\n"
  },
  {
    "path": "apps/executor/src/server/server.real-ingestion.test.ts",
    "content": "import { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  createControlPlaneClient,\n  type SourceDiscoveryKind,\n} from \"@executor/control-plane\";\nimport { createLocalExecutorServer } from \"@executor/server\";\n\nconst REAL_VERCEL_SPEC_URL = \"https://openapi.vercel.sh\";\nconst REAL_VERCEL_API_ENDPOINT = \"https://api.vercel.com\";\nconst REAL_LINEAR_GRAPHQL_ENDPOINT = \"https://api.linear.app/graphql\";\nconst REAL_DEEPWIKI_MCP_ENDPOINT = \"https://mcp.deepwiki.com/mcp\";\n\nconst makeTempWorkspaceRoot = () =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) => fs.makeTempDirectory({ prefix: \"executor-real-ingestion-\" })),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst createIsolatedLocalExecutorServer = () =>\n  Effect.gen(function* () {\n    const workspaceRoot = yield* makeTempWorkspaceRoot();\n    return yield* createLocalExecutorServer({\n      port: 0,\n      localDataDir: \":memory:\",\n      workspaceRoot,\n    });\n  });\n\nconst createApiClientHarness = () =>\n  Effect.gen(function* () {\n    const server = yield* createIsolatedLocalExecutorServer();\n    const bootstrapClient = yield* createControlPlaneClient({\n      baseUrl: server.baseUrl,\n    });\n    const installation = yield* bootstrapClient.local.installation({});\n    const client = yield* createControlPlaneClient({\n      baseUrl: server.baseUrl,\n      accountId: installation.accountId,\n    });\n\n    return {\n      installation,\n      client,\n    };\n  });\n\nconst canonicalUrl = (value: string): string =>\n  new URL(value).toString();\n\nconst expectDiscoveredKind = <T extends { detectedKind: SourceDiscoveryKind }>(\n  result: T,\n  expectedKind: SourceDiscoveryKind,\n) => {\n  expect(result.detectedKind).toBe(expectedKind);\n};\n\ndescribe(\"local-executor-server real ingestion\", () => {\n  it.live(\"discovers and ingests the real Vercel OpenAPI source through the API client\", () =>\n    Effect.scoped(Effect.gen(function* () {\n      const { installation, client } = yield* createApiClientHarness();\n\n      const discovered = yield* client.sources.discover({\n        payload: {\n          url: REAL_VERCEL_SPEC_URL,\n        },\n      });\n\n      expectDiscoveredKind(discovered, \"openapi\");\n      expect(canonicalUrl(discovered.endpoint)).toBe(canonicalUrl(REAL_VERCEL_API_ENDPOINT));\n      expect(canonicalUrl(discovered.specUrl ?? \"\")).toBe(canonicalUrl(REAL_VERCEL_SPEC_URL));\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"openapi\",\n          name: \"Vercel\",\n          namespace: \"vercel\",\n          endpoint: REAL_VERCEL_API_ENDPOINT,\n          specUrl: REAL_VERCEL_SPEC_URL,\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      expect(connected.kind).toBe(\"connected\");\n      if (connected.kind !== \"connected\") {\n        throw new Error(`Expected connected result, received ${connected.kind}`);\n      }\n\n      const inspection = yield* client.sources.inspection({\n        path: {\n          workspaceId: installation.workspaceId,\n          sourceId: connected.source.id,\n        },\n      });\n\n      expect(inspection.namespace).toBe(\"vercel\");\n      expect(inspection.toolCount).toBeGreaterThan(250);\n\n      const discoveredTools = yield* client.sources.inspectionDiscover({\n        path: {\n          workspaceId: installation.workspaceId,\n          sourceId: connected.source.id,\n        },\n        payload: {\n          query: \"list user events\",\n          limit: 5,\n        },\n      });\n\n      expect(discoveredTools.bestPath).toBeTruthy();\n      expect(discoveredTools.total).toBeGreaterThan(0);\n    })),\n    15_000,\n  );\n\n  it.live(\"discovers and ingests the real Linear GraphQL source through the API client\", () =>\n    Effect.scoped(Effect.gen(function* () {\n      const { installation, client } = yield* createApiClientHarness();\n\n      const discovered = yield* client.sources.discover({\n        payload: {\n          url: REAL_LINEAR_GRAPHQL_ENDPOINT,\n        },\n      });\n\n      expectDiscoveredKind(discovered, \"graphql\");\n      expect(canonicalUrl(discovered.endpoint)).toBe(canonicalUrl(REAL_LINEAR_GRAPHQL_ENDPOINT));\n      expect(discovered.specUrl).toBeNull();\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"graphql\",\n          name: \"Linear\",\n          namespace: \"linear\",\n          endpoint: REAL_LINEAR_GRAPHQL_ENDPOINT,\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      expect(connected.kind).toBe(\"connected\");\n      if (connected.kind !== \"connected\") {\n        throw new Error(`Expected connected result, received ${connected.kind}`);\n      }\n      expect(connected.source.status).toBe(\"connected\");\n      expect(connected.source.namespace).toBe(\"linear\");\n\n      const storedSource = yield* client.sources.get({\n        path: {\n          workspaceId: installation.workspaceId,\n          sourceId: connected.source.id,\n        },\n      });\n\n      expect(storedSource.kind).toBe(\"graphql\");\n      expect(storedSource.status).toBe(\"connected\");\n      expect(storedSource.endpoint).toBe(REAL_LINEAR_GRAPHQL_ENDPOINT);\n    })),\n    15_000,\n  );\n\n  it.live(\"discovers and ingests a real public MCP source through the API client\", () =>\n    Effect.scoped(Effect.gen(function* () {\n      const { installation, client } = yield* createApiClientHarness();\n\n      const discovered = yield* client.sources.discover({\n        payload: {\n          url: REAL_DEEPWIKI_MCP_ENDPOINT,\n        },\n      });\n\n      expectDiscoveredKind(discovered, \"mcp\");\n      expect(canonicalUrl(discovered.endpoint)).toBe(canonicalUrl(REAL_DEEPWIKI_MCP_ENDPOINT));\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"mcp\",\n          name: \"DeepWiki\",\n          namespace: \"deepwiki\",\n          endpoint: REAL_DEEPWIKI_MCP_ENDPOINT,\n        },\n      });\n\n      expect(connected.kind).toBe(\"connected\");\n      if (connected.kind !== \"connected\") {\n        throw new Error(`Expected connected result, received ${connected.kind}`);\n      }\n\n      const inspection = yield* client.sources.inspection({\n        path: {\n          workspaceId: installation.workspaceId,\n          sourceId: connected.source.id,\n        },\n      });\n\n      expect(inspection.namespace).toBe(\"deepwiki\");\n      expect(inspection.toolCount).toBeGreaterThan(0);\n\n      const discoveredTools = yield* client.sources.inspectionDiscover({\n        path: {\n          workspaceId: installation.workspaceId,\n          sourceId: connected.source.id,\n        },\n        payload: {\n          query: \"repository\",\n          limit: 5,\n        },\n      });\n\n      expect(discoveredTools.bestPath).toBeTruthy();\n      expect(discoveredTools.total).toBeGreaterThan(0);\n    })),\n    15_000,\n  );\n});\n"
  },
  {
    "path": "apps/executor/src/server/server.test.ts",
    "content": "import { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport { randomUUID } from \"node:crypto\";\n\nimport {\n  HttpApi,\n  HttpApiEndpoint,\n  HttpApiGroup,\n  HttpApiSchema,\n  OpenApi,\n  FileSystem,\n} from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { assertTrue } from \"@effect/vitest/utils\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { startMcpElicitationDemoServer } from \"@executor/mcp-elicitation-demo\";\nimport { makeToolInvokerFromTools, toTool } from \"@executor/codemode-core\";\nimport {\n  createControlPlaneClient,\n  controlPlaneOpenApiSpec,\n  buildLocalSourceArtifact,\n  catalogSyncResultFromMcpManifest,\n  deriveLocalInstallation,\n  type ResolveExecutionEnvironment,\n  resolveLocalWorkspaceContext,\n  SourceIdSchema,\n  writeLocalSourceArtifact,\n  writeProjectLocalExecutorConfig,\n} from \"@executor/control-plane\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { ElicitRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\n\nimport {\n  seedDemoMcpSourceInWorkspace,\n  seedGithubOpenApiSourceInWorkspace,\n} from \"../cli/dev\";\nimport { createLocalExecutorServer } from \"@executor/server\";\n\nconst executionResolver: ResolveExecutionEnvironment = () =>\n  Effect.succeed({\n    executor: makeSesExecutor(),\n    toolInvoker: makeToolInvokerFromTools({\n      tools: {\n        \"math.add\": {\n          description: \"Add two numbers\",\n          inputSchema: Schema.standardSchemaV1(\n            Schema.Struct({\n              a: Schema.optional(Schema.Number),\n              b: Schema.optional(Schema.Number),\n            }),\n          ),\n          execute: ({ a, b }) => ({ sum: (a ?? 0) + (b ?? 0) }),\n        },\n      },\n    }),\n  });\n\nconst makeTempWorkspaceRoot = () =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) => fs.makeTempDirectoryScoped({ prefix: \"executor-server-test-\" })),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst createIsolatedLocalExecutorServer = (\n  options: Parameters<typeof createLocalExecutorServer>[0] = {},\n) =>\n  Effect.gen(function* () {\n    const workspaceRoot = yield* makeTempWorkspaceRoot();\n    const server = yield* createLocalExecutorServer({\n      ...options,\n      workspaceRoot,\n    });\n    return {\n      ...server,\n      workspaceRoot,\n    };\n  });\n\nconst writeConfiguredLocalMcpSource = (input: {\n  workspaceRoot: string;\n  sourceId: string;\n  endpoint: string;\n  name?: string;\n  namespace?: string;\n}) =>\n  Effect.gen(function* () {\n    const sourceId = SourceIdSchema.make(input.sourceId);\n    const context = yield* resolveLocalWorkspaceContext({\n      workspaceRoot: input.workspaceRoot,\n    });\n    const installation = deriveLocalInstallation(context);\n\n    yield* writeProjectLocalExecutorConfig({\n      context,\n      config: {\n        sources: {\n          [input.sourceId]: {\n            kind: \"mcp\",\n            name: input.name ?? \"Demo\",\n            namespace: input.namespace ?? input.sourceId,\n            connection: {\n              endpoint: input.endpoint,\n            },\n            binding: {\n              transport: \"streamable-http\",\n            },\n          },\n        },\n      },\n    });\n\n    const source = {\n      id: sourceId,\n      workspaceId: installation.workspaceId,\n      name: input.name ?? \"Demo\",\n      kind: \"mcp\" as const,\n      endpoint: input.endpoint,\n      status: \"connected\" as const,\n      enabled: true,\n      namespace: input.namespace ?? input.sourceId,\n      bindingVersion: 1,\n      binding: {\n        transport: \"streamable-http\",\n        queryParams: null,\n        headers: null,\n      },\n      importAuthPolicy: \"reuse_runtime\" as const,\n      importAuth: { kind: \"none\" as const },\n      auth: { kind: \"none\" as const },\n      sourceHash: null,\n      lastError: null,\n      createdAt: Date.now(),\n      updatedAt: Date.now(),\n    };\n\n    const syncResult = catalogSyncResultFromMcpManifest({\n      source,\n      endpoint: input.endpoint,\n      manifest: {\n        version: 2,\n        server: null,\n        tools: [{\n          toolId: \"gated_echo\",\n          toolName: \"gated_echo\",\n          description: \"Asks for approval before echoing a value\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              value: {\n                type: \"string\",\n              },\n            },\n            required: [\"value\"],\n            additionalProperties: false,\n          },\n        }],\n      },\n    });\n\n    yield* writeLocalSourceArtifact({\n      context,\n      sourceId,\n      artifact: buildLocalSourceArtifact({\n        source,\n        syncResult,\n      }),\n    });\n  }).pipe(Effect.provide(NodeFileSystem.layer));\n\nconst makeServer = createIsolatedLocalExecutorServer({\n  port: 0,\n  localDataDir: \":memory:\",\n  executionResolver,\n});\n\nconst createApiClientHarness = () =>\n  Effect.gen(function* () {\n    const server = yield* createIsolatedLocalExecutorServer({\n      port: 0,\n      localDataDir: \":memory:\",\n    });\n    const bootstrapClient = yield* createControlPlaneClient({\n      baseUrl: server.baseUrl,\n    });\n    const installation = yield* bootstrapClient.local.installation({});\n    const client = yield* createControlPlaneClient({\n      baseUrl: server.baseUrl,\n      accountId: installation.accountId,\n    });\n\n    return {\n      server,\n      bootstrapClient,\n      installation,\n      client,\n    };\n  });\n\nconst gatedExecutionResolver: ResolveExecutionEnvironment = ({ onElicitation }) =>\n  Effect.succeed({\n    executor: makeSesExecutor(),\n    toolInvoker: makeToolInvokerFromTools({\n      tools: {\n        \"demo.gated_echo\": toTool({\n          tool: {\n            description: \"Asks for approval before echoing a value\",\n            inputSchema: Schema.standardSchemaV1(\n              Schema.Struct({\n                value: Schema.String,\n                approve: Schema.optional(Schema.Boolean),\n              }),\n            ),\n            execute: ({ value, approve }: { value: string; approve?: boolean }) =>\n              approve === true ? `approved:${value}` : `denied:${value}`,\n          },\n          metadata: {\n            sourceKey: \"demo\",\n            elicitation: {\n              mode: \"form\",\n              message: \"Approve gated echo?\",\n              requestedSchema: {\n                type: \"object\",\n                properties: {\n                  approve: {\n                    type: \"boolean\",\n                    title: \"Approve\",\n                  },\n                },\n                required: [\"approve\"],\n              },\n            },\n          },\n        }),\n      },\n      onElicitation,\n    }),\n  });\n\ntype ExecutorMcpClient = {\n  client: Client;\n  close: () => Promise<void>;\n};\n\ntype ElicitationHandler = NonNullable<Parameters<Client[\"setRequestHandler\"]>[1]>;\n\nconst makeExecutorMcpClient = (input: {\n  baseUrl: string;\n  capabilities?: Record<string, unknown>;\n  onElicitation?: ElicitationHandler;\n}) =>\n  Effect.acquireRelease(\n    Effect.promise<ExecutorMcpClient>(async () => {\n      const client = new Client(\n        { name: \"executor-mcp-test-client\", version: \"1.0.0\" },\n        { capabilities: input.capabilities ?? {} },\n      );\n      if (input.onElicitation) {\n        client.setRequestHandler(ElicitRequestSchema, input.onElicitation);\n      }\n\n      const transport = new StreamableHTTPClientTransport(new URL(`${input.baseUrl}/mcp`));\n      await client.connect(transport);\n\n      return {\n        client,\n        close: async () => {\n          await client.close();\n        },\n      };\n    }),\n    ({ close }) => Effect.promise(() => close()).pipe(Effect.orDie),\n  );\n\nconst ownerParam = HttpApiSchema.param(\"owner\", Schema.String);\nconst repoParam = HttpApiSchema.param(\"repo\", Schema.String);\n\nclass ExecutorDemoReposApi extends HttpApiGroup.make(\"repos\")\n  .add(\n    HttpApiEndpoint.get(\"getRepo\")`/repos/${ownerParam}/${repoParam}`\n      .addSuccess(\n        Schema.Struct({\n          full_name: Schema.String,\n          private: Schema.Boolean,\n        }),\n      ),\n  )\n{}\n\nclass ExecutorDemoApi extends HttpApi.make(\"executorDemo\").add(ExecutorDemoReposApi) {}\n\nconst executorDemoOpenApiSpec = OpenApi.fromApi(ExecutorDemoApi);\n\nconst startOpenApiDemoServer = async () => {\n  const seenAuthHeaders: Array<string | null> = [];\n\n  const handler = (req: IncomingMessage, res: ServerResponse) => {\n    if (req.url === \"/openapi.json\") {\n      res.statusCode = 200;\n      res.setHeader(\"content-type\", \"application/json\");\n      res.end(JSON.stringify(executorDemoOpenApiSpec));\n      return;\n    }\n\n    const match = req.url?.match(/^\\/repos\\/([^/]+)\\/([^/]+)$/);\n    if (req.method === \"GET\" && match) {\n      seenAuthHeaders.push(\n        typeof req.headers.authorization === \"string\" ? req.headers.authorization : null,\n      );\n      res.statusCode = 200;\n      res.setHeader(\"content-type\", \"application/json\");\n      res.end(\n        JSON.stringify({\n          full_name: `${decodeURIComponent(match[1] ?? \"\")}/${decodeURIComponent(match[2] ?? \"\")}`,\n          private: false,\n        }),\n      );\n      return;\n    }\n\n    res.statusCode = 404;\n    res.end(\"not found\");\n  };\n\n  const server = createServer(handler);\n  await new Promise<void>((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(0, \"127.0.0.1\", () => resolve());\n  });\n  const address = server.address();\n  if (!address || typeof address === \"string\") {\n    throw new Error(\"Failed to bind OpenAPI demo server\");\n  }\n\n  return {\n    baseUrl: `http://127.0.0.1:${address.port}`,\n    specUrl: `http://127.0.0.1:${address.port}/openapi.json`,\n    seenAuthHeaders,\n    close: () =>\n      new Promise<void>((resolve, reject) => {\n        server.close((error) => (error ? reject(error) : resolve()));\n      }),\n  };\n};\n\nconst startMutatingOpenApiDemoServer = async () => {\n  const createdBodies: Array<Record<string, unknown>> = [];\n  const openApiDocument = JSON.stringify({\n    openapi: \"3.0.3\",\n    info: {\n      title: \"Executor DNS Demo API\",\n      version: \"1.0.0\",\n    },\n    paths: {\n      \"/records\": {\n        post: {\n          operationId: \"records.createRecord\",\n          tags: [\"records\"],\n          summary: \"Create a DNS record\",\n          requestBody: {\n            required: true,\n            content: {\n              \"application/json\": {\n                schema: {\n                  type: \"object\",\n                  properties: {\n                    type: { type: \"string\" },\n                    name: { type: \"string\" },\n                    value: { type: \"string\" },\n                  },\n                  required: [\"type\", \"value\"],\n                },\n              },\n            },\n          },\n          responses: {\n            200: {\n              description: \"ok\",\n            },\n          },\n        },\n      },\n    },\n  });\n\n  const handler = (req: IncomingMessage, res: ServerResponse) => {\n    if (req.url === \"/openapi.json\") {\n      res.statusCode = 200;\n      res.setHeader(\"content-type\", \"application/json\");\n      res.end(openApiDocument);\n      return;\n    }\n\n    if (req.method === \"POST\" && req.url === \"/records\") {\n      const chunks: Array<Buffer> = [];\n      req.on(\"data\", (chunk) => {\n        chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n      });\n      req.on(\"end\", () => {\n        const raw = Buffer.concat(chunks).toString(\"utf8\");\n        const parsed = JSON.parse(raw) as Record<string, unknown>;\n        createdBodies.push(parsed);\n        res.statusCode = 200;\n        res.setHeader(\"content-type\", \"application/json\");\n        res.end(JSON.stringify({\n          ok: true,\n          id: `rec_${createdBodies.length}`,\n          record: parsed,\n        }));\n      });\n      return;\n    }\n\n    res.statusCode = 404;\n    res.end(\"not found\");\n  };\n\n  const server = createServer(handler);\n  await new Promise<void>((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(0, \"127.0.0.1\", () => resolve());\n  });\n  const address = server.address();\n  if (!address || typeof address === \"string\") {\n    throw new Error(\"Failed to bind mutating OpenAPI demo server\");\n  }\n\n  return {\n    baseUrl: `http://127.0.0.1:${address.port}`,\n    specUrl: `http://127.0.0.1:${address.port}/openapi.json`,\n    createdBodies,\n    close: () =>\n      new Promise<void>((resolve, reject) => {\n        server.close((error) => (error ? reject(error) : resolve()));\n      }),\n  };\n};\n\nconst DEMO_OAUTH_ACCESS_TOKEN = \"demo-access-token\";\nconst DEMO_OAUTH_REFRESH_TOKEN = \"demo-refresh-token\";\n\nconst startOAuthProtectedMcpServer = async () => {\n  const host = \"127.0.0.1\";\n  const app = createMcpExpressApp({ host });\n  const transports: Record<string, StreamableHTTPServerTransport> = {};\n  const servers: Record<string, McpServer> = {};\n\n  const createAuthorizedServer = () => {\n    const server = new McpServer(\n      {\n        name: \"executor-oauth-mcp-demo\",\n        version: \"1.0.0\",\n      },\n      {\n        capabilities: {\n          tools: {},\n        },\n      },\n    );\n\n    server.registerTool(\n      \"whoami\",\n      {\n        description: \"Return the active identity for the OAuth demo source.\",\n        inputSchema: {},\n      },\n      async () => ({\n        content: [{ type: \"text\", text: \"oauth-demo\" }],\n      }),\n    );\n\n    return server;\n  };\n\n  const listener = await new Promise<import(\"node:http\").Server>((resolve, reject) => {\n    const server = app.listen(0, host);\n\n    const onListening = () => {\n      server.off(\"error\", onError);\n      resolve(server);\n    };\n\n    const onError = (error: Error) => {\n      server.off(\"listening\", onListening);\n      reject(error);\n    };\n\n    server.once(\"listening\", onListening);\n    server.once(\"error\", onError);\n  });\n\n  const address = listener.address();\n  if (!address || typeof address === \"string\") {\n    throw new Error(\"Failed to bind OAuth MCP demo server\");\n  }\n\n  const baseUrl = `http://${host}:${address.port}`;\n  const endpoint = `${baseUrl}/mcp`;\n  const resourceMetadataUrl = `${baseUrl}/.well-known/oauth-protected-resource/mcp`;\n\n  const requireBearerAuth = (req: IncomingMessage, res: ServerResponse) => {\n    const authorization = req.headers.authorization;\n    if (authorization === `Bearer ${DEMO_OAUTH_ACCESS_TOKEN}`) {\n      return true;\n    }\n\n    res.statusCode = 401;\n    res.setHeader(\n      \"WWW-Authenticate\",\n      `Bearer resource_metadata=\"${resourceMetadataUrl}\"`,\n    );\n    res.setHeader(\"content-type\", \"application/json\");\n    res.end(\n      JSON.stringify({\n        error: \"unauthorized\",\n      }),\n    );\n    return false;\n  };\n\n  app.get(\"/.well-known/oauth-protected-resource/mcp\", (_req: any, res: any) => {\n    res.status(200).json({\n      resource: endpoint,\n      authorization_servers: [baseUrl],\n      scopes_supported: [\"openid\", \"offline_access\"],\n      bearer_methods_supported: [\"header\"],\n    });\n  });\n\n  app.get(\"/.well-known/oauth-authorization-server\", (_req: any, res: any) => {\n    res.status(200).json({\n      issuer: baseUrl,\n      authorization_endpoint: `${baseUrl}/authorize`,\n      token_endpoint: `${baseUrl}/token`,\n      registration_endpoint: `${baseUrl}/register`,\n      response_types_supported: [\"code\"],\n      grant_types_supported: [\"authorization_code\", \"refresh_token\"],\n      code_challenge_methods_supported: [\"S256\"],\n      token_endpoint_auth_methods_supported: [\"none\"],\n    });\n  });\n\n  app.post(\"/register\", (req: any, res: any) => {\n    res.status(201).json({\n      ...req.body,\n      client_id: `client_${randomUUID()}`,\n      client_id_issued_at: Math.floor(Date.now() / 1000),\n    });\n  });\n\n  app.get(\"/authorize\", (req: any, res: any) => {\n    const redirectUri = new URL(String(req.query.redirect_uri));\n    redirectUri.searchParams.set(\"code\", \"demo-code\");\n    if (typeof req.query.state === \"string\") {\n      redirectUri.searchParams.set(\"state\", req.query.state);\n    }\n\n    res.redirect(302, redirectUri.toString());\n  });\n\n  app.post(\"/token\", (_req: any, res: any) => {\n    res.status(200).json({\n      access_token: DEMO_OAUTH_ACCESS_TOKEN,\n      token_type: \"Bearer\",\n      expires_in: 3600,\n      refresh_token: DEMO_OAUTH_REFRESH_TOKEN,\n      scope: \"openid offline_access\",\n    });\n  });\n\n  app.post(\"/mcp\", async (req: any, res: any) => {\n    if (!requireBearerAuth(req, res)) {\n      return;\n    }\n\n    const sessionIdHeader = req.headers[\"mcp-session-id\"];\n    const sessionId =\n      typeof sessionIdHeader === \"string\"\n        ? sessionIdHeader\n        : Array.isArray(sessionIdHeader)\n          ? sessionIdHeader[0]\n          : undefined;\n\n    try {\n      let transport: StreamableHTTPServerTransport;\n\n      if (sessionId && transports[sessionId]) {\n        transport = transports[sessionId];\n      } else {\n        transport = new StreamableHTTPServerTransport({\n          sessionIdGenerator: () => randomUUID(),\n          onsessioninitialized: (newSessionId) => {\n            transports[newSessionId] = transport;\n          },\n        });\n\n        transport.onclose = () => {\n          const closedSessionId = transport.sessionId;\n          if (closedSessionId && transports[closedSessionId]) {\n            delete transports[closedSessionId];\n          }\n          if (closedSessionId && servers[closedSessionId]) {\n            void servers[closedSessionId].close().catch(() => undefined);\n            delete servers[closedSessionId];\n          }\n        };\n\n        const server = createAuthorizedServer();\n        await server.connect(transport);\n        const newSessionId = transport.sessionId;\n        if (newSessionId) {\n          servers[newSessionId] = server;\n        }\n      }\n\n      await transport.handleRequest(req, res, req.body);\n    } catch (error) {\n      if (!res.headersSent) {\n        res.status(500).json({\n          jsonrpc: \"2.0\",\n          error: {\n            code: -32603,\n            message: error instanceof Error ? error.message : \"Internal server error\",\n          },\n          id: null,\n        });\n      }\n    }\n  });\n\n  app.get(\"/mcp\", async (req: any, res: any) => {\n    if (!requireBearerAuth(req, res)) {\n      return;\n    }\n\n    const sessionIdHeader = req.headers[\"mcp-session-id\"];\n    const sessionId =\n      typeof sessionIdHeader === \"string\"\n        ? sessionIdHeader\n        : Array.isArray(sessionIdHeader)\n          ? sessionIdHeader[0]\n          : undefined;\n\n    if (!sessionId || !transports[sessionId]) {\n      res.status(400).send(\"Invalid or missing session ID\");\n      return;\n    }\n\n    await transports[sessionId].handleRequest(req, res);\n  });\n\n  app.delete(\"/mcp\", async (req: any, res: any) => {\n    if (!requireBearerAuth(req, res)) {\n      return;\n    }\n\n    const sessionIdHeader = req.headers[\"mcp-session-id\"];\n    const sessionId =\n      typeof sessionIdHeader === \"string\"\n        ? sessionIdHeader\n        : Array.isArray(sessionIdHeader)\n          ? sessionIdHeader[0]\n          : undefined;\n\n    if (!sessionId || !transports[sessionId]) {\n      res.status(400).send(\"Invalid or missing session ID\");\n      return;\n    }\n\n    const transport = transports[sessionId];\n    await transport.handleRequest(req, res, req.body);\n    await transport.close();\n    delete transports[sessionId];\n\n    if (servers[sessionId]) {\n      await servers[sessionId].close().catch(() => undefined);\n      delete servers[sessionId];\n    }\n  });\n\n  return {\n    baseUrl,\n    endpoint,\n    close: async () => {\n      for (const transport of Object.values(transports)) {\n        await transport.close().catch(() => undefined);\n      }\n\n      for (const server of Object.values(servers)) {\n        await server.close().catch(() => undefined);\n      }\n\n      await new Promise<void>((resolve, reject) => {\n        listener.close((error) => (error ? reject(error) : resolve()));\n      });\n    },\n  };\n};\n\nconst extractUrlInteractionUrl = (payloadJson: string): string => {\n  const parsed = JSON.parse(payloadJson) as {\n    elicitation?: {\n      url?: string;\n    };\n  };\n\n  const url = parsed.elicitation?.url;\n  if (typeof url !== \"string\" || url.trim().length === 0) {\n    throw new Error(\"Missing URL elicitation in payloadJson\");\n  }\n\n  return url;\n};\n\ndescribe(\"local-executor-server\", () => {\n  it.scoped(\"serves the control-plane OpenAPI spec at /v1/openapi.json\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeServer;\n      const response = yield* Effect.promise(() =>\n        fetch(`${server.baseUrl}/v1/openapi.json`, {\n          headers: {\n            accept: \"application/json\",\n          },\n        }),\n      );\n      const spec = yield* Effect.promise(() => response.json());\n\n      expect(response.status).toBe(200);\n      expect(response.headers.get(\"content-type\")).toContain(\"application/json\");\n      expect(spec).toEqual(controlPlaneOpenApiSpec);\n    }),\n  );\n\n  it.scoped(\"serves the control-plane API and executes code\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeServer;\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      const execution = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: \"return await tools.math.add({ a: 20, b: 22 });\",\n        },\n      });\n\n      expect(execution.execution.status).toBe(\"completed\");\n      expect(execution.execution.resultJson).toBe(JSON.stringify({ sum: 42 }));\n    }),\n    15_000,\n  );\n\n  it.scoped(\"includes completed MCP return values in text content\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeServer;\n      const mcp = yield* makeExecutorMcpClient({\n        baseUrl: server.baseUrl,\n      });\n\n      const executed = yield* Effect.promise(\n        () =>\n          mcp.client.callTool({\n            name: \"execute\",\n            arguments: {\n              code: \"return await tools.math.add({ a: 20, b: 22 });\",\n            },\n          }) as Promise<{\n            content?: Array<{\n              type?: string;\n              text?: string;\n            }>;\n            structuredContent?: {\n              status?: string;\n              result?: unknown;\n            };\n          }>,\n      );\n\n      expect(executed.structuredContent?.status).toBe(\"completed\");\n      expect(executed.structuredContent?.result).toEqual({ sum: 42 });\n      expect(executed.content?.find((item) => item.type === \"text\")?.text).toContain(\"Result:\");\n      expect(executed.content?.find((item) => item.type === \"text\")?.text).toContain('\"sum\": 42');\n    }),\n  );\n\n  it.scoped(\"serves only execute over MCP when elicitation is supported\", () =>\n    Effect.gen(function* () {\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n        executionResolver: gatedExecutionResolver,\n      });\n      const mcp = yield* makeExecutorMcpClient({\n        baseUrl: server.baseUrl,\n        capabilities: {\n          elicitation: {\n            form: {},\n            url: {},\n          },\n        },\n        onElicitation: async () => ({\n          action: \"accept\",\n          content: {\n            approve: true,\n          },\n        }),\n      });\n\n      const listed = yield* Effect.promise(\n        () => mcp.client.listTools() as Promise<{ tools: Array<{ name: string; description?: string }> }>,\n      );\n      expect(listed.tools.map((tool) => tool.name)).toEqual([\"execute\"]);\n      expect(listed.tools[0]?.description).toContain(\"Workflow:\");\n      expect(listed.tools[0]?.description).toContain(\"tools.discover\");\n      expect(listed.tools[0]?.description).toContain(\"tools.executor.sources.add\");\n\n\n      const executed = yield* Effect.promise(\n        () =>\n          mcp.client.callTool({\n            name: \"execute\",\n            arguments: {\n              code: 'return await tools.demo.gated_echo({ value: \"from-mcp\" });',\n            },\n          }) as Promise<{\n            content?: Array<{\n              type?: string;\n              text?: string;\n            }>;\n            structuredContent?: {\n              status?: string;\n              result?: unknown;\n            };\n          }>,\n      );\n\n      expect(executed.structuredContent?.status).toBe(\"completed\");\n      expect(executed.structuredContent?.result).toBe(\"approved:from-mcp\");\n      expect(executed.content?.find((item) => item.type === \"text\")?.text).toContain(\"approved:from-mcp\");\n    }),\n  );\n\n  it.scoped(\"serves execute and resume over MCP when elicitation is unavailable\", () =>\n    Effect.gen(function* () {\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n        executionResolver: gatedExecutionResolver,\n      });\n      const mcp = yield* makeExecutorMcpClient({\n        baseUrl: server.baseUrl,\n      });\n\n      const listed = yield* Effect.promise(\n        () => mcp.client.listTools() as Promise<{ tools: Array<{ name: string; description?: string }> }>,\n      );\n      expect(listed.tools.map((tool) => tool.name).sort()).toEqual([\"execute\", \"resume\"]);\n      expect(listed.tools.find((tool) => tool.name === \"execute\")?.description).toContain(\"Workflow:\");\n      expect(listed.tools.find((tool) => tool.name === \"execute\")?.description).toContain(\"tools.discover\");\n\n\n      const executed = yield* Effect.promise(\n        () =>\n          mcp.client.callTool({\n            name: \"execute\",\n            arguments: {\n              code: 'return await tools.demo.gated_echo({ value: \"manual-mcp\" });',\n            },\n          }) as Promise<{\n            structuredContent?: {\n              status?: string;\n              interaction?: {\n                message?: string;\n              };\n              resumePayload?: {\n                executionId?: string;\n              };\n            };\n          }>,\n      );\n\n      expect(executed.structuredContent?.status).toBe(\"waiting_for_interaction\");\n      expect(executed.structuredContent?.interaction?.message).toContain(\"Approve gated echo\");\n      expect(executed.structuredContent?.resumePayload?.executionId).toBeTruthy();\n\n      const resumed = yield* Effect.promise(\n        () =>\n          mcp.client.callTool({\n            name: \"resume\",\n            arguments: {\n              resumePayload: executed.structuredContent?.resumePayload,\n              response: {\n                action: \"accept\",\n                content: {\n                  approve: true,\n                },\n              },\n            },\n          }) as Promise<{\n            content?: Array<{\n              type?: string;\n              text?: string;\n            }>;\n            structuredContent?: {\n              status?: string;\n              result?: unknown;\n            };\n          }>,\n      );\n\n      expect(resumed.structuredContent?.status).toBe(\"completed\");\n      expect(resumed.structuredContent?.result).toBe(\"approved:manual-mcp\");\n      expect(resumed.content?.find((item) => item.type === \"text\")?.text).toContain(\"approved:manual-mcp\");\n    }),\n    60_000,\n  );\n\n  it.scoped(\"loads MCP sources from control-plane state and resumes elicitation\", () =>\n    Effect.gen(function* () {\n      const demoServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startMcpElicitationDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      yield* client.sources.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          name: \"Demo\",\n          kind: \"mcp\",\n          endpoint: demoServer.endpoint,\n          status: \"connected\",\n          enabled: true,\n          namespace: \"demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      const created = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.demo.gated_echo({ value: \"from-daemon\" });',\n          interactionMode: \"live_form\",\n        },\n      });\n\n      expect(created.execution.status).toBe(\"waiting_for_interaction\");\n      expect(created.pendingInteraction).not.toBeNull();\n      if (created.pendingInteraction !== null) {\n        expect(created.pendingInteraction.kind).toBe(\"form\");\n        expect(created.pendingInteraction.payloadJson).toContain(\"Allow gated_echo?\");\n      }\n\n      const approved = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: created.execution.id,\n        },\n        payload: {\n          interactionMode: \"live_form\",\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(approved.execution.status).toBe(\"waiting_for_interaction\");\n      expect(approved.pendingInteraction).not.toBeNull();\n      if (approved.pendingInteraction !== null) {\n        expect(approved.pendingInteraction.kind).toBe(\"form\");\n        expect(approved.pendingInteraction.payloadJson).toContain(\"Approve gated echo for from-daemon?\");\n      }\n\n      const resumed = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: created.execution.id,\n        },\n        payload: {\n          interactionMode: \"live_form\",\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(resumed.execution.status).toBe(\"completed\");\n      expect(resumed.pendingInteraction).toBeNull();\n      expect(resumed.execution.resultJson).toContain(\"approved:from-daemon\");\n    }),\n  15_000,\n  );\n\n  it.scoped(\"can run the same MCP elicitation flow more than once without interaction id collisions\", () =>\n    Effect.gen(function* () {\n      const demoServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startMcpElicitationDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      yield* client.sources.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          name: \"Demo\",\n          kind: \"mcp\",\n          endpoint: demoServer.endpoint,\n          status: \"connected\",\n          enabled: true,\n          namespace: \"demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      for (const value of [\"first\", \"second\"]) {\n        const created = yield* client.executions.create({\n          path: {\n            workspaceId: installation.workspaceId,\n          },\n          payload: {\n            code: `return await tools.demo.gated_echo({ value: \"${value}\" });`,\n            interactionMode: \"live_form\",\n          },\n        });\n\n        expect(created.execution.status).toBe(\"waiting_for_interaction\");\n        expect(created.pendingInteraction).not.toBeNull();\n\n        const approved = yield* client.executions.resume({\n          path: {\n            workspaceId: installation.workspaceId,\n            executionId: created.execution.id,\n          },\n          payload: {\n            interactionMode: \"live_form\",\n            responseJson: JSON.stringify({\n              action: \"accept\",\n              content: {\n                approve: true,\n              },\n            }),\n          },\n        });\n\n        expect(approved.execution.status).toBe(\"waiting_for_interaction\");\n        expect(approved.pendingInteraction).not.toBeNull();\n        if (approved.pendingInteraction !== null) {\n          expect(approved.pendingInteraction.kind).toBe(\"form\");\n          expect(approved.pendingInteraction.payloadJson).toContain(`Approve gated echo for ${value}?`);\n        }\n\n        const resumed = yield* client.executions.resume({\n          path: {\n            workspaceId: installation.workspaceId,\n            executionId: created.execution.id,\n          },\n          payload: {\n            interactionMode: \"live_form\",\n            responseJson: JSON.stringify({\n              action: \"accept\",\n              content: {\n                approve: true,\n              },\n            }),\n          },\n        });\n\n        expect(resumed.execution.status).toBe(\"completed\");\n        expect(resumed.execution.resultJson).toContain(`approved:${value}`);\n      }\n    }),\n    15_000,\n  );\n\n  it.scoped(\"does not create a duplicate when the demo MCP source already exists\", () =>\n    Effect.gen(function* () {\n      const demoServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startMcpElicitationDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      const existing = yield* client.sources.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          name: \"Demo\",\n          kind: \"mcp\",\n          endpoint: demoServer.endpoint,\n          status: \"connected\",\n          enabled: true,\n          namespace: \"demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      const seeded = yield* seedDemoMcpSourceInWorkspace({\n        client,\n        workspaceId: installation.workspaceId,\n        endpoint: demoServer.endpoint,\n        name: \"Demo\",\n        namespace: \"demo\",\n      });\n\n      expect(seeded.action).toBe(\"noop\");\n      expect(seeded.sourceId).toBe(existing.id);\n\n      const sources = yield* client.sources.list({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n      });\n\n      expect(sources).toHaveLength(1);\n      expect(sources[0]?.endpoint).toBe(demoServer.endpoint);\n    }),\n  15_000,\n  );\n\n  it.scoped(\"loads OpenAPI sources from control-plane state and calls them\", () =>\n    Effect.gen(function* () {\n      const openApiServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startOpenApiDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n\n      const previousGithubToken = process.env.GITHUB_TOKEN;\n      const previousAllowEnvSecrets = process.env.DANGEROUSLY_ALLOW_ENV_SECRETS;\n      yield* Effect.acquireRelease(\n        Effect.sync(() => {\n          process.env.GITHUB_TOKEN = \"ghp_test_executor\";\n          process.env.DANGEROUSLY_ALLOW_ENV_SECRETS = \"true\";\n        }),\n        () =>\n          Effect.sync(() => {\n            if (previousGithubToken === undefined) {\n              delete process.env.GITHUB_TOKEN;\n            } else {\n              process.env.GITHUB_TOKEN = previousGithubToken;\n            }\n\n            if (previousAllowEnvSecrets === undefined) {\n              delete process.env.DANGEROUSLY_ALLOW_ENV_SECRETS;\n            } else {\n              process.env.DANGEROUSLY_ALLOW_ENV_SECRETS = previousAllowEnvSecrets;\n            }\n          }),\n      );\n\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      yield* seedGithubOpenApiSourceInWorkspace({\n        client,\n        workspaceId: installation.workspaceId,\n        endpoint: openApiServer.baseUrl,\n        specUrl: openApiServer.specUrl,\n        name: \"GitHub\",\n        namespace: \"github\",\n      });\n\n      const execution = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.github.repos.getRepo({ owner: \"vercel\", repo: \"ai\" });',\n        },\n      });\n\n      expect(execution.execution.status).toBe(\"completed\");\n      expect(execution.pendingInteraction).toBeNull();\n      expect(execution.execution.resultJson).toContain(\"\\\"full_name\\\":\\\"vercel/ai\\\"\");\n      expect(openApiServer.seenAuthHeaders).toEqual([\"Bearer ghp_test_executor\"]);\n    }),\n  );\n\n  it.live(\"adds an OpenAPI source through the API client and calls it end to end\", () =>\n    Effect.scoped(Effect.gen(function* () {\n      const openApiServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startOpenApiDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n      const { installation, client } = yield* createApiClientHarness();\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"openapi\",\n          name: \"GitHub\",\n          namespace: \"github\",\n          endpoint: openApiServer.baseUrl,\n          specUrl: openApiServer.specUrl,\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n\n      expect(connected.kind).toBe(\"connected\");\n      if (connected.kind !== \"connected\") {\n        throw new Error(`Expected connected result, received ${connected.kind}`);\n      }\n      expect(connected.source.status).toBe(\"connected\");\n\n      const sources = yield* client.sources.list({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n      });\n\n      expect(sources).toHaveLength(1);\n      expect(sources[0]?.namespace).toBe(\"github\");\n\n      const execution = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.github.repos.getRepo({ owner: \"vercel\", repo: \"ai\" });',\n        },\n      });\n\n      expect(execution.execution.status).toBe(\"completed\");\n      expect(execution.pendingInteraction).toBeNull();\n      expect(execution.execution.resultJson).toContain(\"\\\"full_name\\\":\\\"vercel/ai\\\"\");\n      expect(openApiServer.seenAuthHeaders).toEqual([null]);\n    })),\n    15_000,\n  );\n\n  it.live(\"adds an MCP source through the API client and calls it end to end\", () =>\n    Effect.scoped(Effect.gen(function* () {\n      const demoServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startMcpElicitationDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n      const { installation, client } = yield* createApiClientHarness();\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"mcp\",\n          endpoint: demoServer.endpoint,\n          name: \"Demo\",\n          namespace: \"demo\",\n        },\n      });\n\n      expect(connected.kind).toBe(\"connected\");\n      if (connected.kind !== \"connected\") {\n        throw new Error(`Expected connected result, received ${connected.kind}`);\n      }\n      expect(connected.source.status).toBe(\"connected\");\n\n      const execution = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.demo.gated_echo({ value: \"from-api-client\" });',\n          interactionMode: \"live_form\",\n        },\n      });\n\n      expect(execution.execution.status).toBe(\"waiting_for_interaction\");\n      expect(execution.pendingInteraction).not.toBeNull();\n      if (execution.pendingInteraction === null) {\n        throw new Error(\"Expected pending MCP interaction\");\n      }\n      expect(execution.pendingInteraction.kind).toBe(\"form\");\n      expect(execution.pendingInteraction.payloadJson).toContain(\"Allow gated_echo?\");\n\n      const approved = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: execution.execution.id,\n        },\n        payload: {\n          interactionMode: \"live_form\",\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(approved.execution.status).toBe(\"waiting_for_interaction\");\n      expect(approved.pendingInteraction).not.toBeNull();\n      if (approved.pendingInteraction === null) {\n        throw new Error(\"Expected remote MCP tool interaction\");\n      }\n      expect(approved.pendingInteraction.kind).toBe(\"form\");\n      expect(approved.pendingInteraction.payloadJson).toContain(\n        \"Approve gated echo for from-api-client?\",\n      );\n\n      const resumed = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: execution.execution.id,\n        },\n        payload: {\n          interactionMode: \"live_form\",\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(resumed.execution.status).toBe(\"completed\");\n      expect(resumed.pendingInteraction).toBeNull();\n      expect(resumed.execution.resultJson).toContain(\"approved:from-api-client\");\n    })),\n    15_000,\n  );\n\n  it.live(\"adds an OAuth-protected MCP source through the API client and resumes after callback\", () =>\n    Effect.scoped(Effect.gen(function* () {\n      const oauthServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startOAuthProtectedMcpServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n      const { installation, client } = yield* createApiClientHarness();\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"mcp\",\n          endpoint: oauthServer.endpoint,\n          name: \"Axiom\",\n          namespace: \"axiom\",\n        },\n      });\n\n      expect(connected.kind).toBe(\"oauth_required\");\n      if (connected.kind !== \"oauth_required\") {\n        throw new Error(`Expected oauth_required result, received ${connected.kind}`);\n      }\n      expect(connected.source.status).toBe(\"auth_required\");\n\n      const callbackResponse = yield* Effect.promise(() =>\n        fetch(connected.authorizationUrl, {\n          redirect: \"follow\",\n        }),\n      );\n      assertTrue(callbackResponse.ok);\n      const callbackText = yield* Effect.promise(() => callbackResponse.text());\n      expect(callbackText).toContain(\"Source connected:\");\n\n      const refreshedSource = yield* client.sources.get({\n        path: {\n          workspaceId: installation.workspaceId,\n          sourceId: connected.source.id,\n        },\n      });\n\n      expect(refreshedSource.name).toBe(\"Axiom\");\n      expect(refreshedSource.status).toBe(\"connected\");\n      expect(refreshedSource.auth.kind).toBe(\"mcp_oauth\");\n\n      const toolCall = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: \"return await tools.axiom.whoami({});\",\n        },\n      });\n\n      expect(toolCall.execution.status).toBe(\"waiting_for_interaction\");\n      expect(toolCall.pendingInteraction).not.toBeNull();\n      if (toolCall.pendingInteraction === null) {\n        throw new Error(\"Expected pending tool approval interaction\");\n      }\n      expect(toolCall.pendingInteraction.kind).toBe(\"form\");\n      expect(toolCall.pendingInteraction.payloadJson).toContain(\"Allow whoami?\");\n\n      const approvedToolCall = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: toolCall.execution.id,\n        },\n        payload: {\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(approvedToolCall.execution.status).toBe(\"completed\");\n      expect(approvedToolCall.pendingInteraction).toBeNull();\n      expect(approvedToolCall.execution.resultJson).toContain(\"oauth-demo\");\n    })),\n    15_000,\n  );\n\n  it.scoped(\"adds an OAuth-protected MCP source via executor.sources.add and resumes after callback\", () =>\n    Effect.gen(function* () {\n      const oauthServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startOAuthProtectedMcpServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      const added = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: `return await tools.executor.sources.add({ endpoint: ${JSON.stringify(oauthServer.endpoint)}, name: \"Axiom\", namespace: \"axiom\" });`,\n          interactionMode: \"live\",\n        },\n      });\n\n      expect(added.execution.status).toBe(\"waiting_for_interaction\");\n      expect(added.pendingInteraction).not.toBeNull();\n      if (added.pendingInteraction === null) {\n        throw new Error(\"Expected pending OAuth interaction\");\n      }\n      expect(added.pendingInteraction.kind).toBe(\"url\");\n\n      const authorizationUrl = extractUrlInteractionUrl(added.pendingInteraction.payloadJson);\n      const callbackResponse = yield* Effect.promise(() =>\n        fetch(authorizationUrl, {\n          redirect: \"follow\",\n        }),\n      );\n      assertTrue(callbackResponse.ok);\n      const callbackText = yield* Effect.promise(() => callbackResponse.text());\n      expect(callbackText).toContain(\"Source connected:\");\n\n      const connectedSource = yield* Effect.gen(function* () {\n        while (true) {\n          const sources = yield* client.sources.list({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n          });\n          const source = sources.find((entry) => entry.namespace === \"axiom\");\n          if (source?.status === \"connected\" && source.auth.kind === \"mcp_oauth\") {\n            return source;\n          }\n\n          yield* Effect.sleep(\"100 millis\");\n        }\n      });\n\n      expect(connectedSource.name).toBe(\"Axiom\");\n      expect(connectedSource.status).toBe(\"connected\");\n      expect(connectedSource.auth.kind).toBe(\"mcp_oauth\");\n\n      const toolCall = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: \"return await tools.axiom.whoami({});\",\n        },\n      });\n\n      expect(toolCall.execution.status).toBe(\"waiting_for_interaction\");\n      expect(toolCall.pendingInteraction).not.toBeNull();\n      if (toolCall.pendingInteraction !== null) {\n        expect(toolCall.pendingInteraction.kind).toBe(\"form\");\n        expect(toolCall.pendingInteraction.payloadJson).toContain(\"Allow whoami?\");\n      }\n\n      const approvedToolCall = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: toolCall.execution.id,\n        },\n        payload: {\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(approvedToolCall.execution.status).toBe(\"completed\");\n      expect(approvedToolCall.pendingInteraction).toBeNull();\n      expect(approvedToolCall.execution.resultJson).toContain(\"oauth-demo\");\n    }),\n    15_000,\n  );\n\n  it.scoped(\"gates mutating OpenAPI tools by default and allows them via workspace policy\", () =>\n    Effect.gen(function* () {\n      const openApiServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startMutatingOpenApiDemoServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n\n      const connected = yield* client.sources.connect({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          kind: \"openapi\",\n          name: \"DNS\",\n          namespace: \"dns\",\n          endpoint: openApiServer.baseUrl,\n          specUrl: openApiServer.specUrl,\n          auth: {\n            kind: \"none\",\n          },\n        },\n      });\n      expect(connected.kind).toBe(\"connected\");\n\n      const gated = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.dns.records.createRecord({ body: { type: \"TXT\", name: \"\", value: \"hello world\" } });',\n        },\n      });\n\n      expect(gated.execution.status).toBe(\"waiting_for_interaction\");\n      expect(gated.pendingInteraction).not.toBeNull();\n      if (gated.pendingInteraction === null) {\n        throw new Error(\"Expected pending approval interaction\");\n      }\n      expect(gated.pendingInteraction.kind).toBe(\"form\");\n      expect(gated.pendingInteraction.payloadJson).toContain(\"Allow Create a DNS record?\");\n      expect(gated.pendingInteraction.payloadJson).toContain(\"\\\"approve\\\"\");\n\n      const approved = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: gated.execution.id,\n        },\n        payload: {\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(approved.execution.status).toBe(\"completed\");\n      expect(openApiServer.createdBodies).toHaveLength(1);\n\n      const policy = yield* client.policies.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          resourcePattern: \"dns.records.createRecord\",\n          effect: \"allow\",\n          approvalMode: \"auto\",\n        },\n      });\n      expect(policy.key).toBe(\"dns.records.createRecord\");\n\n      const automatic = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.dns.records.createRecord({ body: { type: \"TXT\", name: \"\", value: \"hello again\" } });',\n        },\n      });\n\n      expect(automatic.execution.status).toBe(\"completed\");\n      expect(automatic.pendingInteraction).toBeNull();\n      expect(openApiServer.createdBodies).toHaveLength(2);\n    }),\n    15_000,\n  );\n\n  it.scoped(\"starts source OAuth without creating a source and stores secrets on callback\", () =>\n    Effect.gen(function* () {\n      const oauthServer = yield* Effect.acquireRelease(\n        Effect.promise(() => startOAuthProtectedMcpServer()),\n        (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n      );\n\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n\n      const startResponse = yield* Effect.promise(() =>\n        fetch(`${server.baseUrl}/v1/workspaces/${encodeURIComponent(installation.workspaceId)}/oauth/source-auth/start`, {\n          method: \"POST\",\n          headers: {\n            \"content-type\": \"application/json\",\n            \"x-executor-account-id\": installation.accountId,\n          },\n          body: JSON.stringify({\n            provider: \"mcp\",\n            endpoint: oauthServer.endpoint,\n            transport: \"auto\",\n          }),\n        }),\n      );\n\n      assertTrue(startResponse.ok);\n      const started: {\n        sessionId: string;\n        authorizationUrl: string;\n      } = yield* Effect.promise(() => startResponse.json() as Promise<{\n        sessionId: string;\n        authorizationUrl: string;\n      }>);\n\n      expect(started.sessionId).toBeTruthy();\n      expect(started.authorizationUrl).toBeDefined();\n\n      const callbackResponse = yield* Effect.promise(() =>\n        fetch(started.authorizationUrl, {\n          redirect: \"follow\",\n        }),\n      );\n\n      assertTrue(callbackResponse.ok);\n      const callbackHtml = yield* Effect.promise(() => callbackResponse.text());\n      expect(callbackHtml).toContain(\"OAuth connected\");\n      expect(callbackHtml).toContain(\"executor:oauth-result\");\n\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n      const sources = yield* client.sources.list({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n      });\n\n      expect(sources).toHaveLength(0);\n\n      const secrets = yield* bootstrapClient.local.listSecrets({});\n      expect(secrets.some((secret) => secret.purpose === \"oauth_access_token\")).toBe(true);\n      expect(secrets.some((secret) => secret.purpose === \"oauth_refresh_token\")).toBe(true);\n    }),\n    15_000,\n  );\n\n  it.scoped(\"marks execution failed when a configured MCP endpoint is invalid\", () =>\n    Effect.gen(function* () {\n      const server = yield* createIsolatedLocalExecutorServer({\n        port: 0,\n        localDataDir: \":memory:\",\n      });\n\n      const bootstrapClient = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n      });\n      const installation = yield* bootstrapClient.local.installation({});\n      const client = yield* createControlPlaneClient({\n        baseUrl: server.baseUrl,\n        accountId: installation.accountId,\n      });\n      yield* writeConfiguredLocalMcpSource({\n        workspaceRoot: server.workspaceRoot,\n        sourceId: \"demo\",\n        endpoint: \"http://127.0.0.1:PORT/mcp\",\n        name: \"Demo\",\n        namespace: \"demo\",\n      });\n\n      const execution = yield* client.executions.create({\n        path: {\n          workspaceId: installation.workspaceId,\n        },\n        payload: {\n          code: 'return await tools.demo.gated_echo({ value: \"broken\" });',\n        },\n      });\n\n      expect(execution.execution.status).toBe(\"waiting_for_interaction\");\n      expect(execution.pendingInteraction).not.toBeNull();\n      if (execution.pendingInteraction !== null) {\n        expect(execution.pendingInteraction.kind).toBe(\"form\");\n        expect(execution.pendingInteraction.payloadJson).toContain(\"Allow gated_echo?\");\n      }\n\n      const resumed = yield* client.executions.resume({\n        path: {\n          workspaceId: installation.workspaceId,\n          executionId: execution.execution.id,\n        },\n        payload: {\n          responseJson: JSON.stringify({\n            action: \"accept\",\n            content: {\n              approve: true,\n            },\n          }),\n        },\n      });\n\n      expect(resumed.execution.status).toBe(\"failed\");\n      expect(resumed.pendingInteraction).toBeNull();\n      expect(resumed.execution.errorText).toMatch(/Invalid URL|Failed connecting to MCP server/);\n    }),\n  );\n});\n"
  },
  {
    "path": "apps/executor/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.d.ts\"\n  ]\n}\n"
  },
  {
    "path": "apps/web/CHANGELOG.md",
    "content": "# @executor/web\n\n## null\n\n### Patch Changes\n\n- @executor/react@null\n- @executor/server@null\n"
  },
  {
    "path": "apps/web/package.json",
    "content": "{\n  \"name\": \"@executor/web\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"bunx --bun vite dev\",\n    \"build\": \"bunx vite build --config vite.config.ts\",\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"start\": \"NODE_ENV=production bun src/server.ts\"\n  },\n  \"dependencies\": {\n    \"@executor/react\": \"workspace:*\",\n    \"@executor/server\": \"workspace:*\",\n    \"@shikijs/langs\": \"^4.0.1\",\n    \"@shikijs/themes\": \"^4.0.1\",\n    \"@tanstack/react-router\": \"^1.132.7\",\n    \"class-variance-authority\": \"^0.7.1\",\n    \"clsx\": \"^2.1.1\",\n    \"effect\": \"catalog:\",\n    \"react\": \"^19.2.0\",\n    \"react-dom\": \"^19.2.0\",\n    \"react-grab\": \"^0.1.26\",\n    \"scheduler\": \"^0.27.0\",\n    \"shiki\": \"^4.0.1\",\n    \"streamdown\": \"^2.3.0\",\n    \"tailwind-merge\": \"^3.5.0\",\n    \"tldts\": \"^7.0.23\"\n  },\n  \"devDependencies\": {\n    \"@hono/vite-dev-server\": \"^0.25.0\",\n    \"@tailwindcss/vite\": \"^4.2.1\",\n    \"@types/react\": \"^19.2.10\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"@vitejs/plugin-react\": \"^5.1.4\",\n    \"bun-types\": \"catalog:\",\n    \"tailwindcss\": \"^4.2.1\",\n    \"tw-animate-css\": \"^1.4.0\",\n    \"vite\": \"^7.3.1\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "apps/web/src/components/code-block.tsx",
    "content": "import { useEffect, useState, useRef, useCallback } from \"react\";\nimport { codeToHtml, resolveLang } from \"../lib/shiki\";\nimport { cn } from \"../lib/utils\";\nimport { IconCopy, IconCheck } from \"./icons\";\n\n// Lazily loaded, cached across renders\nconst highlightCache = new Map<string, string>();\n\nfunction cacheKey(code: string, lang: string) {\n  return `${lang}::${code.length}::${code.slice(0, 64)}`;\n}\n\nfunction detectLanguage(code: string, hint?: string): string {\n  if (hint) return resolveLang(hint) ?? \"json\";\n  const trimmed = code.trimStart();\n  if (trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\")) return \"json\";\n  if (trimmed.startsWith(\"<\")) return \"xml\";\n  if (trimmed.startsWith(\"---\")) return \"yaml\";\n  return \"json\";\n}\n\nexport function CodeBlock(props: {\n  code: string;\n  lang?: string;\n  className?: string;\n}) {\n  const { code, lang: langHint, className } = props;\n  const [html, setHtml] = useState<string | null>(null);\n  const [copied, setCopied] = useState(false);\n  const mountedRef = useRef(true);\n\n  const language = detectLanguage(code, langHint);\n  const key = cacheKey(code, language);\n\n  useEffect(() => {\n    mountedRef.current = true;\n    return () => {\n      mountedRef.current = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    const cached = highlightCache.get(key);\n    if (cached) {\n      setHtml(cached);\n      return;\n    }\n\n    let cancelled = false;\n    codeToHtml(code, { lang: language }).then((result) => {\n      if (cancelled) return;\n      highlightCache.set(key, result);\n      if (mountedRef.current) setHtml(result);\n    });\n\n    return () => {\n      cancelled = true;\n    };\n  }, [code, key, language]);\n\n  const handleCopy = useCallback(() => {\n    void navigator.clipboard.writeText(code).then(() => {\n      setCopied(true);\n      setTimeout(() => setCopied(false), 1500);\n    });\n  }, [code]);\n\n  return (\n    <div className={cn(\"group relative overflow-auto\", className)}>\n      {/* Copy button */}\n      <button\n        type=\"button\"\n        onClick={handleCopy}\n        className=\"absolute right-2 top-2 z-10 rounded-md border border-border bg-card/90 p-1.5 text-muted-foreground/40 opacity-0 backdrop-blur-sm transition-all hover:text-foreground group-hover:opacity-100\"\n        title=\"Copy to clipboard\"\n      >\n        {copied ? <IconCheck className=\"size-3\" /> : <IconCopy className=\"size-3\" />}\n      </button>\n\n      {html ? (\n        <div\n          className=\"shiki-container text-[12px] leading-relaxed [&_pre]:!bg-transparent [&_pre]:p-3 [&_code]:font-mono\"\n          dangerouslySetInnerHTML={{ __html: html }}\n        />\n      ) : (\n        // Fallback while shiki loads\n        <pre className=\"p-3 font-mono text-[12px] leading-relaxed text-foreground/60\">\n          {code}\n        </pre>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/document-panel.tsx",
    "content": "import { cn } from \"../lib/utils\";\nimport { CodeBlock } from \"./code-block\";\n\nexport function DocumentPanel(props: {\n  title: string;\n  body: string | null;\n  lang?: string;\n  empty: string;\n  compact?: boolean;\n}) {\n  return (\n    <section\n      className={cn(\n        \"overflow-hidden rounded-lg border border-border bg-card/60\",\n        props.compact && \"min-h-48\",\n      )}\n    >\n      <div className=\"border-b border-border px-3 py-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground/70\">\n        {props.title}\n      </div>\n      {props.body ? (\n        <CodeBlock code={props.body} lang={props.lang} className=\"max-h-[32rem]\" />\n      ) : (\n        <div className=\"flex items-center justify-center p-6 text-[13px] text-muted-foreground/40\">\n          {props.empty}\n        </div>\n      )}\n    </section>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/icons.tsx",
    "content": "import type { SVGProps } from \"react\";\nimport { cn } from \"../lib/utils\";\n\ntype IconProps = SVGProps<SVGSVGElement> & { className?: string };\n\nexport function IconSources({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <rect x=\"2\" y=\"2\" width=\"5\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n      <rect x=\"9\" y=\"2\" width=\"5\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n      <rect x=\"2\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n      <rect x=\"9\" y=\"9\" width=\"5\" height=\"5\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n    </svg>\n  );\n}\n\nexport function IconTool({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <path d=\"M4 8h8M8 4v8\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconSearch({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <circle cx=\"7\" cy=\"7\" r=\"4.5\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n      <path d=\"M10.5 10.5L14 14\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconChevron({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-3\", className)} {...props}>\n      <path d=\"M6 4l4 4-4 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconFolder({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-3\", className)} {...props}>\n      <path d=\"M2 4h5l2 2h5v7H2V4z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconDocument({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <path d=\"M4 2h5l3 3v9H4V2z\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinejoin=\"round\" />\n      <path d=\"M6 8h4M6 10.5h3\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconDiscover({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.3\" />\n      <path d=\"M6.5 5.5l4.5 2-2 4.5-4.5-2z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconCopy({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-3.5\", className)} {...props}>\n      <rect x=\"5\" y=\"5\" width=\"8\" height=\"8\" rx=\"1\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n      <path d=\"M11 3H4a1 1 0 00-1 1v7\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n    </svg>\n  );\n}\n\nexport function IconCheck({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-3.5\", className)} {...props}>\n      <path d=\"M4 8.5l3 3 5-6\" stroke=\"currentColor\" strokeWidth=\"1.3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconClose({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-3\", className)} {...props}>\n      <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconEmpty({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 48 48\" fill=\"none\" className={cn(\"size-12\", className)} {...props}>\n      <rect x=\"6\" y=\"6\" width=\"36\" height=\"36\" rx=\"4\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n      <path d=\"M16 18h16M16 24h12M16 30h8\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconSpinner({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4 animate-spin\", className)} {...props}>\n      <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.5\" opacity=\"0.2\" />\n      <path d=\"M14 8a6 6 0 00-6-6\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconInfo({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <circle cx=\"8\" cy=\"8\" r=\"5.75\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n      <path d=\"M8 7v3.25\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n      <circle cx=\"8\" cy=\"4.75\" r=\"0.8\" fill=\"currentColor\" />\n    </svg>\n  );\n}\n\nexport function IconPlus({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <path d=\"M8 3.25v9.5M3.25 8h9.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconPencil({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <path d=\"M3 11.75L11.6 3.15a1.2 1.2 0 011.7 0l.55.55a1.2 1.2 0 010 1.7L5.25 14H3v-2.25z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n      <path d=\"M9.75 5l1.25 1.25\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconTrash({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <path d=\"M3.5 4.5h9M6 2.75h4M5 4.5v7.25m3-7.25v7.25m3-7.25v7.25M4.5 4.5l.4 8.1c.03.52.46.9.98.9h4.24c.52 0 .95-.38.98-.9l.4-8.1\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </svg>\n  );\n}\n\nexport function IconArrowLeft({ className, ...props }: IconProps) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", className)} {...props}>\n      <path d=\"M12.75 8H3.25M6.75 4.5L3.25 8l3.5 3.5\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n    </svg>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/loadable.tsx",
    "content": "import type { ReactNode } from \"react\";\nimport type { Loadable } from \"@executor/react\";\nimport { IconSpinner, IconEmpty } from \"./icons\";\n\nexport function LoadableBlock<T>(props: {\n  loadable: Loadable<T>;\n  loading?: string;\n  children: (data: T) => ReactNode;\n}) {\n  if (props.loadable.status === \"loading\") {\n    return (\n      <div className=\"flex h-full min-h-48 items-center justify-center\">\n        <div className=\"flex items-center gap-3 text-sm text-muted-foreground\">\n          <IconSpinner />\n          <span>{props.loading ?? \"Loading...\"}</span>\n        </div>\n      </div>\n    );\n  }\n\n  if (props.loadable.status === \"error\") {\n    return (\n      <div className=\"flex h-full min-h-48 items-center justify-center\">\n        <div className=\"rounded-lg border border-destructive/25 bg-destructive/5 px-4 py-3 text-sm text-destructive\">\n          {props.loadable.error.message}\n        </div>\n      </div>\n    );\n  }\n\n  return <>{props.children(props.loadable.data)}</>;\n}\n\nexport function EmptyState(props: {\n  title: string;\n  description?: string;\n  className?: string;\n}) {\n  return (\n    <div className={`flex h-full items-center justify-center ${props.className ?? \"\"}`}>\n      <div className=\"text-center\">\n        <IconEmpty className=\"mx-auto mb-3 text-muted-foreground/20\" />\n        <p className=\"text-[13px] text-muted-foreground/60\">{props.title}</p>\n        {props.description && (\n          <p className=\"mt-1 text-[11px] text-muted-foreground/40\">{props.description}</p>\n        )}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/local-mcp-install-card.tsx",
    "content": "import { useEffect, useMemo, useState } from \"react\";\nimport { CodeBlock } from \"./code-block\";\n\nexport function LocalMcpInstallCard(props: {\n  title?: string;\n  description?: string;\n  className?: string;\n}) {\n  const [origin, setOrigin] = useState<string | null>(null);\n\n  useEffect(() => {\n    setOrigin(window.location.origin);\n  }, []);\n\n  const command = useMemo(\n    () =>\n      origin\n        ? `npx add-mcp \"${origin}/mcp\" --transport http --name \"executor\"`\n        : 'npx add-mcp \"<this-server>/mcp\" --transport http --name \"executor\"',\n    [origin],\n  );\n\n  return (\n    <section className={props.className ?? \"rounded-2xl border border-border bg-card/80 p-5\"}>\n      <div className=\"mb-3 space-y-1\">\n        <h2 className=\"text-sm font-semibold text-foreground\">\n          {props.title ?? \"Install local MCP\"}\n        </h2>\n        <p className=\"text-[13px] text-muted-foreground\">\n          {props.description\n            ?? \"Add this local executor server to an MCP client with one command. The URL uses the same origin as this web app.\"}\n        </p>\n      </div>\n      <CodeBlock code={command} lang=\"bash\" className=\"rounded-xl border border-border bg-background/70\" />\n    </section>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/markdown.tsx",
    "content": "import { Streamdown } from \"streamdown\";\nimport { createLimitedCodePlugin } from \"../lib/shiki\";\n\nconst codePlugin = createLimitedCodePlugin();\n\nconst PROSE_CLASSES = [\n  \"text-[13px] leading-relaxed text-muted-foreground\",\n  // paragraphs\n  \"[&_p]:mb-[0.4em] [&_p:last-child]:mb-0\",\n  // bold\n  \"[&_strong]:text-foreground [&_strong]:font-semibold\",\n  \"[&_b]:text-foreground [&_b]:font-semibold\",\n  // inline code\n  \"[&_code]:font-mono [&_code]:text-xs [&_code]:bg-muted [&_code]:border [&_code]:border-border\",\n  \"[&_code]:rounded-sm [&_code]:px-1.5 [&_code]:py-px [&_code]:text-primary\",\n  // pre blocks\n  \"[&_pre]:bg-muted [&_pre]:border [&_pre]:border-border [&_pre]:rounded-md\",\n  \"[&_pre]:px-3 [&_pre]:py-2 [&_pre]:overflow-x-auto [&_pre]:my-2 [&_pre]:text-xs [&_pre]:leading-relaxed\",\n  \"[&_pre_code]:bg-transparent [&_pre_code]:border-0 [&_pre_code]:p-0 [&_pre_code]:text-inherit\",\n  // links\n  \"[&_a]:text-primary [&_a]:underline [&_a]:underline-offset-2\",\n  \"[&_a]:decoration-primary/30 hover:[&_a]:decoration-primary/80\",\n  // lists\n  \"[&_ul]:pl-5 [&_ul]:my-1.5 [&_ol]:pl-5 [&_ol]:my-1.5\",\n  \"[&_li]:mb-0.5 [&_li_::marker]:text-muted-foreground\",\n  // tables\n  \"[&_table]:w-full [&_table]:border-collapse [&_table]:text-xs [&_table]:my-2\",\n  \"[&_th]:border [&_th]:border-border [&_th]:px-2 [&_th]:py-1 [&_th]:text-left [&_th]:bg-muted [&_th]:font-semibold [&_th]:text-foreground\",\n  \"[&_td]:border [&_td]:border-border [&_td]:px-2 [&_td]:py-1 [&_td]:text-left [&_td]:bg-background\",\n  // headings\n  \"[&_h1]:font-semibold [&_h1]:text-foreground [&_h1]:mt-2 [&_h1]:mb-1 [&_h1]:text-[15px]\",\n  \"[&_h2]:font-semibold [&_h2]:text-foreground [&_h2]:mt-2 [&_h2]:mb-1 [&_h2]:text-sm\",\n  \"[&_h3]:font-semibold [&_h3]:text-foreground [&_h3]:mt-2 [&_h3]:mb-1 [&_h3]:text-[13px]\",\n  \"[&_h4]:font-semibold [&_h4]:text-foreground [&_h4]:mt-2 [&_h4]:mb-1 [&_h4]:text-[13px]\",\n  // blockquote\n  \"[&_blockquote]:border-l-2 [&_blockquote]:border-border [&_blockquote]:pl-3 [&_blockquote]:my-1.5 [&_blockquote]:text-muted-foreground\",\n  // hr\n  \"[&_hr]:border-0 [&_hr]:border-t [&_hr]:border-border [&_hr]:my-2\",\n  // images\n  \"[&_img]:max-w-full [&_img]:rounded\",\n].join(\" \");\n\nexport function Markdown(props: { children: string; className?: string }) {\n  return (\n    <div className={props.className ? `${PROSE_CLASSES} ${props.className}` : PROSE_CLASSES}>\n      <Streamdown plugins={{ code: codePlugin }} controls={{ code: true }} linkSafety={{ enabled: false }}>\n        {props.children}\n      </Streamdown>\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/shell.tsx",
    "content": "import { Link, Outlet, useMatchRoute } from \"@tanstack/react-router\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useSources, type Source } from \"@executor/react\";\nimport { cn } from \"../lib/utils\";\nimport { IconPlus, IconCopy, IconCheck } from \"./icons\";\nimport { LoadableBlock } from \"./loadable\";\nimport { SourceFavicon } from \"./source-favicon\";\n\n// ── Status dot color ─────────────────────────────────────────────────────\n\nconst statusColor: Record<string, string> = {\n  connected: \"bg-primary\",\n  probing: \"bg-amber-400\",\n  draft: \"bg-muted-foreground/30\",\n  auth_required: \"bg-amber-500\",\n  error: \"bg-destructive\",\n};\n\ntype AppMetaEnv = {\n  readonly VITE_APP_VERSION: string;\n  readonly VITE_GITHUB_URL: string;\n};\n\nconst { VITE_APP_VERSION, VITE_GITHUB_URL } = (import.meta as ImportMeta & {\n  readonly env: AppMetaEnv;\n}).env;\n\ntype UpdateChannel = \"latest\" | \"beta\";\n\ntype ParsedVersion = {\n  readonly major: number;\n  readonly minor: number;\n  readonly patch: number;\n  readonly prerelease: ReadonlyArray<string | number> | null;\n};\n\nconst semverPattern =\n  /^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)(?:-(?<prerelease>[0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/;\n\nconst resolveUpdateChannel = (version: string): UpdateChannel =>\n  version.includes(\"-beta.\") ? \"beta\" : \"latest\";\n\nconst parseVersion = (version: string): ParsedVersion | null => {\n  const match = version.trim().match(semverPattern);\n  if (!match?.groups) {\n    return null;\n  }\n\n  return {\n    major: Number(match.groups.major),\n    minor: Number(match.groups.minor),\n    patch: Number(match.groups.patch),\n    prerelease: match.groups.prerelease\n      ? match.groups.prerelease.split(\".\").map((identifier) =>\n          /^\\d+$/.test(identifier) ? Number(identifier) : identifier,\n        )\n      : null,\n  };\n};\n\nconst comparePrereleaseIdentifiers = (\n  left: ReadonlyArray<string | number> | null,\n  right: ReadonlyArray<string | number> | null,\n): number => {\n  if (left === null && right === null) {\n    return 0;\n  }\n\n  if (left === null) {\n    return 1;\n  }\n\n  if (right === null) {\n    return -1;\n  }\n\n  const length = Math.max(left.length, right.length);\n  for (let index = 0; index < length; index += 1) {\n    const leftIdentifier = left[index];\n    const rightIdentifier = right[index];\n\n    if (leftIdentifier === rightIdentifier) {\n      continue;\n    }\n\n    if (leftIdentifier === undefined) {\n      return -1;\n    }\n\n    if (rightIdentifier === undefined) {\n      return 1;\n    }\n\n    if (typeof leftIdentifier === \"number\" && typeof rightIdentifier === \"number\") {\n      return leftIdentifier < rightIdentifier ? -1 : 1;\n    }\n\n    if (typeof leftIdentifier === \"number\") {\n      return -1;\n    }\n\n    if (typeof rightIdentifier === \"number\") {\n      return 1;\n    }\n\n    return leftIdentifier < rightIdentifier ? -1 : 1;\n  }\n\n  return 0;\n};\n\nconst compareVersions = (left: string, right: string): number | null => {\n  const leftVersion = parseVersion(left);\n  const rightVersion = parseVersion(right);\n  if (!leftVersion || !rightVersion) {\n    return null;\n  }\n\n  if (leftVersion.major !== rightVersion.major) {\n    return leftVersion.major < rightVersion.major ? -1 : 1;\n  }\n\n  if (leftVersion.minor !== rightVersion.minor) {\n    return leftVersion.minor < rightVersion.minor ? -1 : 1;\n  }\n\n  if (leftVersion.patch !== rightVersion.patch) {\n    return leftVersion.patch < rightVersion.patch ? -1 : 1;\n  }\n\n  return comparePrereleaseIdentifiers(leftVersion.prerelease, rightVersion.prerelease);\n};\n\n// ── useLatestVersion ─────────────────────────────────────────────────────\n\nfunction useLatestVersion(currentVersion: string) {\n  const channel = resolveUpdateChannel(currentVersion);\n  const [latestVersion, setLatestVersion] = useState<string | null>(null);\n\n  useEffect(() => {\n    let cancelled = false;\n    fetch(\"https://registry.npmjs.org/-/package/executor/dist-tags\")\n      .then((res) => res.json())\n      .then((data: Partial<Record<UpdateChannel, string>>) => {\n        if (!cancelled) {\n          setLatestVersion(data[channel] ?? null);\n        }\n      })\n      .catch(() => {});\n    return () => {\n      cancelled = true;\n    };\n  }, [channel]);\n\n  const updateAvailable =\n    latestVersion !== null && compareVersions(currentVersion, latestVersion) === -1;\n\n  return { latestVersion, updateAvailable, channel };\n}\n\n// ── UpdateCard ───────────────────────────────────────────────────────────\n\nfunction UpdateCard(props: { latestVersion: string; channel: UpdateChannel }) {\n  const command = `npm i -g executor@${props.channel}`;\n  const [copied, setCopied] = useState(false);\n\n  const handleCopy = useCallback(() => {\n    void navigator.clipboard.writeText(command).then(() => {\n      setCopied(true);\n      setTimeout(() => setCopied(false), 1500);\n    });\n  }, [command]);\n\n  return (\n    <div className=\"mx-2 mb-2 rounded-xl border border-primary/25 bg-primary/[0.06] p-3\">\n      <div className=\"flex items-center gap-2\">\n        <div className=\"flex size-5 shrink-0 items-center justify-center rounded-full bg-primary/15\">\n          <svg viewBox=\"0 0 16 16\" fill=\"none\" className=\"size-3 text-primary\">\n            <path d=\"M8 3v7M5 7l3 3 3-3\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n            <path d=\"M3 12h10\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n          </svg>\n        </div>\n        <div className=\"min-w-0\">\n          <p className=\"text-[11px] font-semibold text-foreground\">Update available</p>\n          <p className=\"text-[10px] text-muted-foreground\">\n            v{props.latestVersion}\n          </p>\n        </div>\n      </div>\n      <button\n        type=\"button\"\n        onClick={handleCopy}\n        className=\"mt-2.5 flex w-full items-center justify-between gap-2 rounded-lg border border-border/60 bg-background/50 px-2.5 py-1.5 text-left transition-colors hover:bg-background/80\"\n      >\n        <code className=\"truncate font-mono text-[10px] text-sidebar-foreground\">\n          {command}\n        </code>\n        <span className=\"shrink-0 text-muted-foreground transition-colors group-hover:text-foreground\">\n          {copied ? (\n            <IconCheck className=\"size-3 text-primary\" />\n          ) : (\n            <IconCopy className=\"size-3\" />\n          )}\n        </span>\n      </button>\n    </div>\n  );\n}\n\n// ── AppShell ─────────────────────────────────────────────────────────────\nexport function AppShell() {\n  const sources = useSources();\n  const matchRoute = useMatchRoute();\n  const isHome = matchRoute({ to: \"/\" });\n  const isSecrets = matchRoute({ to: \"/secrets\" });\n  const { latestVersion, updateAvailable, channel } = useLatestVersion(VITE_APP_VERSION);\n  return (\n    <div className=\"flex h-screen overflow-hidden\">\n      {/* Sidebar */}\n      <aside className=\"flex w-52 shrink-0 flex-col border-r border-sidebar-border bg-sidebar lg:w-56\">\n        {/* Brand */}\n        <div className=\"flex h-12 shrink-0 items-center border-b border-sidebar-border px-4\">\n          <Link to=\"/\" className=\"flex items-center gap-1.5\">\n            <span className=\"font-display text-base tracking-tight text-foreground\">\n              executor\n            </span>\n            <span className=\"rounded bg-primary/15 px-1.5 py-0.5 text-[10px] font-medium text-primary\">\n              v3\n            </span>\n          </Link>\n        </div>\n\n        {/* Main nav */}\n        <nav className=\"flex flex-1 flex-col p-2 overflow-y-auto\">\n          <NavItem to=\"/\" label=\"Dashboard\" active={!!isHome} />\n          <NavItem to=\"/secrets\" label=\"Secrets\" active={!!isSecrets} />\n\n          {/* Sources */}\n          <div className=\"mt-5 mb-1 px-2.5 text-[10px] font-medium uppercase tracking-widest text-muted-foreground/50\">\n            <div className=\"flex items-center justify-between gap-2\">\n              <span>Sources</span>\n              <Link\n                to=\"/sources/add\"\n                className=\"inline-flex items-center gap-1 rounded-md px-1.5 py-1 text-[10px] font-medium normal-case tracking-normal text-primary transition-colors hover:bg-sidebar-active hover:text-foreground\"\n              >\n                <IconPlus className=\"size-3\" />\n                Add\n              </Link>\n            </div>\n          </div>\n          <LoadableBlock loadable={sources} loading=\"Loading...\">\n            {(items) =>\n              items.length === 0 ? (\n                <div className=\"px-2.5 py-2 text-[11px] leading-relaxed text-muted-foreground/40\">\n                  No sources yet\n                </div>\n              ) : (\n                <div className=\"flex flex-col gap-px\">\n                  {items.map((source) => (\n                    <SourceItem key={source.id} source={source} matchRoute={matchRoute} />\n                  ))}\n                </div>\n              )\n            }\n          </LoadableBlock>\n        </nav>\n\n        {/* Update available */}\n        {updateAvailable && latestVersion && (\n          <UpdateCard latestVersion={latestVersion} channel={channel} />\n        )}\n\n        {/* Footer */}\n        <div className=\"shrink-0 border-t border-sidebar-border px-4 py-2.5\">\n          <div className=\"flex items-center justify-between text-[10px] leading-none\">\n            <span className=\"text-muted-foreground/70 tabular-nums\">v{VITE_APP_VERSION}</span>\n            <a\n              href={VITE_GITHUB_URL}\n              target=\"_blank\"\n              rel=\"noreferrer\"\n              className=\"text-muted-foreground/70 transition-colors hover:text-foreground\"\n            >\n              GitHub\n            </a>\n          </div>\n        </div>\n      </aside>\n\n      {/* Main content */}\n      <main className=\"flex flex-1 flex-col min-w-0 overflow-hidden\">\n        <Outlet />\n      </main>\n    </div>\n  );\n}\n\n// ── SourceItem ───────────────────────────────────────────────────────────\n\nfunction SourceItem(props: {\n  source: Source;\n  matchRoute: ReturnType<typeof useMatchRoute>;\n}) {\n  const { source, matchRoute } = props;\n  const active = matchRoute({\n    to: \"/sources/$sourceId\",\n    params: { sourceId: source.id },\n    fuzzy: true,\n  });\n\n  return (\n    <Link\n      to=\"/sources/$sourceId\"\n      params={{ sourceId: source.id }}\n      search={{ tab: \"model\" }}\n      className={cn(\n        \"group flex items-center gap-2 rounded-md px-2.5 py-1.5 text-[13px] transition-colors\",\n        active\n          ? \"bg-sidebar-active text-foreground font-medium\"\n          : \"text-sidebar-foreground hover:bg-sidebar-active/60 hover:text-foreground\",\n      )}\n    >\n      <div className=\"flex size-3 shrink-0 items-center justify-center text-muted-foreground/50\">\n        <SourceFavicon endpoint={source.endpoint} kind={source.kind} className=\"size-3\" />\n      </div>\n      <span className=\"flex-1 truncate\">{source.name}</span>\n      <span\n        className={cn(\"size-1.5 shrink-0 rounded-full\", statusColor[source.status] ?? \"bg-muted-foreground/30\")}\n        title={source.status}\n      />\n    </Link>\n  );\n}\n\n// ── NavItem ──────────────────────────────────────────────────────────────\n\nfunction NavItem(props: { to: string; label: string; active: boolean }) {\n  return (\n    <Link\n      to={props.to}\n      className={cn(\n        \"flex items-center gap-2.5 rounded-md px-2.5 py-1.5 text-[13px] transition-colors\",\n        props.active\n          ? \"bg-sidebar-active text-foreground font-medium\"\n          : \"text-sidebar-foreground hover:bg-sidebar-active/60 hover:text-foreground\",\n      )}\n    >\n      {props.label}\n    </Link>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/source-favicon.tsx",
    "content": "import { useMemo, useState } from \"react\";\nimport type { Source } from \"@executor/react\";\nimport { getGoogleProductIconUrl, getSourceFaviconUrl } from \"../lib/source-favicon\";\nimport { cn } from \"../lib/utils\";\n\ntype SourceKind = Source[\"kind\"] | string;\n\nexport function SourceFavicon({\n  endpoint,\n  kind,\n  className,\n  size = 16,\n}: {\n  endpoint?: string | null;\n  kind: SourceKind;\n  className?: string;\n  size?: number;\n}) {\n  const faviconUrl = useMemo(() => {\n    // For google_discovery, prefer the real product icon\n    if (kind === \"google_discovery\") {\n      return getGoogleProductIconUrl(endpoint) ?? getSourceFaviconUrl(endpoint);\n    }\n    return getSourceFaviconUrl(endpoint);\n  }, [endpoint, kind]);\n\n  const [failedUrl, setFailedUrl] = useState<string | null>(null);\n  const isFailed = Boolean(faviconUrl && failedUrl === faviconUrl);\n\n  if (!faviconUrl || isFailed) {\n    return <DefaultSourceIcon kind={kind} className={className} />;\n  }\n\n  return (\n    <img\n      key={faviconUrl}\n      src={faviconUrl}\n      alt=\"\"\n      width={size}\n      height={size}\n      className={cn(\"size-full object-contain\", className)}\n      loading=\"lazy\"\n      referrerPolicy=\"no-referrer\"\n      onError={() => setFailedUrl(faviconUrl)}\n    />\n  );\n}\n\nexport function DefaultSourceIcon({\n  kind,\n  className,\n}: {\n  kind: SourceKind;\n  className?: string;\n}) {\n  const base = cn(\"shrink-0\", className);\n\n  switch (kind) {\n    case \"mcp\":\n      return (\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" className={base}>\n          <rect x=\"2\" y=\"3\" width=\"12\" height=\"10\" rx=\"1.5\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n          <path d=\"M5 7h1M5 9h4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" />\n        </svg>\n      );\n    case \"graphql\":\n      return (\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" className={base}>\n          <path d=\"M8 2L14 5.5V10.5L8 14L2 10.5V5.5L8 2Z\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n          <circle cx=\"8\" cy=\"8\" r=\"1.5\" fill=\"currentColor\" opacity=\"0.5\" />\n        </svg>\n      );\n    case \"openapi\":\n      return (\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" className={base}>\n          <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n          <path d=\"M5 6h6M5 8h4M5 10h5\" stroke=\"currentColor\" strokeWidth=\"1.1\" strokeLinecap=\"round\" />\n        </svg>\n      );\n    case \"google_discovery\":\n      return (\n        <svg viewBox=\"0 0 16 16\" className={base}>\n          <path d=\"M8 3.2a4.8 4.8 0 00-3.39 8.2l1.02-1.02A3.36 3.36 0 018 4.64a3.33 3.33 0 012.34.96l1.03-1.03A4.78 4.78 0 008 3.2z\" fill=\"#EA4335\" />\n          <path d=\"M12.8 8c0-.37-.04-.72-.1-1.06H8v2.12h2.7a2.4 2.4 0 01-1 1.52l1.02 1.02A4.8 4.8 0 0012.8 8z\" fill=\"#4285F4\" />\n          <path d=\"M5.63 9.38A3.36 3.36 0 014.64 8c0-.5.11-.97.3-1.4L3.92 5.58A4.78 4.78 0 003.2 8c0 .88.26 1.7.72 2.4l1.02-1.02z\" fill=\"#FBBC05\" />\n          <path d=\"M8 12.8c1.2 0 2.27-.4 3.1-1.1l-1.02-1.02c-.54.38-1.24.6-2.08.6a3.36 3.36 0 01-3.07-2.28l-1.02 1.02A4.8 4.8 0 008 12.8z\" fill=\"#34A853\" />\n        </svg>\n      );\n    case \"internal\":\n      return (\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" className={base}>\n          <path d=\"M8 2v12M4 6l4-4 4 4M4 10l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n        </svg>\n      );\n    default:\n      return (\n        <svg viewBox=\"0 0 16 16\" fill=\"none\" className={base}>\n          <rect x=\"2.5\" y=\"2.5\" width=\"11\" height=\"11\" rx=\"2\" stroke=\"currentColor\" strokeWidth=\"1.2\" />\n          <path d=\"M5 6h6M5 8h4M5 10h3\" stroke=\"currentColor\" strokeWidth=\"1.1\" strokeLinecap=\"round\" />\n        </svg>\n      );\n  }\n}\n"
  },
  {
    "path": "apps/web/src/components/source-not-found-state.tsx",
    "content": "import { Link } from \"@tanstack/react-router\";\n\nimport { IconEmpty } from \"./icons\";\nimport { cn } from \"../lib/utils\";\n\nexport function SourceNotFoundState() {\n  return (\n    <div className=\"flex h-full min-h-48 items-center justify-center px-6\">\n      <div className=\"flex max-w-sm flex-col items-center text-center\">\n        <IconEmpty className=\"mb-4 text-muted-foreground/20\" />\n        <h2 className=\"text-sm font-semibold text-foreground\">Source not found</h2>\n        <p className=\"mt-2 text-sm text-muted-foreground\">\n          This source no longer exists in the current workspace.\n        </p>\n        <div className=\"mt-5 flex items-center gap-2\">\n          <Link\n            to=\"/\"\n            className={cn(\n              \"inline-flex h-7 items-center justify-center rounded-md border border-input bg-transparent px-2.5 text-xs font-medium transition-all\",\n              \"hover:bg-accent hover:text-accent-foreground\",\n            )}\n          >\n            Back to dashboard\n          </Link>\n          <Link\n            to=\"/sources/add\"\n            className={cn(\n              \"inline-flex h-7 items-center justify-center rounded-md bg-primary px-2.5 text-xs font-medium text-primary-foreground transition-all\",\n              \"hover:bg-primary/90\",\n            )}\n          >\n            Add source\n          </Link>\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/source-recovery-state.tsx",
    "content": "import type { Source } from \"@executor/react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button } from \"./ui/button\";\nimport { Badge } from \"./ui/badge\";\nimport { IconSpinner, IconTool } from \"./icons\";\n\nexport function SourceRecoveryState(props: {\n  source: Source;\n  title: string;\n  description: string;\n  refreshLabel?: string;\n  refreshTitle?: string;\n  refreshDisabled?: boolean;\n  refreshPending?: boolean;\n  feedback?: {\n    tone: \"success\" | \"error\";\n    text: string;\n  } | null;\n  onRefresh: () => void;\n}) {\n  return (\n    <div className=\"flex h-full min-h-48 items-center justify-center px-6\">\n      <div className=\"flex max-w-md flex-col items-center text-center\">\n        <div className=\"mb-4 flex size-12 items-center justify-center rounded-2xl bg-muted text-muted-foreground\">\n          <IconTool className=\"size-5\" />\n        </div>\n        <h2 className=\"text-sm font-semibold text-foreground\">{props.title}</h2>\n        <div className=\"mt-2 flex items-center gap-2\">\n          <span className=\"text-sm text-muted-foreground\">{props.source.name}</span>\n          <Badge variant=\"outline\">{props.source.kind}</Badge>\n        </div>\n        <p className=\"mt-3 text-sm text-muted-foreground\">{props.description}</p>\n        {props.feedback && (\n          <p\n            className={cn(\n              \"mt-4 text-sm font-medium\",\n              props.feedback.tone === \"success\" ? \"text-primary\" : \"text-destructive\",\n            )}\n          >\n            {props.feedback.text}\n          </p>\n        )}\n        <div className=\"mt-5 flex items-center gap-2\">\n          <Button\n            size=\"sm\"\n            onClick={props.onRefresh}\n            disabled={props.refreshDisabled}\n            title={props.refreshTitle}\n          >\n            {props.refreshPending ? <IconSpinner className=\"size-3\" /> : null}\n            {props.refreshLabel ?? \"Refresh source\"}\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/components/ui/badge.tsx",
    "content": "import type { HTMLAttributes } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst badgeVariants = cva(\n  \"inline-flex items-center rounded-full border px-2 py-0.5 text-[10px] font-medium tracking-wide uppercase\",\n  {\n    variants: {\n      variant: {\n        default: \"border-transparent bg-primary/15 text-primary\",\n        secondary: \"border-transparent bg-secondary text-secondary-foreground\",\n        outline: \"border-border text-muted-foreground\",\n        muted: \"border-transparent bg-muted text-muted-foreground\",\n        get: \"border-[var(--method-get)]/20 bg-[var(--method-get)]/10 text-[var(--method-get)]\",\n        post: \"border-[var(--method-post)]/20 bg-[var(--method-post)]/10 text-[var(--method-post)]\",\n        put: \"border-[var(--method-put)]/20 bg-[var(--method-put)]/10 text-[var(--method-put)]\",\n        delete: \"border-[var(--method-delete)]/20 bg-[var(--method-delete)]/10 text-[var(--method-delete)]\",\n        destructive: \"border-destructive/20 bg-destructive/10 text-destructive\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  },\n);\n\nexport type BadgeProps = HTMLAttributes<HTMLSpanElement> & VariantProps<typeof badgeVariants>;\n\nexport function Badge({ className, variant, ...props }: BadgeProps) {\n  return <span className={cn(badgeVariants({ variant }), className)} {...props} />;\n}\n\nexport function MethodBadge({ method }: { method: string }) {\n  const variant = ({\n    GET: \"get\",\n    POST: \"post\",\n    PUT: \"put\",\n    PATCH: \"put\",\n    DELETE: \"delete\",\n  } as const)[method.toUpperCase()] ?? \"outline\";\n\n  return <Badge variant={variant}>{method}</Badge>;\n}\n"
  },
  {
    "path": "apps/web/src/components/ui/button.tsx",
    "content": "import type { ButtonHTMLAttributes } from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils\";\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-offset-1 focus-visible:ring-offset-background cursor-pointer\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        outline: \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        destructive: \"bg-destructive text-white hover:bg-destructive/90\",\n      },\n      size: {\n        default: \"h-9 px-4 py-2\",\n        sm: \"h-7 rounded-md px-2.5 text-xs\",\n        lg: \"h-10 rounded-md px-6\",\n        icon: \"h-8 w-8\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  },\n);\n\ntype ButtonProps = ButtonHTMLAttributes<HTMLButtonElement> & VariantProps<typeof buttonVariants>;\n\nexport function Button({ className, variant, size, ...props }: ButtonProps) {\n  return <button className={cn(buttonVariants({ variant, size }), className)} {...props} />;\n}\n"
  },
  {
    "path": "apps/web/src/dev.ts",
    "content": "/**\n * Dev entry point for @hono/vite-dev-server.\n *\n * Exports `{ fetch }` so Vite can forward API requests to the executor\n * control-plane handler. Everything else (frontend assets, HMR) is\n * handled by Vite itself.\n */\nimport { join } from \"node:path\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Runtime from \"effect/Runtime\";\nimport * as Scope from \"effect/Scope\";\nimport {\n  createLocalExecutorRequestHandler,\n  DEFAULT_EXECUTOR_DATA_DIR,\n} from \"@executor/server\";\n\nconst MAX_LOGGED_ERROR_BODY_LENGTH = 4_000;\nconst EXECUTOR_WEB_DEV_LOCAL_DATA_DIR_ENV = \"EXECUTOR_WEB_DEV_LOCAL_DATA_DIR\";\nconst DEFAULT_WEB_DEV_LOCAL_DATA_DIR = join(\n  DEFAULT_EXECUTOR_DATA_DIR,\n  \"control-plane-web-dev\",\n);\n\nconst truncateForLog = (value: string): string =>\n  value.length > MAX_LOGGED_ERROR_BODY_LENGTH\n    ? `${value.slice(0, MAX_LOGGED_ERROR_BODY_LENGTH)}... [truncated]`\n    : value;\n\nconst resolveWebDevLocalDataDir = (): string => {\n  const configured = process.env[EXECUTOR_WEB_DEV_LOCAL_DATA_DIR_ENV]?.trim();\n  return configured && configured.length > 0\n    ? configured\n    : DEFAULT_WEB_DEV_LOCAL_DATA_DIR;\n};\n\n/**\n * Extract a detailed, human-readable description from an error.\n *\n * When Effect rejects via `runPromise`, the thrown value is a\n * `FiberFailure` wrapping a `Cause`. `Cause.pretty` renders the full\n * failure tree (defects, interrupts, tagged errors, etc.) rather than the\n * opaque fallback message (\"An error has occurred\").\n */\nconst formatErrorForLog = (error: unknown): string => {\n  if (Runtime.isFiberFailure(error)) {\n    const cause = error[Runtime.FiberFailureCauseId];\n    return Cause.pretty(cause);\n  }\n\n  if (error instanceof Error) {\n    return error.stack ?? error.message;\n  }\n\n  return String(error);\n};\n\n// Create a long-lived scope that stays open for the lifetime of the process.\nconst handlerPromise = (async () => {\n  const exit = await Effect.runPromiseExit(\n    Effect.gen(function* () {\n      const scope = yield* Scope.make();\n      const handler = yield* createLocalExecutorRequestHandler({\n        localDataDir: resolveWebDevLocalDataDir(),\n      }).pipe(\n        Effect.provideService(Scope.Scope, scope),\n      );\n      return handler;\n    }),\n  );\n\n  if (Exit.isSuccess(exit)) {\n    return exit.value;\n  }\n\n  // Log the full Cause tree — this captures typed errors, defects (uncaught\n  // throws), and interrupts with their original stack traces.\n  console.error(\n    \"[executor dev api] failed to initialize request handler\\n\\n\" +\n      Cause.pretty(exit.cause),\n  );\n\n  // Re-throw so every subsequent request sees the init failure.\n  throw Cause.squash(exit.cause);\n})();\n\nexport default {\n  async fetch(request: Request) {\n    const url = new URL(request.url);\n\n    try {\n      const handler = await handlerPromise;\n      handler.setBaseUrl(url.origin);\n\n      const response = await handler.handleApiRequest(request);\n\n      if (url.pathname.startsWith(\"/v1/\") && response.status >= 500) {\n        let bodyText = \"<unavailable>\";\n        try {\n          bodyText = truncateForLog(await response.clone().text());\n        } catch {}\n\n        console.error(\"[executor dev api] request failed\", {\n          method: request.method,\n          url: url.toString(),\n          status: response.status,\n          contentType: response.headers.get(\"content-type\"),\n          body: bodyText,\n        });\n      }\n\n      return response;\n    } catch (error) {\n      console.error(\"[executor dev api] unhandled request error\", {\n        method: request.method,\n        url: url.toString(),\n        error: formatErrorForLog(error),\n      });\n      throw error;\n    }\n  },\n};\n"
  },
  {
    "path": "apps/web/src/frontend.tsx",
    "content": "import { createRoot } from \"react-dom/client\";\n\nclass BrowserBuffer extends Uint8Array {}\n\nconst browserGlobal = globalThis as any;\n\nif (browserGlobal.Buffer === undefined) {\n  browserGlobal.Buffer = BrowserBuffer;\n}\n\nconst { App } = await import(\"./main\");\n\nconst rootElement = document.getElementById(\"root\");\n\nif (!rootElement) {\n  throw new Error(\"Missing #root element\");\n}\n\ncreateRoot(rootElement).render(<App />);\n"
  },
  {
    "path": "apps/web/src/globals.css",
    "content": "@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@source \"../../node_modules/streamdown/dist/*.js\";\n\n@custom-variant dark (&:is(.dark *));\n\n@theme inline {\n  --font-sans: \"DM Sans\", ui-sans-serif, system-ui, sans-serif;\n  --font-mono: \"JetBrains Mono\", \"IBM Plex Mono\", ui-monospace, monospace;\n  --font-display: \"Instrument Serif\", Georgia, serif;\n\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-card: var(--card);\n  --color-card-foreground: var(--card-foreground);\n  --color-popover: var(--popover);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-primary: var(--primary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-secondary: var(--secondary);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-muted: var(--muted);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-accent: var(--accent);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-destructive: var(--destructive);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\n\n  --color-sidebar: var(--sidebar);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-active: var(--sidebar-active);\n}\n\n/*\n * Light / dark palette driven by system preference.\n * Light: clean neutral base, teal primary accent.\n * Dark: charcoal base, warm stone accents, teal primary, amber warning.\n */\n\n/* ——— Light theme (default) ——— */\n:root {\n  color-scheme: light dark;\n  --background: oklch(0.985 0.002 260);\n  --foreground: oklch(0.145 0.005 260);\n  --card: oklch(0.99 0.001 260);\n  --card-foreground: oklch(0.145 0.005 260);\n  --popover: oklch(0.99 0.001 260);\n  --popover-foreground: oklch(0.145 0.005 260);\n  --primary: oklch(0.55 0.17 175);\n  --primary-foreground: oklch(0.98 0.005 175);\n  --secondary: oklch(0.94 0.005 260);\n  --secondary-foreground: oklch(0.32 0.008 260);\n  --muted: oklch(0.955 0.004 260);\n  --muted-foreground: oklch(0.50 0.01 250);\n  --accent: oklch(0.94 0.006 260);\n  --accent-foreground: oklch(0.145 0.005 260);\n  --destructive: oklch(0.55 0.22 25);\n  --border: oklch(0.88 0.006 260);\n  --input: oklch(0.88 0.006 260);\n  --ring: oklch(0.55 0.17 175);\n\n  --sidebar: oklch(0.97 0.003 260);\n  --sidebar-foreground: oklch(0.32 0.008 260);\n  --sidebar-border: oklch(0.90 0.005 260);\n  --sidebar-active: oklch(0.935 0.006 260);\n\n  /* Method colors */\n  --method-get: oklch(0.55 0.18 155);\n  --method-post: oklch(0.52 0.16 230);\n  --method-put: oklch(0.58 0.16 85);\n  --method-delete: oklch(0.55 0.20 25);\n\n  --scrollbar-thumb: oklch(0.78 0.005 260);\n  --scrollbar-thumb-hover: oklch(0.68 0.005 260);\n}\n\n/* ——— Dark theme (system preference) ——— */\n@media (prefers-color-scheme: dark) {\n  :root {\n    --background: oklch(0.115 0.005 260);\n    --foreground: oklch(0.90 0.008 250);\n    --card: oklch(0.145 0.005 260);\n    --card-foreground: oklch(0.90 0.008 250);\n    --popover: oklch(0.145 0.005 260);\n    --popover-foreground: oklch(0.90 0.008 250);\n    --primary: oklch(0.72 0.15 175);\n    --primary-foreground: oklch(0.12 0.01 175);\n    --secondary: oklch(0.195 0.007 260);\n    --secondary-foreground: oklch(0.78 0.008 250);\n    --muted: oklch(0.175 0.005 260);\n    --muted-foreground: oklch(0.56 0.01 250);\n    --accent: oklch(0.195 0.008 260);\n    --accent-foreground: oklch(0.90 0.008 250);\n    --destructive: oklch(0.62 0.22 25);\n    --border: oklch(0.235 0.007 260);\n    --input: oklch(0.195 0.007 260);\n    --ring: oklch(0.72 0.15 175);\n\n    --sidebar: oklch(0.105 0.005 260);\n    --sidebar-foreground: oklch(0.72 0.008 250);\n    --sidebar-border: oklch(0.20 0.006 260);\n    --sidebar-active: oklch(0.18 0.008 260);\n\n    /* Method colors */\n    --method-get: oklch(0.75 0.16 155);\n    --method-post: oklch(0.72 0.14 230);\n    --method-put: oklch(0.78 0.14 85);\n    --method-delete: oklch(0.70 0.18 25);\n\n    --scrollbar-thumb: oklch(0.30 0.005 260);\n    --scrollbar-thumb-hover: oklch(0.38 0.005 260);\n  }\n}\n\n@layer base {\n  * {\n    @apply border-border;\n  }\n\n  html,\n  body,\n  #root {\n    min-height: 100%;\n    height: 100%;\n  }\n\n  body {\n    @apply bg-background font-sans text-foreground antialiased;\n  }\n\n  /* Scrollbar styling */\n  ::-webkit-scrollbar {\n    width: 6px;\n    height: 6px;\n  }\n\n  ::-webkit-scrollbar-track {\n    background: transparent;\n  }\n\n  ::-webkit-scrollbar-thumb {\n    background: var(--scrollbar-thumb);\n    border-radius: 3px;\n  }\n\n  ::-webkit-scrollbar-thumb:hover {\n    background: var(--scrollbar-thumb-hover);\n  }\n}\n\n/* Indeterminate progress shimmer */\n@keyframes indeterminate-progress {\n  0% { transform: translateX(-100%); }\n  100% { transform: translateX(400%); }\n}\n\n/* Streamdown code block overrides */\n[data-streamdown=\"code-block-body\"] {\n  background-color: var(--muted) !important;\n  border: 1px solid var(--border);\n  border-radius: 0.375rem;\n}\n"
  },
  {
    "path": "apps/web/src/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta name=\"color-scheme\" content=\"light dark\" />\n    <title>Executor</title>\n    <meta\n      name=\"description\"\n      content=\"Executor — manage sources, inspect tools, and monitor executions.\"\n    />\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <script type=\"module\">\n      // first npm i react-grab\n      // then in head:\n      if (import.meta.env.DEV) {\n        import(\"react-grab\");\n      }\n    </script>\n    <link\n      href=\"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;0,9..40,700;1,9..40,400&family=Instrument+Serif&family=JetBrains+Mono:wght@400;500&display=swap\"\n      rel=\"stylesheet\"\n    />\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"./frontend.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "apps/web/src/lib/schema-display.ts",
    "content": "type JsonRecord = Record<string, unknown>;\n\nconst asRecord = (value: unknown): JsonRecord =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as JsonRecord)\n    : {};\n\nconst decodeRefSegment = (segment: string): string =>\n  segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n\nconst resolveLocalRef = (\n  root: JsonRecord,\n  ref: string,\n): JsonRecord | null => {\n  if (!ref.startsWith(\"#/\")) {\n    return null;\n  }\n\n  const segments = ref.slice(2).split(\"/\").map(decodeRefSegment);\n  let current: unknown = root;\n  for (const segment of segments) {\n    const record = asRecord(current);\n    if (!(segment in record)) {\n      return null;\n    }\n    current = record[segment];\n  }\n\n  const resolved = asRecord(current);\n  return Object.keys(resolved).length > 0 ? resolved : null;\n};\n\nconst expandNodeForDisplay = (\n  node: unknown,\n  root: JsonRecord,\n  depth: number,\n  seenRefs: ReadonlySet<string>,\n): unknown => {\n  const record = asRecord(node);\n  if (Object.keys(record).length === 0 || depth < 0) {\n    return node;\n  }\n\n  if (typeof record.$ref === \"string\") {\n    const ref = record.$ref;\n    if (seenRefs.has(ref)) {\n      return node;\n    }\n\n    const target = resolveLocalRef(root, ref);\n    if (!target) {\n      return node;\n    }\n\n    const { $ref: _ignored, ...overlay } = record;\n    const expandedTarget = asRecord(\n      expandNodeForDisplay(target, root, depth - 1, new Set([...seenRefs, ref])),\n    );\n    return {\n      ...expandedTarget,\n      ...overlay,\n    };\n  }\n\n  const nextDepth = depth - 1;\n  const expanded: JsonRecord = {};\n\n  for (const [key, value] of Object.entries(record)) {\n    if (key === \"$defs\") {\n      expanded[key] = value;\n      continue;\n    }\n\n    if (key === \"properties\" || key === \"patternProperties\") {\n      const childRecord = asRecord(value);\n      expanded[key] = Object.fromEntries(\n        Object.entries(childRecord).map(([childKey, childValue]) => [\n          childKey,\n          expandNodeForDisplay(childValue, root, nextDepth, seenRefs),\n        ]),\n      );\n      continue;\n    }\n\n    if (key === \"items\" || key === \"additionalProperties\") {\n      expanded[key] =\n        typeof value === \"boolean\"\n          ? value\n          : expandNodeForDisplay(value, root, nextDepth, seenRefs);\n      continue;\n    }\n\n    if (key === \"anyOf\" || key === \"oneOf\" || key === \"allOf\") {\n      expanded[key] = Array.isArray(value)\n        ? value.map((entry) => expandNodeForDisplay(entry, root, nextDepth, seenRefs))\n        : value;\n      continue;\n    }\n\n    expanded[key] = value;\n  }\n\n  return expanded;\n};\n\nexport const formatSchemaJsonForDisplay = (\n  schemaJson: string | null | undefined,\n): string | null => {\n  if (!schemaJson) {\n    return null;\n  }\n\n  try {\n    const parsed = JSON.parse(schemaJson) as unknown;\n    const root = asRecord(parsed);\n    const expanded = expandNodeForDisplay(root, root, 3, new Set<string>());\n    return JSON.stringify(expanded, null, 2);\n  } catch {\n    return schemaJson;\n  }\n};\n"
  },
  {
    "path": "apps/web/src/lib/shiki.ts",
    "content": "import {\n  createHighlighterCore,\n  type HighlighterCore,\n  type LanguageInput,\n} from \"shiki/core\";\nimport { createJavaScriptRegexEngine } from \"shiki/engine/javascript\";\nimport type { CodeHighlighterPlugin, ThemeInput } from \"streamdown\";\n\n/**\n * Shared Shiki highlighter with a limited set of languages and a single theme.\n *\n * Using shiki/core + explicit language imports avoids bundling all ~300\n * grammars and ~80 themes that the full \"shiki\" entry ships.\n */\n\nconst SUPPORTED_LANGS = [\n  \"json\",\n  \"xml\",\n  \"yaml\",\n  \"shellscript\",\n  \"typescript\",\n  \"javascript\",\n  \"python\",\n  \"html\",\n  \"css\",\n  \"markdown\",\n  \"sql\",\n  \"graphql\",\n  \"go\",\n  \"rust\",\n  \"java\",\n  \"ruby\",\n  \"php\",\n  \"swift\",\n  \"kotlin\",\n  \"c\",\n  \"cpp\",\n  \"csharp\",\n  \"tsx\",\n  \"jsx\",\n  \"toml\",\n  \"dockerfile\",\n  \"diff\",\n  \"http\",\n  \"jsonc\",\n  \"log\",\n  \"proto\",\n] as const;\n\ntype SupportedLang = (typeof SUPPORTED_LANGS)[number];\n\nconst LANG_ALIASES: Record<string, SupportedLang> = {\n  sh: \"shellscript\",\n  shell: \"shellscript\",\n  bash: \"shellscript\",\n  zsh: \"shellscript\",\n  ts: \"typescript\",\n  js: \"javascript\",\n  py: \"python\",\n  rb: \"ruby\",\n  rs: \"rust\",\n  \"c++\": \"cpp\",\n  \"c#\": \"csharp\",\n  cs: \"csharp\",\n  kt: \"kotlin\",\n  md: \"markdown\",\n  gql: \"graphql\",\n  yml: \"yaml\",\n};\n\nconst LANG_LOADERS: Record<SupportedLang, () => LanguageInput> = {\n  json: () => import(\"@shikijs/langs/json\"),\n  xml: () => import(\"@shikijs/langs/xml\"),\n  yaml: () => import(\"@shikijs/langs/yaml\"),\n  shellscript: () => import(\"@shikijs/langs/shellscript\"),\n  typescript: () => import(\"@shikijs/langs/typescript\"),\n  javascript: () => import(\"@shikijs/langs/javascript\"),\n  python: () => import(\"@shikijs/langs/python\"),\n  html: () => import(\"@shikijs/langs/html\"),\n  css: () => import(\"@shikijs/langs/css\"),\n  markdown: () => import(\"@shikijs/langs/markdown\"),\n  sql: () => import(\"@shikijs/langs/sql\"),\n  graphql: () => import(\"@shikijs/langs/graphql\"),\n  go: () => import(\"@shikijs/langs/go\"),\n  rust: () => import(\"@shikijs/langs/rust\"),\n  java: () => import(\"@shikijs/langs/java\"),\n  ruby: () => import(\"@shikijs/langs/ruby\"),\n  php: () => import(\"@shikijs/langs/php\"),\n  swift: () => import(\"@shikijs/langs/swift\"),\n  kotlin: () => import(\"@shikijs/langs/kotlin\"),\n  c: () => import(\"@shikijs/langs/c\"),\n  cpp: () => import(\"@shikijs/langs/cpp\"),\n  csharp: () => import(\"@shikijs/langs/csharp\"),\n  tsx: () => import(\"@shikijs/langs/tsx\"),\n  jsx: () => import(\"@shikijs/langs/jsx\"),\n  toml: () => import(\"@shikijs/langs/toml\"),\n  dockerfile: () => import(\"@shikijs/langs/dockerfile\"),\n  diff: () => import(\"@shikijs/langs/diff\"),\n  http: () => import(\"@shikijs/langs/http\"),\n  jsonc: () => import(\"@shikijs/langs/jsonc\"),\n  log: () => import(\"@shikijs/langs/log\"),\n  proto: () => import(\"@shikijs/langs/proto\"),\n};\n\nconst supportedSet = new Set<string>([\n  ...SUPPORTED_LANGS,\n  ...Object.keys(LANG_ALIASES),\n]);\n\nexport function resolveLang(lang: string): SupportedLang | null {\n  const l = lang.trim().toLowerCase();\n  if (l in LANG_LOADERS) return l as SupportedLang;\n  if (l in LANG_ALIASES) return LANG_ALIASES[l]!;\n  return null;\n}\n\nexport function isSupportedLang(lang: string): boolean {\n  return supportedSet.has(lang.trim().toLowerCase());\n}\n\n// ----- Singleton Highlighter -----\n\nconst jsEngine = createJavaScriptRegexEngine({ forgiving: true });\n\nlet _highlighter: HighlighterCore | null = null;\nlet _highlighterPromise: Promise<HighlighterCore> | null = null;\n\nasync function getHighlighter(): Promise<HighlighterCore> {\n  if (_highlighter) return _highlighter;\n  if (_highlighterPromise) return _highlighterPromise;\n\n  _highlighterPromise = createHighlighterCore({\n    themes: [import(\"@shikijs/themes/vitesse-dark\")],\n    langs: Object.values(LANG_LOADERS).map((loader) => loader()),\n    engine: jsEngine,\n  }).then((h) => {\n    _highlighter = h;\n    return h;\n  });\n\n  return _highlighterPromise;\n}\n\n// Eagerly start loading (but don't block)\nvoid getHighlighter();\n\n/**\n * Highlight code to HTML using the shared limited highlighter.\n */\nexport async function codeToHtml(\n  code: string,\n  options: { lang: string; theme?: string },\n): Promise<string> {\n  const highlighter = await getHighlighter();\n  const resolved = resolveLang(options.lang) ?? \"json\";\n  return highlighter.codeToHtml(code, {\n    lang: resolved,\n    theme: \"vitesse-dark\",\n  });\n}\n\n// ----- Streamdown Code Plugin -----\n\nconst THEME = \"vitesse-dark\" as ThemeInput;\nconst tokensCache = new Map<string, unknown>();\nconst pendingCallbacks = new Map<string, Set<(result: unknown) => void>>();\n\n/**\n * A Streamdown code highlighter plugin that uses only the limited set\n * of languages and the vitesse-dark theme.\n *\n * Drop-in replacement for `createCodePlugin()` from `@streamdown/code`.\n */\nexport function createLimitedCodePlugin(): CodeHighlighterPlugin {\n  return {\n    name: \"shiki\" as const,\n    type: \"code-highlighter\" as const,\n    getSupportedLanguages: () => [...SUPPORTED_LANGS] as string[] as never,\n    getThemes: () => [THEME, THEME],\n    supportsLanguage: (language: string) =>\n      isSupportedLang(language),\n    highlight(options, callback) {\n      const resolved = resolveLang(options.language);\n      const lang = resolved ?? \"json\";\n      const key = `${lang}:${options.code.length}:${options.code.slice(0, 128)}`;\n\n      const cached = tokensCache.get(key);\n      if (cached) return cached as never;\n\n      if (callback) {\n        if (!pendingCallbacks.has(key)) {\n          pendingCallbacks.set(key, new Set());\n        }\n        pendingCallbacks.get(key)!.add(callback as (result: unknown) => void);\n      }\n\n      void getHighlighter().then((highlighter) => {\n        if (tokensCache.has(key)) {\n          const result = tokensCache.get(key);\n          pendingCallbacks.get(key)?.forEach((cb) => cb(result));\n          pendingCallbacks.delete(key);\n          return;\n        }\n        const result = highlighter.codeToTokens(options.code, {\n          lang,\n          themes: { light: \"vitesse-dark\", dark: \"vitesse-dark\" },\n        });\n        tokensCache.set(key, result);\n        pendingCallbacks.get(key)?.forEach((cb) => cb(result));\n        pendingCallbacks.delete(key);\n      });\n\n      return null;\n    },\n  };\n}\n"
  },
  {
    "path": "apps/web/src/lib/source-favicon.ts",
    "content": "import { parse as parseDomain } from \"tldts\";\n\nconst RAW_HOSTS = new Set([\n  \"raw.githubusercontent.com\",\n  \"cdn.jsdelivr.net\",\n  \"unpkg.com\",\n  \"raw.github.com\",\n]);\n\n// ---------------------------------------------------------------------------\n// Google product icon URLs (official CDN assets)\n// ---------------------------------------------------------------------------\n\nconst GOOGLE_SERVICE_ICONS: Record<string, string> = {\n  calendar: \"https://ssl.gstatic.com/calendar/images/dynamiclogo_2020q4/calendar_31_2x.png\",\n  drive: \"https://ssl.gstatic.com/images/branding/product/2x/drive_2020q4_48dp.png\",\n  gmail: \"https://ssl.gstatic.com/ui/v1/icons/mail/rfr/gmail.ico\",\n  docs: \"https://ssl.gstatic.com/docs/documents/images/kix-favicon7.ico\",\n  sheets: \"https://ssl.gstatic.com/docs/spreadsheets/favicon3.ico\",\n  slides: \"https://ssl.gstatic.com/docs/presentations/images/favicon5.ico\",\n  forms: \"https://ssl.gstatic.com/docs/forms/device_home/android_192.png\",\n  searchconsole: \"https://ssl.gstatic.com/search-console/scfe/search_console-64.png\",\n  people: \"https://ssl.gstatic.com/images/branding/product/2x/contacts_2022_48dp.png\",\n  tasks: \"https://ssl.gstatic.com/tasks/images/favicon.ico\",\n  chat: \"https://ssl.gstatic.com/chat/favicon/favicon_v2.ico\",\n  keep: \"https://ssl.gstatic.com/keep/icon_2020q4v2_128.png\",\n  classroom: \"https://ssl.gstatic.com/classroom/favicon.png\",\n  admin: \"https://ssl.gstatic.com/images/branding/product/2x/admin_2020q4_48dp.png\",\n  script: \"https://ssl.gstatic.com/script/images/favicon.ico\",\n  bigquery: \"https://ssl.gstatic.com/bqui1/favicon.ico\",\n  cloudresourcemanager: \"https://www.gstatic.com/devrel-devsite/prod/v0e0f589edd85502a40d78d7d0825db8ea5ef3b99b1571571945f0f3f764ff61b/cloud/images/favicons/onecloud/favicon.ico\",\n  youtube: \"https://www.youtube.com/s/desktop/a94e1818/img/favicon_32x32.png\",\n};\n\n/**\n * For google_discovery endpoints, extract the service name and return\n * the official product icon URL if we have one.\n */\nconst getGoogleServiceIconUrl = (endpoint: string | null | undefined): string | null => {\n  if (!endpoint) return null;\n  try {\n    const url = new URL(endpoint);\n    const host = url.hostname;\n\n    // Direct service subdomain: \"calendar-json.googleapis.com\", \"gmail.googleapis.com\"\n    if (host.endsWith(\".googleapis.com\")) {\n      const sub = host.replace(/\\.googleapis\\.com$/, \"\").replace(/-json$/, \"\");\n      if (GOOGLE_SERVICE_ICONS[sub]) return GOOGLE_SERVICE_ICONS[sub];\n    }\n\n    // Discovery URL pattern: /discovery/v1/apis/{service}/{version}/rest\n    const discoveryMatch = url.pathname.match(/\\/apis\\/([^/]+)\\//);\n    if (discoveryMatch?.[1] && GOOGLE_SERVICE_ICONS[discoveryMatch[1]]) {\n      return GOOGLE_SERVICE_ICONS[discoveryMatch[1]];\n    }\n\n    // $discovery/rest pattern on service subdomains is already handled above\n  } catch {\n    // fall through\n  }\n  return null;\n};\n\n// ---------------------------------------------------------------------------\n// General favicon resolution\n// ---------------------------------------------------------------------------\n\nconst parseUrl = (value: string | null | undefined): URL | null => {\n  if (!value) {\n    return null;\n  }\n\n  try {\n    return new URL(value);\n  } catch {\n    return null;\n  }\n};\n\nconst normalizeSeedUrl = (value: string | null | undefined): string | null => {\n  const parsed = parseUrl(value);\n  if (!parsed) {\n    return null;\n  }\n\n  if (!RAW_HOSTS.has(parsed.hostname)) {\n    return parsed.origin;\n  }\n\n  const segments = parsed.pathname\n    .split(\"/\")\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\n  for (const segment of segments) {\n    const withoutExtension = segment.replace(/\\.(ya?ml|json)$/i, \"\");\n    if (/^[a-z0-9-]+(\\.[a-z0-9-]+)+$/i.test(withoutExtension)) {\n      return `https://${withoutExtension}`;\n    }\n  }\n\n  return parsed.origin;\n};\n\nexport const getGoogleProductIconUrl = getGoogleServiceIconUrl;\n\nexport const getSourceFaviconUrl = (\n  value: string | null | undefined,\n): string | null => {\n  const seedUrl = normalizeSeedUrl(value);\n  if (!seedUrl) {\n    return null;\n  }\n\n  try {\n    const hostname = new URL(seedUrl).hostname;\n    const parsed = parseDomain(hostname);\n    const domain = parsed.domain ?? hostname;\n    return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(domain)}&sz=32`;\n  } catch {\n    return null;\n  }\n};\n"
  },
  {
    "path": "apps/web/src/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ReadonlyArray<ClassValue>): string {\n  return twMerge(clsx(inputs));\n}\n"
  },
  {
    "path": "apps/web/src/main.tsx",
    "content": "import * as React from \"react\";\nimport {\n  RouterProvider,\n  createRootRoute,\n  createRoute,\n  createRouter,\n  useNavigate,\n} from \"@tanstack/react-router\";\nimport { ExecutorReactProvider } from \"@executor/react\";\n\nimport \"./globals.css\";\n\nimport { AppShell } from \"./components/shell\";\nimport { HomePage } from \"./views/home\";\nimport { EditSourcePage, NewSourcePage } from \"./views/source-editor\";\nimport { SourceDetailPage } from \"./views/source-detail\";\nimport { SecretsPage } from \"./views/secrets\";\nimport { AddSourcePage } from \"./views/add-source\";\n\n// ---------------------------------------------------------------------------\n// Route search schema\n// ---------------------------------------------------------------------------\n\ntype SourceRouteSearch = {\n  tab: \"model\" | \"discover\";\n  tool?: string;\n  query?: string;\n};\n\nconst sourceTabs = [\"model\", \"discover\"] as const;\n\n// ---------------------------------------------------------------------------\n// Routes\n// ---------------------------------------------------------------------------\n\nconst rootRoute = createRootRoute({\n  component: AppShell,\n});\n\nconst homeRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/\",\n  component: HomePage,\n});\n\nconst newSourceRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/sources/new\",\n  component: NewSourcePage,\n});\n\nconst addSourceRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/sources/add\",\n  component: AddSourcePage,\n});\n\nconst sourceRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/sources/$sourceId\",\n  validateSearch: (search: Record<string, unknown>): SourceRouteSearch => ({\n    tab:\n      typeof search.tab === \"string\" && sourceTabs.includes(search.tab as SourceRouteSearch[\"tab\"])\n        ? (search.tab as SourceRouteSearch[\"tab\"])\n        : \"model\",\n    tool: typeof search.tool === \"string\" && search.tool.length > 0 ? search.tool : undefined,\n    query: typeof search.query === \"string\" ? search.query : undefined,\n  }),\n  component: SourceDetailPageWrapper,\n});\n\nconst editSourceRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/sources/$sourceId/edit\",\n  component: EditSourcePageWrapper,\n});\n\nconst secretsRoute = createRoute({\n  getParentRoute: () => rootRoute,\n  path: \"/secrets\",\n  component: SecretsPage,\n});\n\n\nfunction SourceDetailPageWrapper() {\n  const { sourceId } = sourceRoute.useParams();\n  const search = sourceRoute.useSearch();\n  const navigate = useNavigate({ from: sourceRoute.fullPath });\n\n  return (\n    <SourceDetailPage\n      sourceId={sourceId}\n      search={search}\n      navigate={navigate as any}\n    />\n  );\n}\n\nfunction EditSourcePageWrapper() {\n  const { sourceId } = editSourceRoute.useParams();\n  return <EditSourcePage sourceId={sourceId} />;\n}\n\n// ---------------------------------------------------------------------------\n// Router\n// ---------------------------------------------------------------------------\n\nconst routeTree = rootRoute.addChildren([homeRoute, newSourceRoute, addSourceRoute, sourceRoute, editSourceRoute, secretsRoute]);\n\nconst router = createRouter({\n  routeTree,\n  defaultPreload: \"intent\",\n});\n\ndeclare module \"@tanstack/react-router\" {\n  interface Register {\n    router: typeof router;\n  }\n}\n\n// ---------------------------------------------------------------------------\n// App\n// ---------------------------------------------------------------------------\n\nexport function App() {\n  return (\n    <React.StrictMode>\n      <ExecutorReactProvider>\n        <RouterProvider router={router} />\n      </ExecutorReactProvider>\n    </React.StrictMode>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/server.ts",
    "content": "/**\n * Production server. Serves the API + Vite-built static assets.\n *\n * In development, use `bun run dev` which starts Vite with\n * @hono/vite-dev-server embedding the API via dev.ts.\n */\nimport { runLocalExecutorServer } from \"@executor/server\";\n\nawait runLocalExecutorServer({\n  ui: {\n    assetsDir: new URL(\"../dist\", import.meta.url).pathname,\n  },\n});\n"
  },
  {
    "path": "apps/web/src/views/add-source.tsx",
    "content": "import { useEffect, useState, type ReactNode } from \"react\";\nimport { Link, useNavigate } from \"@tanstack/react-router\";\nimport {\n  type CompleteSourceOAuthResult,\n  type ConnectSourceBatchPayload,\n  type ConnectSourcePayload,\n  type ConnectSourceResult,\n  type CreateWorkspaceOauthClientPayload,\n  type DiscoverSourcePayload,\n  type InstanceConfig,\n  type Loadable,\n  type SecretListItem,\n  type Source,\n  type SourceDiscoveryResult,\n  type WorkspaceOauthClient,\n  useConnectSourceBatch,\n  useConnectSource,\n  useCreateWorkspaceOauthClient,\n  useCreateSecret,\n  useDiscoverSource,\n  useInvalidateExecutorQueries,\n  useInstanceConfig,\n  useRefreshSecrets,\n  useSecrets,\n  useWorkspaceOauthClients,\n} from \"@executor/react\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Button } from \"../components/ui/button\";\nimport { LocalMcpInstallCard } from \"../components/local-mcp-install-card\";\nimport { SourceFavicon } from \"../components/source-favicon\";\nimport {\n  IconArrowLeft,\n  IconCheck,\n  IconDiscover,\n  IconPlus,\n  IconSpinner,\n} from \"../components/icons\";\nimport { cn } from \"../lib/utils\";\nimport {\n  isStdioMcpSourceTemplate,\n  sourceTemplates,\n  type SourceTemplate,\n} from \"./source-templates\";\nimport {\n  asMcpRemoteTransportValue,\n  defaultMcpRemoteTransportFields,\n  defaultMcpStdioTransportFields,\n  setMcpTransportFieldsTransport,\n  type McpRemoteTransportFields,\n  type McpStdioTransportFields,\n  type McpTransportFields,\n  type McpTransportValue,\n} from \"./mcp-transport-state\";\nimport { parseJsonStringArray, parseJsonStringMap } from \"./json-form\";\nimport { getDomain } from \"tldts\";\n\n// ---------------------------------------------------------------------------\n// State machine\n// ---------------------------------------------------------------------------\n\ntype FlowPhase =\n  | \"idle\"\n  | \"discovering\"\n  | \"editing\"\n  | \"connecting\"\n  | \"connected\"\n  | \"credential_required\"\n  | \"oauth_required\";\n\ntype ProbeAuthKind = \"none\" | \"bearer\" | \"basic\" | \"headers\";\n\ntype ProbeAuthState = {\n  kind: ProbeAuthKind;\n  token: string;\n  headerName: string;\n  prefix: string;\n  username: string;\n  password: string;\n  headersText: string;\n};\n\ntype ConnectFormBase = {\n  kind: \"mcp\" | \"openapi\" | \"graphql\" | \"google_discovery\";\n  endpoint: string;\n  specUrl: string;\n  service: string;\n  version: string;\n  discoveryUrl: string;\n  name: string;\n  namespace: string;\n  authKind: \"none\" | \"bearer\" | \"oauth2\";\n  authHeaderName: string;\n  authPrefix: string;\n  bearerToken: string;\n  bearerProviderId: string;\n  bearerHandle: string;\n  workspaceOauthClientId: string;\n  oauthClientId: string;\n  oauthClientSecret: string;\n};\n\ntype ConnectFormState = ConnectFormBase & McpTransportFields;\n\ntype OAuthRequiredInfo = {\n  source: Source;\n  sessionId: string;\n  authorizationUrl: string;\n};\n\ntype BatchOAuthRequiredInfo = {\n  sessionId: string;\n  authorizationUrl: string;\n  sourceIds: ReadonlyArray<string>;\n};\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst kindOptions: ReadonlyArray<ConnectFormState[\"kind\"]> = [\n  \"mcp\",\n  \"openapi\",\n  \"graphql\",\n  \"google_discovery\",\n];\n\nconst transportOptions: ReadonlyArray<Exclude<McpTransportValue, \"\">> = [\n  \"auto\",\n  \"streamable-http\",\n  \"sse\",\n  \"stdio\",\n];\n\nconst authOptions: ReadonlyArray<ConnectFormState[\"authKind\"]> = [\n  \"none\",\n  \"bearer\",\n  \"oauth2\",\n];\n\nconst probeAuthOptions: ReadonlyArray<ProbeAuthKind> = [\n  \"none\",\n  \"bearer\",\n  \"basic\",\n  \"headers\",\n];\n\nconst SOURCE_OAUTH_POPUP_RESULT_TIMEOUT_MS = 2 * 60_000;\nconst SOURCE_OAUTH_POPUP_RESULT_STORAGE_KEY_PREFIX = \"executor:oauth-result:\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst trimToNull = (value: string): string | null => {\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nconst namespaceFromUrl = (url: string): string => {\n  try {\n    const domain = getDomain(url);\n    if (!domain) return \"\";\n    // Strip the TLD: \"github.com\" -> \"github\", \"linear.app\" -> \"linear\"\n    const dot = domain.indexOf(\".\");\n    return dot > 0 ? domain.slice(0, dot) : domain;\n  } catch {\n    return \"\";\n  }\n};\n\nconst googleDiscoveryNamespace = (service: string): string =>\n  `google.${service\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \".\")\n    .replace(/^\\.+|\\.+$/g, \"\")}`;\n\nconst googleDiscoveryDefaultsFromUrl = (\n  value: string,\n): {\n  service: string;\n  version: string;\n  discoveryUrl: string;\n} | null => {\n  try {\n    const url = new URL(value);\n    const byDirectory = url.pathname.match(\n      /^\\/discovery\\/v1\\/apis\\/([^/]+)\\/([^/]+)\\/rest$/,\n    );\n    if (byDirectory) {\n      return {\n        service: decodeURIComponent(byDirectory[1] ?? \"\"),\n        version: decodeURIComponent(byDirectory[2] ?? \"\"),\n        discoveryUrl: url.toString(),\n      };\n    }\n\n    const versionParam = url.searchParams.get(\"version\");\n    const version = versionParam ? trimToNull(versionParam) : null;\n    const isHostScopedDiscovery =\n      url.pathname === \"/$discovery/rest\" &&\n      url.hostname.endsWith(\".googleapis.com\") &&\n      url.hostname !== \"www.googleapis.com\";\n    if (version && isHostScopedDiscovery) {\n      return {\n        service: url.hostname.split(\".\")[0] ?? \"\",\n        version,\n        discoveryUrl: url.toString(),\n      };\n    }\n\n    return null;\n  } catch {\n    return null;\n  }\n};\n\nconst stringifyStringMap = (\n  value: Readonly<Record<string, string>> | null | undefined,\n): string =>\n  !value || Object.keys(value).length === 0\n    ? \"\"\n    : JSON.stringify(value, null, 2);\n\nconst stringifyStringArray = (\n  value: ReadonlyArray<string> | null | undefined,\n): string =>\n  !value || value.length === 0 ? \"\" : JSON.stringify(value, null, 2);\n\nconst buildSyntheticMcpStdioEndpoint = (input: {\n  name?: string | null;\n  endpoint?: string | null;\n  command?: string | null;\n}): string => {\n  const label =\n    input.name?.trim() ||\n    input.endpoint?.trim() ||\n    input.command?.trim() ||\n    \"mcp\";\n  const slug = label\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n\n  return `stdio://local/${slug || \"mcp\"}`;\n};\n\n// ---------------------------------------------------------------------------\n// Derived defaults from discovery result\n// ---------------------------------------------------------------------------\n\nconst defaultConnectForm = (\n  discovery?: SourceDiscoveryResult,\n): ConnectFormState => {\n  if (!discovery || discovery.detectedKind === \"unknown\") {\n    return {\n      kind: \"openapi\",\n      endpoint: discovery?.endpoint ?? \"\",\n      specUrl: discovery?.specUrl ?? \"\",\n      service: \"\",\n      version: \"\",\n      discoveryUrl: \"\",\n      name: discovery?.name ?? \"\",\n      namespace:\n        discovery?.namespace || namespaceFromUrl(discovery?.endpoint ?? \"\"),\n      authKind: \"none\",\n      authHeaderName: \"Authorization\",\n      authPrefix: \"Bearer \",\n      bearerToken: \"\",\n      bearerProviderId: \"\",\n      bearerHandle: \"\",\n      workspaceOauthClientId: \"\",\n      oauthClientId: \"\",\n      oauthClientSecret: \"\",\n      ...defaultMcpRemoteTransportFields(),\n    };\n  }\n\n  const kind = discovery.detectedKind as ConnectFormState[\"kind\"];\n  const auth = discovery.authInference;\n\n  // Map auth suggestion to what backend connect supports\n  let authKind: ConnectFormState[\"authKind\"] = \"none\";\n  let authHeaderName = \"Authorization\";\n  let authPrefix = \"Bearer \";\n\n  if (auth.supported) {\n    if (auth.suggestedKind === \"bearer\" || auth.suggestedKind === \"apiKey\") {\n      authKind = \"bearer\";\n      authHeaderName = auth.headerName ?? \"Authorization\";\n      authPrefix = auth.prefix ?? \"Bearer \";\n    } else if (auth.suggestedKind === \"oauth2\") {\n      authKind = \"oauth2\";\n      authHeaderName = auth.headerName ?? \"Authorization\";\n      authPrefix = auth.prefix ?? \"Bearer \";\n    } else if (auth.suggestedKind === \"basic\") {\n      // Backend connect doesn't support basic auth natively; map to bearer\n      authKind = \"bearer\";\n      authHeaderName = \"Authorization\";\n      authPrefix = \"Basic \";\n    }\n  }\n\n  const googleDiscoveryDefaults =\n    kind === \"google_discovery\"\n      ? googleDiscoveryDefaultsFromUrl(discovery.specUrl ?? discovery.endpoint)\n      : null;\n\n  return {\n    kind,\n    endpoint: discovery.endpoint,\n    specUrl: discovery.specUrl ?? \"\",\n    service: googleDiscoveryDefaults?.service ?? \"\",\n    version: googleDiscoveryDefaults?.version ?? \"\",\n    discoveryUrl: googleDiscoveryDefaults?.discoveryUrl ?? \"\",\n    name: discovery.name ?? \"\",\n    namespace: discovery.namespace || namespaceFromUrl(discovery.endpoint),\n    authKind,\n    authHeaderName,\n    authPrefix,\n    bearerToken: \"\",\n    bearerProviderId: \"\",\n    bearerHandle: \"\",\n    workspaceOauthClientId: \"\",\n    oauthClientId: \"\",\n    oauthClientSecret: \"\",\n    ...defaultMcpRemoteTransportFields(\n      kind === \"mcp\" ? asMcpRemoteTransportValue(discovery.transport) : \"\",\n    ),\n  };\n};\n\nconst connectFormFromTemplate = (\n  template: SourceTemplate,\n): ConnectFormState => ({\n  ...defaultConnectForm(),\n  kind: template.kind as ConnectFormState[\"kind\"],\n  endpoint: template.endpoint ?? \"\",\n  specUrl: \"specUrl\" in template ? template.specUrl : \"\",\n  service: \"service\" in template ? template.service : \"\",\n  version: \"version\" in template ? template.version : \"\",\n  discoveryUrl: \"discoveryUrl\" in template ? template.discoveryUrl : \"\",\n  name: template.name,\n  namespace:\n    template.namespace ??\n    (\"service\" in template\n      ? googleDiscoveryNamespace(template.service)\n      : namespaceFromUrl(template.endpoint ?? \"\")),\n  authKind: template.kind === \"google_discovery\" ? \"oauth2\" : \"none\",\n  workspaceOauthClientId: \"\",\n  ...(template.kind === \"mcp\" && template.connectionType === \"command\"\n    ? defaultMcpStdioTransportFields({\n        command: template.command ?? \"\",\n        argsText: stringifyStringArray(template.args),\n        envText: stringifyStringMap(template.env),\n        cwd: template.cwd ?? \"\",\n      })\n    : defaultMcpRemoteTransportFields(\n        template.kind === \"mcp\"\n          ? asMcpRemoteTransportValue(template.transport)\n          : \"\",\n      )),\n});\n\nconst authKindForSourceKind = (\n  currentAuthKind: ConnectFormState[\"authKind\"],\n  nextKind: ConnectFormState[\"kind\"],\n): ConnectFormState[\"authKind\"] =>\n  nextKind === \"google_discovery\" && currentAuthKind === \"none\"\n    ? \"oauth2\"\n    : currentAuthKind;\n\nconst buildProbeAuth = (\n  state: ProbeAuthState,\n): DiscoverSourcePayload[\"probeAuth\"] => {\n  if (state.kind === \"none\") return { kind: \"none\" };\n  if (state.kind === \"bearer\") {\n    if (!state.token.trim())\n      throw new Error(\"Token is required for bearer probe auth.\");\n    return {\n      kind: \"bearer\",\n      headerName: trimToNull(state.headerName),\n      prefix: trimToNull(state.prefix),\n      token: state.token.trim(),\n    };\n  }\n  if (state.kind === \"basic\") {\n    if (!state.username.trim())\n      throw new Error(\"Username is required for basic probe auth.\");\n    return {\n      kind: \"basic\",\n      username: state.username.trim(),\n      password: state.password,\n    };\n  }\n  // headers\n  const headers = parseJsonStringMap(\"Probe headers\", state.headersText);\n  if (!headers)\n    throw new Error(\"At least one header is required for headers probe auth.\");\n  return { kind: \"headers\", headers };\n};\n\nconst buildConnectPayload = (form: ConnectFormState): ConnectSourcePayload => {\n  if (form.kind === \"mcp\") {\n    if (form.transport === \"stdio\") {\n      const endpoint = buildSyntheticMcpStdioEndpoint({\n        name: form.name,\n        endpoint: form.endpoint,\n        command: form.command,\n      });\n      if (!form.command.trim()) {\n        throw new Error(\"Command is required for stdio MCP sources.\");\n      }\n      return {\n        kind: \"mcp\",\n        endpoint,\n        name: trimToNull(form.name),\n        namespace: trimToNull(form.namespace),\n        transport: \"stdio\",\n        queryParams: null,\n        headers: null,\n        command: form.command.trim(),\n        args: parseJsonStringArray(\"Args\", form.argsText),\n        env: parseJsonStringMap(\"Environment\", form.envText),\n        cwd: trimToNull(form.cwd),\n      };\n    }\n\n    const endpoint = form.endpoint.trim();\n    if (!endpoint) throw new Error(\"Endpoint is required.\");\n    return {\n      kind: \"mcp\",\n      endpoint,\n      name: trimToNull(form.name),\n      namespace: trimToNull(form.namespace),\n      transport: form.transport === \"\" ? \"auto\" : form.transport,\n      queryParams: parseJsonStringMap(\"Query params\", form.queryParamsText),\n      headers: parseJsonStringMap(\"Request headers\", form.headersText),\n      command: null,\n      args: null,\n      env: null,\n      cwd: null,\n    };\n  }\n\n  // Build HTTP auth for openapi/graphql\n  const auth = buildHttpAuth(form);\n\n  if (form.kind === \"openapi\") {\n    const endpoint = form.endpoint.trim();\n    if (!endpoint) throw new Error(\"Endpoint is required.\");\n    const specUrl = form.specUrl.trim();\n    if (!specUrl) throw new Error(\"OpenAPI sources require a spec URL.\");\n    return {\n      kind: \"openapi\",\n      endpoint,\n      specUrl,\n      name: trimToNull(form.name),\n      namespace: trimToNull(form.namespace),\n      auth,\n    };\n  }\n\n  if (form.kind === \"google_discovery\") {\n    const service = form.service.trim();\n    const version = form.version.trim();\n    if (!service)\n      throw new Error(\"Google Discovery sources require a service name.\");\n    if (!version)\n      throw new Error(\"Google Discovery sources require a version.\");\n    if (\n      form.authKind === \"oauth2\" &&\n      form.workspaceOauthClientId.trim().length === 0 &&\n      form.oauthClientId.trim().length === 0\n    ) {\n      throw new Error(\n        \"Google OAuth requires a workspace OAuth client or a new client ID.\",\n      );\n    }\n    return {\n      kind: \"google_discovery\",\n      service,\n      version,\n      discoveryUrl: trimToNull(form.discoveryUrl),\n      name: trimToNull(form.name),\n      namespace: trimToNull(form.namespace),\n      workspaceOauthClientId:\n        form.authKind === \"oauth2\" &&\n        form.workspaceOauthClientId.trim().length > 0\n          ? form.workspaceOauthClientId.trim()\n          : undefined,\n      oauthClient:\n        form.authKind === \"oauth2\" &&\n        form.workspaceOauthClientId.trim().length === 0\n          ? {\n              clientId: form.oauthClientId.trim(),\n              clientSecret: trimToNull(form.oauthClientSecret),\n            }\n          : null,\n      auth,\n    };\n  }\n\n  const endpoint = form.endpoint.trim();\n  if (!endpoint) throw new Error(\"Endpoint is required.\");\n  return {\n    kind: \"graphql\",\n    endpoint,\n    name: trimToNull(form.name),\n    namespace: trimToNull(form.namespace),\n    auth,\n  };\n};\n\nconst buildHttpAuth = (\n  form: ConnectFormState,\n):\n  | { kind: \"none\" }\n  | {\n      kind: \"bearer\";\n      headerName?: string | null;\n      prefix?: string | null;\n      token?: string | null;\n      tokenRef?: { providerId: string; handle: string } | null;\n    }\n  | undefined => {\n  if (form.authKind === \"none\") return { kind: \"none\" };\n\n  if (form.authKind === \"bearer\") {\n    const headerName = trimToNull(form.authHeaderName);\n    const prefix = form.authPrefix.length === 0 ? null : form.authPrefix;\n\n    // Prefer secret ref if set\n    if (form.bearerProviderId.trim() && form.bearerHandle.trim()) {\n      return {\n        kind: \"bearer\",\n        headerName,\n        prefix,\n        tokenRef: {\n          providerId: form.bearerProviderId.trim(),\n          handle: form.bearerHandle.trim(),\n        },\n      };\n    }\n\n    // Fall back to inline token\n    if (form.bearerToken.trim()) {\n      return {\n        kind: \"bearer\",\n        headerName,\n        prefix,\n        token: form.bearerToken.trim(),\n      };\n    }\n\n    throw new Error(\n      \"Bearer auth requires a token. Select or create a secret, or enter a token directly.\",\n    );\n  }\n\n  // oauth2 is handled via the connect result flow, not pre-filled\n  return undefined;\n};\n\n// ---------------------------------------------------------------------------\n// OAuth popup helpers (shared with source-editor.tsx)\n// ---------------------------------------------------------------------------\n\ntype SourceOAuthPopupMessage =\n  | {\n      type: \"executor:oauth-result\";\n      ok: true;\n      sessionId: string;\n      auth: CompleteSourceOAuthResult[\"auth\"];\n    }\n  | {\n      type: \"executor:oauth-result\";\n      ok: false;\n      sessionId: string | null;\n      error: string;\n    }\n  | {\n      type: \"executor:source-oauth-result\";\n      ok: true;\n      sourceId: string;\n    }\n  | {\n      type: \"executor:source-oauth-result\";\n      ok: false;\n      error: string;\n    };\n\nconst readStoredSourceOAuthPopupResult = (\n  sessionId: string,\n): SourceOAuthPopupMessage | null => {\n  if (typeof window === \"undefined\") return null;\n  const raw = window.localStorage.getItem(\n    `${SOURCE_OAUTH_POPUP_RESULT_STORAGE_KEY_PREFIX}${sessionId}`,\n  );\n  if (!raw) return null;\n  try {\n    return JSON.parse(raw) as SourceOAuthPopupMessage;\n  } catch {\n    return null;\n  }\n};\n\nconst clearStoredSourceOAuthPopupResult = (sessionId: string): void => {\n  if (typeof window === \"undefined\") return;\n  window.localStorage.removeItem(\n    `${SOURCE_OAUTH_POPUP_RESULT_STORAGE_KEY_PREFIX}${sessionId}`,\n  );\n};\n\nconst startSourceOAuthPopup = async (input: {\n  authorizationUrl: string;\n  sessionId: string;\n}): Promise<void> => {\n  if (typeof window === \"undefined\") {\n    throw new Error(\"OAuth popup is only available in a browser context\");\n  }\n\n  clearStoredSourceOAuthPopupResult(input.sessionId);\n\n  const popup = window.open(\n    input.authorizationUrl,\n    \"executor-source-oauth\",\n    \"popup=yes,width=520,height=720\",\n  );\n\n  if (!popup) {\n    throw new Error(\"Popup blocked. Allow popups and try again.\");\n  }\n\n  popup.focus();\n\n  return await new Promise<void>((resolve, reject) => {\n    let settled = false;\n    let closedPoll = 0;\n    let resultTimeout = 0;\n\n    const cleanup = () => {\n      window.removeEventListener(\"message\", onMessage);\n      if (closedPoll) window.clearInterval(closedPoll);\n      if (resultTimeout) window.clearTimeout(resultTimeout);\n      if (!popup.closed) popup.close();\n      clearStoredSourceOAuthPopupResult(input.sessionId);\n    };\n\n    const settleWithError = (message: string) => {\n      if (settled) return;\n      settled = true;\n      cleanup();\n      reject(new Error(message));\n    };\n\n    const settleFromPayload = (data: SourceOAuthPopupMessage) => {\n      if (!data.ok) {\n        settleWithError(data.error || \"OAuth failed\");\n        return;\n      }\n      if (settled) return;\n      settled = true;\n      cleanup();\n      resolve();\n    };\n\n    const onMessage = (event: MessageEvent) => {\n      if (event.origin !== window.location.origin) return;\n      const data = event.data as SourceOAuthPopupMessage | undefined;\n      if (!data) return;\n      if (data.type === \"executor:oauth-result\") {\n        if (data.ok && data.sessionId !== input.sessionId) return;\n        if (\n          !data.ok &&\n          data.sessionId !== null &&\n          data.sessionId !== input.sessionId\n        )\n          return;\n      } else if (data.type !== \"executor:source-oauth-result\") {\n        return;\n      }\n      settleFromPayload(data);\n    };\n\n    window.addEventListener(\"message\", onMessage);\n\n    resultTimeout = window.setTimeout(() => {\n      settleWithError(\n        \"OAuth popup timed out before completion. Please try again.\",\n      );\n    }, SOURCE_OAUTH_POPUP_RESULT_TIMEOUT_MS);\n\n    closedPoll = window.setInterval(() => {\n      const stored = readStoredSourceOAuthPopupResult(input.sessionId);\n      if (stored) {\n        settleFromPayload(stored);\n        return;\n      }\n      if (popup.closed) {\n        // Stop polling — only run one final deferred check to give the\n        // callback page time to write localStorage before we give up.\n        window.clearInterval(closedPoll);\n        closedPoll = 0;\n        window.setTimeout(() => {\n          const delayedStored = readStoredSourceOAuthPopupResult(\n            input.sessionId,\n          );\n          if (delayedStored) {\n            settleFromPayload(delayedStored);\n            return;\n          }\n          settleWithError(\"OAuth popup was closed before completion.\");\n        }, 1500);\n      }\n    }, 300);\n  });\n};\n\n// ---------------------------------------------------------------------------\n// Confidence badge helper\n// ---------------------------------------------------------------------------\n\n// ---------------------------------------------------------------------------\n// Page\n// ---------------------------------------------------------------------------\n\nexport function AddSourcePage() {\n  const navigate = useNavigate();\n  const discoverSource = useDiscoverSource();\n  const connectSource = useConnectSource();\n  const connectSourceBatch = useConnectSourceBatch();\n  const createWorkspaceOauthClient = useCreateWorkspaceOauthClient();\n  const workspaceOauthClients = useWorkspaceOauthClients(\"google_workspace\");\n  const instanceConfig = useInstanceConfig();\n  const invalidateExecutorQueries = useInvalidateExecutorQueries();\n  const secrets = useSecrets();\n  const refreshSecrets = useRefreshSecrets();\n\n  // URL input\n  const [url, setUrl] = useState(\"\");\n\n  // Probe auth\n  const [showProbeAuth, setShowProbeAuth] = useState(false);\n  const [probeAuth, setProbeAuth] = useState<ProbeAuthState>({\n    kind: \"none\",\n    token: \"\",\n    headerName: \"Authorization\",\n    prefix: \"Bearer \",\n    username: \"\",\n    password: \"\",\n    headersText: \"\",\n  });\n\n  // Phase\n  const [phase, setPhase] = useState<FlowPhase>(\"idle\");\n\n  // Discovery result\n  // Editable connect form (populated after discovery)\n  const [connectForm, setConnectForm] =\n    useState<ConnectFormState>(defaultConnectForm());\n\n  // Connect result\n  const [connectResult, setConnectResult] =\n    useState<ConnectSourceResult | null>(null);\n\n  // OAuth required state\n  const [oauthInfo, setOauthInfo] = useState<OAuthRequiredInfo | null>(null);\n  const [batchOauthInfo, setBatchOauthInfo] =\n    useState<BatchOAuthRequiredInfo | null>(null);\n  const [oauthBusy, setOauthBusy] = useState(false);\n  const [batchConnecting, setBatchConnecting] = useState(false);\n  const [selectedGoogleTemplateIds, setSelectedGoogleTemplateIds] = useState<\n    ReadonlyArray<string>\n  >([]);\n\n  // Status banner\n  const [statusBanner, setStatusBanner] = useState<{\n    tone: \"info\" | \"success\" | \"error\";\n    text: string;\n  } | null>(null);\n\n  const setFormField = <K extends keyof ConnectFormBase>(\n    key: K,\n    value: ConnectFormBase[K],\n  ) => {\n    setConnectForm((current) => ({ ...current, [key]: value }));\n  };\n\n  const setTransport = (transport: McpTransportValue) => {\n    setConnectForm((current) => ({\n      ...current,\n      ...setMcpTransportFieldsTransport(current, transport),\n    }));\n  };\n\n  const setRemoteTransportField = <\n    K extends Exclude<keyof McpRemoteTransportFields, \"transport\">,\n  >(\n    key: K,\n    value: McpRemoteTransportFields[K],\n  ) => {\n    setConnectForm((current) =>\n      current.transport === \"stdio\" ? current : { ...current, [key]: value },\n    );\n  };\n\n  const setStdioTransportField = <\n    K extends Exclude<keyof McpStdioTransportFields, \"transport\">,\n  >(\n    key: K,\n    value: McpStdioTransportFields[K],\n  ) => {\n    setConnectForm((current) =>\n      current.transport === \"stdio\" ? { ...current, [key]: value } : current,\n    );\n  };\n\n  const setSourceKind = (kind: ConnectFormState[\"kind\"]) => {\n    setConnectForm((current) => ({\n      ...current,\n      kind,\n      authKind: authKindForSourceKind(current.authKind, kind),\n      workspaceOauthClientId:\n        kind === \"google_discovery\" ? current.workspaceOauthClientId : \"\",\n    }));\n  };\n\n  const setProbeField = <K extends keyof ProbeAuthState>(\n    key: K,\n    value: ProbeAuthState[K],\n  ) => {\n    setProbeAuth((current) => ({ ...current, [key]: value }));\n  };\n\n  const googleTemplates = sourceTemplates.filter(\n    (template) => template.groupId === \"google_workspace\" && template.batchable,\n  );\n\n  // -------------------------------------------------------------------------\n  // Handlers\n  // -------------------------------------------------------------------------\n\n  const handleDiscover = async () => {\n    setStatusBanner(null);\n    const trimmedUrl = url.trim();\n    if (!trimmedUrl) {\n      setStatusBanner({\n        tone: \"error\",\n        text: \"Please enter a URL to discover.\",\n      });\n      return;\n    }\n\n    setPhase(\"discovering\");\n\n    try {\n      const payload: DiscoverSourcePayload = {\n        url: trimmedUrl,\n        ...(showProbeAuth && probeAuth.kind !== \"none\"\n          ? { probeAuth: buildProbeAuth(probeAuth) }\n          : {}),\n      };\n      const result = await discoverSource.mutateAsync(payload);\n      setConnectForm(defaultConnectForm(result));\n      setPhase(\"editing\");\n\n      if (result.detectedKind === \"unknown\") {\n        setStatusBanner({\n          tone: \"info\",\n          text: \"Could not auto-detect the source type. Please configure manually.\",\n        });\n      } else if (result.warnings.length > 0) {\n        setStatusBanner({\n          tone: \"info\",\n          text: result.warnings.join(\" \"),\n        });\n      }\n    } catch (error) {\n      setPhase(\"idle\");\n      setStatusBanner({\n        tone: \"error\",\n        text: error instanceof Error ? error.message : \"Discovery failed.\",\n      });\n    }\n  };\n\n  const handleSkipDiscovery = () => {\n    setConnectForm(defaultConnectForm());\n    setPhase(\"editing\");\n    setStatusBanner(null);\n  };\n\n  const applyTemplate = async (template: SourceTemplate) => {\n    if (template.batchable) {\n      setSelectedGoogleTemplateIds((current) =>\n        current.includes(template.id)\n          ? current.filter((id) => id !== template.id)\n          : [...current, template.id],\n      );\n      setStatusBanner(null);\n      return;\n    }\n\n    if (isStdioMcpSourceTemplate(template)) {\n      setUrl(\"\");\n      setConnectForm(connectFormFromTemplate(template));\n      setPhase(\"editing\");\n      setStatusBanner({\n        tone: \"info\",\n        text: `${template.name} loaded. Review the local command, then connect.`,\n      });\n      return;\n    }\n\n    const discoveryUrl =\n      \"specUrl\" in template ? template.specUrl : (template.endpoint ?? \"\");\n    setUrl(template.endpoint ?? \"\");\n    setStatusBanner(null);\n    setPhase(\"discovering\");\n\n    try {\n      const result = await discoverSource.mutateAsync({ url: discoveryUrl });\n      let form: ConnectFormState = {\n        ...defaultConnectForm(result),\n        name: template.name,\n        endpoint: template.endpoint ?? \"\",\n        namespace: template.namespace ?? namespaceFromUrl(template.endpoint ?? \"\"),\n      };\n      if (template.kind === \"mcp\") {\n        form = {\n          ...form,\n          ...(template.connectionType === \"command\"\n            ? defaultMcpStdioTransportFields({\n                command: template.command ?? \"\",\n                argsText: stringifyStringArray(template.args),\n                envText: stringifyStringMap(template.env),\n                cwd: template.cwd ?? \"\",\n              })\n            : defaultMcpRemoteTransportFields(\n                asMcpRemoteTransportValue(template.transport),\n              )),\n        };\n      }\n      if (\"specUrl\" in template) {\n        form = {\n          ...form,\n          specUrl: template.specUrl,\n        };\n      }\n      setConnectForm(form);\n      setPhase(\"editing\");\n\n      if (result.warnings.length > 0) {\n        setStatusBanner({\n          tone: \"info\",\n          text: result.warnings.join(\" \"),\n        });\n      }\n    } catch (error) {\n      // Discovery failed — fall back to just the template basics\n      setConnectForm(connectFormFromTemplate(template));\n      setPhase(\"editing\");\n      setStatusBanner({\n        tone: \"error\",\n        text: `Discovery failed for ${template.name}: ${error instanceof Error ? error.message : \"unknown error\"}. Configure manually.`,\n      });\n    }\n  };\n\n  const handleConnect = async () => {\n    setStatusBanner(null);\n\n    try {\n      const payload = buildConnectPayload(connectForm);\n      setPhase(\"connecting\");\n\n      const result = await connectSource.mutateAsync(payload);\n      setConnectResult(result);\n\n      if (result.kind === \"connected\") {\n        setBatchOauthInfo(null);\n        setPhase(\"connected\");\n        setStatusBanner({\n          tone: \"success\",\n          text: `\"${result.source.name}\" connected successfully.`,\n        });\n        // Navigate to source detail after short delay\n        setTimeout(() => {\n          void navigate({\n            to: \"/sources/$sourceId\",\n            params: { sourceId: result.source.id },\n            search: { tab: \"model\" },\n          });\n        }, 1200);\n      } else if (result.kind === \"credential_required\") {\n        setBatchOauthInfo(null);\n        setPhase(\"credential_required\");\n        setStatusBanner({\n          tone: \"info\",\n          text: \"This source requires credentials. Configure auth below, then connect again.\",\n        });\n        // Pre-select bearer auth if not already set\n        if (connectForm.authKind === \"none\") {\n          setFormField(\"authKind\", \"bearer\");\n        }\n      } else if (result.kind === \"oauth_required\") {\n        setBatchOauthInfo(null);\n        setPhase(\"oauth_required\");\n        setOauthInfo({\n          source: result.source,\n          sessionId: result.sessionId,\n          authorizationUrl: result.authorizationUrl,\n        });\n        setStatusBanner({\n          tone: \"info\",\n          text: \"This source requires OAuth authentication. Click the button below to sign in.\",\n        });\n      }\n    } catch (error) {\n      setPhase(\"editing\");\n      setStatusBanner({\n        tone: \"error\",\n        text: error instanceof Error ? error.message : \"Connection failed.\",\n      });\n    }\n  };\n\n  const handleOAuthPopup = async () => {\n    if (!oauthInfo && !batchOauthInfo) return;\n    setStatusBanner(null);\n    setOauthBusy(true);\n\n    try {\n      await startSourceOAuthPopup({\n        authorizationUrl:\n          oauthInfo?.authorizationUrl ?? batchOauthInfo!.authorizationUrl,\n        sessionId: oauthInfo?.sessionId ?? batchOauthInfo!.sessionId,\n      });\n\n      refreshSecrets();\n      invalidateExecutorQueries();\n      setPhase(\"connected\");\n      setStatusBanner({\n        tone: \"success\",\n        text: oauthInfo\n          ? `\"${oauthInfo.source.name}\" connected via OAuth.`\n          : `Connected ${batchOauthInfo?.sourceIds.length ?? 0} Google source${(batchOauthInfo?.sourceIds.length ?? 0) === 1 ? \"\" : \"s\"} via OAuth.`,\n      });\n\n      setTimeout(() => {\n        if (oauthInfo) {\n          void navigate({\n            to: \"/sources/$sourceId\",\n            params: { sourceId: oauthInfo.source.id },\n            search: { tab: \"model\" },\n          });\n          return;\n        }\n\n        void navigate({\n          to: \"/\",\n        });\n      }, 1200);\n    } catch (error) {\n      setStatusBanner({\n        tone: \"error\",\n        text: error instanceof Error ? error.message : \"OAuth flow failed.\",\n      });\n    } finally {\n      setOauthBusy(false);\n    }\n  };\n\n  const ensureGoogleWorkspaceOauthClientId = async (): Promise<string> => {\n    const selectedClientId = connectForm.workspaceOauthClientId.trim();\n    if (selectedClientId.length > 0) {\n      return selectedClientId;\n    }\n\n    const clientId = connectForm.oauthClientId.trim();\n    if (clientId.length === 0) {\n      throw new Error(\n        \"Choose an existing Google workspace OAuth client or enter a new client ID.\",\n      );\n    }\n\n    const created = await createWorkspaceOauthClient.mutateAsync({\n      providerKey: \"google_workspace\",\n      label: \"Google Workspace\",\n      oauthClient: {\n        clientId,\n        clientSecret: trimToNull(connectForm.oauthClientSecret),\n      },\n    } satisfies CreateWorkspaceOauthClientPayload);\n\n    setFormField(\"workspaceOauthClientId\", created.id);\n    return created.id;\n  };\n\n  const handleConnectGoogleBatch = async () => {\n    if (selectedGoogleTemplateIds.length === 0) {\n      return;\n    }\n\n    setStatusBanner(null);\n\n    try {\n      const workspaceOauthClientId = await ensureGoogleWorkspaceOauthClientId();\n      const selectedTemplates = googleTemplates.filter(\n        (\n          template,\n        ): template is Extract<SourceTemplate, { kind: \"google_discovery\" }> =>\n          selectedGoogleTemplateIds.includes(template.id),\n      );\n      const payload: ConnectSourceBatchPayload = {\n        workspaceOauthClientId:\n          workspaceOauthClientId as WorkspaceOauthClient[\"id\"],\n        sources: selectedTemplates.map((template) => ({\n          service: template.service,\n          version: template.version,\n          discoveryUrl: template.discoveryUrl,\n          name: template.name,\n          namespace: googleDiscoveryNamespace(template.service),\n        })),\n      };\n\n      setBatchConnecting(true);\n      setPhase(\"connecting\");\n      const result = await connectSourceBatch.mutateAsync(payload);\n      if (result.providerOauthSession) {\n        setBatchOauthInfo({\n          sessionId: result.providerOauthSession.sessionId,\n          authorizationUrl: result.providerOauthSession.authorizationUrl,\n          sourceIds: result.providerOauthSession.sourceIds,\n        });\n        setOauthInfo(null);\n        setBatchConnecting(false);\n        setPhase(\"oauth_required\");\n        setStatusBanner(null);\n        return;\n      }\n\n      setSelectedGoogleTemplateIds([]);\n      setBatchOauthInfo(null);\n      setBatchConnecting(false);\n      setPhase(\"connected\");\n      setStatusBanner({\n        tone: \"success\",\n        text: `Connected ${result.results.length} Google source${result.results.length === 1 ? \"\" : \"s\"}.`,\n      });\n      setTimeout(() => {\n        void navigate({ to: \"/\" });\n      }, 1200);\n    } catch (error) {\n      setBatchConnecting(false);\n      setPhase(\"idle\");\n      setStatusBanner({\n        tone: \"error\",\n        text:\n          error instanceof Error ? error.message : \"Batch connection failed.\",\n      });\n    }\n  };\n\n  const handleCredentialConnect = async () => {\n    // Re-run connect with the auth now configured\n    await handleConnect();\n  };\n\n  const handleBackToEditing = () => {\n    setPhase(\"editing\");\n    setStatusBanner(null);\n    setConnectResult(null);\n    setOauthInfo(null);\n  };\n\n  const isDiscovering = phase === \"discovering\";\n  const isConnecting = phase === \"connecting\";\n  const isBusy =\n    isDiscovering ||\n    isConnecting ||\n    oauthBusy ||\n    connectSourceBatch.status === \"pending\" ||\n    createWorkspaceOauthClient.status === \"pending\";\n\n  // -------------------------------------------------------------------------\n  // Render\n  // -------------------------------------------------------------------------\n\n  return (\n    <div className=\"flex-1 overflow-y-auto\">\n      <div className=\"mx-auto max-w-3xl px-6 py-8 lg:px-10 lg:py-12\">\n        {/* Back */}\n        <Link\n          to=\"/\"\n          className=\"inline-flex items-center gap-1.5 text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground mb-6\"\n        >\n          <IconArrowLeft className=\"size-3.5\" />\n          Back\n        </Link>\n\n        <div className=\"flex items-center justify-between gap-4 mb-6\">\n          <h1 className=\"font-display text-2xl tracking-tight text-foreground lg:text-3xl\">\n            Add source\n          </h1>\n          {phase === \"editing\" && (\n            <Badge variant=\"outline\">{connectForm.kind}</Badge>\n          )}\n        </div>\n\n        {/* Step indicator */}\n        {phase !== \"idle\" && phase !== \"discovering\" && (\n          <div className=\"mb-6 flex items-center gap-1.5\" aria-label=\"Progress\">\n            {([\"discover\", \"configure\", \"connect\"] as const).map((step, i) => {\n              const stepPhases: Record<string, number> = {\n                editing: 1,\n                connecting: 2,\n                credential_required: 1,\n                oauth_required: 2,\n                connected: 2,\n              };\n              const currentStep = stepPhases[phase] ?? 0;\n              const isComplete = i < currentStep;\n              const isCurrent = i === currentStep;\n              return (\n                <div key={step} className=\"flex items-center gap-1.5\">\n                  {i > 0 && (\n                    <div\n                      className={cn(\n                        \"h-px w-6 transition-colors\",\n                        isComplete || isCurrent ? \"bg-primary/40\" : \"bg-border\",\n                      )}\n                    />\n                  )}\n                  <div\n                    className={cn(\n                      \"flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[10px] font-medium uppercase tracking-[0.06em] transition-colors\",\n                      isComplete\n                        ? \"text-primary\"\n                        : isCurrent\n                          ? \"text-foreground bg-muted/50\"\n                          : \"text-muted-foreground/40\",\n                    )}\n                  >\n                    {isComplete ? (\n                      <IconCheck className=\"size-2.5\" />\n                    ) : (\n                      <span className=\"flex size-3.5 items-center justify-center rounded-full border text-[9px] tabular-nums border-current\">\n                        {i + 1}\n                      </span>\n                    )}\n                    {step}\n                  </div>\n                </div>\n              );\n            })}\n          </div>\n        )}\n\n        {statusBanner && <StatusBanner state={statusBanner} className=\"mb-6\" />}\n\n        {(phase === \"idle\" || phase === \"discovering\") && (\n          <LocalMcpInstallCard\n            className=\"mb-6 rounded-xl border border-border bg-card/80 p-5\"\n            title=\"Install this executor as MCP\"\n            description=\"Prefer a one-command setup? Install this local executor server into your MCP client, or add an external MCP source below.\"\n          />\n        )}\n        {/* Step 1: Discovery */}\n        {(phase === \"idle\" || phase === \"discovering\") && (\n          <div className=\"space-y-6\">\n            <Section title=\"Discover\">\n              <div className=\"space-y-4\">\n                <p className=\"text-[13px] text-muted-foreground\">\n                  Enter a URL and we'll auto-detect the source type, endpoint,\n                  auth requirements, and more.\n                </p>\n\n                <Field label=\"URL\">\n                  <div className=\"space-y-0\">\n                    <div className=\"flex gap-2\">\n                      <input\n                        value={url}\n                        onChange={(e) => setUrl(e.target.value)}\n                        placeholder=\"https://api.example.com or https://mcp.example.com/mcp\"\n                        onKeyDown={(e) => {\n                          if (e.key === \"Enter\" && !isDiscovering) {\n                            void handleDiscover();\n                          }\n                        }}\n                        className=\"h-9 flex-1 rounded-lg border border-input bg-background px-3 font-mono text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n                      />\n                      <Button onClick={handleDiscover} disabled={isBusy}>\n                        {isDiscovering ? (\n                          <IconSpinner className=\"size-3.5\" />\n                        ) : (\n                          <IconDiscover className=\"size-3.5\" />\n                        )}\n                        {isDiscovering ? \"Discovering\\u2026\" : \"Discover\"}\n                      </Button>\n                    </div>\n                    {isDiscovering && (\n                      <div className=\"mt-1.5 h-0.5 w-full overflow-hidden rounded-full bg-muted\">\n                        <div\n                          className=\"h-full w-1/4 rounded-full bg-primary/60\"\n                          style={{\n                            animation:\n                              \"indeterminate-progress 1.2s ease-in-out infinite\",\n                          }}\n                        />\n                      </div>\n                    )}\n                  </div>\n                </Field>\n\n                {/* Probe auth toggle */}\n                <div>\n                  <button\n                    type=\"button\"\n                    onClick={() => setShowProbeAuth(!showProbeAuth)}\n                    className=\"text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground\"\n                  >\n                    {showProbeAuth\n                      ? \"Hide probe auth\"\n                      : \"Need auth to discover?\"}\n                  </button>\n                </div>\n\n                {showProbeAuth && (\n                  <div className=\"rounded-lg border border-border bg-card/70 p-4 space-y-3\">\n                    <Field label=\"Auth type\">\n                      <SelectInput\n                        value={probeAuth.kind}\n                        onChange={(v) =>\n                          setProbeField(\"kind\", v as ProbeAuthKind)\n                        }\n                        options={probeAuthOptions.map((v) => ({\n                          value: v,\n                          label: v,\n                        }))}\n                      />\n                    </Field>\n\n                    {probeAuth.kind === \"bearer\" && (\n                      <div className=\"grid gap-3 sm:grid-cols-2\">\n                        <Field label=\"Header name\">\n                          <TextInput\n                            value={probeAuth.headerName}\n                            onChange={(v) => setProbeField(\"headerName\", v)}\n                            placeholder=\"Authorization\"\n                          />\n                        </Field>\n                        <Field label=\"Prefix\">\n                          <TextInput\n                            value={probeAuth.prefix}\n                            onChange={(v) => setProbeField(\"prefix\", v)}\n                            placeholder=\"Bearer \"\n                          />\n                        </Field>\n                        <Field label=\"Token\" className=\"sm:col-span-2\">\n                          <TextInput\n                            value={probeAuth.token}\n                            onChange={(v) => setProbeField(\"token\", v)}\n                            placeholder=\"sk-...\"\n                            mono\n                          />\n                        </Field>\n                      </div>\n                    )}\n\n                    {probeAuth.kind === \"basic\" && (\n                      <div className=\"grid gap-3 sm:grid-cols-2\">\n                        <Field label=\"Username\">\n                          <TextInput\n                            value={probeAuth.username}\n                            onChange={(v) => setProbeField(\"username\", v)}\n                            placeholder=\"user\"\n                          />\n                        </Field>\n                        <Field label=\"Password\">\n                          <TextInput\n                            value={probeAuth.password}\n                            onChange={(v) => setProbeField(\"password\", v)}\n                            placeholder=\"pass\"\n                          />\n                        </Field>\n                      </div>\n                    )}\n\n                    {probeAuth.kind === \"headers\" && (\n                      <Field label=\"Headers (JSON)\">\n                        <CodeEditor\n                          value={probeAuth.headersText}\n                          onChange={(v) => setProbeField(\"headersText\", v)}\n                          placeholder={'{\\n  \"x-api-key\": \"...\"\\n}'}\n                        />\n                      </Field>\n                    )}\n                  </div>\n                )}\n\n                {/* Skip discovery link */}\n                <div className=\"flex items-center justify-end border-t border-border pt-4\">\n                  <button\n                    type=\"button\"\n                    onClick={handleSkipDiscovery}\n                    disabled={isBusy}\n                    className=\"text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground\"\n                  >\n                    Skip discovery and configure manually\n                  </button>\n                </div>\n\n                {/* ---- Template catalogue ---- */}\n                <div className=\"space-y-5 border-t border-border pt-5\">\n                  <div>\n                    <p className=\"text-[13px] font-medium text-foreground\">\n                      Start from a template\n                    </p>\n                    <p className=\"mt-0.5 text-[12px] text-muted-foreground\">\n                      Pick a known source to skip discovery, or select multiple\n                      Google APIs for batch connect.\n                    </p>\n                  </div>\n\n                  {/* -- Popular / non-Google templates -- */}\n                  {(() => {\n                    const popularTemplates = sourceTemplates.filter(\n                      (t) => t.groupId !== \"google_workspace\",\n                    );\n                    return (\n                      popularTemplates.length > 0 && (\n                        <div className=\"space-y-2.5\">\n                          <p className=\"text-[10px] font-semibold uppercase tracking-[0.1em] text-muted-foreground/50\">\n                            Popular\n                          </p>\n                          <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-3\">\n                            {popularTemplates.map((template) => (\n                              <button\n                                key={template.id}\n                                type=\"button\"\n                                onClick={() => applyTemplate(template)}\n                                disabled={isBusy}\n                                className=\"group rounded-xl border border-border bg-card/70 px-4 py-3 text-left transition-all hover:bg-accent/50 hover:border-primary/20 hover:shadow-sm disabled:opacity-60\"\n                              >\n                                <div className=\"mb-1.5 flex items-center gap-2.5\">\n                                  <div className=\"flex size-5 shrink-0 items-center justify-center rounded-md bg-muted/50\">\n                                    <SourceFavicon\n                                      endpoint={template.endpoint}\n                                      kind={template.kind}\n                                      className=\"size-3.5\"\n                                    />\n                                  </div>\n                                  <span className=\"flex-1 truncate text-[13px] font-medium text-foreground group-hover:text-primary transition-colors\">\n                                    {template.name}\n                                  </span>\n                                  <Badge\n                                    variant=\"outline\"\n                                    className=\"text-[9px] opacity-60 group-hover:opacity-100 transition-opacity\"\n                                  >\n                                    {template.kind}\n                                  </Badge>\n                                </div>\n                                <span className=\"line-clamp-1 text-[11px] text-muted-foreground/70\">\n                                  {template.summary}\n                                </span>\n                              </button>\n                            ))}\n                          </div>\n                        </div>\n                      )\n                    );\n                  })()}\n\n                  {/* -- Google Workspace batch section -- */}\n                  <div className=\"space-y-3\">\n                    <div className=\"flex items-center justify-between gap-3\">\n                      <p className=\"text-[10px] font-semibold uppercase tracking-[0.1em] text-muted-foreground/50\">\n                        Google Workspace\n                      </p>\n                      {googleTemplates.length > 0 && (\n                        <div className=\"flex items-center gap-2\">\n                          {selectedGoogleTemplateIds.length > 0 && (\n                            <button\n                              type=\"button\"\n                              onClick={() => setSelectedGoogleTemplateIds([])}\n                              disabled={isBusy}\n                              className=\"text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-foreground\"\n                            >\n                              Clear\n                            </button>\n                          )}\n                          <button\n                            type=\"button\"\n                            onClick={() =>\n                              setSelectedGoogleTemplateIds(\n                                selectedGoogleTemplateIds.length ===\n                                  googleTemplates.length\n                                  ? []\n                                  : googleTemplates.map((t) => t.id),\n                              )\n                            }\n                            disabled={isBusy}\n                            className=\"text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-foreground\"\n                          >\n                            {selectedGoogleTemplateIds.length ===\n                            googleTemplates.length\n                              ? \"Deselect all\"\n                              : \"Select all\"}\n                          </button>\n                        </div>\n                      )}\n                    </div>\n                    <div className=\"grid gap-1.5 sm:grid-cols-2 lg:grid-cols-3\">\n                      {googleTemplates.map((template) => {\n                        const selected = selectedGoogleTemplateIds.includes(\n                          template.id,\n                        );\n                        return (\n                          <button\n                            key={template.id}\n                            type=\"button\"\n                            onClick={() => applyTemplate(template)}\n                            disabled={isBusy}\n                            className={cn(\n                              \"group flex items-center gap-3 rounded-lg border px-3.5 py-2.5 text-left transition-all disabled:opacity-60\",\n                              selected\n                                ? \"border-primary/40 bg-primary/6 shadow-sm\"\n                                : \"border-border bg-card/50 hover:bg-accent/40 hover:border-border\",\n                            )}\n                          >\n                            <div\n                              className={cn(\n                                \"flex size-4 shrink-0 items-center justify-center rounded transition-colors\",\n                                selected\n                                  ? \"text-primary\"\n                                  : \"text-muted-foreground/30 group-hover:text-muted-foreground/50\",\n                              )}\n                            >\n                              {selected ? (\n                                <IconCheck className=\"size-3.5\" />\n                              ) : (\n                                <SourceFavicon\n                                  endpoint={template.endpoint}\n                                  kind={template.kind}\n                                  className=\"size-3.5\"\n                                />\n                              )}\n                            </div>\n                            <div className=\"min-w-0 flex-1\">\n                              <span\n                                className={cn(\n                                  \"block truncate text-[12px] font-medium transition-colors\",\n                                  selected\n                                    ? \"text-foreground\"\n                                    : \"text-foreground/80\",\n                                )}\n                              >\n                                {template.name}\n                              </span>\n                              <span className=\"block truncate text-[10px] text-muted-foreground/60\">\n                                {template.summary}\n                              </span>\n                            </div>\n                          </button>\n                        );\n                      })}\n                    </div>\n\n                    {/* -- Batch connect panel (slides in when templates selected) -- */}\n                    {selectedGoogleTemplateIds.length > 0 && (\n                      <div className=\"rounded-xl border border-primary/20 bg-gradient-to-b from-primary/4 to-transparent overflow-hidden\">\n                        {/* Header strip */}\n                        <div className=\"flex items-center justify-between gap-3 border-b border-primary/10 px-5 py-3\">\n                          <div className=\"flex items-center gap-2.5\">\n                            <div className=\"flex size-6 items-center justify-center rounded-md bg-primary/10 text-primary\">\n                              <span className=\"text-[11px] font-bold tabular-nums\">\n                                {selectedGoogleTemplateIds.length}\n                              </span>\n                            </div>\n                            <p className=\"text-[13px] font-medium text-foreground\">\n                              Connect Google API\n                              {selectedGoogleTemplateIds.length === 1\n                                ? \"\"\n                                : \"s\"}\n                            </p>\n                          </div>\n                          <p className=\"hidden text-[11px] text-muted-foreground/60 sm:block\">\n                            One consent screen for all\n                          </p>\n                        </div>\n\n                        {/* Body */}\n                        <div className=\"px-5 py-4 space-y-4\">\n                          <Field label=\"Workspace OAuth client\">\n                            <select\n                              value={connectForm.workspaceOauthClientId}\n                              onChange={(event) =>\n                                setFormField(\n                                  \"workspaceOauthClientId\",\n                                  event.target.value,\n                                )\n                              }\n                              className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n                            >\n                              <option value=\"\">\n                                Enter new client credentials\n                              </option>\n                              {workspaceOauthClients.status === \"ready\" &&\n                                workspaceOauthClients.data.map((client) => (\n                                  <option key={client.id} value={client.id}>\n                                    {client.label ?? client.clientId}\n                                  </option>\n                                ))}\n                            </select>\n                          </Field>\n                          {connectForm.workspaceOauthClientId.trim().length ===\n                            0 && (\n                            <div className=\"grid gap-3 sm:grid-cols-2\">\n                              <Field\n                                label=\"Client ID\"\n                                className=\"sm:col-span-2\"\n                              >\n                                <TextInput\n                                  type=\"password\"\n                                  value={connectForm.oauthClientId}\n                                  onChange={(v) =>\n                                    setFormField(\"oauthClientId\", v)\n                                  }\n                                  placeholder=\"1234567890-abcdef.apps.googleusercontent.com\"\n                                />\n                              </Field>\n                              <Field\n                                label=\"Client secret\"\n                                className=\"sm:col-span-2\"\n                              >\n                                <TextInput\n                                  type=\"password\"\n                                  value={connectForm.oauthClientSecret}\n                                  onChange={(v) =>\n                                    setFormField(\"oauthClientSecret\", v)\n                                  }\n                                  placeholder=\"GOCSPX-...\"\n                                />\n                              </Field>\n                            </div>\n                          )}\n                          <div className=\"flex items-center justify-end pt-1\">\n                            <Button\n                              type=\"button\"\n                              onClick={handleConnectGoogleBatch}\n                              disabled={isBusy}\n                            >\n                              {isBusy ? (\n                                <IconSpinner className=\"size-3.5\" />\n                              ) : (\n                                <IconPlus className=\"size-3.5\" />\n                              )}\n                              Connect {selectedGoogleTemplateIds.length} source\n                              {selectedGoogleTemplateIds.length === 1\n                                ? \"\"\n                                : \"s\"}\n                            </Button>\n                          </div>\n                        </div>\n                      </div>\n                    )}\n                  </div>\n                </div>\n              </div>\n            </Section>\n          </div>\n        )}\n\n        {/* Batch connecting interstitial */}\n        {batchConnecting && phase === \"connecting\" && (\n          <div className=\"flex flex-col items-center justify-center py-20\">\n            <div className=\"space-y-5 text-center\">\n              <div className=\"mx-auto flex size-14 items-center justify-center rounded-2xl border border-primary/15 bg-primary/6\">\n                <IconSpinner className=\"size-6 text-primary\" />\n              </div>\n              <div className=\"space-y-1.5\">\n                <h2 className=\"font-display text-xl tracking-tight text-foreground\">\n                  Connecting {selectedGoogleTemplateIds.length} source\n                  {selectedGoogleTemplateIds.length === 1 ? \"\" : \"s\"}\n                </h2>\n                <p className=\"text-[13px] text-muted-foreground/70\">\n                  Setting up Google Workspace APIs\\u2026\n                </p>\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Step 2-4: Editing / Connecting */}\n        {(phase === \"editing\" ||\n          (phase === \"connecting\" && !batchConnecting) ||\n          phase === \"credential_required\") && (\n          <div className=\"space-y-6\">\n            <Section title=\"Configuration\">\n              <div className=\"grid gap-4 sm:grid-cols-2\">\n                <Field label=\"Name\">\n                  <TextInput\n                    value={connectForm.name}\n                    onChange={(v) => setFormField(\"name\", v)}\n                    placeholder=\"My API\"\n                  />\n                </Field>\n                <Field label=\"Kind\">\n                  <SelectInput\n                    value={connectForm.kind}\n                    onChange={(v) =>\n                      setSourceKind(v as ConnectFormState[\"kind\"])\n                    }\n                    options={kindOptions.map((v) => ({ value: v, label: v }))}\n                  />\n                </Field>\n                {connectForm.kind !== \"google_discovery\" &&\n                  !(\n                    connectForm.kind === \"mcp\" &&\n                    connectForm.transport === \"stdio\"\n                  ) && (\n                    <Field label=\"Endpoint\" className=\"sm:col-span-2\">\n                      <TextInput\n                        value={connectForm.endpoint}\n                        onChange={(v) => setFormField(\"endpoint\", v)}\n                        placeholder=\"https://api.example.com\"\n                        mono\n                      />\n                    </Field>\n                  )}\n                <Field label=\"Namespace\">\n                  <TextInput\n                    value={connectForm.namespace}\n                    onChange={(v) => setFormField(\"namespace\", v)}\n                    placeholder=\"example\"\n                  />\n                </Field>\n                {connectForm.kind === \"openapi\" && (\n                  <Field label=\"Spec URL\" className=\"sm:col-span-2\">\n                    <TextInput\n                      value={connectForm.specUrl}\n                      onChange={(v) => setFormField(\"specUrl\", v)}\n                      placeholder=\"https://example.com/openapi.yaml\"\n                      mono\n                    />\n                  </Field>\n                )}\n                {connectForm.kind === \"google_discovery\" && (\n                  <>\n                    <Field label=\"Service\">\n                      <TextInput\n                        value={connectForm.service}\n                        onChange={(v) => setFormField(\"service\", v)}\n                        placeholder=\"sheets\"\n                      />\n                    </Field>\n                    <Field label=\"Version\">\n                      <TextInput\n                        value={connectForm.version}\n                        onChange={(v) => setFormField(\"version\", v)}\n                        placeholder=\"v4\"\n                      />\n                    </Field>\n                    <Field\n                      label=\"Discovery URL (optional)\"\n                      className=\"sm:col-span-2\"\n                    >\n                      <TextInput\n                        value={connectForm.discoveryUrl}\n                        onChange={(v) => setFormField(\"discoveryUrl\", v)}\n                        placeholder=\"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\"\n                        mono\n                      />\n                    </Field>\n                    <div className=\"sm:col-span-2 rounded-lg border border-border bg-card/60 px-3 py-2 text-[12px] text-muted-foreground\">\n                      Common Google API versions: Gmail `v1`, Sheets `v4`, Drive\n                      `v3`, Calendar `v3`, Docs `v1`.\n                    </div>\n                  </>\n                )}\n              </div>\n            </Section>\n\n            {/* MCP Transport */}\n            {connectForm.kind === \"mcp\" && (\n              <Section title=\"Transport\">\n                <div className=\"grid gap-4 sm:grid-cols-2\">\n                  <Field label=\"Transport mode\">\n                    <SelectInput\n                      value={connectForm.transport || \"auto\"}\n                      onChange={(v) => setTransport(v as McpTransportValue)}\n                      options={transportOptions.map((v) => ({\n                        value: v,\n                        label: v,\n                      }))}\n                    />\n                  </Field>\n                  {connectForm.transport === \"stdio\" ? (\n                    <div className=\"sm:col-span-2 grid gap-4 sm:grid-cols-2\">\n                      <Field label=\"Command\">\n                        <TextInput\n                          value={connectForm.command}\n                          onChange={(v) => setStdioTransportField(\"command\", v)}\n                          placeholder=\"npx\"\n                          mono\n                        />\n                      </Field>\n                      <Field label=\"Working directory (optional)\">\n                        <TextInput\n                          value={connectForm.cwd}\n                          onChange={(v) => setStdioTransportField(\"cwd\", v)}\n                          placeholder=\"/path/to/project\"\n                          mono\n                        />\n                      </Field>\n                      <Field label=\"Args (JSON)\" className=\"sm:col-span-2\">\n                        <CodeEditor\n                          value={connectForm.argsText}\n                          onChange={(v) =>\n                            setStdioTransportField(\"argsText\", v)\n                          }\n                          placeholder={\n                            '[\\n  \"-y\",\\n  \"chrome-devtools-mcp@latest\"\\n]'\n                          }\n                        />\n                      </Field>\n                      <Field\n                        label=\"Environment (JSON)\"\n                        className=\"sm:col-span-2\"\n                      >\n                        <CodeEditor\n                          value={connectForm.envText}\n                          onChange={(v) => setStdioTransportField(\"envText\", v)}\n                          placeholder={\n                            '{\\n  \"CHROME_PATH\": \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"\\n}'\n                          }\n                        />\n                      </Field>\n                    </div>\n                  ) : (\n                    <div className=\"sm:col-span-2 grid gap-4 sm:grid-cols-2\">\n                      <Field label=\"Query params (JSON)\">\n                        <CodeEditor\n                          value={connectForm.queryParamsText}\n                          onChange={(v) =>\n                            setRemoteTransportField(\"queryParamsText\", v)\n                          }\n                          placeholder={'{\\n  \"workspace\": \"demo\"\\n}'}\n                        />\n                      </Field>\n                      <Field label=\"Headers (JSON)\">\n                        <CodeEditor\n                          value={connectForm.headersText}\n                          onChange={(v) =>\n                            setRemoteTransportField(\"headersText\", v)\n                          }\n                          placeholder={'{\\n  \"x-api-key\": \"...\"\\n}'}\n                        />\n                      </Field>\n                    </div>\n                  )}\n                </div>\n              </Section>\n            )}\n\n            {/* Auth section (for non-MCP kinds, or when credential_required) */}\n            {phase === \"credential_required\" && (\n              <div className=\"flex items-start gap-3 rounded-xl border border-amber-300/40 bg-amber-50/50 px-4 py-3.5 dark:border-amber-500/20 dark:bg-amber-950/20\">\n                <div className=\"flex size-7 shrink-0 items-center justify-center rounded-md bg-amber-100/80 dark:bg-amber-900/40\">\n                  <svg\n                    className=\"size-3.5 text-amber-600 dark:text-amber-400\"\n                    viewBox=\"0 0 24 24\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"2\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  >\n                    <path d=\"M12 9v4\" />\n                    <path d=\"M12 17h.01\" />\n                    <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n                  </svg>\n                </div>\n                <div className=\"space-y-0.5\">\n                  <p className=\"text-[12px] font-medium text-amber-900 dark:text-amber-200\">\n                    Credentials required\n                  </p>\n                  <p className=\"text-[11px] leading-relaxed text-amber-800/70 dark:text-amber-300/60\">\n                    The server responded that this source requires\n                    authentication. Add a token or secret below, then try\n                    connecting again.\n                  </p>\n                </div>\n              </div>\n            )}\n            {connectForm.kind !== \"mcp\" && (\n              <Section title=\"Authentication\">\n                <div className=\"grid gap-4 sm:grid-cols-2\">\n                  <Field label=\"Auth mode\">\n                    <SelectInput\n                      value={connectForm.authKind}\n                      onChange={(v) =>\n                        setFormField(\n                          \"authKind\",\n                          v as ConnectFormState[\"authKind\"],\n                        )\n                      }\n                      options={authOptions.map((v) => ({ value: v, label: v }))}\n                    />\n                  </Field>\n                  {connectForm.kind === \"google_discovery\" && (\n                    <div className=\"sm:col-span-2 rounded-lg border border-border bg-card/60 px-3 py-2 text-[12px] text-muted-foreground\">\n                      {connectForm.authKind === \"oauth2\"\n                        ? \"OAuth starts after you click Connect. Choose an existing workspace OAuth client or enter a new client once, then reuse it across Google sources.\"\n                        : \"Choosing auth mode 'none' skips the Google OAuth popup. Use 'oauth2' if you want executor to start the sign-in flow for you.\"}\n                    </div>\n                  )}\n                  {connectForm.kind === \"google_discovery\" &&\n                    connectForm.authKind === \"oauth2\" && (\n                      <>\n                        <Field\n                          label=\"Workspace OAuth client\"\n                          className=\"sm:col-span-2\"\n                        >\n                          <SelectInput\n                            value={connectForm.workspaceOauthClientId}\n                            onChange={(value) =>\n                              setFormField(\"workspaceOauthClientId\", value)\n                            }\n                            options={[\n                              { value: \"\", label: \"Enter new client\" },\n                              ...(workspaceOauthClients.status === \"ready\"\n                                ? workspaceOauthClients.data.map((client) => ({\n                                    value: client.id,\n                                    label: client.label ?? client.clientId,\n                                  }))\n                                : []),\n                            ]}\n                          />\n                        </Field>\n                        {connectForm.workspaceOauthClientId.trim().length ===\n                          0 && (\n                          <>\n                            <Field\n                              label=\"New client ID\"\n                              className=\"sm:col-span-2\"\n                            >\n                              <TextInput\n                                type=\"password\"\n                                value={connectForm.oauthClientId}\n                                onChange={(v) =>\n                                  setFormField(\"oauthClientId\", v)\n                                }\n                                placeholder=\"1234567890-abcdef.apps.googleusercontent.com\"\n                              />\n                            </Field>\n                            <Field\n                              label=\"New client secret\"\n                              className=\"sm:col-span-2\"\n                            >\n                              <TextInput\n                                type=\"password\"\n                                value={connectForm.oauthClientSecret}\n                                onChange={(v) =>\n                                  setFormField(\"oauthClientSecret\", v)\n                                }\n                                placeholder=\"GOCSPX-...\"\n                              />\n                            </Field>\n                          </>\n                        )}\n                      </>\n                    )}\n                  {connectForm.authKind !== \"none\" && (\n                    <>\n                      <Field label=\"Header name\">\n                        <TextInput\n                          value={connectForm.authHeaderName}\n                          onChange={(v) => setFormField(\"authHeaderName\", v)}\n                          placeholder=\"Authorization\"\n                        />\n                      </Field>\n                      <Field label=\"Prefix\">\n                        <TextInput\n                          value={connectForm.authPrefix}\n                          onChange={(v) => setFormField(\"authPrefix\", v)}\n                          placeholder=\"Bearer \"\n                        />\n                      </Field>\n                    </>\n                  )}\n                  {connectForm.authKind === \"bearer\" && (\n                    <Field label=\"Token\" className=\"sm:col-span-2\">\n                      <SecretOrTokenInput\n                        instanceConfig={instanceConfig}\n                        secrets={secrets}\n                        handle={connectForm.bearerHandle}\n                        inlineToken={connectForm.bearerToken}\n                        onSelectSecret={(providerId, handle) => {\n                          setFormField(\"bearerProviderId\", providerId);\n                          setFormField(\"bearerHandle\", handle);\n                          setFormField(\"bearerToken\", \"\");\n                        }}\n                        onChangeToken={(token) => {\n                          setFormField(\"bearerToken\", token);\n                          setFormField(\"bearerProviderId\", \"\");\n                          setFormField(\"bearerHandle\", \"\");\n                        }}\n                      />\n                    </Field>\n                  )}\n                </div>\n              </Section>\n            )}\n\n            {/* Actions */}\n            <div className=\"flex items-center justify-end gap-3 border-t border-border pt-5\">\n              {phase === \"credential_required\" && (\n                <Button\n                  variant=\"ghost\"\n                  type=\"button\"\n                  onClick={handleBackToEditing}\n                >\n                  Back to edit\n                </Button>\n              )}\n              <Link to=\"/\" className=\"inline-flex\">\n                <Button variant=\"ghost\" type=\"button\">\n                  Cancel\n                </Button>\n              </Link>\n              <Button\n                onClick={\n                  phase === \"credential_required\"\n                    ? handleCredentialConnect\n                    : handleConnect\n                }\n                disabled={isBusy}\n              >\n                {isConnecting ? (\n                  <IconSpinner className=\"size-3.5\" />\n                ) : (\n                  <IconPlus className=\"size-3.5\" />\n                )}\n                {isConnecting ? \"Connecting\\u2026\" : \"Connect\"}\n              </Button>\n            </div>\n          </div>\n        )}\n\n        {/* Step 5a: OAuth required */}\n        {phase === \"oauth_required\" && (oauthInfo || batchOauthInfo) && (\n          <div className=\"flex flex-col items-center justify-center py-16\">\n            <div className=\"w-full max-w-sm space-y-6 text-center\">\n              {/* Visual anchor */}\n              <div className=\"mx-auto flex size-16 items-center justify-center rounded-2xl border border-primary/20 bg-gradient-to-b from-primary/10 to-primary/4\">\n                {oauthBusy ? (\n                  <IconSpinner className=\"size-6 text-primary\" />\n                ) : (\n                  <svg\n                    className=\"size-6 text-primary\"\n                    viewBox=\"0 0 24 24\"\n                    fill=\"none\"\n                    stroke=\"currentColor\"\n                    strokeWidth=\"1.5\"\n                    strokeLinecap=\"round\"\n                    strokeLinejoin=\"round\"\n                  >\n                    <rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\" ry=\"2\" />\n                    <path d=\"M7 11V7a5 5 0 0110 0v4\" />\n                  </svg>\n                )}\n              </div>\n\n              <div className=\"space-y-2\">\n                <h2 className=\"font-display text-xl tracking-tight text-foreground\">\n                  {oauthBusy\n                    ? \"Waiting for sign-in\\u2026\"\n                    : \"Sign in to continue\"}\n                </h2>\n                <p className=\"text-[13px] leading-relaxed text-muted-foreground\">\n                  {oauthInfo ? (\n                    <>\n                      <strong className=\"text-foreground\">\n                        {oauthInfo.source.name}\n                      </strong>{\" \"}\n                      requires OAuth authentication. A popup will open for you\n                      to authorize access.\n                    </>\n                  ) : (\n                    <>\n                      {batchOauthInfo!.sourceIds.length} Google source\n                      {batchOauthInfo!.sourceIds.length === 1 ? \"\" : \"s\"} need\n                      {batchOauthInfo!.sourceIds.length === 1 ? \"s\" : \"\"} OAuth.\n                      One consent screen covers all selected APIs.\n                    </>\n                  )}\n                </p>\n              </div>\n\n              <div className=\"flex flex-col items-center gap-3\">\n                <Button\n                  onClick={handleOAuthPopup}\n                  disabled={oauthBusy}\n                  className=\"w-full max-w-xs\"\n                >\n                  {oauthBusy ? <IconSpinner className=\"size-3.5\" /> : null}\n                  {oauthBusy ? \"Authenticating\\u2026\" : \"Open sign-in\"}\n                </Button>\n                {!oauthBusy && (\n                  <button\n                    type=\"button\"\n                    onClick={handleBackToEditing}\n                    className=\"text-[12px] font-medium text-muted-foreground/60 transition-colors hover:text-foreground\"\n                  >\n                    Back to configuration\n                  </button>\n                )}\n              </div>\n            </div>\n          </div>\n        )}\n\n        {/* Step 5b: Connected */}\n        {phase === \"connected\" && (\n          <div className=\"flex flex-col items-center justify-center py-20\">\n            <div className=\"space-y-5 text-center\">\n              <div className=\"mx-auto flex size-14 items-center justify-center rounded-full bg-primary/10 ring-4 ring-primary/5\">\n                <IconCheck className=\"size-6 text-primary\" />\n              </div>\n              <div className=\"space-y-1.5\">\n                <h2 className=\"font-display text-xl tracking-tight text-foreground\">\n                  {connectResult\n                    ? connectResult.source.name\n                    : batchOauthInfo\n                      ? `${batchOauthInfo.sourceIds.length} source${batchOauthInfo.sourceIds.length === 1 ? \"\" : \"s\"}`\n                      : \"Source\"}{\" \"}\n                  connected\n                </h2>\n                <p className=\"text-[13px] text-muted-foreground/70\">\n                  Redirecting\\u2026\n                </p>\n              </div>\n            </div>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Form building blocks\n// ---------------------------------------------------------------------------\n\nfunction Section(props: {\n  title: string;\n  children: ReactNode;\n  className?: string;\n}) {\n  return (\n    <section\n      className={cn(\n        \"rounded-xl border border-border bg-card/80\",\n        props.className,\n      )}\n    >\n      <div className=\"border-b border-border px-5 py-3\">\n        <h2 className=\"text-sm font-semibold text-foreground\">{props.title}</h2>\n      </div>\n      <div className=\"p-5\">{props.children}</div>\n    </section>\n  );\n}\n\nfunction Field(props: {\n  label: string;\n  className?: string;\n  children: ReactNode;\n}) {\n  return (\n    <label className={cn(\"block space-y-1.5\", props.className)}>\n      <span className=\"text-[12px] font-medium text-foreground\">\n        {props.label}\n      </span>\n      {props.children}\n    </label>\n  );\n}\n\nfunction TextInput(props: {\n  type?: \"text\" | \"password\";\n  value: string;\n  onChange: (value: string) => void;\n  placeholder?: string;\n  mono?: boolean;\n}) {\n  return (\n    <input\n      type={props.type || \"text\"}\n      value={props.value}\n      onChange={(event) => props.onChange(event.target.value)}\n      placeholder={props.placeholder}\n      className={cn(\n        \"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\",\n        props.mono && \"font-mono text-[12px]\",\n      )}\n    />\n  );\n}\n\nfunction SelectInput(props: {\n  value: string;\n  onChange: (value: string) => void;\n  options: ReadonlyArray<{ value: string; label: string }>;\n}) {\n  return (\n    <select\n      value={props.value}\n      onChange={(event) => props.onChange(event.target.value)}\n      className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n    >\n      {props.options.map((option) => (\n        <option key={option.value} value={option.value}>\n          {option.label}\n        </option>\n      ))}\n    </select>\n  );\n}\n\nfunction CodeEditor(props: {\n  value: string;\n  onChange: (value: string) => void;\n  placeholder?: string;\n}) {\n  return (\n    <textarea\n      value={props.value}\n      onChange={(event) => props.onChange(event.target.value)}\n      placeholder={props.placeholder}\n      spellCheck={false}\n      className=\"min-h-28 w-full rounded-lg border border-input bg-background px-3 py-2.5 font-mono text-[12px] leading-relaxed text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n    />\n  );\n}\n\nfunction StatusBanner(props: {\n  state: { tone: \"info\" | \"success\" | \"error\"; text: string };\n  className?: string;\n}) {\n  return (\n    <div\n      className={cn(\n        \"flex items-start gap-2.5 rounded-lg border px-4 py-3 text-[13px]\",\n        props.state.tone === \"success\" &&\n          \"border-primary/30 bg-primary/8 text-foreground\",\n        props.state.tone === \"info\" &&\n          \"border-border bg-card text-muted-foreground\",\n        props.state.tone === \"error\" &&\n          \"border-destructive/30 bg-destructive/8 text-destructive\",\n        props.className,\n      )}\n    >\n      <span className=\"mt-0.5 shrink-0\">\n        {props.state.tone === \"success\" && (\n          <IconCheck className=\"size-3.5 text-primary\" />\n        )}\n        {props.state.tone === \"error\" && (\n          <svg\n            className=\"size-3.5\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          >\n            <circle cx=\"12\" cy=\"12\" r=\"10\" />\n            <path d=\"M15 9l-6 6\" />\n            <path d=\"M9 9l6 6\" />\n          </svg>\n        )}\n        {props.state.tone === \"info\" && (\n          <svg\n            className=\"size-3.5\"\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke=\"currentColor\"\n            strokeWidth=\"2\"\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n          >\n            <circle cx=\"12\" cy=\"12\" r=\"10\" />\n            <path d=\"M12 16v-4\" />\n            <path d=\"M12 8h.01\" />\n          </svg>\n        )}\n      </span>\n      <span>{props.state.text}</span>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Secret or inline token picker\n// ---------------------------------------------------------------------------\n\nconst CREATE_NEW_VALUE = \"__create_new__\";\nconst INLINE_TOKEN_VALUE = \"__inline_token__\";\n\nfunction SecretOrTokenInput(props: {\n  instanceConfig: Loadable<InstanceConfig>;\n  secrets: Loadable<ReadonlyArray<SecretListItem>>;\n  handle: string;\n  inlineToken: string;\n  onSelectSecret: (providerId: string, handle: string) => void;\n  onChangeToken: (token: string) => void;\n}) {\n  const {\n    instanceConfig,\n    secrets,\n    handle,\n    inlineToken,\n    onSelectSecret,\n    onChangeToken,\n  } = props;\n  const createSecret = useCreateSecret();\n  const [showCreate, setShowCreate] = useState(false);\n  const [useInline, setUseInline] = useState(false);\n  const [newName, setNewName] = useState(\"\");\n  const [newValue, setNewValue] = useState(\"\");\n  const [newProviderId, setNewProviderId] = useState(\"\");\n  const [createError, setCreateError] = useState<string | null>(null);\n  const storableProviders =\n    instanceConfig.status === \"ready\"\n      ? instanceConfig.data.secretProviders.filter(\n          (provider) => provider.canStore,\n        )\n      : [];\n\n  useEffect(() => {\n    if (newProviderId.length > 0) {\n      return;\n    }\n    if (instanceConfig.status === \"ready\") {\n      setNewProviderId(instanceConfig.data.defaultSecretStoreProvider);\n    }\n  }, [instanceConfig, newProviderId]);\n\n  const selectedValue = showCreate\n    ? CREATE_NEW_VALUE\n    : useInline\n      ? INLINE_TOKEN_VALUE\n      : handle || \"\";\n\n  const handleSelectChange = (value: string) => {\n    if (value === CREATE_NEW_VALUE) {\n      setShowCreate(true);\n      setUseInline(false);\n      setNewName(\"\");\n      setNewValue(\"\");\n      setNewProviderId(\n        instanceConfig.status === \"ready\"\n          ? instanceConfig.data.defaultSecretStoreProvider\n          : \"\",\n      );\n      setCreateError(null);\n      return;\n    }\n    if (value === INLINE_TOKEN_VALUE) {\n      setUseInline(true);\n      setShowCreate(false);\n      onSelectSecret(\"\", \"\");\n      return;\n    }\n    if (value === \"\") {\n      setUseInline(false);\n      setShowCreate(false);\n      onSelectSecret(\"\", \"\");\n      return;\n    }\n    setUseInline(false);\n    setShowCreate(false);\n    const matchedSecret =\n      secrets.status === \"ready\"\n        ? secrets.data.find((secret) => secret.id === value)\n        : null;\n    onSelectSecret(matchedSecret?.providerId ?? \"local\", value);\n  };\n\n  const handleCreate = async () => {\n    setCreateError(null);\n    const trimmedName = newName.trim();\n    if (!trimmedName) {\n      setCreateError(\"Name is required.\");\n      return;\n    }\n    if (!newValue) {\n      setCreateError(\"Value is required.\");\n      return;\n    }\n\n    try {\n      const result = await createSecret.mutateAsync({\n        name: trimmedName,\n        value: newValue,\n        ...(newProviderId ? { providerId: newProviderId } : {}),\n      });\n      onSelectSecret(result.providerId, result.id);\n      setShowCreate(false);\n    } catch (err) {\n      setCreateError(\n        err instanceof Error ? err.message : \"Failed creating secret.\",\n      );\n    }\n  };\n\n  if (secrets.status !== \"ready\") {\n    return (\n      <select\n        disabled\n        className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-muted-foreground outline-none opacity-60\"\n      >\n        <option>Loading...</option>\n      </select>\n    );\n  }\n\n  const items = secrets.data;\n\n  return (\n    <div className=\"space-y-2\">\n      <select\n        value={selectedValue}\n        onChange={(e) => handleSelectChange(e.target.value)}\n        className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n      >\n        <option value=\"\">Select a secret...</option>\n        {items.map((secret) => (\n          <option key={secret.id} value={secret.id}>\n            {secret.name || secret.id} ({secret.providerId})\n          </option>\n        ))}\n        <option value={INLINE_TOKEN_VALUE}>Paste token directly</option>\n        <option value={CREATE_NEW_VALUE}>+ Create new secret</option>\n      </select>\n\n      {useInline && (\n        <input\n          type=\"password\"\n          value={inlineToken}\n          onChange={(e) => onChangeToken(e.target.value)}\n          placeholder=\"sk-... or ghp_...\"\n          className=\"h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n          autoFocus\n        />\n      )}\n\n      {showCreate && (\n        <div className=\"rounded-lg border border-primary/20 bg-card/80 p-3 space-y-3\">\n          {createError && (\n            <div className=\"rounded-md border border-destructive/30 bg-destructive/8 px-3 py-2 text-[12px] text-destructive\">\n              {createError}\n            </div>\n          )}\n          <div className=\"grid gap-3 sm:grid-cols-2\">\n            <label className=\"block space-y-1\">\n              <span className=\"text-[11px] font-medium text-muted-foreground\">\n                Name\n              </span>\n              <input\n                value={newName}\n                onChange={(e) => setNewName(e.target.value)}\n                placeholder=\"API Key\"\n                className=\"h-8 w-full rounded-lg border border-input bg-background px-3 text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n                autoFocus\n              />\n            </label>\n            <label className=\"block space-y-1\">\n              <span className=\"text-[11px] font-medium text-muted-foreground\">\n                Value\n              </span>\n              <input\n                type=\"password\"\n                value={newValue}\n                onChange={(e) => setNewValue(e.target.value)}\n                placeholder=\"sk-...\"\n                className=\"h-8 w-full rounded-lg border border-input bg-background px-3 font-mono text-[11px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n              />\n            </label>\n            <label className=\"block space-y-1\">\n              <span className=\"text-[11px] font-medium text-muted-foreground\">\n                Store in\n              </span>\n              <select\n                value={newProviderId}\n                onChange={(e) => setNewProviderId(e.target.value)}\n                className=\"h-8 w-full rounded-lg border border-input bg-background px-3 text-[12px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n              >\n                {storableProviders.map((provider) => (\n                  <option key={provider.id} value={provider.id}>\n                    {provider.name}\n                  </option>\n                ))}\n              </select>\n            </label>\n          </div>\n          <div className=\"flex items-center justify-end gap-2\">\n            <button\n              type=\"button\"\n              onClick={() => setShowCreate(false)}\n              className=\"rounded-md px-2.5 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground\"\n            >\n              Cancel\n            </button>\n            <Button\n              size=\"sm\"\n              onClick={handleCreate}\n              disabled={createSecret.status === \"pending\"}\n            >\n              {createSecret.status === \"pending\" && (\n                <IconSpinner className=\"size-3\" />\n              )}\n              Store & use\n            </Button>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/views/home.tsx",
    "content": "import { Link } from \"@tanstack/react-router\";\nimport { useSources, type Source } from \"@executor/react\";\nimport { LoadableBlock } from \"../components/loadable\";\nimport { LocalMcpInstallCard } from \"../components/local-mcp-install-card\";\nimport { SourceFavicon } from \"../components/source-favicon\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Button } from \"../components/ui/button\";\nimport { IconSources, IconPlus } from \"../components/icons\";\n\nexport function HomePage() {\n  const sources = useSources();\n\n  return (\n    <div className=\"flex-1 overflow-y-auto\">\n      <div className=\"mx-auto max-w-4xl px-6 py-10 lg:px-10 lg:py-14\">\n        {/* Header */}\n        <div className=\"flex items-end justify-between mb-8\">\n          <div>\n            <h1 className=\"font-display text-3xl tracking-tight text-foreground lg:text-4xl\">\n              Sources\n            </h1>\n            <p className=\"mt-1.5 text-[14px] text-muted-foreground\">\n              Connected tool providers in this workspace.\n            </p>\n          </div>\n          <Link to=\"/sources/add\">\n            <Button size=\"sm\">\n              <IconPlus className=\"size-3.5\" />\n              Add source\n            </Button>\n          </Link>\n        </div>\n\n        <LocalMcpInstallCard className=\"mb-8\" />\n\n        {/* Source list */}\n        <LoadableBlock loadable={sources} loading=\"Loading sources...\">\n          {(items) =>\n            items.length === 0 ? (\n              <div className=\"flex flex-col items-center justify-center rounded-2xl border border-dashed border-border py-20\">\n                <div className=\"flex size-12 items-center justify-center rounded-2xl bg-muted text-muted-foreground mb-4\">\n                  <IconSources className=\"size-5\" />\n                </div>\n                <p className=\"text-[14px] font-medium text-foreground/70 mb-1\">\n                  No sources yet\n                </p>\n                <p className=\"text-[13px] text-muted-foreground/60 mb-5\">\n                  Add a source to get started.\n                </p>\n                <Link to=\"/sources/add\">\n                  <Button size=\"sm\">\n                    <IconPlus className=\"size-3.5\" />\n                    Add source\n                  </Button>\n                </Link>\n              </div>\n            ) : (\n              <div className=\"grid gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n                {items.map((source) => (\n                  <SourceCard key={source.id} source={source} />\n                ))}\n              </div>\n            )\n          }\n        </LoadableBlock>\n      </div>\n    </div>\n  );\n}\n\nfunction SourceCard({ source }: { source: Source }) {\n  return (\n    <Link\n      to=\"/sources/$sourceId\"\n      params={{ sourceId: source.id }}\n      search={{ tab: \"model\" }}\n      className=\"group flex flex-col rounded-xl border border-border bg-card p-4 transition-all hover:border-primary/30 hover:shadow-[0_2px_12px_-4px_rgba(0,0,0,0.12)]\"\n    >\n      <div className=\"flex items-start justify-between gap-3 mb-3\">\n        <div className=\"flex size-9 shrink-0 items-center justify-center rounded-lg bg-primary/8 text-primary\">\n          <SourceFavicon endpoint={source.endpoint} kind={source.kind} className=\"size-4.5\" />\n        </div>\n        <Badge variant={source.status === \"connected\" ? \"default\" : source.status === \"error\" ? \"destructive\" : \"muted\"} className=\"shrink-0\">\n          {source.status}\n        </Badge>\n      </div>\n      <h3 className=\"text-[14px] font-semibold text-foreground group-hover:text-primary transition-colors mb-0.5\">\n        {source.name}\n      </h3>\n      <div className=\"flex items-center gap-2 mt-auto pt-2\">\n        <Badge variant=\"outline\" className=\"text-[9px]\">{source.kind}</Badge>\n      </div>\n    </Link>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/views/json-form.ts",
    "content": "import * as Either from \"effect/Either\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Schema from \"effect/Schema\";\n\nconst JsonStringMapSchema = Schema.parseJson(\n  Schema.Record({\n    key: Schema.String,\n    value: Schema.String,\n  }),\n);\n\nconst JsonStringArraySchema = Schema.parseJson(\n  Schema.Array(Schema.String),\n);\n\nconst formatJsonFieldError = (\n  label: string,\n  error: ParseResult.ParseError,\n): Error =>\n  new Error(\n    `${label} is invalid: ${ParseResult.TreeFormatter.formatErrorSync(error)}`,\n  );\n\nconst decodeJsonField = <A>(input: {\n  label: string;\n  text: string;\n  schema: Schema.Schema<A, string>;\n}): A | null => {\n  const trimmed = input.text.trim();\n  if (trimmed.length === 0) {\n    return null;\n  }\n\n  const decoded = Schema.decodeUnknownEither(input.schema)(trimmed);\n  if (Either.isLeft(decoded)) {\n    throw formatJsonFieldError(input.label, decoded.left);\n  }\n\n  return decoded.right;\n};\n\nexport const parseJsonStringMap = (\n  label: string,\n  text: string,\n): Record<string, string> | null => {\n  const decoded = decodeJsonField({\n    label,\n    text,\n    schema: JsonStringMapSchema,\n  });\n\n  return decoded && Object.keys(decoded).length > 0 ? decoded : null;\n};\n\nexport const parseJsonStringArray = (\n  label: string,\n  text: string,\n): Array<string> | null => {\n  const decoded = decodeJsonField({\n    label,\n    text,\n    schema: JsonStringArraySchema,\n  });\n\n  if (!decoded) {\n    return null;\n  }\n\n  const normalized = decoded\n    .map((value) => value.trim())\n    .filter((value) => value.length > 0);\n\n  return normalized.length > 0 ? normalized : null;\n};\n"
  },
  {
    "path": "apps/web/src/views/mcp-transport-state.ts",
    "content": "export type McpRemoteTransportValue = \"\" | \"auto\" | \"streamable-http\" | \"sse\";\n\nexport type McpTransportValue = McpRemoteTransportValue | \"stdio\";\n\nexport type McpRemoteTransportFields = {\n  transport: McpRemoteTransportValue;\n  queryParamsText: string;\n  headersText: string;\n};\n\nexport type McpStdioTransportFields = {\n  transport: \"stdio\";\n  command: string;\n  argsText: string;\n  envText: string;\n  cwd: string;\n};\n\nexport type McpTransportFields =\n  | McpRemoteTransportFields\n  | McpStdioTransportFields;\n\nexport const defaultMcpRemoteTransportFields = (\n  transport: McpRemoteTransportValue = \"\",\n): McpRemoteTransportFields => ({\n  transport,\n  queryParamsText: \"\",\n  headersText: \"\",\n});\n\nexport const defaultMcpStdioTransportFields = (\n  input?: Partial<Omit<McpStdioTransportFields, \"transport\">>,\n): McpStdioTransportFields => ({\n  transport: \"stdio\",\n  command: input?.command ?? \"\",\n  argsText: input?.argsText ?? \"\",\n  envText: input?.envText ?? \"\",\n  cwd: input?.cwd ?? \"\",\n});\n\nexport const asMcpRemoteTransportValue = (\n  transport: McpTransportValue | null | undefined,\n): McpRemoteTransportValue =>\n  transport === \"stdio\" ? \"auto\" : (transport ?? \"\");\n\nexport const setMcpTransportFieldsTransport = (\n  current: McpTransportFields,\n  transport: McpTransportValue,\n): McpTransportFields => {\n  if (transport === \"stdio\") {\n    return current.transport === \"stdio\"\n      ? current\n      : defaultMcpStdioTransportFields();\n  }\n\n  return current.transport === \"stdio\"\n    ? defaultMcpRemoteTransportFields(transport)\n    : {\n        ...current,\n        transport,\n      };\n};\n"
  },
  {
    "path": "apps/web/src/views/secrets.tsx",
    "content": "import { useEffect, useState, type ReactNode } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport {\n  type InstanceConfig,\n  type SecretListItem,\n  type Loadable,\n  useSecrets,\n  useCreateSecret,\n  useUpdateSecret,\n  useDeleteSecret,\n  useInstanceConfig,\n} from \"@executor/react\";\nimport { LoadableBlock } from \"../components/loadable\";\nimport { Button } from \"../components/ui/button\";\nimport { Badge } from \"../components/ui/badge\";\nimport { IconPlus, IconPencil, IconTrash, IconSpinner } from \"../components/icons\";\nimport { cn } from \"../lib/utils\";\n\n// ---------------------------------------------------------------------------\n// Page\n// ---------------------------------------------------------------------------\n\nconst storableProvidersFromConfig = (config: Loadable<InstanceConfig>) =>\n  config.status === \"ready\"\n    ? config.data.secretProviders.filter((provider) => provider.canStore)\n    : [];\n\nconst providerLabelForId = (config: Loadable<InstanceConfig>, providerId: string): string =>\n  config.status === \"ready\"\n    ? config.data.secretProviders.find((provider) => provider.id === providerId)?.name ?? providerId\n    : providerId;\n\nexport function SecretsPage() {\n  const instanceConfig = useInstanceConfig();\n  const secrets = useSecrets();\n  const [showCreate, setShowCreate] = useState(false);\n  const [editingId, setEditingId] = useState<string | null>(null);\n  const storableProviders = storableProvidersFromConfig(instanceConfig);\n  const defaultProviderLabel =\n    instanceConfig.status === \"ready\"\n      ? providerLabelForId(instanceConfig, instanceConfig.data.defaultSecretStoreProvider)\n      : null;\n\n  return (\n    <div className=\"flex-1 overflow-y-auto\">\n      <div className=\"mx-auto max-w-3xl px-6 py-10 lg:px-10 lg:py-14\">\n        {/* Header */}\n        <div className=\"flex items-end justify-between mb-8\">\n          <div>\n            <h1 className=\"font-display text-3xl tracking-tight text-foreground lg:text-4xl\">\n              Secrets\n            </h1>\n            <p className=\"mt-1.5 text-[14px] text-muted-foreground\">\n              Tokens and credentials stored by executor.\n              {defaultProviderLabel ? ` New secrets default to ${defaultProviderLabel}.` : \"\"}\n            </p>\n          </div>\n          <Button size=\"sm\" onClick={() => { setShowCreate(true); setEditingId(null); }}>\n            <IconPlus className=\"size-3.5\" />\n            Add secret\n          </Button>\n        </div>\n\n        {/* Create form */}\n        {showCreate && (\n          <CreateSecretForm\n            onClose={() => setShowCreate(false)}\n            className=\"mb-6\"\n            providerOptions={storableProviders}\n            defaultProviderId={\n              instanceConfig.status === \"ready\"\n                ? instanceConfig.data.defaultSecretStoreProvider\n                : null\n            }\n          />\n        )}\n\n        {/* Secrets table */}\n        <LoadableBlock loadable={secrets} loading=\"Loading secrets...\">\n          {(items) =>\n            items.length === 0 && !showCreate ? (\n              <EmptyState onAdd={() => setShowCreate(true)} />\n            ) : (\n              <div className=\"rounded-xl border border-border bg-card/80 divide-y divide-border overflow-hidden\">\n                {items.map((secret) => (\n                  <SecretRow\n                    key={secret.id}\n                    secret={secret}\n                    providerLabel={providerLabelForId(instanceConfig, secret.providerId)}\n                    isEditing={editingId === secret.id}\n                    onEdit={() => setEditingId(editingId === secret.id ? null : secret.id)}\n                    onCancelEdit={() => setEditingId(null)}\n                  />\n                ))}\n                {items.length === 0 && (\n                  <div className=\"px-5 py-8 text-center text-[13px] text-muted-foreground/60\">\n                    No secrets yet. Add one above.\n                  </div>\n                )}\n              </div>\n            )\n          }\n        </LoadableBlock>\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Empty state\n// ---------------------------------------------------------------------------\n\nfunction EmptyState(props: { onAdd: () => void }) {\n  return (\n    <div className=\"flex flex-col items-center justify-center rounded-2xl border border-dashed border-border py-20\">\n      <div className=\"flex size-12 items-center justify-center rounded-2xl bg-muted text-muted-foreground mb-4\">\n        <KeyIcon className=\"size-5\" />\n      </div>\n      <p className=\"text-[14px] font-medium text-foreground/70 mb-1\">\n        No secrets stored\n      </p>\n      <p className=\"text-[13px] text-muted-foreground/60 mb-5\">\n        Secrets let you securely provide tokens for source authentication without putting them in workspace config.\n      </p>\n      <Button size=\"sm\" onClick={props.onAdd}>\n        <IconPlus className=\"size-3.5\" />\n        Add secret\n      </Button>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Create form\n// ---------------------------------------------------------------------------\n\nfunction CreateSecretForm(props: {\n  onClose: () => void;\n  className?: string;\n  providerOptions: ReadonlyArray<{ id: string; name: string }>;\n  defaultProviderId: string | null;\n}) {\n  const createSecret = useCreateSecret();\n  const [name, setName] = useState(\"\");\n  const [value, setValue] = useState(\"\");\n  const [providerId, setProviderId] = useState(props.defaultProviderId ?? \"\");\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    if (providerId.length > 0) {\n      return;\n    }\n    if (props.defaultProviderId) {\n      setProviderId(props.defaultProviderId);\n    }\n  }, [props.defaultProviderId, providerId]);\n\n  const handleSubmit = async () => {\n    setError(null);\n    const trimmedName = name.trim();\n    if (!trimmedName) {\n      setError(\"Name is required.\");\n      return;\n    }\n    if (!value) {\n      setError(\"Value is required.\");\n      return;\n    }\n\n    try {\n      await createSecret.mutateAsync({\n        name: trimmedName,\n        value,\n        ...(providerId ? { providerId } : {}),\n      });\n      props.onClose();\n    } catch (err) {\n      setError(err instanceof Error ? err.message : \"Failed creating secret.\");\n    }\n  };\n\n  return (\n    <div className={cn(\"rounded-xl border border-primary/20 bg-card/80\", props.className)}>\n      <div className=\"border-b border-border px-5 py-3 flex items-center justify-between\">\n        <h2 className=\"text-sm font-semibold text-foreground\">New secret</h2>\n        <button\n          type=\"button\"\n          onClick={props.onClose}\n          className=\"text-[12px] text-muted-foreground hover:text-foreground transition-colors\"\n        >\n          Cancel\n        </button>\n      </div>\n      <div className=\"p-5 space-y-4\">\n        {error && (\n          <div className=\"rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-[13px] text-destructive\">\n            {error}\n          </div>\n        )}\n        <div className=\"grid gap-4 sm:grid-cols-2\">\n          <FieldLabel label=\"Name\">\n            <input\n              value={name}\n              onChange={(e) => setName(e.target.value)}\n              placeholder=\"GitHub PAT\"\n              className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n              autoFocus\n            />\n          </FieldLabel>\n          <FieldLabel label=\"Value\">\n            <input\n              type=\"password\"\n              value={value}\n              onChange={(e) => setValue(e.target.value)}\n              placeholder=\"ghp_...\"\n              className=\"h-9 w-full rounded-lg border border-input bg-background px-3 font-mono text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n            />\n          </FieldLabel>\n          <FieldLabel label=\"Store in\">\n            <select\n              value={providerId}\n              onChange={(e) => setProviderId(e.target.value)}\n              className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n            >\n              {props.providerOptions.map((provider) => (\n                <option key={provider.id} value={provider.id}>\n                  {provider.name}\n                </option>\n              ))}\n            </select>\n          </FieldLabel>\n        </div>\n        <div className=\"flex justify-end\">\n          <Button\n            size=\"sm\"\n            onClick={handleSubmit}\n            disabled={createSecret.status === \"pending\"}\n          >\n            {createSecret.status === \"pending\" ? <IconSpinner className=\"size-3.5\" /> : <IconPlus className=\"size-3.5\" />}\n            Store secret\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Secret row\n// ---------------------------------------------------------------------------\n\nfunction SecretRow(props: {\n  secret: SecretListItem;\n  providerLabel: string;\n  isEditing: boolean;\n  onEdit: () => void;\n  onCancelEdit: () => void;\n}) {\n  const { secret, providerLabel, isEditing } = props;\n  const deleteSecret = useDeleteSecret();\n  const [isDeleting, setIsDeleting] = useState(false);\n\n  const handleDelete = async () => {\n    const confirmed = window.confirm(\n      `Delete \"${secret.name || secret.id}\"? This cannot be undone. Sources using this secret will lose access.`,\n    );\n    if (!confirmed) return;\n\n    setIsDeleting(true);\n    try {\n      await deleteSecret.mutateAsync(secret.id);\n    } catch {\n      // refresh will show the secret still there\n    } finally {\n      setIsDeleting(false);\n    }\n  };\n\n  const createdDate = new Date(secret.createdAt).toLocaleDateString(undefined, {\n    month: \"short\",\n    day: \"numeric\",\n    year: \"numeric\",\n  });\n\n  return (\n    <div className=\"px-5 py-3.5\">\n      <div className=\"flex items-center justify-between gap-4\">\n        <div className=\"flex items-center gap-3 min-w-0\">\n          <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/8 text-primary\">\n            <KeyIcon className=\"size-3.5\" />\n          </div>\n          <div className=\"min-w-0\">\n            <div className=\"flex items-center gap-2\">\n              <span className=\"text-[13px] font-medium text-foreground truncate\">\n                {secret.name || \"Unnamed secret\"}\n              </span>\n              <Badge variant=\"outline\" className=\"text-[9px] shrink-0\">\n                {secret.purpose.replace(/_/g, \" \")}\n              </Badge>\n              <Badge variant=\"outline\" className=\"text-[9px] shrink-0\">\n                {providerLabel}\n              </Badge>\n            </div>\n            <div className=\"flex items-center gap-2 mt-0.5\">\n              <span className=\"text-[11px] font-mono text-muted-foreground/50 truncate\">\n                {secret.id}\n              </span>\n              <span className=\"text-[11px] text-muted-foreground/40\">\n                {createdDate}\n              </span>\n            </div>\n            {secret.linkedSources.length > 0 && (\n              <div className=\"flex items-center gap-1.5 mt-1 flex-wrap\">\n                <span className=\"text-[10px] text-muted-foreground/50\">Used by</span>\n                {secret.linkedSources.map((ls) => (\n                  <Link\n                    key={ls.sourceId}\n                    to=\"/sources/$sourceId\"\n                    params={{ sourceId: ls.sourceId }}\n                    search={{ tab: \"model\" }}\n                    className=\"inline-flex items-center gap-1 rounded-md bg-accent/60 px-1.5 py-0.5 text-[10px] font-medium text-foreground/70 transition-colors hover:bg-accent hover:text-foreground\"\n                  >\n                    {ls.sourceName}\n                  </Link>\n                ))}\n              </div>\n            )}\n          </div>\n        </div>\n        <div className=\"flex items-center gap-1.5 shrink-0\">\n          <button\n            type=\"button\"\n            onClick={props.onEdit}\n            className={cn(\n              \"inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-medium transition-colors\",\n              isEditing\n                ? \"bg-primary/10 text-primary\"\n                : \"text-muted-foreground hover:text-foreground hover:bg-accent/50\",\n            )}\n          >\n            <IconPencil className=\"size-3\" />\n            Edit\n          </button>\n          <button\n            type=\"button\"\n            onClick={handleDelete}\n            disabled={isDeleting}\n            className=\"inline-flex items-center gap-1 rounded-md px-2 py-1.5 text-[11px] font-medium text-muted-foreground transition-colors hover:text-destructive hover:bg-destructive/8 disabled:opacity-50\"\n          >\n            {isDeleting ? <IconSpinner className=\"size-3\" /> : <IconTrash className=\"size-3\" />}\n            Delete\n          </button>\n        </div>\n      </div>\n\n      {/* Inline edit */}\n      {isEditing && (\n        <EditSecretForm\n          secret={secret}\n          onClose={props.onCancelEdit}\n        />\n      )}\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Edit form (inline)\n// ---------------------------------------------------------------------------\n\nfunction EditSecretForm(props: { secret: SecretListItem; onClose: () => void }) {\n  const updateSecret = useUpdateSecret();\n  const [name, setName] = useState(props.secret.name ?? \"\");\n  const [value, setValue] = useState(\"\");\n  const [error, setError] = useState<string | null>(null);\n\n  const handleSubmit = async () => {\n    setError(null);\n\n    const payload: { name?: string; value?: string } = {};\n    const trimmedName = name.trim();\n    if (trimmedName && trimmedName !== (props.secret.name ?? \"\")) {\n      payload.name = trimmedName;\n    }\n    if (value.length > 0) {\n      payload.value = value;\n    }\n    if (Object.keys(payload).length === 0) {\n      props.onClose();\n      return;\n    }\n\n    try {\n      await updateSecret.mutateAsync({\n        secretId: props.secret.id,\n        payload,\n      });\n      props.onClose();\n    } catch (err) {\n      setError(err instanceof Error ? err.message : \"Failed updating secret.\");\n    }\n  };\n\n  return (\n    <div className=\"mt-3 pt-3 border-t border-border/50\">\n      {error && (\n        <div className=\"rounded-lg border border-destructive/30 bg-destructive/8 px-4 py-2.5 text-[13px] text-destructive mb-3\">\n          {error}\n        </div>\n      )}\n      <div className=\"grid gap-3 sm:grid-cols-2\">\n        <FieldLabel label=\"Name\">\n          <input\n            value={name}\n            onChange={(e) => setName(e.target.value)}\n            placeholder=\"Secret name\"\n            className=\"h-8 w-full rounded-lg border border-input bg-background px-3 text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n            autoFocus\n          />\n        </FieldLabel>\n        <FieldLabel label=\"New value (leave empty to keep current)\">\n          <input\n            type=\"password\"\n            value={value}\n            onChange={(e) => setValue(e.target.value)}\n            placeholder=\"Leave empty to keep existing\"\n            className=\"h-8 w-full rounded-lg border border-input bg-background px-3 font-mono text-[11px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n          />\n        </FieldLabel>\n      </div>\n      <div className=\"flex items-center justify-end gap-2 mt-3\">\n        <button\n          type=\"button\"\n          onClick={props.onClose}\n          className=\"rounded-md px-3 py-1.5 text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground\"\n        >\n          Cancel\n        </button>\n        <Button\n          size=\"sm\"\n          onClick={handleSubmit}\n          disabled={updateSecret.status === \"pending\"}\n        >\n          {updateSecret.status === \"pending\" && <IconSpinner className=\"size-3\" />}\n          Save\n        </Button>\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Shared\n// ---------------------------------------------------------------------------\n\nfunction FieldLabel(props: { label: string; children: ReactNode }) {\n  return (\n    <label className=\"block space-y-1\">\n      <span className=\"text-[11px] font-medium text-muted-foreground\">{props.label}</span>\n      {props.children}\n    </label>\n  );\n}\n\nfunction KeyIcon(props: { className?: string }) {\n  return (\n    <svg viewBox=\"0 0 16 16\" fill=\"none\" className={cn(\"size-4\", props.className)}>\n      <path\n        d=\"M10 6a4 4 0 10-4.9 3.9L2 13v1.5h2V13h1.5v-1.5H7l.6-.6A4 4 0 0010 6z\"\n        stroke=\"currentColor\"\n        strokeWidth=\"1.3\"\n        strokeLinejoin=\"round\"\n      />\n      <circle cx=\"10.5\" cy=\"5.5\" r=\"1\" fill=\"currentColor\" />\n    </svg>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/views/source-detail.tsx",
    "content": "import { useState, useEffect, useCallback, useRef, useMemo } from \"react\";\nimport { Link } from \"@tanstack/react-router\";\nimport {\n  type ConnectSourcePayload,\n  useSource,\n  useSources,\n  useConnectSource,\n  useSourceInspection,\n  useSourceToolDetail,\n  useSourceDiscovery,\n  type Loadable,\n  type Source,\n  type SourceInspection,\n  type SourceInspectionToolDetail,\n  type SourceInspectionDiscoverResult,\n} from \"@executor/react\";\nimport { cn } from \"../lib/utils\";\nimport { Badge, MethodBadge } from \"../components/ui/badge\";\nimport { Button } from \"../components/ui/button\";\nimport { LoadableBlock, EmptyState } from \"../components/loadable\";\nimport { DocumentPanel } from \"../components/document-panel\";\nimport { SourceNotFoundState } from \"../components/source-not-found-state\";\nimport { SourceRecoveryState } from \"../components/source-recovery-state\";\nimport {\n  IconSearch,\n  IconChevron,\n  IconTool,\n  IconFolder,\n  IconCopy,\n  IconCheck,\n  IconClose,\n  IconPencil,\n  IconSpinner,\n} from \"../components/icons\";\nimport { Markdown } from \"../components/markdown\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype SourceRouteSearch = {\n  tab: \"model\" | \"discover\";\n  tool?: string;\n  query?: string;\n};\n\nconst visibleTabs: Array<{ id: SourceRouteSearch[\"tab\"]; label: string }> = [\n  { id: \"model\", label: \"Tools\" },\n  { id: \"discover\", label: \"Search\" },\n];\n\nconst isSourceNotFoundError = (loadable: Loadable<unknown>): boolean =>\n  loadable.status === \"error\"\n  && loadable.error.message.toLowerCase().includes(\"source not found\");\n\nconst isMissingCatalogArtifactError = (loadable: Loadable<unknown>): boolean =>\n  loadable.status === \"error\"\n  && loadable.error.message.toLowerCase().includes(\"catalog artifact missing for source\");\n\nconst listExcludesSource = (\n  sources: Loadable<ReadonlyArray<Source>>,\n  sourceId: string,\n): boolean => sources.status === \"ready\" && !sources.data.some((source) => source.id === sourceId);\n\ntype SourceDetailPageState =\n  | { kind: \"source_not_found\" }\n  | { kind: \"tools_missing\"; source: Source }\n  | { kind: \"ready\" };\n\nconst resolveSourceDetailPageState = (input: {\n  sources: Loadable<ReadonlyArray<Source>>;\n  source: Loadable<Source>;\n  inspection: Loadable<SourceInspection>;\n  sourceId: string;\n}): SourceDetailPageState => {\n  if (\n    listExcludesSource(input.sources, input.sourceId)\n    || isSourceNotFoundError(input.source)\n    || isSourceNotFoundError(input.inspection)\n  ) {\n    return { kind: \"source_not_found\" };\n  }\n\n  if (input.source.status === \"ready\" && isMissingCatalogArtifactError(input.inspection)) {\n    return {\n      kind: \"tools_missing\",\n      source: input.source.data,\n    };\n  }\n\n  return { kind: \"ready\" };\n};\n\nconst readBindingString = (source: Source, key: string): string | null =>\n  typeof source.binding[key] === \"string\" && source.binding[key].trim().length > 0\n    ? String(source.binding[key])\n    : null;\n\nconst readBindingStringMap = (source: Source, key: string): Record<string, string> | null => {\n  const candidate = source.binding[key];\n  if (candidate === null || candidate === undefined || typeof candidate !== \"object\" || Array.isArray(candidate)) {\n    return null;\n  }\n\n  const entries = Object.entries(candidate as Record<string, unknown>);\n  return entries.every(([, value]) => typeof value === \"string\")\n    ? Object.fromEntries(entries as ReadonlyArray<readonly [string, string]>)\n    : null;\n};\n\nconst readBindingStringArray = (source: Source, key: string): Array<string> | undefined => {\n  const candidate = source.binding[key];\n  return Array.isArray(candidate) && candidate.every((value) => typeof value === \"string\")\n    ? [...candidate]\n    : undefined;\n};\n\nconst readBindingTransport = (source: Source): \"auto\" | \"streamable-http\" | \"sse\" | \"stdio\" | undefined => {\n  const candidate = source.binding.transport;\n  return candidate === \"auto\" || candidate === \"streamable-http\" || candidate === \"sse\" || candidate === \"stdio\"\n    ? candidate\n    : undefined;\n};\n\nconst refreshableHttpAuth = (\n  auth: Source[\"auth\"],\n): Extract<Source[\"auth\"], { kind: \"none\" | \"bearer\" | \"oauth2\" }> | undefined =>\n  auth.kind === \"none\" || auth.kind === \"bearer\" || auth.kind === \"oauth2\"\n    ? auth\n    : undefined;\n\nconst refreshPayloadFromSource = (source: Source): ConnectSourcePayload | null => {\n  switch (source.kind) {\n    case \"mcp\":\n      return {\n        kind: \"mcp\",\n        endpoint: source.endpoint,\n        name: source.name,\n        namespace: source.namespace,\n        ...(readBindingTransport(source) ? { transport: readBindingTransport(source) } : {}),\n        queryParams: readBindingStringMap(source, \"queryParams\"),\n        headers: readBindingStringMap(source, \"headers\"),\n        command: readBindingString(source, \"command\"),\n        args: readBindingStringArray(source, \"args\"),\n        env: readBindingStringMap(source, \"env\"),\n        cwd: readBindingString(source, \"cwd\"),\n      };\n    case \"openapi\": {\n      const specUrl = readBindingString(source, \"specUrl\");\n      if (!specUrl) {\n        return null;\n      }\n\n      return {\n        kind: \"openapi\",\n        endpoint: source.endpoint,\n        specUrl,\n        name: source.name,\n        namespace: source.namespace,\n        importAuthPolicy: source.importAuthPolicy,\n        importAuth: refreshableHttpAuth(source.importAuth),\n        auth: refreshableHttpAuth(source.auth),\n      };\n    }\n    case \"graphql\":\n      return {\n        kind: \"graphql\",\n        endpoint: source.endpoint,\n        name: source.name,\n        namespace: source.namespace,\n        importAuthPolicy: source.importAuthPolicy,\n        importAuth: refreshableHttpAuth(source.importAuth),\n        auth: refreshableHttpAuth(source.auth),\n      };\n    case \"google_discovery\": {\n      const service = readBindingString(source, \"service\");\n      const version = readBindingString(source, \"version\");\n      if (!service || !version) {\n        return null;\n      }\n\n      return {\n        kind: \"google_discovery\",\n        service,\n        version,\n        discoveryUrl: readBindingString(source, \"discoveryUrl\"),\n        scopes: readBindingStringArray(source, \"scopes\"),\n        oauthClient: null,\n        name: source.name,\n        namespace: source.namespace,\n        importAuthPolicy: source.importAuthPolicy,\n        importAuth: refreshableHttpAuth(source.importAuth),\n        auth: refreshableHttpAuth(source.auth),\n      };\n    }\n  }\n};\n\n// ---------------------------------------------------------------------------\n// SourceDetailPage (main export)\n// ---------------------------------------------------------------------------\n\nexport function SourceDetailPage(props: {\n  sourceId: string;\n  search: SourceRouteSearch;\n  navigate: (opts: { search: (prev: SourceRouteSearch) => SourceRouteSearch; replace?: boolean }) => void;\n}) {\n  const { sourceId, search, navigate } = props;\n  const sources = useSources();\n  const source = useSource(sourceId);\n  const connectSource = useConnectSource();\n  const inspection = useSourceInspection(sourceId);\n  const [refreshFeedback, setRefreshFeedback] = useState<{\n    tone: \"success\" | \"error\";\n    text: string;\n  } | null>(null);\n  const sourceDetailPageState = resolveSourceDetailPageState({\n    sources,\n    source,\n    inspection,\n    sourceId,\n  });\n\n  const selectedToolPath =\n    search.tool\n    ?? (inspection.status === \"ready\" ? inspection.data.tools[0]?.path : undefined);\n\n  const toolDetail = useSourceToolDetail(\n    sourceId,\n    search.tab === \"model\" ? selectedToolPath ?? null : null,\n  );\n\n  const discovery = useSourceDiscovery({\n    sourceId,\n    query: search.query ?? \"\",\n    limit: 12,\n  });\n\n  const handleRefresh = useCallback(async (currentSource: Source) => {\n    const payload = refreshPayloadFromSource(currentSource);\n    if (!payload) {\n      setRefreshFeedback({\n        tone: \"error\",\n        text: \"Refresh is unavailable until this source has complete connection details.\",\n      });\n      return;\n    }\n\n    setRefreshFeedback(null);\n    try {\n      await connectSource.mutateAsync(payload);\n      setRefreshFeedback({\n        tone: \"success\",\n        text: `Refreshed ${currentSource.name}.`,\n      });\n    } catch (error) {\n      setRefreshFeedback({\n        tone: \"error\",\n        text: error instanceof Error ? error.message : \"Failed to refresh source.\",\n      });\n    }\n  }, [connectSource]);\n\n  // Auto-select first tool\n  useEffect(() => {\n    if (search.tab !== \"model\" || search.tool || inspection.status !== \"ready\") return;\n    const firstTool = inspection.data.tools[0]?.path;\n    if (!firstTool) return;\n    void navigate({ search: (prev) => ({ ...prev, tool: firstTool }), replace: true });\n  }, [inspection, navigate, search.tab, search.tool]);\n\n  if (sourceDetailPageState.kind === \"source_not_found\") {\n    return <SourceNotFoundState />;\n  }\n\n  if (sourceDetailPageState.kind === \"tools_missing\") {\n    const refreshPayload = refreshPayloadFromSource(sourceDetailPageState.source);\n\n    return (\n      <SourceRecoveryState\n        source={sourceDetailPageState.source}\n        title=\"Tools need to be rebuilt\"\n        description=\"This source exists in your workspace, but its generated tool catalog is missing. Refresh to reconnect and rebuild the tools.\"\n        refreshLabel=\"Refresh source\"\n        refreshTitle={\n          refreshPayload === null\n            ? \"Refresh is unavailable for this source configuration\"\n            : \"Reconnect and rebuild this source\"\n        }\n        refreshDisabled={connectSource.status === \"pending\" || refreshPayload === null}\n        refreshPending={connectSource.status === \"pending\"}\n        feedback={refreshFeedback}\n        onRefresh={() => void handleRefresh(sourceDetailPageState.source)}\n      />\n    );\n  }\n\n  return (\n    <LoadableBlock loadable={inspection} loading=\"Loading source...\">\n      {(bundle) => {\n        const selectedTool =\n          bundle.tools.find((t) => t.path === selectedToolPath) ?? bundle.tools[0] ?? null;\n\n        return (\n          <div className=\"flex h-full flex-col overflow-hidden\">\n            {/* Header bar */}\n            <div className=\"flex shrink-0 items-center justify-between border-b border-border bg-background/95 backdrop-blur-sm px-4 h-12\">\n              <div className=\"flex items-center gap-3 min-w-0\">\n                <h2 className=\"truncate text-sm font-semibold text-foreground\">\n                  {bundle.source.name}\n                </h2>\n                <Badge variant=\"outline\">{bundle.source.kind}</Badge>\n                <span className=\"hidden text-[11px] tabular-nums text-muted-foreground/50 sm:block\">\n                  {bundle.toolCount} {bundle.toolCount === 1 ? \"tool\" : \"tools\"}\n                </span>\n              </div>\n              <div className=\"flex items-center gap-2\">\n                {refreshFeedback && (\n                  <span\n                    className={cn(\n                      \"hidden max-w-72 truncate text-[11px] font-medium sm:inline-flex sm:items-center sm:gap-1.5\",\n                      refreshFeedback.tone === \"success\"\n                        ? \"text-primary\"\n                        : \"text-destructive\",\n                    )}\n                    title={refreshFeedback.text}\n                  >\n                    {refreshFeedback.tone === \"success\" && (\n                      <IconCheck className=\"size-3 shrink-0\" />\n                    )}\n                    {refreshFeedback.text}\n                  </span>\n                )}\n                <div className=\"flex items-center gap-0.5 rounded-lg bg-muted/50 p-0.5\">\n                  {visibleTabs.map((tab) => (\n                    <button\n                      key={tab.id}\n                      type=\"button\"\n                      onClick={() => void navigate({ search: (prev) => ({ ...prev, tab: tab.id }) })}\n                      className={cn(\n                        \"rounded-md px-3 py-1 text-[12px] font-medium transition-colors\",\n                        tab.id === search.tab\n                          ? \"bg-background text-foreground shadow-sm\"\n                          : \"text-muted-foreground hover:text-foreground\",\n                      )}\n                    >\n                      {tab.label}\n                    </button>\n                  ))}\n                </div>\n                <Button\n                  variant=\"outline\"\n                  size=\"sm\"\n                  onClick={() => void handleRefresh(bundle.source)}\n                  disabled={connectSource.status === \"pending\" || refreshPayloadFromSource(bundle.source) === null}\n                  title={\n                    refreshPayloadFromSource(bundle.source) === null\n                      ? \"Refresh is unavailable for this source configuration\"\n                      : \"Reconnect and resync this source\"\n                  }\n                >\n                  {connectSource.status === \"pending\"\n                    ? <IconSpinner className=\"size-3\" />\n                    : null}\n                  Refresh\n                </Button>\n                <Link\n                  to=\"/sources/$sourceId/edit\"\n                  params={{ sourceId }}\n                  className=\"inline-flex items-center gap-1.5 rounded-md border border-border bg-card px-2.5 py-1 text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground hover:bg-accent/50\"\n                >\n                  <IconPencil className=\"size-3\" />\n                  Edit\n                </Link>\n              </div>\n            </div>\n\n            {/* Tab content */}\n            <div className=\"flex flex-1 min-h-0 overflow-hidden\">\n              {search.tab === \"model\" && (\n                <ModelView\n                  bundle={bundle}\n                  detail={toolDetail}\n                  selectedToolPath={selectedTool?.path ?? null}\n                  onSelectTool={(toolPath) =>\n                    void navigate({ search: (prev) => ({ ...prev, tool: toolPath, tab: \"model\" }) })\n                  }\n                  sourceId={sourceId}\n                />\n              )}\n              {search.tab === \"discover\" && (\n                <DiscoveryView\n                  bundle={bundle}\n                  discovery={discovery}\n                  initialQuery={search.query ?? \"\"}\n                  onSubmitQuery={(query) =>\n                    void navigate({ search: (prev) => ({ ...prev, query, tab: \"discover\" }) })\n                  }\n                  onOpenTool={(toolPath) =>\n                    void navigate({ search: (prev) => ({ ...prev, tab: \"model\", tool: toolPath }) })\n                  }\n                />\n              )}\n            </div>\n          </div>\n        );\n      }}\n    </LoadableBlock>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// ModelView — two-panel: tool list + tool detail\n// ---------------------------------------------------------------------------\n\nfunction ModelView(props: {\n  bundle: SourceInspection;\n  detail: Loadable<SourceInspectionToolDetail | null>;\n  selectedToolPath: string | null;\n  onSelectTool: (toolPath: string) => void;\n  sourceId: string;\n}) {\n  const [search, setSearch] = useState(\"\");\n  const searchRef = useRef<HTMLInputElement>(null);\n  const terms = search.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n\n  const filteredTools = props.bundle.tools.filter((tool) => {\n    if (terms.length === 0) return true;\n    const corpus = [\n      tool.path,\n      tool.method ?? \"\",\n      tool.inputTypePreview ?? \"\",\n      tool.outputTypePreview ?? \"\",\n    ]\n      .join(\" \")\n      .toLowerCase();\n    return terms.every((t) => corpus.includes(t));\n  });\n\n  // Keyboard shortcut: / to focus search\n  useEffect(() => {\n    const handler = (e: KeyboardEvent) => {\n      if (e.key === \"/\" && document.activeElement?.tagName !== \"INPUT\") {\n        e.preventDefault();\n        searchRef.current?.focus();\n      }\n      if (e.key === \"Escape\") {\n        searchRef.current?.blur();\n        if (search.length > 0) setSearch(\"\");\n      }\n    };\n    document.addEventListener(\"keydown\", handler);\n    return () => document.removeEventListener(\"keydown\", handler);\n  }, [search]);\n\n  return (\n    <>\n      {/* Left panel: tool list */}\n      <div className=\"flex w-72 shrink-0 flex-col border-r border-border bg-card/30 lg:w-80 xl:w-[22rem]\">\n        {/* Search */}\n        <div className=\"shrink-0 border-b border-border px-3 py-2\">\n          <div className=\"relative\">\n            <IconSearch className=\"absolute left-2.5 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground/40\" />\n            <input\n              ref={searchRef}\n              value={search}\n              onChange={(e) => setSearch(e.target.value)}\n              placeholder={`Filter ${props.bundle.toolCount} tools\\u2026`}\n              className=\"h-8 w-full rounded-md border border-input bg-background pl-8 pr-8 text-[13px] outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/30\"\n            />\n            {search.length > 0 ? (\n              <button\n                type=\"button\"\n                onClick={() => setSearch(\"\")}\n                className=\"absolute right-2 top-1/2 -translate-y-1/2 rounded p-0.5 text-muted-foreground/40 hover:text-foreground\"\n              >\n                <IconClose />\n              </button>\n            ) : (\n              <kbd className=\"absolute right-2.5 top-1/2 -translate-y-1/2 rounded border border-border bg-muted px-1 py-px text-[10px] text-muted-foreground/50\">\n                /\n              </kbd>\n            )}\n          </div>\n        </div>\n\n        {/* Tool list */}\n        <div className=\"flex-1 overflow-y-auto\">\n          {filteredTools.length === 0 ? (\n            <div className=\"p-4 text-center text-[13px] text-muted-foreground/50\">\n              {terms.length > 0 ? \"No tools match your filter\" : \"No tools available\"}\n            </div>\n          ) : (\n            <div className=\"p-1.5\">\n              <ToolTree\n                tools={filteredTools}\n                selectedToolPath={props.selectedToolPath}\n                onSelectTool={props.onSelectTool}\n                search={search}\n                isFiltered={terms.length > 0}\n              />\n            </div>\n          )}\n        </div>\n      </div>\n\n      {/* Right panel: tool detail */}\n      <div className=\"flex flex-1 flex-col min-w-0 overflow-hidden\">\n        <LoadableBlock loadable={props.detail} loading=\"Loading tool...\">\n          {(detail) =>\n            detail ? (\n              <ToolDetailPanel detail={detail} />\n            ) : (\n              <EmptyState\n                title={props.bundle.toolCount > 0 ? \"Select a tool\" : \"No tools available\"}\n                description={props.bundle.toolCount > 0 ? \"Choose from the list or press / to search\" : undefined}\n              />\n            )\n          }\n        </LoadableBlock>\n      </div>\n    </>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Tool Tree (nested by . segments)\n// ---------------------------------------------------------------------------\n\ntype ToolTreeNode = {\n  segment: string;\n  tool?: SourceInspection[\"tools\"][number];\n  children: Map<string, ToolTreeNode>;\n};\n\nfunction buildToolTree(tools: SourceInspection[\"tools\"]): ToolTreeNode {\n  const root: ToolTreeNode = { segment: \"\", children: new Map() };\n  for (const tool of tools) {\n    const parts = tool.path.split(\".\");\n    let node = root;\n    for (const part of parts) {\n      if (!node.children.has(part)) {\n        node.children.set(part, { segment: part, children: new Map() });\n      }\n      node = node.children.get(part)!;\n    }\n    node.tool = tool;\n  }\n  return root;\n}\n\nfunction ToolTree(props: {\n  tools: SourceInspection[\"tools\"];\n  selectedToolPath: string | null;\n  onSelectTool: (path: string) => void;\n  search: string;\n  isFiltered: boolean;\n}) {\n  const tree = useMemo(() => buildToolTree(props.tools), [props.tools]);\n  const entries = [...tree.children.values()].sort((a, b) =>\n    a.segment.localeCompare(b.segment),\n  );\n\n  return (\n    <div className=\"flex flex-col gap-px\">\n      {entries.map((node) => (\n        <ToolTreeNodeView\n          key={node.segment}\n          node={node}\n          depth={0}\n          selectedToolPath={props.selectedToolPath}\n          onSelectTool={props.onSelectTool}\n          search={props.search}\n          defaultOpen={props.isFiltered}\n        />\n      ))}\n    </div>\n  );\n}\n\nfunction ToolTreeNodeView(props: {\n  node: ToolTreeNode;\n  depth: number;\n  selectedToolPath: string | null;\n  onSelectTool: (path: string) => void;\n  search: string;\n  defaultOpen: boolean;\n}) {\n  const { node, depth, selectedToolPath, onSelectTool, search, defaultOpen } = props;\n  const hasChildren = node.children.size > 0;\n  const isLeaf = !!node.tool && !hasChildren;\n\n  const hasSelectedDescendant = useMemo(() => {\n    if (!selectedToolPath) return false;\n    function check(n: ToolTreeNode): boolean {\n      if (n.tool?.path === selectedToolPath) return true;\n      for (const child of n.children.values()) {\n        if (check(child)) return true;\n      }\n      return false;\n    }\n    return check(node);\n  }, [node, selectedToolPath]);\n\n  const [open, setOpen] = useState(defaultOpen || hasSelectedDescendant);\n\n  useEffect(() => {\n    if (defaultOpen || hasSelectedDescendant) setOpen(true);\n  }, [defaultOpen, hasSelectedDescendant]);\n\n  if (isLeaf) {\n    return (\n      <ToolListItem\n        tool={node.tool!}\n        active={node.tool!.path === selectedToolPath}\n        onSelect={() => onSelectTool(node.tool!.path)}\n        search={search}\n        depth={depth}\n      />\n    );\n  }\n\n  const paddingLeft = 8 + depth * 16;\n  const sortedChildren = [...node.children.values()].sort((a, b) =>\n    a.segment.localeCompare(b.segment),\n  );\n\n  const leafCount = countToolLeaves(node);\n\n  return (\n    <div>\n      {node.tool ? (\n        <div className=\"flex items-center\">\n          <button\n            type=\"button\"\n            onClick={() => setOpen((o) => !o)}\n            className=\"shrink-0 rounded p-0.5 text-muted-foreground/30 hover:text-muted-foreground\"\n            style={{ marginLeft: paddingLeft }}\n          >\n            <IconChevron\n              className={cn(\n                \"size-2.5 transition-transform duration-150\",\n                open && \"rotate-90\",\n              )}\n            />\n          </button>\n          <ToolListItem\n            tool={node.tool}\n            active={node.tool.path === selectedToolPath}\n            onSelect={() => onSelectTool(node.tool!.path)}\n            search={search}\n            depth={-1}\n            className=\"flex-1 pl-1\"\n          />\n        </div>\n      ) : (\n        <button\n          type=\"button\"\n          onClick={() => setOpen((o) => !o)}\n          className={cn(\n            \"group flex w-full items-center gap-1.5 rounded-md py-1 pr-2.5 text-[12px] transition-colors hover:bg-accent/40\",\n            open ? \"text-foreground/80\" : \"text-muted-foreground/60\",\n          )}\n          style={{ paddingLeft }}\n        >\n          <IconChevron\n            className={cn(\n              \"size-2.5 shrink-0 text-muted-foreground/30 transition-transform duration-150\",\n              open && \"rotate-90\",\n            )}\n          />\n          <IconFolder className={cn(\n            \"size-3 shrink-0\",\n            open ? \"text-primary/60\" : \"text-muted-foreground/30\",\n          )} />\n          <span className=\"flex-1 truncate text-left font-mono\">\n            {highlightMatch(node.segment, search)}\n          </span>\n          <span className=\"shrink-0 tabular-nums text-[10px] text-muted-foreground/25\">\n            {leafCount}\n          </span>\n        </button>\n      )}\n\n      {open && hasChildren && (\n        <div className=\"relative flex flex-col gap-px\">\n          <span\n            className=\"absolute top-0 bottom-1 w-px bg-border/40\"\n            style={{ left: paddingLeft + 5 }}\n            aria-hidden\n          />\n          {sortedChildren.map((child) => (\n            <ToolTreeNodeView\n              key={child.segment}\n              node={child}\n              depth={depth + 1}\n              selectedToolPath={selectedToolPath}\n              onSelectTool={onSelectTool}\n              search={search}\n              defaultOpen={defaultOpen}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n\nfunction countToolLeaves(node: ToolTreeNode): number {\n  let count = node.tool ? 1 : 0;\n  for (const child of node.children.values()) {\n    count += countToolLeaves(child);\n  }\n  return count;\n}\n\n// ---------------------------------------------------------------------------\n// ToolListItem\n// ---------------------------------------------------------------------------\n\nfunction ToolListItem(props: {\n  tool: SourceInspection[\"tools\"][number];\n  active: boolean;\n  onSelect: () => void;\n  search: string;\n  depth: number;\n  className?: string;\n}) {\n  const ref = useRef<HTMLButtonElement>(null);\n  const paddingLeft = props.depth >= 0 ? 8 + props.depth * 16 + 8 : undefined;\n\n  useEffect(() => {\n    if (props.active && ref.current) {\n      ref.current.scrollIntoView({ block: \"nearest\" });\n    }\n  }, [props.active]);\n\n  const label = props.depth >= 0\n    ? props.tool.path.split(\".\").pop() ?? props.tool.path\n    : props.tool.path;\n\n  return (\n    <button\n      ref={ref}\n      type=\"button\"\n      onClick={props.onSelect}\n      className={cn(\n        \"group flex w-full items-center gap-2 rounded-md py-1.5 pr-2.5 text-left transition-colors\",\n        props.active\n          ? \"bg-primary/10 text-foreground border-l-2 border-l-primary\"\n          : \"hover:bg-accent/50 text-foreground/70 hover:text-foreground\",\n        props.className,\n      )}\n      style={paddingLeft != null ? { paddingLeft } : undefined}\n    >\n      <IconTool className=\"size-3 shrink-0 text-muted-foreground/40\" />\n      <span className=\"flex-1 truncate font-mono text-[12px]\">\n        {highlightMatch(label, props.search)}\n      </span>\n      {props.tool.method && <MethodBadge method={props.tool.method} />}\n    </button>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// ToolDetailPanel\n// ---------------------------------------------------------------------------\n\nfunction ToolDetailPanel(props: { detail: SourceInspectionToolDetail }) {\n  const { detail } = props;\n  const [copiedField, setCopiedField] = useState<string | null>(null);\n\n  const copy = useCallback((text: string, field: string) => {\n    void navigator.clipboard.writeText(text).then(() => {\n      setCopiedField(field);\n      setTimeout(() => setCopiedField(null), 1500);\n    });\n  }, []);\n\n  return (\n    <div className=\"flex h-full flex-col overflow-hidden\">\n      {/* Header */}\n      <div className=\"shrink-0 border-b border-border bg-background/95 backdrop-blur-sm\">\n        <div className=\"flex items-start gap-3 px-5 py-3.5\">\n          <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary\">\n            <IconTool className=\"size-4\" />\n          </div>\n          <div className=\"min-w-0 flex-1\">\n            <div className=\"flex items-center gap-2\">\n              <h3 className=\"truncate text-sm font-semibold text-foreground\">\n                {detail.summary.path}\n              </h3>\n              <CopyButton text={detail.summary.path} field=\"path\" copiedField={copiedField} onCopy={copy} />\n            </div>\n            <div className=\"mt-1 flex flex-wrap items-center gap-1.5\">\n              {detail.summary.method && <MethodBadge method={detail.summary.method} />}\n              {detail.summary.pathTemplate && (\n                <span className=\"font-mono text-[11px] text-muted-foreground/60\">\n                  {detail.summary.pathTemplate}\n                </span>\n              )}\n            </div>\n            <div className=\"mt-2 rounded-md border border-border bg-card/70 px-2.5 py-2\">\n              <div className=\"mb-1 text-[10px] font-medium uppercase tracking-wider text-muted-foreground/60\">\n                TypeScript Signature\n              </div>\n              <pre className=\"overflow-x-auto whitespace-pre-wrap font-mono text-[12px] text-foreground\">\n                {detail.contract.callDeclaration}\n              </pre>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Body */}\n      <div className=\"flex-1 overflow-y-auto\">\n        <div className=\"px-5 py-4 space-y-4\">\n          <section className=\"overflow-hidden rounded-lg border border-border bg-card/60\">\n            <div className=\"border-b border-border px-3 py-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground/70\">\n              Contract\n            </div>\n            <div className=\"grid grid-cols-1 gap-3 p-3 xl:grid-cols-2\">\n              <DocumentPanel\n                title=\"Input Type\"\n                body={detail.contract.input.typeDeclaration}\n                lang=\"typescript\"\n                empty=\"No input type.\"\n              />\n              <DocumentPanel\n                title=\"Output Type\"\n                body={detail.contract.output.typeDeclaration}\n                lang=\"typescript\"\n                empty=\"No output type.\"\n              />\n            </div>\n          </section>\n\n          <section className=\"overflow-hidden rounded-lg border border-border bg-card/60\">\n            <div className=\"border-b border-border px-3 py-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground/70\">\n              Schemas\n            </div>\n            <div className=\"grid grid-cols-1 gap-3 p-3 xl:grid-cols-2\">\n              <DocumentPanel\n                title=\"Input Schema\"\n                body={detail.contract.input.schemaJson}\n                lang=\"json\"\n                empty=\"No input schema.\"\n                compact\n              />\n              <DocumentPanel\n                title=\"Output Schema\"\n                body={detail.contract.output.schemaJson}\n                lang=\"json\"\n                empty=\"No output schema.\"\n                compact\n              />\n              {detail.contract.input.exampleJson && (\n                <DocumentPanel\n                  title=\"Example Request\"\n                  body={detail.contract.input.exampleJson}\n                  lang=\"json\"\n                  empty=\"\"\n                  compact\n                />\n              )}\n              {detail.contract.output.exampleJson && (\n                <DocumentPanel\n                  title=\"Example Response\"\n                  body={detail.contract.output.exampleJson}\n                  lang=\"json\"\n                  empty=\"\"\n                  compact\n                />\n              )}\n            </div>\n          </section>\n\n          {detail.sections.map((section, index) => {\n            if (section.kind === \"facts\") {\n              return (\n                <section\n                  key={`${section.kind}:${section.title}:${String(index)}`}\n                  className=\"overflow-hidden rounded-lg border border-border bg-card/60\"\n                >\n                  <div className=\"border-b border-border px-3 py-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground/70\">\n                    {section.title}\n                  </div>\n                  <div className=\"grid grid-cols-1 gap-3 p-3 md:grid-cols-2\">\n                    {section.items.map((item) => (\n                      <div key={`${section.title}:${item.label}`} className=\"min-w-0\">\n                        <div className=\"text-[11px] uppercase tracking-wider text-muted-foreground/60\">\n                          {item.label}\n                        </div>\n                        <div className={cn(\n                          \"mt-1 text-sm text-foreground\",\n                          item.mono && \"font-mono text-[12px]\",\n                        )}\n                        >\n                          {item.value}\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                </section>\n              );\n            }\n\n            if (section.kind === \"markdown\") {\n              return (\n                <section\n                  key={`${section.kind}:${section.title}:${String(index)}`}\n                  className=\"overflow-hidden rounded-lg border border-border bg-card/60\"\n                >\n                  <div className=\"border-b border-border px-3 py-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground/70\">\n                    {section.title}\n                  </div>\n                  <div className=\"p-4\">\n                    <Markdown>{section.body}</Markdown>\n                  </div>\n                </section>\n              );\n            }\n\n            return (\n              <DocumentPanel\n                key={`${section.kind}:${section.title}:${String(index)}`}\n                title={section.title}\n                body={section.body}\n                lang={section.language === \"text\" ? undefined : section.language}\n                empty=\"\"\n                compact\n              />\n            );\n          })}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// DiscoveryView\n// ---------------------------------------------------------------------------\n\nfunction DiscoveryView(props: {\n  bundle: SourceInspection;\n  discovery: Loadable<SourceInspectionDiscoverResult>;\n  initialQuery: string;\n  onSubmitQuery: (query: string) => void;\n  onOpenTool: (toolPath: string) => void;\n}) {\n  const [draftQuery, setDraftQuery] = useState(props.initialQuery);\n\n  useEffect(() => {\n    setDraftQuery(props.initialQuery);\n  }, [props.initialQuery]);\n\n  return (\n    <div className=\"flex flex-1 flex-col overflow-hidden\">\n      {/* Search bar */}\n      <div className=\"shrink-0 border-b border-border px-4 py-3\">\n        <form\n          className=\"flex items-center gap-2 max-w-2xl\"\n          onSubmit={(e) => {\n            e.preventDefault();\n            props.onSubmitQuery(draftQuery.trim());\n          }}\n        >\n          <div className=\"relative flex-1\">\n            <IconSearch className=\"absolute left-3 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground/40\" />\n            <input\n              value={draftQuery}\n              onChange={(e) => setDraftQuery(e.target.value)}\n              placeholder=\"Search tools\\u2026\"\n              className=\"h-9 w-full rounded-md border border-input bg-background pl-9 pr-3 text-sm outline-none transition-colors placeholder:text-muted-foreground/40 focus:border-ring focus:ring-1 focus:ring-ring/30\"\n            />\n          </div>\n          <Button type=\"submit\" size=\"sm\">Search</Button>\n        </form>\n      </div>\n\n      {/* Results */}\n      <div className=\"flex-1 overflow-y-auto p-4\">\n        <LoadableBlock loadable={props.discovery} loading=\"Searching\\u2026\">\n          {(result) =>\n            result.query.length === 0 ? (\n              <EmptyState\n                title=\"Search your tools\"\n                description=\"Type a query to find matching tools across this source.\"\n              />\n            ) : result.results.length === 0 ? (\n              <EmptyState\n                title=\"No results\"\n                description=\"Try different search terms.\"\n              />\n            ) : (\n              <div className=\"max-w-3xl space-y-2\">\n                {result.results.map((item, index) => (\n                  <button\n                    key={item.path}\n                    type=\"button\"\n                    onClick={() => props.onOpenTool(item.path)}\n                    className=\"group w-full rounded-lg border border-border bg-card/60 p-3.5 text-left transition-all hover:border-primary/30 hover:shadow-sm\"\n                  >\n                    <div className=\"flex items-center justify-between gap-3 mb-1.5\">\n                      <div className=\"flex items-center gap-2.5 min-w-0\">\n                        <span className=\"flex size-5 shrink-0 items-center justify-center rounded-md bg-muted text-[10px] font-mono tabular-nums text-muted-foreground/60\">\n                          {index + 1}\n                        </span>\n                        <h4 className=\"truncate font-mono text-[13px] font-medium text-foreground group-hover:text-primary transition-colors\">\n                          {item.path}\n                        </h4>\n                      </div>\n                      <span className=\"shrink-0 font-mono text-xs tabular-nums text-muted-foreground/50\">\n                        {item.score.toFixed(2)}\n                      </span>\n                    </div>\n                    {item.description && (\n                      <p className=\"text-[12px] text-muted-foreground leading-relaxed line-clamp-2\">\n                        {item.description}\n                      </p>\n                    )}\n                    {(item.inputTypePreview || item.outputTypePreview) && (\n                      <div className=\"mt-2 grid grid-cols-1 gap-2 md:grid-cols-2\">\n                        {item.inputTypePreview && (\n                          <div className=\"rounded-md border border-border/70 bg-background/70 px-2.5 py-2\">\n                            <div className=\"mb-1 text-[10px] font-medium uppercase tracking-wider text-muted-foreground/55\">\n                              Input\n                            </div>\n                            <div className=\"font-mono text-[11px] text-foreground/85 line-clamp-3\">\n                              {item.inputTypePreview}\n                            </div>\n                          </div>\n                        )}\n                        {item.outputTypePreview && (\n                          <div className=\"rounded-md border border-border/70 bg-background/70 px-2.5 py-2\">\n                            <div className=\"mb-1 text-[10px] font-medium uppercase tracking-wider text-muted-foreground/55\">\n                              Output\n                            </div>\n                            <div className=\"font-mono text-[11px] text-foreground/85 line-clamp-3\">\n                              {item.outputTypePreview}\n                            </div>\n                          </div>\n                        )}\n                      </div>\n                    )}\n                  </button>\n                ))}\n              </div>\n            )\n          }\n        </LoadableBlock>\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Shared sub-components\n// ---------------------------------------------------------------------------\n\nfunction CopyButton(props: {\n  text: string;\n  field: string;\n  copiedField: string | null;\n  onCopy: (text: string, field: string) => void;\n}) {\n  return (\n    <button\n      type=\"button\"\n      onClick={() => props.onCopy(props.text, props.field)}\n      className=\"shrink-0 rounded p-1 text-muted-foreground/30 transition-colors hover:text-muted-foreground\"\n      title={`Copy ${props.field}`}\n    >\n      {props.copiedField === props.field ? <IconCheck /> : <IconCopy />}\n    </button>\n  );\n}\n\nfunction highlightMatch(text: string, search: string) {\n  if (!search.trim()) return text;\n  const terms = search.trim().toLowerCase().split(/\\s+/);\n  const lowerText = text.toLowerCase();\n  const ranges: Array<[number, number]> = [];\n\n  for (const term of terms) {\n    let idx = 0;\n    while (idx < lowerText.length) {\n      const found = lowerText.indexOf(term, idx);\n      if (found === -1) break;\n      ranges.push([found, found + term.length]);\n      idx = found + 1;\n    }\n  }\n\n  if (ranges.length === 0) return text;\n\n  ranges.sort((a, b) => a[0] - b[0]);\n  const merged: Array<[number, number]> = [ranges[0]!];\n  for (let i = 1; i < ranges.length; i++) {\n    const last = merged[merged.length - 1]!;\n    const current = ranges[i]!;\n    if (current[0] <= last[1]) {\n      last[1] = Math.max(last[1], current[1]);\n    } else {\n      merged.push(current);\n    }\n  }\n\n  const parts: Array<{ text: string; hl: boolean }> = [];\n  let cursor = 0;\n  for (const [start, end] of merged) {\n    if (cursor < start) parts.push({ text: text.slice(cursor, start), hl: false });\n    parts.push({ text: text.slice(start, end), hl: true });\n    cursor = end;\n  }\n  if (cursor < text.length) parts.push({ text: text.slice(cursor), hl: false });\n\n  return (\n    <>\n      {parts.map((part, i) =>\n        part.hl ? (\n          <mark key={i} className=\"rounded-sm bg-primary/20 text-foreground px-px\">\n            {part.text}\n          </mark>\n        ) : (\n          <span key={i}>{part.text}</span>\n        ),\n      )}\n    </>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/views/source-editor.tsx",
    "content": "import { useEffect, useState, type ReactNode } from \"react\";\nimport { Link, useNavigate } from \"@tanstack/react-router\";\nimport {\n  type CompleteSourceOAuthResult,\n  type CreateSourcePayload,\n  type InstanceConfig,\n  type Loadable,\n  type StartSourceOAuthPayload,\n  type SecretListItem,\n  type Source,\n  type UpdateSourcePayload,\n  useCreateSecret,\n  useCreateSource,\n  useInstanceConfig,\n  useRefreshSecrets,\n  useRemoveProviderAuthGrant,\n  useRemoveSource,\n  useSecrets,\n  useSources,\n  useStartSourceOAuth,\n  useSource,\n  useUpdateSource,\n} from \"@executor/react\";\nimport { Badge } from \"../components/ui/badge\";\nimport { Button } from \"../components/ui/button\";\nimport { LoadableBlock } from \"../components/loadable\";\nimport { SourceNotFoundState } from \"../components/source-not-found-state\";\nimport { SourceFavicon } from \"../components/source-favicon\";\nimport {\n  IconArrowLeft,\n  IconPencil,\n  IconPlus,\n  IconSpinner,\n  IconTrash,\n} from \"../components/icons\";\nimport { cn } from \"../lib/utils\";\nimport {\n  asMcpRemoteTransportValue,\n  defaultMcpRemoteTransportFields,\n  defaultMcpStdioTransportFields,\n  setMcpTransportFieldsTransport,\n  type McpRemoteTransportFields,\n  type McpStdioTransportFields,\n  type McpTransportFields,\n  type McpTransportValue,\n} from \"./mcp-transport-state\";\nimport { parseJsonStringArray, parseJsonStringMap } from \"./json-form\";\nimport { sourceTemplates, type SourceTemplate } from \"./source-templates\";\nimport { getDomain } from \"tldts\";\n\ntype StatusBannerState = {\n  tone: \"info\" | \"success\" | \"error\";\n  text: string;\n};\n\ntype SourceOAuthPopupMessage =\n  | {\n      type: \"executor:oauth-result\";\n      ok: true;\n      sessionId: string;\n      auth: CompleteSourceOAuthResult[\"auth\"];\n    }\n  | {\n      type: \"executor:oauth-result\";\n      ok: false;\n      sessionId: string | null;\n      error: string;\n    };\n\nconst SOURCE_OAUTH_POPUP_RESULT_TIMEOUT_MS = 2 * 60_000;\nconst SOURCE_OAUTH_POPUP_RESULT_STORAGE_KEY_PREFIX = \"executor:oauth-result:\";\n\nconst isSourceNotFoundLoadable = (loadable: Loadable<unknown>): boolean =>\n  loadable.status === \"error\" &&\n  loadable.error.message.toLowerCase().includes(\"source not found\");\n\ntype SourceFormBase = {\n  name: string;\n  kind: Source[\"kind\"];\n  endpoint: string;\n  namespace: string;\n  enabled: boolean;\n  specUrl: string;\n  service: string;\n  version: string;\n  defaultHeadersText: string;\n  authKind: Source[\"auth\"][\"kind\"];\n  authHeaderName: string;\n  authPrefix: string;\n  bearerProviderId: string;\n  bearerHandle: string;\n  oauthAccessProviderId: string;\n  oauthAccessHandle: string;\n  oauthRefreshProviderId: string;\n  oauthRefreshHandle: string;\n  managedAuth: Extract<\n    Source[\"auth\"],\n    { kind: \"provider_grant_ref\" | \"mcp_oauth\" }\n  > | null;\n};\n\ntype SourceFormState = SourceFormBase & McpTransportFields;\n\nconst kindOptions: ReadonlyArray<Source[\"kind\"]> = [\n  \"mcp\",\n  \"openapi\",\n  \"graphql\",\n  \"google_discovery\",\n  \"internal\",\n];\n\nconst transportOptions: ReadonlyArray<Exclude<McpTransportValue, \"\">> = [\n  \"auto\",\n  \"streamable-http\",\n  \"sse\",\n  \"stdio\",\n];\n\nconst authOptions: ReadonlyArray<Source[\"auth\"][\"kind\"]> = [\n  \"none\",\n  \"bearer\",\n  \"oauth2\",\n  \"provider_grant_ref\",\n  \"mcp_oauth\",\n];\n\nconst trimToNull = (value: string): string | null => {\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nconst namespaceFromUrl = (url: string): string => {\n  try {\n    const domain = getDomain(url);\n    if (!domain) return \"\";\n    const dot = domain.indexOf(\".\");\n    return dot > 0 ? domain.slice(0, dot) : domain;\n  } catch {\n    return \"\";\n  }\n};\n\nconst googleDiscoveryNamespace = (service: string): string =>\n  `google.${service\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \".\")\n    .replace(/^\\.+|\\.+$/g, \"\")}`;\n\nconst readStoredSourceOAuthPopupResult = (\n  sessionId: string,\n): SourceOAuthPopupMessage | null => {\n  if (typeof window === \"undefined\") {\n    return null;\n  }\n\n  const raw = window.localStorage.getItem(\n    `${SOURCE_OAUTH_POPUP_RESULT_STORAGE_KEY_PREFIX}${sessionId}`,\n  );\n  if (!raw) {\n    return null;\n  }\n\n  try {\n    return JSON.parse(raw) as SourceOAuthPopupMessage;\n  } catch {\n    return null;\n  }\n};\n\nconst clearStoredSourceOAuthPopupResult = (sessionId: string): void => {\n  if (typeof window === \"undefined\") {\n    return;\n  }\n\n  window.localStorage.removeItem(\n    `${SOURCE_OAUTH_POPUP_RESULT_STORAGE_KEY_PREFIX}${sessionId}`,\n  );\n};\n\nconst startSourceOAuthPopup = async (input: {\n  authorizationUrl: string;\n  sessionId: string;\n}): Promise<CompleteSourceOAuthResult[\"auth\"]> => {\n  if (typeof window === \"undefined\") {\n    throw new Error(\"OAuth popup is only available in a browser context\");\n  }\n\n  clearStoredSourceOAuthPopupResult(input.sessionId);\n\n  const popup = window.open(\n    input.authorizationUrl,\n    \"executor-source-oauth\",\n    \"popup=yes,width=520,height=720\",\n  );\n\n  if (!popup) {\n    throw new Error(\"Popup blocked. Allow popups and try again.\");\n  }\n\n  popup.focus();\n\n  return await new Promise<CompleteSourceOAuthResult[\"auth\"]>(\n    (resolve, reject) => {\n      let settled = false;\n      let closedPoll = 0;\n      let resultTimeout = 0;\n\n      const cleanup = () => {\n        window.removeEventListener(\"message\", onMessage);\n        if (closedPoll) {\n          window.clearInterval(closedPoll);\n        }\n        if (resultTimeout) {\n          window.clearTimeout(resultTimeout);\n        }\n        if (!popup.closed) {\n          popup.close();\n        }\n        clearStoredSourceOAuthPopupResult(input.sessionId);\n      };\n\n      const settleWithError = (message: string) => {\n        if (settled) {\n          return;\n        }\n\n        settled = true;\n        cleanup();\n        reject(new Error(message));\n      };\n\n      const settleFromPayload = (data: SourceOAuthPopupMessage) => {\n        if (!data.ok) {\n          settleWithError(data.error || \"OAuth failed\");\n          return;\n        }\n\n        if (settled) {\n          return;\n        }\n\n        settled = true;\n        cleanup();\n        resolve(data.auth);\n      };\n\n      const onMessage = (event: MessageEvent) => {\n        if (event.origin !== window.location.origin) {\n          return;\n        }\n\n        const data = event.data as SourceOAuthPopupMessage | undefined;\n        if (!data || data.type !== \"executor:oauth-result\") {\n          return;\n        }\n\n        if (data.ok && data.sessionId !== input.sessionId) {\n          return;\n        }\n\n        if (\n          !data.ok &&\n          data.sessionId !== null &&\n          data.sessionId !== input.sessionId\n        ) {\n          return;\n        }\n\n        settleFromPayload(data);\n      };\n\n      window.addEventListener(\"message\", onMessage);\n\n      resultTimeout = window.setTimeout(() => {\n        settleWithError(\n          \"OAuth popup timed out before completion. Please try again.\",\n        );\n      }, SOURCE_OAUTH_POPUP_RESULT_TIMEOUT_MS);\n\n      closedPoll = window.setInterval(() => {\n        const stored = readStoredSourceOAuthPopupResult(input.sessionId);\n        if (stored) {\n          settleFromPayload(stored);\n          return;\n        }\n        if (popup.closed) {\n          // Stop polling — only run one final deferred check to give the\n          // callback page time to write localStorage before we give up.\n          window.clearInterval(closedPoll);\n          closedPoll = 0;\n          window.setTimeout(() => {\n            const delayedStored = readStoredSourceOAuthPopupResult(\n              input.sessionId,\n            );\n            if (delayedStored) {\n              settleFromPayload(delayedStored);\n              return;\n            }\n            settleWithError(\"OAuth popup was closed before completion.\");\n          }, 1500);\n        }\n      }, 300);\n    },\n  );\n};\n\nconst stringMapToEditor = (value: Record<string, string> | null): string =>\n  value === null ? \"\" : JSON.stringify(value, null, 2);\n\nconst stringArrayToEditor = (\n  value: ReadonlyArray<string> | null | undefined,\n): string =>\n  !value || value.length === 0 ? \"\" : JSON.stringify(value, null, 2);\n\nconst readBindingStringMap = (\n  source: Source,\n  key: string,\n): Record<string, string> | null => {\n  const candidate = source.binding[key];\n  if (\n    candidate === null ||\n    candidate === undefined ||\n    typeof candidate !== \"object\" ||\n    Array.isArray(candidate)\n  ) {\n    return null;\n  }\n\n  const entries = Object.entries(candidate as Record<string, unknown>);\n  return entries.every(([, value]) => typeof value === \"string\")\n    ? Object.fromEntries(entries as ReadonlyArray<readonly [string, string]>)\n    : null;\n};\n\nconst readBindingStringArray = (\n  source: Source,\n  key: string,\n): Array<string> | null => {\n  const candidate = source.binding[key];\n  return Array.isArray(candidate) &&\n    candidate.every((value) => typeof value === \"string\")\n    ? [...candidate]\n    : null;\n};\n\nconst readBindingString = (source: Source, key: string): string =>\n  typeof source.binding[key] === \"string\" ? String(source.binding[key]) : \"\";\n\nconst readBindingTransport = (source: Source): McpTransportValue => {\n  const candidate = source.binding.transport;\n  return typeof candidate === \"string\" &&\n    (candidate === \"auto\" ||\n      candidate === \"streamable-http\" ||\n      candidate === \"sse\" ||\n      candidate === \"stdio\")\n    ? candidate\n    : \"\";\n};\n\nconst buildSyntheticMcpStdioEndpoint = (input: {\n  name?: string | null;\n  endpoint?: string | null;\n  command?: string | null;\n}): string => {\n  const label =\n    input.name?.trim() ||\n    input.endpoint?.trim() ||\n    input.command?.trim() ||\n    \"mcp\";\n  const slug = label\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n\n  return `stdio://local/${slug || \"mcp\"}`;\n};\n\nconst defaultFormState = (template?: SourceTemplate): SourceFormState => ({\n  name: template?.name ?? \"\",\n  kind: template?.kind ?? \"openapi\",\n  endpoint: template?.endpoint ?? \"\",\n  namespace: template\n    ? (template.namespace ??\n      (\"service\" in template\n        ? googleDiscoveryNamespace(template.service)\n        : namespaceFromUrl(template.endpoint ?? \"\")))\n    : \"\",\n  enabled: true,\n  specUrl: template && \"specUrl\" in template ? template.specUrl : \"\",\n  service: template && \"service\" in template ? template.service : \"\",\n  version: template && \"version\" in template ? template.version : \"\",\n  defaultHeadersText: \"\",\n  authKind: template?.kind === \"google_discovery\" ? \"oauth2\" : \"none\",\n  authHeaderName: \"Authorization\",\n  authPrefix: \"Bearer \",\n  bearerProviderId: \"\",\n  bearerHandle: \"\",\n  oauthAccessProviderId: \"\",\n  oauthAccessHandle: \"\",\n  oauthRefreshProviderId: \"\",\n  oauthRefreshHandle: \"\",\n  managedAuth: null,\n  ...(template?.kind === \"mcp\" && template.connectionType === \"command\"\n    ? defaultMcpStdioTransportFields({\n        command: template.command ?? \"\",\n        argsText: stringArrayToEditor(template.args),\n        envText: stringMapToEditor(template.env ?? null),\n        cwd: template.cwd ?? \"\",\n      })\n    : defaultMcpRemoteTransportFields(\n        template?.kind === \"mcp\"\n          ? asMcpRemoteTransportValue(template.transport)\n          : \"\",\n      )),\n});\n\nconst formStateFromSource = (source: Source): SourceFormState => ({\n  name: source.name,\n  kind: source.kind,\n  endpoint: source.endpoint,\n  namespace: source.namespace ?? \"\",\n  enabled: source.enabled,\n  specUrl: readBindingString(source, \"specUrl\"),\n  service: readBindingString(source, \"service\"),\n  version: readBindingString(source, \"version\"),\n  defaultHeadersText: stringMapToEditor(\n    readBindingStringMap(source, \"defaultHeaders\"),\n  ),\n  authKind: source.auth.kind,\n  authHeaderName:\n    source.auth.kind === \"none\" || source.auth.kind === \"mcp_oauth\"\n      ? \"Authorization\"\n      : source.auth.headerName,\n  authPrefix:\n    source.auth.kind === \"none\" || source.auth.kind === \"mcp_oauth\"\n      ? \"Bearer \"\n      : source.auth.prefix,\n  bearerProviderId:\n    source.auth.kind === \"bearer\" ? source.auth.token.providerId : \"\",\n  bearerHandle: source.auth.kind === \"bearer\" ? source.auth.token.handle : \"\",\n  oauthAccessProviderId:\n    source.auth.kind === \"oauth2\" ? source.auth.accessToken.providerId : \"\",\n  oauthAccessHandle:\n    source.auth.kind === \"oauth2\" ? source.auth.accessToken.handle : \"\",\n  oauthRefreshProviderId:\n    source.auth.kind === \"oauth2\" && source.auth.refreshToken !== null\n      ? source.auth.refreshToken.providerId\n      : \"\",\n  oauthRefreshHandle:\n    source.auth.kind === \"oauth2\" && source.auth.refreshToken !== null\n      ? source.auth.refreshToken.handle\n      : \"\",\n  managedAuth:\n    source.auth.kind === \"provider_grant_ref\" ||\n    source.auth.kind === \"mcp_oauth\"\n      ? source.auth\n      : null,\n  ...(source.kind === \"mcp\" && readBindingTransport(source) === \"stdio\"\n    ? defaultMcpStdioTransportFields({\n        command: readBindingString(source, \"command\"),\n        argsText: stringArrayToEditor(readBindingStringArray(source, \"args\")),\n        envText: stringMapToEditor(readBindingStringMap(source, \"env\")),\n        cwd: readBindingString(source, \"cwd\"),\n      })\n    : defaultMcpRemoteTransportFields(\n        source.kind === \"mcp\"\n          ? asMcpRemoteTransportValue(readBindingTransport(source) || \"auto\")\n          : \"\",\n      )),\n  ...(source.kind === \"mcp\" && readBindingTransport(source) !== \"stdio\"\n    ? {\n        queryParamsText: stringMapToEditor(\n          readBindingStringMap(source, \"queryParams\"),\n        ),\n        headersText: stringMapToEditor(readBindingStringMap(source, \"headers\")),\n      }\n    : {}),\n});\n\nconst buildAuthPayload = (\n  state: SourceFormState,\n): CreateSourcePayload[\"auth\"] => {\n  if (state.authKind === \"none\") {\n    return { kind: \"none\" };\n  }\n\n  if (\n    (state.authKind === \"provider_grant_ref\" ||\n      state.authKind === \"mcp_oauth\") &&\n    state.managedAuth !== null\n  ) {\n    return state.managedAuth;\n  }\n\n  const headerName = state.authHeaderName.trim() || \"Authorization\";\n  const prefix = state.authPrefix;\n\n  if (state.authKind === \"bearer\") {\n    const providerId = state.bearerProviderId.trim();\n    const handle = state.bearerHandle.trim();\n    if (!providerId || !handle) {\n      throw new Error(\n        \"Bearer auth requires a token. Select or create a secret.\",\n      );\n    }\n\n    return {\n      kind: \"bearer\",\n      headerName,\n      prefix,\n      token: {\n        providerId,\n        handle,\n      },\n    };\n  }\n\n  const accessProviderId = state.oauthAccessProviderId.trim();\n  const accessHandle = state.oauthAccessHandle.trim();\n  if (!accessProviderId || !accessHandle) {\n    throw new Error(\n      \"OAuth2 auth requires an access token. Select or create a secret.\",\n    );\n  }\n\n  const refreshProviderId = trimToNull(state.oauthRefreshProviderId);\n  const refreshHandle = trimToNull(state.oauthRefreshHandle);\n  if ((refreshProviderId === null) !== (refreshHandle === null)) {\n    throw new Error(\n      \"OAuth2 refresh token provider ID and handle must be set together.\",\n    );\n  }\n\n  return {\n    kind: \"oauth2\",\n    headerName,\n    prefix,\n    accessToken: {\n      providerId: accessProviderId,\n      handle: accessHandle,\n    },\n    refreshToken:\n      refreshProviderId === null || refreshHandle === null\n        ? null\n        : {\n            providerId: refreshProviderId,\n            handle: refreshHandle,\n          },\n  };\n};\n\nconst buildRequestedSourceStatus = (\n  state: SourceFormState,\n): CreateSourcePayload[\"status\"] => {\n  if (\n    state.kind !== \"mcp\" &&\n    state.kind !== \"openapi\" &&\n    state.kind !== \"graphql\"\n  ) {\n    return undefined;\n  }\n\n  return state.enabled ? \"connected\" : \"draft\";\n};\n\nconst buildSourcePayload = (state: SourceFormState): CreateSourcePayload => {\n  const name = state.name.trim();\n  const isMcpStdio = state.kind === \"mcp\" && state.transport === \"stdio\";\n  const endpoint =\n    state.kind === \"mcp\" && state.transport === \"stdio\"\n      ? buildSyntheticMcpStdioEndpoint({\n          name: state.name,\n          endpoint: state.endpoint,\n          command: state.command,\n        })\n      : state.endpoint.trim();\n\n  if (!name) {\n    throw new Error(\"Source name is required.\");\n  }\n\n  if (!endpoint) {\n    throw new Error(\"Source endpoint is required.\");\n  }\n  if (isMcpStdio && !state.command.trim()) {\n    throw new Error(\"MCP stdio transport requires a command.\");\n  }\n\n  const shared = {\n    name,\n    kind: state.kind,\n    endpoint,\n    status: buildRequestedSourceStatus(state),\n    enabled: state.enabled,\n    namespace: trimToNull(state.namespace),\n    auth: isMcpStdio ? { kind: \"none\" as const } : buildAuthPayload(state),\n  } satisfies Pick<\n    CreateSourcePayload,\n    \"name\" | \"kind\" | \"endpoint\" | \"status\" | \"enabled\" | \"namespace\" | \"auth\"\n  >;\n\n  if (state.kind === \"mcp\") {\n    if (state.transport === \"stdio\") {\n      return {\n        ...shared,\n        binding: {\n          transport: \"stdio\",\n          queryParams: null,\n          headers: null,\n          command: state.command.trim(),\n          args: parseJsonStringArray(\"Args\", state.argsText),\n          env: parseJsonStringMap(\"Environment\", state.envText),\n          cwd: trimToNull(state.cwd),\n        },\n      };\n    }\n\n    return {\n      ...shared,\n      binding: {\n        transport: state.transport === \"\" ? \"auto\" : state.transport,\n        queryParams: parseJsonStringMap(\"Query params\", state.queryParamsText),\n        headers: parseJsonStringMap(\"Request headers\", state.headersText),\n        command: null,\n        args: null,\n        env: null,\n        cwd: null,\n      },\n    };\n  }\n\n  if (state.kind === \"openapi\") {\n    const specUrl = state.specUrl.trim();\n    if (!specUrl) {\n      throw new Error(\"OpenAPI sources require a spec URL.\");\n    }\n\n    return {\n      ...shared,\n      binding: {\n        specUrl,\n        defaultHeaders: parseJsonStringMap(\n          \"Default headers\",\n          state.defaultHeadersText,\n        ),\n      },\n    };\n  }\n\n  if (state.kind === \"graphql\") {\n    return {\n      ...shared,\n      binding: {\n        defaultHeaders: parseJsonStringMap(\n          \"Default headers\",\n          state.defaultHeadersText,\n        ),\n      },\n    };\n  }\n\n  if (state.kind === \"google_discovery\") {\n    const service = state.service.trim();\n    const version = state.version.trim();\n    if (!service) {\n      throw new Error(\"Google Discovery sources require a service.\");\n    }\n    if (!version) {\n      throw new Error(\"Google Discovery sources require a version.\");\n    }\n\n    return {\n      ...shared,\n      binding: {\n        service,\n        version,\n        discoveryUrl: endpoint,\n        defaultHeaders: parseJsonStringMap(\n          \"Default headers\",\n          state.defaultHeadersText,\n        ),\n      },\n    };\n  }\n\n  return {\n    ...shared,\n    binding: {},\n  };\n};\n\nconst buildUpdatePayload = (state: SourceFormState): UpdateSourcePayload => ({\n  ...buildSourcePayload(state),\n});\n\nconst buildStartSourceOAuthPayload = (\n  state: SourceFormState,\n): StartSourceOAuthPayload => {\n  if (state.kind !== \"mcp\") {\n    throw new Error(\"OAuth sign-in is only available for MCP sources.\");\n  }\n  if (state.transport === \"stdio\") {\n    throw new Error(\"OAuth sign-in is not available for MCP stdio sources.\");\n  }\n\n  const endpoint = state.endpoint.trim();\n  if (!endpoint) {\n    throw new Error(\"Source endpoint is required before starting OAuth.\");\n  }\n\n  return {\n    provider: \"mcp\",\n    name: trimToNull(state.name),\n    endpoint,\n    transport: state.transport === \"\" ? \"auto\" : state.transport,\n    queryParams: parseJsonStringMap(\"Query params\", state.queryParamsText),\n    headers: parseJsonStringMap(\"Request headers\", state.headersText),\n  };\n};\n\nexport function NewSourcePage() {\n  return <SourceEditor key=\"create\" mode=\"create\" />;\n}\n\nexport function EditSourcePage(props: { sourceId: string }) {\n  const sources = useSources();\n  const source = useSource(props.sourceId);\n  const missingSource =\n    (sources.status === \"ready\" &&\n      !sources.data.some((candidate) => candidate.id === props.sourceId)) ||\n    isSourceNotFoundLoadable(source);\n\n  if (missingSource) {\n    return <SourceNotFoundState />;\n  }\n\n  return (\n    <LoadableBlock loadable={source} loading=\"Loading source...\">\n      {(loadedSource) => (\n        <SourceEditor\n          key={`${loadedSource.id}:${loadedSource.updatedAt}`}\n          mode=\"edit\"\n          source={loadedSource}\n        />\n      )}\n    </LoadableBlock>\n  );\n}\n\nfunction SourceEditor(props: { mode: \"create\" | \"edit\"; source?: Source }) {\n  const navigate = useNavigate();\n  const createSource = useCreateSource();\n  const startSourceOAuth = useStartSourceOAuth();\n  const updateSource = useUpdateSource();\n  const removeSource = useRemoveSource();\n  const removeProviderAuthGrant = useRemoveProviderAuthGrant();\n  const instanceConfig = useInstanceConfig();\n  const secrets = useSecrets();\n  const refreshSecrets = useRefreshSecrets();\n  const [formState, setFormState] = useState<SourceFormState>(() =>\n    props.source ? formStateFromSource(props.source) : defaultFormState(),\n  );\n  const [statusBanner, setStatusBanner] = useState<StatusBannerState | null>(\n    null,\n  );\n  const [selectedTemplateId, setSelectedTemplateId] = useState<string | null>(\n    null,\n  );\n  const [oauthPopupBusy, setOauthPopupBusy] = useState(false);\n  const [expandedOauthSecretRefTarget, setExpandedOauthSecretRefTarget] =\n    useState<string | null>(null);\n\n  const isSubmitting =\n    createSource.status === \"pending\" || updateSource.status === \"pending\";\n  const isDeleting = removeSource.status === \"pending\";\n  const isRevokingGrant = removeProviderAuthGrant.status === \"pending\";\n  const isOAuthSubmitting =\n    startSourceOAuth.status === \"pending\" || oauthPopupBusy;\n  const oauthSecretRefTarget =\n    formState.authKind === \"oauth2\" &&\n    formState.oauthAccessHandle.trim().length > 0\n      ? `${formState.oauthAccessProviderId}:${formState.oauthAccessHandle}:${formState.oauthRefreshProviderId}:${formState.oauthRefreshHandle}`\n      : null;\n  const showOauthSecretRefs =\n    oauthSecretRefTarget !== null &&\n    expandedOauthSecretRefTarget === oauthSecretRefTarget;\n\n  const setField = <K extends keyof SourceFormBase>(\n    key: K,\n    value: SourceFormBase[K],\n  ) => {\n    setFormState((current) => ({ ...current, [key]: value }));\n  };\n\n  const setTransport = (transport: McpTransportValue) => {\n    setFormState((current) => ({\n      ...current,\n      ...setMcpTransportFieldsTransport(current, transport),\n    }));\n  };\n\n  const setRemoteTransportField = <\n    K extends Exclude<keyof McpRemoteTransportFields, \"transport\">,\n  >(\n    key: K,\n    value: McpRemoteTransportFields[K],\n  ) => {\n    setFormState((current) =>\n      current.transport === \"stdio\" ? current : { ...current, [key]: value },\n    );\n  };\n\n  const setStdioTransportField = <\n    K extends Exclude<keyof McpStdioTransportFields, \"transport\">,\n  >(\n    key: K,\n    value: McpStdioTransportFields[K],\n  ) => {\n    setFormState((current) =>\n      current.transport === \"stdio\" ? { ...current, [key]: value } : current,\n    );\n  };\n\n  const applyTemplate = (template: SourceTemplate) => {\n    setSelectedTemplateId(template.id);\n    setFormState((current) => ({\n      ...defaultFormState(template),\n      name: current.name.trim().length > 0 ? current.name : template.name,\n      enabled: current.enabled,\n    }));\n    setStatusBanner({\n      tone: \"info\",\n      text: `${template.name} loaded. Add auth if needed, then save.`,\n    });\n  };\n\n  const handleSubmit = async () => {\n    setStatusBanner(null);\n\n    try {\n      if (props.mode === \"create\") {\n        const createdSource = await createSource.mutateAsync(\n          buildSourcePayload(formState),\n        );\n        void navigate({\n          to: \"/sources/$sourceId\",\n          params: { sourceId: createdSource.id },\n          search: { tab: \"model\" },\n        });\n        return;\n      }\n\n      if (!props.source) {\n        throw new Error(\"Cannot update a source before it has loaded.\");\n      }\n\n      const updatedSource = await updateSource.mutateAsync({\n        sourceId: props.source.id,\n        payload: buildUpdatePayload(formState),\n      });\n      void navigate({\n        to: \"/sources/$sourceId\",\n        params: { sourceId: updatedSource.id },\n        search: { tab: \"model\" },\n      });\n    } catch (error) {\n      setStatusBanner({\n        tone: \"error\",\n        text: error instanceof Error ? error.message : \"Failed saving source.\",\n      });\n    }\n  };\n\n  const handleMcpOAuthConnect = async () => {\n    setStatusBanner(null);\n\n    try {\n      const result = await startSourceOAuth.mutateAsync(\n        buildStartSourceOAuthPayload(formState),\n      );\n\n      setStatusBanner({\n        tone: \"info\",\n        text: \"Finish OAuth in the popup. Saving will create the source and connect its tools.\",\n      });\n\n      setOauthPopupBusy(true);\n      const auth = await startSourceOAuthPopup({\n        authorizationUrl: result.authorizationUrl,\n        sessionId: result.sessionId,\n      });\n      setOauthPopupBusy(false);\n      refreshSecrets();\n      setExpandedOauthSecretRefTarget(null);\n      setFormState((current) => ({\n        ...current,\n        authKind: \"oauth2\",\n        authHeaderName: auth.headerName,\n        authPrefix: auth.prefix,\n        oauthAccessProviderId: auth.accessToken.providerId,\n        oauthAccessHandle: auth.accessToken.handle,\n        oauthRefreshProviderId: auth.refreshToken?.providerId ?? \"\",\n        oauthRefreshHandle: auth.refreshToken?.handle ?? \"\",\n        managedAuth: null,\n      }));\n      setStatusBanner({\n        tone: \"success\",\n        text: \"OAuth credentials are ready. Save the source to connect and index tools.\",\n      });\n    } catch (error) {\n      setOauthPopupBusy(false);\n      setStatusBanner({\n        tone: \"error\",\n        text: error instanceof Error ? error.message : \"Failed starting OAuth.\",\n      });\n    }\n  };\n\n  const handleRemove = async () => {\n    if (!props.source || isDeleting) {\n      return;\n    }\n\n    const confirmed = window.confirm(\n      `Remove \"${props.source.name}\" and its indexed tools?`,\n    );\n    if (!confirmed) {\n      return;\n    }\n\n    setStatusBanner(null);\n\n    try {\n      const result = await removeSource.mutateAsync(props.source.id);\n      if (!result.removed) {\n        throw new Error(\"Source was not removed.\");\n      }\n      void navigate({ to: \"/\" });\n    } catch (error) {\n      setStatusBanner({\n        tone: \"error\",\n        text:\n          error instanceof Error ? error.message : \"Failed removing source.\",\n      });\n    }\n  };\n\n  const handleRevokeProviderGrant = async () => {\n    if (\n      !props.source ||\n      isRevokingGrant ||\n      formState.managedAuth?.kind !== \"provider_grant_ref\"\n    ) {\n      return;\n    }\n\n    const confirmed = window.confirm(\n      `Revoke the shared Google auth for \"${props.source.name}\"? This disconnects every source using the same shared grant.`,\n    );\n    if (!confirmed) {\n      return;\n    }\n\n    setStatusBanner(null);\n\n    try {\n      const result = await removeProviderAuthGrant.mutateAsync(\n        formState.managedAuth.grantId,\n      );\n      if (!result.removed) {\n        throw new Error(\"Shared provider grant was not removed.\");\n      }\n\n      setStatusBanner({\n        tone: \"success\",\n        text: \"Shared provider grant revoked. Linked sources now require authentication again.\",\n      });\n    } catch (error) {\n      setStatusBanner({\n        tone: \"error\",\n        text:\n          error instanceof Error\n            ? error.message\n            : \"Failed revoking shared provider grant.\",\n      });\n    }\n  };\n\n  const backLink =\n    props.mode === \"edit\" && props.source\n      ? {\n          to: \"/sources/$sourceId\" as const,\n          params: { sourceId: props.source.id },\n          search: { tab: \"model\" as const },\n        }\n      : { to: \"/\" as const };\n\n  return (\n    <div className=\"flex-1 overflow-y-auto\">\n      <div className=\"mx-auto max-w-3xl px-6 py-8 lg:px-10 lg:py-12\">\n        {/* Back + title */}\n        <Link\n          {...backLink}\n          className=\"inline-flex items-center gap-1.5 text-[12px] font-medium text-muted-foreground transition-colors hover:text-foreground mb-6\"\n        >\n          <IconArrowLeft className=\"size-3.5\" />\n          {props.mode === \"edit\" ? \"Back to source\" : \"Back\"}\n        </Link>\n\n        <div className=\"flex items-center justify-between gap-4 mb-6\">\n          <h1 className=\"font-display text-2xl tracking-tight text-foreground lg:text-3xl\">\n            {props.mode === \"edit\" ? \"Edit source\" : \"New source\"}\n          </h1>\n          <div className=\"flex items-center gap-2\">\n            <Badge variant=\"outline\">{formState.kind}</Badge>\n            <Badge variant={formState.enabled ? \"default\" : \"muted\"}>\n              {formState.enabled ? \"enabled\" : \"disabled\"}\n            </Badge>\n          </div>\n        </div>\n\n        {statusBanner && <StatusBanner state={statusBanner} className=\"mb-6\" />}\n\n        {/* Templates (create mode) */}\n        {props.mode === \"create\" && (\n          <Section title=\"Templates\" className=\"mb-6\">\n            <div className=\"grid gap-2 sm:grid-cols-2 lg:grid-cols-3\">\n              {sourceTemplates.map((template) => (\n                <button\n                  key={template.id}\n                  type=\"button\"\n                  onClick={() => applyTemplate(template)}\n                  className={cn(\n                    \"rounded-xl border px-4 py-3 text-left transition-colors\",\n                    selectedTemplateId === template.id\n                      ? \"border-primary/40 bg-primary/8\"\n                      : \"border-border bg-card/70 hover:bg-accent/50\",\n                  )}\n                >\n                  <div className=\"mb-1 flex items-center justify-between gap-2\">\n                    <div className=\"flex min-w-0 items-center gap-2\">\n                      <div className=\"flex size-4 shrink-0 items-center justify-center text-muted-foreground\">\n                        <SourceFavicon\n                          endpoint={template.endpoint}\n                          kind={template.kind}\n                          className=\"size-4\"\n                        />\n                      </div>\n                      <span className=\"truncate text-[13px] font-medium text-foreground\">\n                        {template.name}\n                      </span>\n                    </div>\n                    <Badge variant=\"outline\" className=\"text-[9px]\">\n                      {template.kind}\n                    </Badge>\n                  </div>\n                  <span className=\"text-[11px] text-muted-foreground line-clamp-1\">\n                    {template.summary}\n                  </span>\n                </button>\n              ))}\n            </div>\n          </Section>\n        )}\n\n        {/* Form */}\n        <div className=\"space-y-6\">\n          <Section title=\"Basics\">\n            <div className=\"grid gap-4 sm:grid-cols-2\">\n              <Field label=\"Name\">\n                <TextInput\n                  value={formState.name}\n                  onChange={(value) => setField(\"name\", value)}\n                  placeholder=\"GitHub REST\"\n                />\n              </Field>\n              <Field label=\"Kind\">\n                <SelectInput\n                  value={formState.kind}\n                  onChange={(value) =>\n                    setField(\"kind\", value as Source[\"kind\"])\n                  }\n                  options={kindOptions.map((value) => ({\n                    value,\n                    label: value,\n                  }))}\n                />\n              </Field>\n              {!(\n                formState.kind === \"mcp\" && formState.transport === \"stdio\"\n              ) && (\n                <Field label=\"Endpoint\" className=\"sm:col-span-2\">\n                  <TextInput\n                    value={formState.endpoint}\n                    onChange={(value) => setField(\"endpoint\", value)}\n                    placeholder={\n                      formState.kind === \"openapi\"\n                        ? \"https://api.github.com\"\n                        : formState.kind === \"graphql\"\n                          ? \"https://api.linear.app/graphql\"\n                          : formState.kind === \"google_discovery\"\n                            ? \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\"\n                            : \"https://mcp.deepwiki.com/mcp\"\n                    }\n                    mono\n                  />\n                </Field>\n              )}\n              <Field label=\"Namespace\">\n                <TextInput\n                  value={formState.namespace}\n                  onChange={(value) => setField(\"namespace\", value)}\n                  placeholder=\"github\"\n                />\n              </Field>\n              <Field label=\"Status\">\n                <ToggleButton\n                  checked={formState.enabled}\n                  onChange={(checked) => setField(\"enabled\", checked)}\n                />\n              </Field>\n            </div>\n          </Section>\n\n          {formState.kind === \"mcp\" && (\n            <Section title=\"Transport\">\n              <div className=\"grid gap-4 sm:grid-cols-2\">\n                <Field label=\"Transport mode\">\n                  <SelectInput\n                    value={formState.transport || \"auto\"}\n                    onChange={(value) => setTransport(value as McpTransportValue)}\n                    options={transportOptions.map((value) => ({\n                      value,\n                      label: value,\n                    }))}\n                  />\n                </Field>\n                {formState.transport === \"stdio\" ? (\n                  <div className=\"sm:col-span-2 grid gap-4 sm:grid-cols-2\">\n                    <Field label=\"Command\">\n                      <TextInput\n                        value={formState.command}\n                        onChange={(value) =>\n                          setStdioTransportField(\"command\", value)\n                        }\n                        placeholder=\"npx\"\n                        mono\n                      />\n                    </Field>\n                    <Field label=\"Working directory (optional)\">\n                      <TextInput\n                        value={formState.cwd}\n                        onChange={(value) =>\n                          setStdioTransportField(\"cwd\", value)\n                        }\n                        placeholder=\"/path/to/project\"\n                        mono\n                      />\n                    </Field>\n                    <Field label=\"Args (JSON)\" className=\"sm:col-span-2\">\n                      <CodeEditor\n                        value={formState.argsText}\n                        onChange={(value) =>\n                          setStdioTransportField(\"argsText\", value)\n                        }\n                        placeholder={\n                          '[\\n  \"-y\",\\n  \"chrome-devtools-mcp@latest\"\\n]'\n                        }\n                      />\n                    </Field>\n                    <Field label=\"Environment (JSON)\" className=\"sm:col-span-2\">\n                      <CodeEditor\n                        value={formState.envText}\n                        onChange={(value) =>\n                          setStdioTransportField(\"envText\", value)\n                        }\n                        placeholder={\n                          '{\\n  \"CHROME_PATH\": \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"\\n}'\n                        }\n                      />\n                    </Field>\n                  </div>\n                ) : (\n                  <div className=\"sm:col-span-2 grid gap-4 sm:grid-cols-2\">\n                    <Field label=\"Query params (JSON)\">\n                      <CodeEditor\n                        value={formState.queryParamsText}\n                        onChange={(value) =>\n                          setRemoteTransportField(\"queryParamsText\", value)\n                        }\n                        placeholder={'{\\n  \"workspace\": \"demo\"\\n}'}\n                      />\n                    </Field>\n                    <Field label=\"Headers (JSON)\">\n                      <CodeEditor\n                        value={formState.headersText}\n                        onChange={(value) =>\n                          setRemoteTransportField(\"headersText\", value)\n                        }\n                        placeholder={'{\\n  \"x-api-key\": \"...\"\\n}'}\n                      />\n                    </Field>\n                  </div>\n                )}\n              </div>\n            </Section>\n          )}\n\n          {formState.kind === \"openapi\" && (\n            <Section title=\"OpenAPI\">\n              <div className=\"grid gap-4\">\n                <Field label=\"Spec URL\">\n                  <TextInput\n                    value={formState.specUrl}\n                    onChange={(value) => setField(\"specUrl\", value)}\n                    placeholder=\"https://raw.githubusercontent.com/.../openapi.yaml\"\n                    mono\n                  />\n                </Field>\n                <Field label=\"Default headers (JSON)\">\n                  <CodeEditor\n                    value={formState.defaultHeadersText}\n                    onChange={(value) => setField(\"defaultHeadersText\", value)}\n                    placeholder={'{\\n  \"x-api-version\": \"2026-03-01\"\\n}'}\n                  />\n                </Field>\n              </div>\n            </Section>\n          )}\n\n          {formState.kind === \"graphql\" && (\n            <Section title=\"GraphQL\">\n              <div className=\"grid gap-4\">\n                <Field label=\"Default headers (JSON)\">\n                  <CodeEditor\n                    value={formState.defaultHeadersText}\n                    onChange={(value) => setField(\"defaultHeadersText\", value)}\n                    placeholder={'{\\n  \"x-api-version\": \"2026-03-01\"\\n}'}\n                  />\n                </Field>\n              </div>\n            </Section>\n          )}\n\n          {formState.kind === \"google_discovery\" && (\n            <Section title=\"Google Discovery\">\n              <div className=\"grid gap-4 sm:grid-cols-2\">\n                <Field label=\"Service\">\n                  <TextInput\n                    value={formState.service}\n                    onChange={(value) => setField(\"service\", value)}\n                    placeholder=\"sheets\"\n                  />\n                </Field>\n                <Field label=\"Version\">\n                  <TextInput\n                    value={formState.version}\n                    onChange={(value) => setField(\"version\", value)}\n                    placeholder=\"v4\"\n                  />\n                </Field>\n                <Field label=\"Default headers (JSON)\" className=\"sm:col-span-2\">\n                  <CodeEditor\n                    value={formState.defaultHeadersText}\n                    onChange={(value) => setField(\"defaultHeadersText\", value)}\n                    placeholder={'{\\n  \"x-goog-user-project\": \"my-project\"\\n}'}\n                  />\n                </Field>\n              </div>\n            </Section>\n          )}\n\n          <Section title=\"Authentication\">\n            <div className=\"grid gap-4 sm:grid-cols-2\">\n              {formState.kind === \"mcp\" && formState.transport !== \"stdio\" && (\n                <div className=\"sm:col-span-2 rounded-xl border border-border bg-gradient-to-b from-card/90 to-card/50 overflow-hidden\">\n                  <div className=\"flex items-start gap-3 px-4 py-3.5\">\n                    <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/8 text-primary mt-0.5\">\n                      <svg\n                        className=\"size-4\"\n                        viewBox=\"0 0 24 24\"\n                        fill=\"none\"\n                        stroke=\"currentColor\"\n                        strokeWidth=\"1.5\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                      >\n                        <rect\n                          x=\"3\"\n                          y=\"11\"\n                          width=\"18\"\n                          height=\"11\"\n                          rx=\"2\"\n                          ry=\"2\"\n                        />\n                        <path d=\"M7 11V7a5 5 0 0110 0v4\" />\n                      </svg>\n                    </div>\n                    <div className=\"flex-1 min-w-0 space-y-2\">\n                      <div className=\"space-y-0.5\">\n                        <p className=\"text-[12px] font-medium text-foreground\">\n                          MCP OAuth\n                        </p>\n                        <p className=\"text-[11px] text-muted-foreground\">\n                          Opens the server's built-in OAuth flow to authenticate\n                          this source.\n                        </p>\n                      </div>\n                      <Button\n                        type=\"button\"\n                        variant=\"outline\"\n                        size=\"sm\"\n                        onClick={handleMcpOAuthConnect}\n                        disabled={\n                          isSubmitting || isDeleting || isOAuthSubmitting\n                        }\n                      >\n                        {isOAuthSubmitting ? (\n                          <IconSpinner className=\"size-3\" />\n                        ) : null}\n                        {formState.authKind === \"oauth2\" &&\n                        formState.oauthAccessHandle.trim().length > 0\n                          ? \"Reconnect\"\n                          : \"Sign in with OAuth\"}\n                      </Button>\n                    </div>\n                  </div>\n                  {formState.authKind === \"oauth2\" &&\n                    formState.oauthAccessHandle.trim().length > 0 && (\n                      <div className=\"flex items-center justify-between gap-3 border-t border-border/50 px-4 py-2.5\">\n                        <p className=\"text-[11px] text-muted-foreground/70\">\n                          Token refs attached to this draft\n                        </p>\n                        <button\n                          type=\"button\"\n                          className=\"text-[11px] font-medium text-muted-foreground/60 transition-colors hover:text-foreground\"\n                          onClick={() =>\n                            setExpandedOauthSecretRefTarget((current) =>\n                              current === oauthSecretRefTarget\n                                ? null\n                                : oauthSecretRefTarget,\n                            )\n                          }\n                        >\n                          {showOauthSecretRefs ? \"Hide refs\" : \"Show refs\"}\n                        </button>\n                      </div>\n                    )}\n                </div>\n              )}\n              {formState.kind === \"mcp\" && formState.transport === \"stdio\" ? (\n                <div className=\"sm:col-span-2 rounded-xl border border-border bg-muted/40 px-4 py-3 text-[12px] text-muted-foreground\">\n                  Local MCP stdio sources do not use executor-managed HTTP or\n                  OAuth credentials.\n                </div>\n              ) : (\n                <Field label=\"Auth mode\">\n                  <SelectInput\n                    value={formState.authKind}\n                    onChange={(value) =>\n                      setField(\"authKind\", value as Source[\"auth\"][\"kind\"])\n                    }\n                    disabled={formState.managedAuth !== null}\n                    options={authOptions.map((value) => ({\n                      value,\n                      label: value,\n                    }))}\n                  />\n                </Field>\n              )}\n              {formState.managedAuth !== null &&\n                !(\n                  formState.kind === \"mcp\" && formState.transport === \"stdio\"\n                ) && (\n                  <div className=\"sm:col-span-2 rounded-xl border border-border bg-gradient-to-b from-muted/40 to-transparent overflow-hidden\">\n                    <div className=\"flex items-start gap-3 px-4 py-3.5\">\n                      <div className=\"flex size-8 shrink-0 items-center justify-center rounded-lg bg-primary/8 text-primary mt-0.5\">\n                        {formState.managedAuth.kind === \"provider_grant_ref\" ? (\n                          <svg\n                            className=\"size-4\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"none\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                          >\n                            <path d=\"M10 13a5 5 0 007.54.54l3-3a5 5 0 00-7.07-7.07l-1.72 1.71\" />\n                            <path d=\"M14 11a5 5 0 00-7.54-.54l-3 3a5 5 0 007.07 7.07l1.71-1.71\" />\n                          </svg>\n                        ) : (\n                          <svg\n                            className=\"size-4\"\n                            viewBox=\"0 0 24 24\"\n                            fill=\"none\"\n                            stroke=\"currentColor\"\n                            strokeWidth=\"1.5\"\n                            strokeLinecap=\"round\"\n                            strokeLinejoin=\"round\"\n                          >\n                            <rect\n                              x=\"3\"\n                              y=\"11\"\n                              width=\"18\"\n                              height=\"11\"\n                              rx=\"2\"\n                              ry=\"2\"\n                            />\n                            <path d=\"M7 11V7a5 5 0 0110 0v4\" />\n                          </svg>\n                        )}\n                      </div>\n                      <div className=\"flex-1 min-w-0 space-y-1\">\n                        <p className=\"text-[12px] font-medium text-foreground\">\n                          {formState.managedAuth.kind === \"provider_grant_ref\"\n                            ? \"Shared provider grant\"\n                            : \"Managed MCP OAuth\"}\n                        </p>\n                        <p className=\"text-[11px] leading-relaxed text-muted-foreground\">\n                          {formState.managedAuth.kind === \"provider_grant_ref\"\n                            ? \"This source uses a shared Google auth grant. Reconnect from Add Source to change the linked account or scopes.\"\n                            : \"Authenticated through a persisted MCP OAuth session. Reconnect the source to refresh or replace the binding.\"}\n                        </p>\n                      </div>\n                    </div>\n                    {formState.managedAuth.kind === \"provider_grant_ref\" &&\n                      props.mode === \"edit\" && (\n                        <div className=\"flex items-center justify-end border-t border-border/50 px-4 py-2.5\">\n                          <Button\n                            type=\"button\"\n                            variant=\"ghost\"\n                            size=\"sm\"\n                            className=\"text-destructive/70 hover:text-destructive hover:bg-destructive/8\"\n                            onClick={handleRevokeProviderGrant}\n                            disabled={isRevokingGrant}\n                          >\n                            <IconTrash className=\"size-3\" />\n                            {isRevokingGrant\n                              ? \"Revoking\\u2026\"\n                              : \"Revoke shared auth\"}\n                          </Button>\n                        </div>\n                      )}\n                  </div>\n                )}\n              {formState.authKind !== \"none\" &&\n                formState.managedAuth === null &&\n                !(\n                  formState.kind === \"mcp\" && formState.transport === \"stdio\"\n                ) && (\n                  <>\n                    <Field label=\"Header name\">\n                      <TextInput\n                        value={formState.authHeaderName}\n                        onChange={(value) => setField(\"authHeaderName\", value)}\n                        placeholder=\"Authorization\"\n                      />\n                    </Field>\n                    <Field label=\"Prefix\">\n                      <TextInput\n                        value={formState.authPrefix}\n                        onChange={(value) => setField(\"authPrefix\", value)}\n                        placeholder=\"Bearer \"\n                      />\n                    </Field>\n                  </>\n                )}\n\n              {formState.authKind === \"bearer\" &&\n                formState.managedAuth === null &&\n                !(\n                  formState.kind === \"mcp\" && formState.transport === \"stdio\"\n                ) && (\n                  <Field label=\"Token\" className=\"sm:col-span-2\">\n                    <SecretPicker\n                      instanceConfig={instanceConfig}\n                      secrets={secrets}\n                      providerId={formState.bearerProviderId}\n                      handle={formState.bearerHandle}\n                      onSelect={(providerId, handle) => {\n                        setField(\"bearerProviderId\", providerId);\n                        setField(\"bearerHandle\", handle);\n                      }}\n                    />\n                  </Field>\n                )}\n\n              {formState.authKind === \"oauth2\" &&\n                formState.managedAuth === null &&\n                !(\n                  formState.kind === \"mcp\" && formState.transport === \"stdio\"\n                ) &&\n                (formState.kind !== \"mcp\" ||\n                  formState.oauthAccessHandle.trim().length === 0 ||\n                  showOauthSecretRefs) && (\n                  <>\n                    <Field label=\"Access token\" className=\"sm:col-span-2\">\n                      <SecretPicker\n                        instanceConfig={instanceConfig}\n                        secrets={secrets}\n                        providerId={formState.oauthAccessProviderId}\n                        handle={formState.oauthAccessHandle}\n                        onSelect={(providerId, handle) => {\n                          setField(\"oauthAccessProviderId\", providerId);\n                          setField(\"oauthAccessHandle\", handle);\n                        }}\n                      />\n                    </Field>\n                    <Field\n                      label=\"Refresh token (optional)\"\n                      className=\"sm:col-span-2\"\n                    >\n                      <SecretPicker\n                        instanceConfig={instanceConfig}\n                        secrets={secrets}\n                        providerId={formState.oauthRefreshProviderId}\n                        handle={formState.oauthRefreshHandle}\n                        onSelect={(providerId, handle) => {\n                          setField(\"oauthRefreshProviderId\", providerId);\n                          setField(\"oauthRefreshHandle\", handle);\n                        }}\n                        allowEmpty\n                      />\n                    </Field>\n                  </>\n                )}\n            </div>\n          </Section>\n\n          {/* Danger zone (edit mode) */}\n          {props.mode === \"edit\" && props.source && (\n            <Section title=\"Danger zone\">\n              <Button\n                variant=\"outline\"\n                className=\"border-destructive/30 text-destructive hover:bg-destructive/10 hover:text-destructive\"\n                onClick={handleRemove}\n                disabled={isDeleting || isRevokingGrant}\n              >\n                <IconTrash className=\"size-3.5\" />\n                {isDeleting ? \"Removing\\u2026\" : \"Remove source\"}\n              </Button>\n            </Section>\n          )}\n\n          {/* Actions */}\n          <div className=\"flex items-center justify-end gap-3 border-t border-border pt-5\">\n            <Link {...backLink} className=\"inline-flex\">\n              <Button variant=\"ghost\" type=\"button\">\n                Cancel\n              </Button>\n            </Link>\n            <Button\n              onClick={handleSubmit}\n              disabled={isSubmitting || isRevokingGrant}\n            >\n              {props.mode === \"edit\" ? (\n                <IconPencil className=\"size-3.5\" />\n              ) : (\n                <IconPlus className=\"size-3.5\" />\n              )}\n              {isSubmitting\n                ? props.mode === \"edit\"\n                  ? \"Saving\\u2026\"\n                  : \"Creating\\u2026\"\n                : props.mode === \"edit\"\n                  ? \"Save\"\n                  : \"Create source\"}\n            </Button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Form building blocks\n// ---------------------------------------------------------------------------\n\nfunction Section(props: {\n  title: string;\n  children: ReactNode;\n  className?: string;\n}) {\n  return (\n    <section\n      className={cn(\n        \"rounded-xl border border-border bg-card/80\",\n        props.className,\n      )}\n    >\n      <div className=\"border-b border-border px-5 py-3\">\n        <h2 className=\"text-sm font-semibold text-foreground\">{props.title}</h2>\n      </div>\n      <div className=\"p-5\">{props.children}</div>\n    </section>\n  );\n}\n\nfunction Field(props: {\n  label: string;\n  className?: string;\n  children: ReactNode;\n}) {\n  return (\n    <label className={cn(\"block space-y-1.5\", props.className)}>\n      <span className=\"text-[12px] font-medium text-foreground\">\n        {props.label}\n      </span>\n      {props.children}\n    </label>\n  );\n}\n\nfunction TextInput(props: {\n  value: string;\n  onChange: (value: string) => void;\n  placeholder?: string;\n  mono?: boolean;\n}) {\n  return (\n    <input\n      value={props.value}\n      onChange={(event) => props.onChange(event.target.value)}\n      placeholder={props.placeholder}\n      className={cn(\n        \"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\",\n        props.mono && \"font-mono text-[12px]\",\n      )}\n    />\n  );\n}\n\nfunction SelectInput(props: {\n  value: string;\n  onChange: (value: string) => void;\n  options: ReadonlyArray<{ value: string; label: string }>;\n  disabled?: boolean;\n}) {\n  return (\n    <select\n      value={props.value}\n      disabled={props.disabled}\n      onChange={(event) => props.onChange(event.target.value)}\n      className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n    >\n      {props.options.map((option) => (\n        <option key={option.value} value={option.value}>\n          {option.label}\n        </option>\n      ))}\n    </select>\n  );\n}\n\nfunction CodeEditor(props: {\n  value: string;\n  onChange: (value: string) => void;\n  placeholder?: string;\n}) {\n  return (\n    <textarea\n      value={props.value}\n      onChange={(event) => props.onChange(event.target.value)}\n      placeholder={props.placeholder}\n      spellCheck={false}\n      className=\"min-h-28 w-full rounded-lg border border-input bg-background px-3 py-2.5 font-mono text-[12px] leading-relaxed text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n    />\n  );\n}\n\nfunction ToggleButton(props: {\n  checked: boolean;\n  onChange: (checked: boolean) => void;\n}) {\n  return (\n    <button\n      type=\"button\"\n      onClick={() => props.onChange(!props.checked)}\n      className={cn(\n        \"flex h-9 w-full items-center justify-between rounded-lg border px-3 text-[13px] transition-colors\",\n        props.checked\n          ? \"border-primary/40 bg-primary/8 text-foreground\"\n          : \"border-input bg-background text-muted-foreground hover:text-foreground\",\n      )}\n    >\n      <span>{props.checked ? \"Enabled\" : \"Disabled\"}</span>\n      <span\n        className={cn(\n          \"size-2 rounded-full\",\n          props.checked ? \"bg-primary\" : \"bg-muted-foreground/30\",\n        )}\n      />\n    </button>\n  );\n}\n\nfunction StatusBanner(props: { state: StatusBannerState; className?: string }) {\n  return (\n    <div\n      className={cn(\n        \"rounded-lg border px-4 py-3 text-[13px]\",\n        props.state.tone === \"success\" &&\n          \"border-primary/30 bg-primary/8 text-foreground\",\n        props.state.tone === \"info\" &&\n          \"border-border bg-card text-muted-foreground\",\n        props.state.tone === \"error\" &&\n          \"border-destructive/30 bg-destructive/8 text-destructive\",\n        props.className,\n      )}\n    >\n      {props.state.text}\n    </div>\n  );\n}\n\nconst CREATE_NEW_VALUE = \"__create_new__\";\n\nfunction SecretPicker(props: {\n  instanceConfig: Loadable<InstanceConfig>;\n  secrets: Loadable<ReadonlyArray<SecretListItem>>;\n  providerId: string;\n  handle: string;\n  onSelect: (providerId: string, handle: string) => void;\n  allowEmpty?: boolean;\n}) {\n  const { instanceConfig, secrets, providerId, handle, onSelect, allowEmpty } =\n    props;\n  const createSecret = useCreateSecret();\n  const [showCreate, setShowCreate] = useState(false);\n  const [newName, setNewName] = useState(\"\");\n  const [newValue, setNewValue] = useState(\"\");\n  const [newProviderId, setNewProviderId] = useState(\"\");\n  const [createError, setCreateError] = useState<string | null>(null);\n  const storableProviders =\n    instanceConfig.status === \"ready\"\n      ? instanceConfig.data.secretProviders.filter(\n          (provider) => provider.canStore,\n        )\n      : [];\n\n  useEffect(() => {\n    if (newProviderId.length > 0) {\n      return;\n    }\n    if (instanceConfig.status === \"ready\") {\n      setNewProviderId(instanceConfig.data.defaultSecretStoreProvider);\n    }\n  }, [instanceConfig, newProviderId]);\n\n  // Build the selected value key: if handle is set, use it (it's the secret ID)\n  const selectedValue = handle || \"\";\n\n  const handleSelectChange = (value: string) => {\n    if (value === CREATE_NEW_VALUE) {\n      setShowCreate(true);\n      setNewName(\"\");\n      setNewValue(\"\");\n      setNewProviderId(\n        instanceConfig.status === \"ready\"\n          ? instanceConfig.data.defaultSecretStoreProvider\n          : \"\",\n      );\n      setCreateError(null);\n      return;\n    }\n    if (value === \"\") {\n      onSelect(\"\", \"\");\n      return;\n    }\n    const matchedSecret =\n      secrets.status === \"ready\"\n        ? secrets.data.find((secret) => secret.id === value)\n        : null;\n    onSelect(matchedSecret?.providerId ?? \"local\", value);\n  };\n\n  const handleCreate = async () => {\n    setCreateError(null);\n    const trimmedName = newName.trim();\n    if (!trimmedName) {\n      setCreateError(\"Name is required.\");\n      return;\n    }\n    if (!newValue) {\n      setCreateError(\"Value is required.\");\n      return;\n    }\n\n    try {\n      const result = await createSecret.mutateAsync({\n        name: trimmedName,\n        value: newValue,\n        ...(newProviderId ? { providerId: newProviderId } : {}),\n      });\n      onSelect(result.providerId, result.id);\n      setShowCreate(false);\n    } catch (err) {\n      setCreateError(\n        err instanceof Error ? err.message : \"Failed creating secret.\",\n      );\n    }\n  };\n\n  if (secrets.status !== \"ready\") {\n    return (\n      <select\n        disabled\n        className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-muted-foreground outline-none opacity-60\"\n      >\n        <option>Loading…</option>\n      </select>\n    );\n  }\n\n  const items = secrets.data;\n\n  // Check if the current handle matches a known secret\n  const matchedSecret = items.find((s) => s.id === handle);\n  const isExternalRef = handle && !matchedSecret && providerId !== \"local\";\n\n  return (\n    <div className=\"space-y-2\">\n      <select\n        value={showCreate ? CREATE_NEW_VALUE : selectedValue}\n        onChange={(e) => handleSelectChange(e.target.value)}\n        className=\"h-9 w-full rounded-lg border border-input bg-background px-3 text-[13px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n      >\n        {allowEmpty && <option value=\"\">None</option>}\n        {!allowEmpty && !selectedValue && (\n          <option value=\"\">Select a secret…</option>\n        )}\n        {items.map((secret) => (\n          <option key={secret.id} value={secret.id}>\n            {secret.name || secret.id} ({secret.providerId})\n          </option>\n        ))}\n        {isExternalRef && (\n          <option value={handle}>\n            {providerId}:{handle}\n          </option>\n        )}\n        <option value={CREATE_NEW_VALUE}>+ Create new secret</option>\n      </select>\n\n      {showCreate && (\n        <div className=\"rounded-lg border border-primary/20 bg-card/80 p-3 space-y-3\">\n          {createError && (\n            <div className=\"rounded-md border border-destructive/30 bg-destructive/8 px-3 py-2 text-[12px] text-destructive\">\n              {createError}\n            </div>\n          )}\n          <div className=\"grid gap-3 sm:grid-cols-2\">\n            <label className=\"block space-y-1\">\n              <span className=\"text-[11px] font-medium text-muted-foreground\">\n                Name\n              </span>\n              <input\n                value={newName}\n                onChange={(e) => setNewName(e.target.value)}\n                placeholder=\"GitHub PAT\"\n                className=\"h-8 w-full rounded-lg border border-input bg-background px-3 text-[12px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n                autoFocus\n              />\n            </label>\n            <label className=\"block space-y-1\">\n              <span className=\"text-[11px] font-medium text-muted-foreground\">\n                Value\n              </span>\n              <input\n                type=\"password\"\n                value={newValue}\n                onChange={(e) => setNewValue(e.target.value)}\n                placeholder=\"ghp_...\"\n                className=\"h-8 w-full rounded-lg border border-input bg-background px-3 font-mono text-[11px] text-foreground outline-none transition-colors placeholder:text-muted-foreground/35 focus:border-ring focus:ring-1 focus:ring-ring/25\"\n              />\n            </label>\n            <label className=\"block space-y-1\">\n              <span className=\"text-[11px] font-medium text-muted-foreground\">\n                Store in\n              </span>\n              <select\n                value={newProviderId}\n                onChange={(e) => setNewProviderId(e.target.value)}\n                className=\"h-8 w-full rounded-lg border border-input bg-background px-3 text-[12px] text-foreground outline-none transition-colors focus:border-ring focus:ring-1 focus:ring-ring/25\"\n              >\n                {storableProviders.map((provider) => (\n                  <option key={provider.id} value={provider.id}>\n                    {provider.name}\n                  </option>\n                ))}\n              </select>\n            </label>\n          </div>\n          <div className=\"flex items-center justify-end gap-2\">\n            <button\n              type=\"button\"\n              onClick={() => setShowCreate(false)}\n              className=\"rounded-md px-2.5 py-1 text-[11px] font-medium text-muted-foreground transition-colors hover:text-foreground\"\n            >\n              Cancel\n            </button>\n            <Button\n              size=\"sm\"\n              onClick={handleCreate}\n              disabled={createSecret.status === \"pending\"}\n            >\n              {createSecret.status === \"pending\" && (\n                <IconSpinner className=\"size-3\" />\n              )}\n              Store & use\n            </Button>\n          </div>\n        </div>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "apps/web/src/views/source-templates.ts",
    "content": "type SourceTemplateBase = {\n  id: string;\n  name: string;\n  summary: string;\n  endpoint?: string;\n  namespace?: string;\n  groupId?: string;\n  groupLabel?: string;\n  batchable?: boolean;\n};\n\nexport type McpSourceTemplate = SourceTemplateBase & {\n  kind: \"mcp\";\n  connectionType?: \"endpoint\" | \"command\";\n  transport?: \"auto\" | \"streamable-http\" | \"sse\" | \"stdio\";\n  command?: string;\n  args?: ReadonlyArray<string>;\n  env?: Record<string, string>;\n  cwd?: string;\n};\n\nexport type OpenApiSourceTemplate = SourceTemplateBase & {\n  kind: \"openapi\";\n  specUrl: string;\n};\n\nexport type GoogleDiscoverySourceTemplate = SourceTemplateBase & {\n  kind: \"google_discovery\";\n  service: string;\n  version: string;\n  discoveryUrl: string;\n};\n\nexport type GraphqlSourceTemplate = SourceTemplateBase & {\n  kind: \"graphql\";\n};\n\nexport type SourceTemplate =\n  | McpSourceTemplate\n  | OpenApiSourceTemplate\n  | GoogleDiscoverySourceTemplate\n  | GraphqlSourceTemplate;\n\nexport const isStdioMcpSourceTemplate = (\n  template: SourceTemplate,\n): template is McpSourceTemplate & { transport: \"stdio\" } =>\n  template.kind === \"mcp\" &&\n  template.connectionType === \"command\" &&\n  template.transport === \"stdio\";\n\nconst googleDiscoveryUrl = (service: string, version: string): string =>\n  `https://www.googleapis.com/discovery/v1/apis/${encodeURIComponent(service)}/${encodeURIComponent(version)}/rest`;\n\nconst googleDiscoveryTemplate = (input: {\n  id: string;\n  name: string;\n  summary: string;\n  service: string;\n  version: string;\n  discoveryUrl?: string;\n}): GoogleDiscoverySourceTemplate => {\n  const discoveryUrl =\n    input.discoveryUrl ?? googleDiscoveryUrl(input.service, input.version);\n  return {\n    id: input.id,\n    name: input.name,\n    summary: input.summary,\n    kind: \"google_discovery\",\n    endpoint: discoveryUrl,\n    groupId: \"google_workspace\",\n    groupLabel: \"Google Workspace\",\n    batchable: true,\n    service: input.service,\n    version: input.version,\n    discoveryUrl,\n  };\n};\n\nexport const sourceTemplates: ReadonlyArray<SourceTemplate> = [\n  {\n    id: \"deepwiki-mcp\",\n    name: \"DeepWiki MCP\",\n    summary: \"Repository docs and knowledge graphs via MCP.\",\n    kind: \"mcp\",\n    endpoint: \"https://mcp.deepwiki.com/mcp\",\n  },\n  {\n    id: \"axiom-mcp\",\n    name: \"Axiom MCP\",\n    summary: \"Query, stream, and analyze logs, traces, and event data.\",\n    kind: \"mcp\",\n    endpoint: \"https://mcp.axiom.co/mcp\",\n  },\n  {\n    id: \"neon-mcp\",\n    name: \"Neon MCP\",\n    summary: \"Manage Postgres databases, branches, and queries via MCP.\",\n    kind: \"mcp\",\n    endpoint: \"https://mcp.neon.tech/mcp\",\n  },\n  {\n    id: \"chrome-devtools-mcp\",\n    name: \"Chrome DevTools MCP\",\n    summary:\n      \"Debug a live Chrome browser session over a local MCP stdio transport.\",\n    kind: \"mcp\",\n    namespace: \"chrome.devtools\",\n    connectionType: \"command\",\n    transport: \"stdio\",\n    command: \"npx\",\n    args: [\"-y\", \"chrome-devtools-mcp@latest\"],\n  },\n  {\n    id: \"neon-api\",\n    name: \"Neon API\",\n    summary: \"Projects, branches, endpoints, databases, and API keys.\",\n    kind: \"openapi\",\n    endpoint: \"https://console.neon.tech/api/v2\",\n    specUrl: \"https://neon.com/api_spec/release/v2.json\",\n  },\n  {\n    id: \"github-rest\",\n    name: \"GitHub REST API\",\n    summary: \"Repos, issues, pull requests, actions, and org settings.\",\n    kind: \"openapi\",\n    endpoint: \"https://api.github.com\",\n    specUrl:\n      \"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.yaml\",\n    groupId: \"github\",\n    groupLabel: \"GitHub\",\n    batchable: false,\n  },\n  {\n    id: \"github-graphql\",\n    name: \"GitHub GraphQL\",\n    summary:\n      \"Issues, pull requests, discussions, and repository objects via GraphQL.\",\n    kind: \"graphql\",\n    endpoint: \"https://api.github.com/graphql\",\n    groupId: \"github\",\n    groupLabel: \"GitHub\",\n    batchable: false,\n  },\n  {\n    id: \"gitlab-graphql\",\n    name: \"GitLab GraphQL\",\n    summary: \"Projects, merge requests, issues, CI pipelines, and users.\",\n    kind: \"graphql\",\n    endpoint: \"https://gitlab.com/api/graphql\",\n  },\n  {\n    id: \"openai-api\",\n    name: \"OpenAI API\",\n    summary: \"Models, files, responses, and fine-tuning.\",\n    kind: \"openapi\",\n    endpoint: \"https://api.openai.com/v1\",\n    specUrl:\n      \"https://app.stainless.com/api/spec/documented/openai/openapi.documented.yml\",\n  },\n  {\n    id: \"vercel-api\",\n    name: \"Vercel API\",\n    summary: \"Deployments, projects, domains, and environments.\",\n    kind: \"openapi\",\n    endpoint: \"https://api.vercel.com\",\n    specUrl: \"https://openapi.vercel.sh\",\n  },\n  {\n    id: \"stripe-api\",\n    name: \"Stripe API\",\n    summary: \"Payments, billing, subscriptions, and invoices.\",\n    kind: \"openapi\",\n    endpoint: \"https://api.stripe.com\",\n    specUrl:\n      \"https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json\",\n  },\n  {\n    id: \"linear-graphql\",\n    name: \"Linear GraphQL\",\n    summary: \"Issues, teams, cycles, and projects.\",\n    kind: \"graphql\",\n    endpoint: \"https://api.linear.app/graphql\",\n  },\n  {\n    id: \"monday-graphql\",\n    name: \"Monday GraphQL\",\n    summary: \"Boards, items, updates, users, and workspace metadata.\",\n    kind: \"graphql\",\n    endpoint: \"https://api.monday.com/v2\",\n  },\n  {\n    id: \"anilist-graphql\",\n    name: \"AniList GraphQL\",\n    summary: \"Anime, manga, characters, media lists, and recommendations.\",\n    kind: \"graphql\",\n    endpoint: \"https://graphql.anilist.co\",\n  },\n  googleDiscoveryTemplate({\n    id: \"google-calendar\",\n    name: \"Google Calendar\",\n    summary: \"Calendars, events, ACLs, and scheduling workflows.\",\n    service: \"calendar\",\n    version: \"v3\",\n    discoveryUrl:\n      \"https://calendar-json.googleapis.com/$discovery/rest?version=v3\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-drive\",\n    name: \"Google Drive\",\n    summary: \"Files, folders, permissions, comments, and shared drives.\",\n    service: \"drive\",\n    version: \"v3\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-gmail\",\n    name: \"Gmail\",\n    summary: \"Messages, threads, labels, drafts, and mailbox automation.\",\n    service: \"gmail\",\n    version: \"v1\",\n    discoveryUrl: \"https://gmail.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-docs\",\n    name: \"Google Docs\",\n    summary: \"Documents, structural edits, text ranges, and formatting.\",\n    service: \"docs\",\n    version: \"v1\",\n    discoveryUrl: \"https://docs.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-sheets\",\n    name: \"Google Sheets\",\n    summary: \"Spreadsheets, values, ranges, formatting, and batch updates.\",\n    service: \"sheets\",\n    version: \"v4\",\n    discoveryUrl: \"https://sheets.googleapis.com/$discovery/rest?version=v4\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-slides\",\n    name: \"Google Slides\",\n    summary: \"Presentations, slides, page elements, and deck updates.\",\n    service: \"slides\",\n    version: \"v1\",\n    discoveryUrl: \"https://slides.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-forms\",\n    name: \"Google Forms\",\n    summary: \"Forms, questions, responses, quizzes, and form metadata.\",\n    service: \"forms\",\n    version: \"v1\",\n    discoveryUrl: \"https://forms.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-search-console\",\n    name: \"Google Search Console\",\n    summary:\n      \"Sites, sitemaps, URL inspection, and search and Discover performance.\",\n    service: \"searchconsole\",\n    version: \"v1\",\n    discoveryUrl:\n      \"https://searchconsole.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-people\",\n    name: \"Google People\",\n    summary: \"Contacts, profiles, directory people, and contact groups.\",\n    service: \"people\",\n    version: \"v1\",\n    discoveryUrl: \"https://people.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-tasks\",\n    name: \"Google Tasks\",\n    summary: \"Task lists, task items, notes, and due dates.\",\n    service: \"tasks\",\n    version: \"v1\",\n    discoveryUrl: \"https://tasks.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-chat\",\n    name: \"Google Chat\",\n    summary: \"Spaces, messages, members, reactions, and chat workflows.\",\n    service: \"chat\",\n    version: \"v1\",\n    discoveryUrl: \"https://chat.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-keep\",\n    name: \"Google Keep\",\n    summary: \"Notes, lists, attachments, and collaborative annotations.\",\n    service: \"keep\",\n    version: \"v1\",\n    discoveryUrl: \"https://keep.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-classroom\",\n    name: \"Google Classroom\",\n    summary: \"Courses, rosters, coursework, submissions, and grading data.\",\n    service: \"classroom\",\n    version: \"v1\",\n    discoveryUrl: \"https://classroom.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-admin-directory\",\n    name: \"Google Admin Directory\",\n    summary: \"Users, groups, org units, roles, and domain directory resources.\",\n    service: \"admin\",\n    version: \"directory_v1\",\n    discoveryUrl:\n      \"https://admin.googleapis.com/$discovery/rest?version=directory_v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-admin-reports\",\n    name: \"Google Admin Reports\",\n    summary: \"Audit events, usage reports, and admin activity logs.\",\n    service: \"admin\",\n    version: \"reports_v1\",\n    discoveryUrl:\n      \"https://admin.googleapis.com/$discovery/rest?version=reports_v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-apps-script\",\n    name: \"Google Apps Script\",\n    summary:\n      \"Projects, deployments, script execution, and Apps Script metadata.\",\n    service: \"script\",\n    version: \"v1\",\n    discoveryUrl: \"https://script.googleapis.com/$discovery/rest?version=v1\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-bigquery\",\n    name: \"Google BigQuery\",\n    summary:\n      \"Datasets, tables, jobs, routines, and analytical query workflows.\",\n    service: \"bigquery\",\n    version: \"v2\",\n    discoveryUrl: \"https://bigquery.googleapis.com/$discovery/rest?version=v2\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-cloud-resource-manager\",\n    name: \"Google Cloud Resource Manager\",\n    summary:\n      \"Projects, folders, organizations, and IAM-oriented resource hierarchy.\",\n    service: \"cloudresourcemanager\",\n    version: \"v3\",\n    discoveryUrl:\n      \"https://cloudresourcemanager.googleapis.com/$discovery/rest?version=v3\",\n  }),\n  googleDiscoveryTemplate({\n    id: \"google-youtube-data\",\n    name: \"YouTube Data\",\n    summary: \"Channels, playlists, videos, comments, captions, and uploads.\",\n    service: \"youtube\",\n    version: \"v3\",\n    discoveryUrl: \"https://youtube.googleapis.com/$discovery/rest?version=v3\",\n  }),\n];\n"
  },
  {
    "path": "apps/web/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\", \"DOM\", \"DOM.Iterable\"],\n    \"jsx\": \"react-jsx\",\n    \"types\": [\"bun-types\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.tsx\"\n  ]\n}\n"
  },
  {
    "path": "apps/web/vite.config.ts",
    "content": "import { readFileSync } from \"node:fs\";\nimport { defineConfig } from \"vite\";\nimport react from \"@vitejs/plugin-react\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport devServer from \"@hono/vite-dev-server\";\n\ntype ExecutorPackageMetadata = {\n  version: string;\n  homepage?: string;\n  repository?: string | { url?: string };\n};\n\nconst executorPackage = JSON.parse(\n  readFileSync(new URL(\"../executor/package.json\", import.meta.url), \"utf8\"),\n) as ExecutorPackageMetadata;\n\nconst repositoryUrl =\n  typeof executorPackage.repository === \"string\"\n    ? executorPackage.repository\n    : executorPackage.repository?.url;\n\nconst githubUrl = (executorPackage.homepage ?? repositoryUrl ?? \"https://github.com/RhysSullivan/executor\")\n  .replace(/^git\\+/, \"\")\n  .replace(/\\.git$/, \"\");\n\nexport default defineConfig({\n  root: \"src\",\n  plugins: [\n    tailwindcss(),\n    react(),\n    devServer({\n      entry: \"src/dev.ts\",\n      exclude: [\n        // Only let /v1 and /mcp requests reach the API handler\n        /^\\/(?!(v1|mcp)(\\/|$))/,\n        /^\\/(src|node_modules|@vite|@id|@react-refresh)/,\n        /\\.(css|ts|tsx|js|jsx|svg|png|jpg|gif|ico|woff2?|json|map)(\\?.*)?$/,\n      ],\n      injectClientScript: false,\n    }),\n  ],\n  define: {\n    \"import.meta.env.VITE_APP_VERSION\": JSON.stringify(executorPackage.version),\n    \"import.meta.env.VITE_GITHUB_URL\": JSON.stringify(githubUrl),\n  },\n  build: {\n    outDir: \"../dist\",\n    emptyOutDir: true,\n  },\n  server: {\n    port: 8788,\n  },\n});\n"
  },
  {
    "path": "compose.tracing.yaml",
    "content": "services:\n  jaeger:\n    image: jaegertracing/all-in-one:1.65.0\n    ports:\n      - \"16686:16686\"\n      - \"4317:4317\"\n      - \"4318:4318\"\n    environment:\n      COLLECTOR_OTLP_ENABLED: \"true\"\n"
  },
  {
    "path": "examples/mcp-elicitation-demo/CHANGELOG.md",
    "content": "# @executor/mcp-elicitation-demo\n\n## null\n"
  },
  {
    "path": "examples/mcp-elicitation-demo/package.json",
    "content": "{\n  \"name\": \"@executor/mcp-elicitation-demo\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"start\": \"bun src/main.ts\"\n  },\n  \"dependencies\": {\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "examples/mcp-elicitation-demo/src/index.ts",
    "content": "export {\n  startMcpElicitationDemoServer,\n  type McpElicitationDemoServer,\n} from \"./server\";\n"
  },
  {
    "path": "examples/mcp-elicitation-demo/src/main.ts",
    "content": "import { startMcpElicitationDemoServer } from \"./server\";\n\nconst host = process.env.HOST ?? \"127.0.0.1\";\nconst port = process.env.PORT ? Number(process.env.PORT) : 58506;\n\nconst server = await startMcpElicitationDemoServer({ host, port });\nconsole.error(`mcp-elicitation-demo listening on ${server.endpoint}`);\n\nconst shutdown = async () => {\n  await server.close();\n  process.exit(0);\n};\n\nprocess.once(\"SIGINT\", () => {\n  void shutdown();\n});\n\nprocess.once(\"SIGTERM\", () => {\n  void shutdown();\n});\n"
  },
  {
    "path": "examples/mcp-elicitation-demo/src/server.ts",
    "content": "import { randomUUID } from \"node:crypto\";\n\nimport { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { z } from \"zod/v4\";\n\nexport type McpElicitationDemoServer = {\n  readonly endpoint: string;\n  readonly close: () => Promise<void>;\n};\n\nconst registerDemoTools = (server: McpServer) => {\n  server.registerTool(\n    \"gated_echo\",\n    {\n      description: \"Ask for approval before echoing the provided value.\",\n      inputSchema: {\n        value: z.string(),\n      },\n    },\n    async ({ value }: { value: string }) => {\n      const response = await server.server.elicitInput({\n        mode: \"form\",\n        message: `Approve gated echo for ${value}?`,\n        requestedSchema: {\n          type: \"object\",\n          properties: {\n            approve: {\n              type: \"boolean\",\n              title: \"Approve\",\n            },\n          },\n          required: [\"approve\"],\n        },\n      });\n\n      if (\n        response.action !== \"accept\"\n        || !response.content\n        || response.content.approve !== true\n      ) {\n        return {\n          content: [{ type: \"text\", text: \"denied\" }],\n        };\n      }\n\n      return {\n        content: [{ type: \"text\", text: `approved:${value}` }],\n      };\n    },\n  );\n};\n\nexport const startMcpElicitationDemoServer = async (input: {\n  readonly host?: string;\n  readonly port?: number;\n} = {}): Promise<McpElicitationDemoServer> => {\n  const host = input.host ?? \"127.0.0.1\";\n  const app = createMcpExpressApp({ host });\n  const transports: Record<string, StreamableHTTPServerTransport> = {};\n  const servers: Record<string, McpServer> = {};\n\n  const createServer = () => {\n    const server = new McpServer(\n      {\n        name: \"executor-mcp-elicitation-demo\",\n        version: \"1.0.0\",\n      },\n      {\n        capabilities: {\n          tools: {},\n        },\n      },\n    );\n\n    registerDemoTools(server);\n    return server;\n  };\n\n  app.post(\"/mcp\", async (req: any, res: any) => {\n    const sessionIdHeader = req.headers[\"mcp-session-id\"];\n    const sessionId =\n      typeof sessionIdHeader === \"string\"\n        ? sessionIdHeader\n        : Array.isArray(sessionIdHeader)\n          ? sessionIdHeader[0]\n          : undefined;\n\n    try {\n      let transport: StreamableHTTPServerTransport;\n\n      if (sessionId && transports[sessionId]) {\n        transport = transports[sessionId];\n      } else {\n        transport = new StreamableHTTPServerTransport({\n          sessionIdGenerator: () => randomUUID(),\n          onsessioninitialized: (newSessionId) => {\n            transports[newSessionId] = transport;\n          },\n        });\n\n        transport.onclose = () => {\n          const closedSessionId = transport.sessionId;\n          if (closedSessionId && transports[closedSessionId]) {\n            delete transports[closedSessionId];\n          }\n          if (closedSessionId && servers[closedSessionId]) {\n            void servers[closedSessionId].close().catch(() => undefined);\n            delete servers[closedSessionId];\n          }\n        };\n\n        const server = createServer();\n        await server.connect(transport);\n        const newSessionId = transport.sessionId;\n        if (newSessionId) {\n          servers[newSessionId] = server;\n        }\n      }\n\n      await transport.handleRequest(req, res, req.body);\n    } catch (error) {\n      if (!res.headersSent) {\n        res.status(500).json({\n          jsonrpc: \"2.0\",\n          error: {\n            code: -32603,\n            message: error instanceof Error ? error.message : \"Internal server error\",\n          },\n          id: null,\n        });\n      }\n    }\n  });\n\n  app.get(\"/mcp\", async (req: any, res: any) => {\n    const sessionIdHeader = req.headers[\"mcp-session-id\"];\n    const sessionId =\n      typeof sessionIdHeader === \"string\"\n        ? sessionIdHeader\n        : Array.isArray(sessionIdHeader)\n          ? sessionIdHeader[0]\n          : undefined;\n\n    if (!sessionId || !transports[sessionId]) {\n      res.status(400).send(\"Invalid or missing session ID\");\n      return;\n    }\n\n    await transports[sessionId].handleRequest(req, res);\n  });\n\n  app.delete(\"/mcp\", async (req: any, res: any) => {\n    const sessionIdHeader = req.headers[\"mcp-session-id\"];\n    const sessionId =\n      typeof sessionIdHeader === \"string\"\n        ? sessionIdHeader\n        : Array.isArray(sessionIdHeader)\n          ? sessionIdHeader[0]\n          : undefined;\n\n    if (!sessionId || !transports[sessionId]) {\n      res.status(400).send(\"Invalid or missing session ID\");\n      return;\n    }\n\n    const transport = transports[sessionId];\n    await transport.handleRequest(req, res, req.body);\n    await transport.close();\n    delete transports[sessionId];\n\n    if (servers[sessionId]) {\n      await servers[sessionId].close().catch(() => undefined);\n      delete servers[sessionId];\n    }\n  });\n\n  const listener = await new Promise<import(\"node:http\").Server>((resolve, reject) => {\n    const server = app.listen(input.port ?? 0, host);\n\n    const onListening = () => {\n      server.off(\"error\", onError);\n      resolve(server);\n    };\n\n    const onError = (error: Error) => {\n      server.off(\"listening\", onListening);\n      reject(error);\n    };\n\n    server.once(\"listening\", onListening);\n    server.once(\"error\", onError);\n  });\n\n  const address = listener.address();\n  if (!address || typeof address === \"string\") {\n    if (listener.listening) {\n      await new Promise<void>((resolve, reject) => {\n        listener.close((error) => (error ? reject(error) : resolve()));\n      });\n    }\n    throw new Error(\"Failed to resolve MCP elicitation demo server address\");\n  }\n\n  return {\n    endpoint: `http://${host}:${address.port}/mcp`,\n    close: async () => {\n      for (const transport of Object.values(transports)) {\n        await transport.close().catch(() => undefined);\n      }\n\n      for (const server of Object.values(servers)) {\n        await server.close().catch(() => undefined);\n      }\n\n      await new Promise<void>((resolve, reject) => {\n        listener.close((error) => (error ? reject(error) : resolve()));\n      });\n    },\n  };\n};\n"
  },
  {
    "path": "examples/mcp-elicitation-demo/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/CHANGELOG.md",
    "content": "# @executor/serve-skills-via-mcp-demo\n\n## null\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/README.md",
    "content": "# Serve Skills Via MCP\n\nThis demo shows one practical way to distribute [Agent Skills](https://agentskills.io)\nover MCP resources.\n\nIt exposes:\n\n- a catalog resource that lists available skill bundles\n- one manifest resource per skill bundle\n- one direct `SKILL.md` resource per bundle\n- a `skill://demo/{skill}/{version}/{+path}` resource template for bundled files\n\nThe important boundary is that MCP resources only transport the bundle. The host still\nowns activation logic:\n\n1. list resources\n2. read the catalog or a manifest\n3. choose a skill\n4. read that skill's `SKILL.md`\n5. fetch additional files from the manifest on demand\n\n## Run\n\n```bash\nbun run --filter @executor/serve-skills-via-mcp-demo start\n```\n\nThe server listens on `http://127.0.0.1:<port>/mcp` and logs the final endpoint to\nstderr.\n\n## Smoke Test\n\n```bash\nbun run --filter @executor/serve-skills-via-mcp-demo smoke\n```\n\nThe smoke script starts the server, connects with an MCP client, lists resources,\nreads a skill manifest, then reads `SKILL.md` and one support file.\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/package.json",
    "content": "{\n  \"name\": \"@executor/serve-skills-via-mcp-demo\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"start\": \"bun src/main.ts\",\n    \"smoke\": \"bun src/smoke.ts\"\n  },\n  \"dependencies\": {\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/postgres-incident-triage/SKILL.md",
    "content": "---\nname: postgres-incident-triage\ndescription: Triage production PostgreSQL incidents involving lock contention, slow queries, or saturation. Use when the user asks for database incident diagnosis or immediate next steps.\ncompatibility: Assumes SQL access to pg_stat_activity and pg_locks.\nallowed-tools: Bash(psql:*) Read\n---\n\n# Postgres Incident Triage\n\n## When to use this skill\n\nUse this skill for live operational diagnosis of PostgreSQL incidents, especially when\nlatency spikes or blocked sessions appear.\n\n## Workflow\n\n1. Read `references/error-codes.md` for common failure patterns.\n2. Use `scripts/blocked-session-query.sql` to inspect blockers and waiters.\n3. Separate symptoms from root cause: CPU saturation, I/O pressure, lock chains, or\n   connection pileups.\n4. Recommend the least-destructive mitigation first.\n5. If proposing session termination, identify the blocker and expected blast radius.\n\n## Output rules\n\n- Summarize the current condition in one paragraph.\n- List the most likely root causes in order.\n- Provide immediate next commands before longer-term remediation.\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/postgres-incident-triage/references/error-codes.md",
    "content": "# Common PostgreSQL Incident Signals\n\n- `55P03` often points to lock contention or explicit lock timeouts.\n- `53300` indicates too many connections.\n- Long idle-in-transaction sessions are frequently the hidden blocker behind lock trees.\n- A high count of active queries is not enough to prove saturation; check wait events.\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/postgres-incident-triage/scripts/blocked-session-query.sql",
    "content": "select\n  blocked.pid as blocked_pid,\n  blocked.query as blocked_query,\n  blocking.pid as blocking_pid,\n  blocking.query as blocking_query,\n  blocked.wait_event_type,\n  blocked.wait_event\nfrom pg_stat_activity blocked\njoin pg_locks blocked_locks\n  on blocked.pid = blocked_locks.pid\njoin pg_locks blocking_locks\n  on blocked_locks.locktype = blocking_locks.locktype\n and blocked_locks.database is not distinct from blocking_locks.database\n and blocked_locks.relation is not distinct from blocking_locks.relation\n and blocked_locks.page is not distinct from blocking_locks.page\n and blocked_locks.tuple is not distinct from blocking_locks.tuple\n and blocked_locks.virtualxid is not distinct from blocking_locks.virtualxid\n and blocked_locks.transactionid is not distinct from blocking_locks.transactionid\n and blocked_locks.classid is not distinct from blocking_locks.classid\n and blocked_locks.objid is not distinct from blocking_locks.objid\n and blocked_locks.objsubid is not distinct from blocking_locks.objsubid\njoin pg_stat_activity blocking\n  on blocking.pid = blocking_locks.pid\nwhere not blocked_locks.granted\n  and blocking_locks.granted\n  and blocked.pid <> blocking.pid;\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/release-notes-writer/SKILL.md",
    "content": "---\nname: release-notes-writer\ndescription: Draft product release notes from commits, changelogs, and issue summaries. Use when the user asks for release notes, launch notes, or upgrade summaries.\ncompatibility: Requires markdown output and access to bundled templates.\nallowed-tools: Read Write\n---\n\n# Release Notes Writer\n\n## When to use this skill\n\nUse this skill when the user wants polished release notes, changelog summaries, or\ncustomer-facing upgrade notes.\n\n## Workflow\n\n1. Read the release template in `assets/release-template.md`.\n2. Read the voice and structure rules in `references/style-guide.md`.\n3. Group changes into user-facing themes instead of commit-by-commit narration.\n4. Prefer concrete impact statements over internal implementation details.\n5. Call out breaking changes, migrations, and feature flags explicitly.\n\n## Output rules\n\n- Start with a short overview paragraph.\n- Include sections only for categories that actually changed.\n- End with a short rollout or migration note when relevant.\n- Keep internal ticket IDs out of the final draft unless the user asked for them.\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/release-notes-writer/assets/release-template.md",
    "content": "# [Release Name]\n\n## Overview\n[Two to four sentences describing the release in user language.]\n\n## New\n- [New capability]\n\n## Improved\n- [Improvement]\n\n## Fixed\n- [Bug fix]\n\n## Upgrade Notes\n- [Migration or rollout note if needed]\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/release-notes-writer/references/style-guide.md",
    "content": "# Release Notes Style Guide\n\n- Write for product users first, operators second, engineers last.\n- Lead with outcomes: faster setup, clearer workflows, lower failure rates.\n- Replace vague claims like \"enhanced performance\" with specific behavior changes.\n- Mention removals and breaking changes directly instead of hiding them in \"Improved\".\n- Keep bullets parallel and concrete.\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/skills/release-notes-writer/scripts/validate-headings.ts",
    "content": "const requiredHeadings = [\n  \"## Overview\",\n  \"## New\",\n  \"## Improved\",\n  \"## Fixed\",\n];\n\nfor (const heading of requiredHeadings) {\n  console.log(`Expect heading: ${heading}`);\n}\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/src/catalog.ts",
    "content": "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { extname, join, posix, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nexport type SkillFrontmatter = {\n  readonly name: string;\n  readonly description: string;\n  readonly compatibility?: string;\n  readonly license?: string;\n  readonly allowedTools?: string;\n};\n\nexport type DistributedSkillFile = {\n  readonly path: string;\n  readonly uri: string;\n  readonly mimeType: string;\n  readonly size: number;\n  readonly role: \"instructions\" | \"script\" | \"reference\" | \"asset\" | \"other\";\n};\n\nexport type SkillManifest = {\n  readonly kind: \"agent-skill-distribution\";\n  readonly publisher: string;\n  readonly version: string;\n  readonly skill: SkillFrontmatter;\n  readonly instructionsUri: string;\n  readonly manifestUri: string;\n  readonly fileTemplate: string;\n  readonly files: readonly DistributedSkillFile[];\n};\n\nexport type DistributedSkillBundle = {\n  readonly publisher: string;\n  readonly version: string;\n  readonly rootDir: string;\n  readonly skill: SkillFrontmatter;\n  readonly manifestUri: string;\n  readonly instructionsUri: string;\n  readonly fileTemplate: string;\n  readonly files: readonly DistributedSkillFile[];\n  readonly manifest: SkillManifest;\n};\n\nconst demoPublisher = \"demo\";\nconst catalogUri = \"skill://catalog/index.json\";\nconst fileTemplate = \"skill://demo/{skill}/{version}/{+path}\";\n\nconst bundleVersions = {\n  \"postgres-incident-triage\": \"1.1.0\",\n  \"release-notes-writer\": \"1.0.0\",\n} as const;\n\nconst skillsDir = fileURLToPath(new URL(\"../skills\", import.meta.url));\n\nconst mimeTypeFor = (filePath: string): string => {\n  switch (extname(filePath)) {\n    case \".json\":\n      return \"application/json\";\n    case \".md\":\n      return \"text/markdown\";\n    case \".sql\":\n      return \"application/sql\";\n    case \".ts\":\n      return \"text/typescript\";\n    default:\n      return \"text/plain\";\n  }\n};\n\nconst roleFor = (filePath: string): DistributedSkillFile[\"role\"] => {\n  if (filePath === \"SKILL.md\") {\n    return \"instructions\";\n  }\n  if (filePath.startsWith(\"scripts/\")) {\n    return \"script\";\n  }\n  if (filePath.startsWith(\"references/\")) {\n    return \"reference\";\n  }\n  if (filePath.startsWith(\"assets/\")) {\n    return \"asset\";\n  }\n  return \"other\";\n};\n\nconst parseFrontmatter = (content: string): SkillFrontmatter => {\n  const match = /^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?/u.exec(content);\n  if (!match) {\n    throw new Error(\"Expected SKILL.md to start with YAML frontmatter\");\n  }\n\n  const fields: Record<string, string> = {};\n  for (const line of match[1].split(/\\r?\\n/u)) {\n    const trimmed = line.trim();\n    if (trimmed.length === 0 || trimmed.startsWith(\"#\")) {\n      continue;\n    }\n\n    const entry = /^([A-Za-z0-9-]+):\\s*(.+)$/u.exec(trimmed);\n    if (!entry) {\n      continue;\n    }\n\n    fields[entry[1]] = entry[2];\n  }\n\n  if (!fields.name || !fields.description) {\n    throw new Error(\"Expected SKILL.md frontmatter to include name and description\");\n  }\n\n  return {\n    name: fields.name,\n    description: fields.description,\n    compatibility: fields.compatibility,\n    license: fields.license,\n    allowedTools: fields[\"allowed-tools\"],\n  };\n};\n\nconst collectFiles = async (rootDir: string): Promise<string[]> => {\n  const output: string[] = [];\n\n  const visit = async (directory: string) => {\n    const entries = await readdir(directory, { withFileTypes: true });\n    entries.sort((left, right) => left.name.localeCompare(right.name));\n\n    for (const entry of entries) {\n      const absolutePath = join(directory, entry.name);\n      if (entry.isDirectory()) {\n        await visit(absolutePath);\n        continue;\n      }\n      output.push(posix.join(...relative(rootDir, absolutePath).split(\"\\\\\").filter(Boolean)));\n    }\n  };\n\n  await visit(rootDir);\n  return output;\n};\n\nexport const getCatalogUri = (): string => catalogUri;\n\nexport const getFileTemplate = (): string => fileTemplate;\n\nexport const loadDistributedSkillBundles = async (): Promise<readonly DistributedSkillBundle[]> => {\n  const bundles = await Promise.all(\n    Object.entries(bundleVersions).map(async ([directoryName, version]) => {\n      const rootDir = join(skillsDir, directoryName);\n      const skillContent = await readFile(join(rootDir, \"SKILL.md\"), \"utf8\");\n      const skill = parseFrontmatter(skillContent);\n      const files = await collectFiles(rootDir);\n\n      const distributedFiles = await Promise.all(\n        files.map(async (filePath) => {\n          const absolutePath = join(rootDir, filePath);\n          const fileStats = await stat(absolutePath);\n          return {\n            path: filePath,\n            uri: `skill://${demoPublisher}/${skill.name}/${version}/${filePath}`,\n            mimeType: mimeTypeFor(filePath),\n            size: fileStats.size,\n            role: roleFor(filePath),\n          } satisfies DistributedSkillFile;\n        }),\n      );\n\n      const manifestUri = `skill://${demoPublisher}/${skill.name}/${version}/manifest.json`;\n      const instructionsUri = `skill://${demoPublisher}/${skill.name}/${version}/SKILL.md`;\n\n      const manifest: SkillManifest = {\n        kind: \"agent-skill-distribution\",\n        publisher: demoPublisher,\n        version,\n        skill,\n        instructionsUri,\n        manifestUri,\n        fileTemplate,\n        files: distributedFiles,\n      };\n\n      return {\n        publisher: demoPublisher,\n        version,\n        rootDir,\n        skill,\n        manifestUri,\n        instructionsUri,\n        fileTemplate,\n        files: distributedFiles,\n        manifest,\n      } satisfies DistributedSkillBundle;\n    }),\n  );\n\n  return bundles.sort((left, right) => left.skill.name.localeCompare(right.skill.name));\n};\n\nexport const renderCatalog = (bundles: readonly DistributedSkillBundle[]): string =>\n  JSON.stringify(\n    {\n      kind: \"agent-skill-catalog\",\n      distributionMethod: \"mcp-resources\",\n      catalogUri,\n      fileTemplate,\n      activationGuidance: [\n        \"Use this catalog for discovery only.\",\n        \"Read a skill manifest next to find the concrete SKILL.md URI.\",\n        \"Load SKILL.md into the model only when the task matches the skill description.\",\n        \"Fetch support files from the manifest on demand.\",\n      ],\n      skills: bundles.map((bundle) => ({\n        name: bundle.skill.name,\n        description: bundle.skill.description,\n        version: bundle.version,\n        manifestUri: bundle.manifestUri,\n        instructionsUri: bundle.instructionsUri,\n      })),\n    },\n    null,\n    2,\n  );\n\nexport const findBundleByName = (\n  bundles: readonly DistributedSkillBundle[],\n  skillName: string,\n): DistributedSkillBundle | undefined =>\n  bundles.find((bundle) => bundle.skill.name === skillName);\n\nexport const findBundleFile = (\n  bundles: readonly DistributedSkillBundle[],\n  skillName: string,\n  version: string,\n  filePath: string,\n): DistributedSkillFile | undefined =>\n  bundles\n    .find((bundle) => bundle.skill.name === skillName && bundle.version === version)\n    ?.files.find((file) => file.path === filePath);\n\nexport const readBundleFileText = async (\n  bundle: DistributedSkillBundle,\n  filePath: string,\n): Promise<string> =>\n  readFile(join(bundle.rootDir, filePath), \"utf8\");\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/src/index.ts",
    "content": "export {\n  startServeSkillsViaMcpDemoServer,\n  type ServeSkillsViaMcpDemoServer,\n} from \"./server\";\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/src/main.ts",
    "content": "import { startServeSkillsViaMcpDemoServer } from \"./server\";\n\nconst host = process.env.HOST ?? \"127.0.0.1\";\nconst port = process.env.PORT ? Number(process.env.PORT) : 58507;\n\nconst server = await startServeSkillsViaMcpDemoServer({ host, port });\nconsole.error(`serve-skills-via-mcp listening on ${server.endpoint}`);\n\nconst shutdown = async () => {\n  await server.close();\n  process.exit(0);\n};\n\nprocess.once(\"SIGINT\", () => {\n  void shutdown();\n});\n\nprocess.once(\"SIGTERM\", () => {\n  void shutdown();\n});\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/src/server.ts",
    "content": "import { randomUUID } from \"node:crypto\";\nimport type { Server as HttpServer } from \"node:http\";\n\nimport { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport { McpServer, ResourceTemplate } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\n\nimport {\n  type DistributedSkillBundle,\n  findBundleByName,\n  findBundleFile,\n  getCatalogUri,\n  getFileTemplate,\n  loadDistributedSkillBundles,\n  readBundleFileText,\n  renderCatalog,\n} from \"./catalog\";\n\nexport type ServeSkillsViaMcpDemoServer = {\n  readonly endpoint: string;\n  readonly close: () => Promise<void>;\n};\n\nconst registerSkillResources = (\n  server: McpServer,\n  bundles: readonly DistributedSkillBundle[],\n) => {\n  server.registerResource(\n    \"skill-catalog\",\n    getCatalogUri(),\n    {\n      title: \"Distributed Agent Skills Catalog\",\n      description: \"Catalog of skill bundles exposed over MCP resources.\",\n      mimeType: \"application/json\",\n      annotations: {\n        audience: [\"assistant\", \"user\"],\n        priority: 0.7,\n      },\n    },\n    async () => ({\n      contents: [\n        {\n          uri: getCatalogUri(),\n          mimeType: \"application/json\",\n          text: renderCatalog(bundles),\n        },\n      ],\n    }),\n  );\n\n  for (const bundle of bundles) {\n    server.registerResource(\n      `${bundle.skill.name}-manifest`,\n      bundle.manifestUri,\n      {\n        title: `${bundle.skill.name} manifest`,\n        description: `Distribution manifest for ${bundle.skill.name}.`,\n        mimeType: \"application/json\",\n        annotations: {\n          audience: [\"assistant\"],\n          priority: 0.85,\n        },\n      },\n      async () => ({\n        contents: [\n          {\n            uri: bundle.manifestUri,\n            mimeType: \"application/json\",\n            text: JSON.stringify(bundle.manifest, null, 2),\n          },\n        ],\n      }),\n    );\n\n    server.registerResource(\n      `${bundle.skill.name}-instructions`,\n      bundle.instructionsUri,\n      {\n        title: `${bundle.skill.name} SKILL.md`,\n        description: bundle.skill.description,\n        mimeType: \"text/markdown\",\n        annotations: {\n          audience: [\"assistant\"],\n          priority: 1,\n        },\n      },\n      async () => ({\n        contents: [\n          {\n            uri: bundle.instructionsUri,\n            mimeType: \"text/markdown\",\n            text: await readBundleFileText(bundle, \"SKILL.md\"),\n          },\n        ],\n      }),\n    );\n  }\n\n  server.registerResource(\n    \"skill-bundle-file\",\n    new ResourceTemplate(getFileTemplate(), {\n      list: undefined,\n      complete: {\n        skill: (value) =>\n          bundles\n            .map((bundle) => bundle.skill.name)\n            .filter((skillName) => skillName.startsWith(value)),\n        version: (value, context) => {\n          const skillName = context?.arguments?.skill;\n          if (!skillName) {\n            return bundles\n              .map((bundle) => bundle.version)\n              .filter((version) => version.startsWith(value));\n          }\n\n          const bundle = findBundleByName(bundles, skillName);\n          if (!bundle) {\n            return [];\n          }\n\n          return bundle.version.startsWith(value) ? [bundle.version] : [];\n        },\n        path: (value, context) => {\n          const skillName = context?.arguments?.skill;\n          const version = context?.arguments?.version;\n          if (!skillName || !version) {\n            return [];\n          }\n\n          const bundle = bundles.find((entry) =>\n            entry.skill.name === skillName && entry.version === version\n          );\n          if (!bundle) {\n            return [];\n          }\n\n          return bundle.files\n            .map((file) => file.path)\n            .filter((filePath) => filePath.startsWith(value));\n        },\n      },\n    }),\n    {\n      title: \"Skill bundle files\",\n      description: \"Read any file inside a distributed skill bundle.\",\n      mimeType: \"text/plain\",\n      annotations: {\n        audience: [\"assistant\"],\n        priority: 0.5,\n      },\n    },\n    async (_uri, variables) => {\n      const skillName = typeof variables.skill === \"string\" ? variables.skill : undefined;\n      const version = typeof variables.version === \"string\" ? variables.version : undefined;\n      const filePath = typeof variables.path === \"string\" ? variables.path : undefined;\n\n      if (!skillName || !version || !filePath) {\n        throw new Error(\"Expected skill, version, and path variables\");\n      }\n\n      const bundle = bundles.find((entry) =>\n        entry.skill.name === skillName && entry.version === version\n      );\n      const file = findBundleFile(bundles, skillName, version, filePath);\n      if (!bundle || !file) {\n        throw new Error(`Unknown distributed skill file: ${skillName}@${version}/${filePath}`);\n      }\n\n      return {\n        contents: [\n          {\n            uri: file.uri,\n            mimeType: file.mimeType,\n            text: await readBundleFileText(bundle, filePath),\n          },\n        ],\n      };\n    },\n  );\n};\n\nconst createSessionServer = (bundles: readonly DistributedSkillBundle[]): McpServer => {\n  const server = new McpServer(\n    {\n      name: \"executor-serve-skills-via-mcp-demo\",\n      version: \"1.0.0\",\n    },\n    {\n      capabilities: {\n        resources: {\n          listChanged: true,\n        },\n      },\n      instructions: [\n        \"This server demonstrates one way to distribute Agent Skills over MCP resources.\",\n        \"Read the catalog and a skill manifest first, then load SKILL.md only when you decide to activate that skill.\",\n      ].join(\" \"),\n    },\n  );\n\n  registerSkillResources(server, bundles);\n  return server;\n};\n\nconst resolveSessionId = (headers: Record<string, string | string[] | undefined>): string | undefined => {\n  const value = headers[\"mcp-session-id\"];\n  if (typeof value === \"string\") {\n    return value;\n  }\n  if (Array.isArray(value)) {\n    return value[0];\n  }\n  return undefined;\n};\n\nconst listen = async (app: ReturnType<typeof createMcpExpressApp>, port: number, host: string) =>\n  new Promise<HttpServer>((resolve, reject) => {\n    const listener = app.listen(port, host);\n\n    const onListening = () => {\n      listener.off(\"error\", onError);\n      resolve(listener);\n    };\n\n    const onError = (error: Error) => {\n      listener.off(\"listening\", onListening);\n      reject(error);\n    };\n\n    listener.once(\"listening\", onListening);\n    listener.once(\"error\", onError);\n  });\n\nexport const startServeSkillsViaMcpDemoServer = async (input: {\n  readonly host?: string;\n  readonly port?: number;\n} = {}): Promise<ServeSkillsViaMcpDemoServer> => {\n  const host = input.host ?? \"127.0.0.1\";\n  const bundles = await loadDistributedSkillBundles();\n  const app = createMcpExpressApp({ host });\n  const transports: Record<string, StreamableHTTPServerTransport> = {};\n  const servers: Record<string, McpServer> = {};\n\n  app.post(\"/mcp\", async (req: any, res: any) => {\n    const sessionId = resolveSessionId(req.headers);\n\n    try {\n      let transport: StreamableHTTPServerTransport;\n\n      if (sessionId && transports[sessionId]) {\n        transport = transports[sessionId];\n      } else {\n        transport = new StreamableHTTPServerTransport({\n          sessionIdGenerator: () => randomUUID(),\n          onsessioninitialized: (newSessionId) => {\n            transports[newSessionId] = transport;\n          },\n        });\n\n        transport.onclose = () => {\n          const closedSessionId = transport.sessionId;\n          if (closedSessionId && transports[closedSessionId]) {\n            delete transports[closedSessionId];\n          }\n          if (closedSessionId && servers[closedSessionId]) {\n            void servers[closedSessionId].close().catch(() => undefined);\n            delete servers[closedSessionId];\n          }\n        };\n\n        const server = createSessionServer(bundles);\n        await server.connect(transport);\n        if (transport.sessionId) {\n          servers[transport.sessionId] = server;\n        }\n      }\n\n      await transport.handleRequest(req, res, req.body);\n    } catch (error) {\n      if (!res.headersSent) {\n        res.status(500).json({\n          jsonrpc: \"2.0\",\n          error: {\n            code: -32603,\n            message: error instanceof Error ? error.message : \"Internal server error\",\n          },\n          id: null,\n        });\n      }\n    }\n  });\n\n  app.get(\"/mcp\", async (req: any, res: any) => {\n    const sessionId = resolveSessionId(req.headers);\n    if (!sessionId || !transports[sessionId]) {\n      res.status(400).send(\"Invalid or missing session ID\");\n      return;\n    }\n\n    await transports[sessionId].handleRequest(req, res);\n  });\n\n  app.delete(\"/mcp\", async (req: any, res: any) => {\n    const sessionId = resolveSessionId(req.headers);\n    if (!sessionId || !transports[sessionId]) {\n      res.status(400).send(\"Invalid or missing session ID\");\n      return;\n    }\n\n    const transport = transports[sessionId];\n    await transport.handleRequest(req, res, req.body);\n    await transport.close();\n    delete transports[sessionId];\n\n    if (servers[sessionId]) {\n      await servers[sessionId].close().catch(() => undefined);\n      delete servers[sessionId];\n    }\n  });\n\n  const listener = await listen(app, input.port ?? 0, host);\n  const address = listener.address();\n  if (!address || typeof address === \"string\") {\n    await new Promise<void>((resolve, reject) => {\n      listener.close((error) => (error ? reject(error) : resolve()));\n    });\n    throw new Error(\"Failed to resolve serve-skills-via-mcp demo address\");\n  }\n\n  return {\n    endpoint: `http://${host}:${address.port}/mcp`,\n    close: async () => {\n      for (const transport of Object.values(transports)) {\n        await transport.close().catch(() => undefined);\n      }\n\n      for (const server of Object.values(servers)) {\n        await server.close().catch(() => undefined);\n      }\n\n      await new Promise<void>((resolve, reject) => {\n        listener.close((error) => (error ? reject(error) : resolve()));\n      });\n    },\n  };\n};\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/src/smoke.ts",
    "content": "import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n\nimport { startServeSkillsViaMcpDemoServer } from \"./server\";\n\nconst server = await startServeSkillsViaMcpDemoServer();\nconst client = new Client({\n  name: \"serve-skills-via-mcp-smoke\",\n  version: \"1.0.0\",\n});\nconst transport = new StreamableHTTPClientTransport(new URL(server.endpoint));\n\ntry {\n  await client.connect(transport);\n\n  const resources = await client.listResources();\n  console.log(`resources: ${resources.resources.length}`);\n  for (const resource of resources.resources) {\n    console.log(`- ${resource.uri}`);\n  }\n\n  const templates = await client.listResourceTemplates();\n  console.log(`resourceTemplates: ${templates.resourceTemplates.length}`);\n  for (const template of templates.resourceTemplates) {\n    console.log(`- ${template.uriTemplate}`);\n  }\n\n  const catalog = await client.readResource({ uri: \"skill://catalog/index.json\" });\n  const catalogText = \"text\" in catalog.contents[0]! ? catalog.contents[0]!.text : \"\";\n  const parsedCatalog = JSON.parse(catalogText) as {\n    readonly skills: ReadonlyArray<{\n      readonly name: string;\n      readonly manifestUri: string;\n      readonly instructionsUri: string;\n    }>;\n  };\n\n  const selectedSkill = parsedCatalog.skills[0]!;\n  console.log(`selectedSkill: ${selectedSkill.name}`);\n\n  const manifest = await client.readResource({ uri: selectedSkill.manifestUri });\n  const manifestText = \"text\" in manifest.contents[0]! ? manifest.contents[0]!.text : \"\";\n  const parsedManifest = JSON.parse(manifestText) as {\n    readonly instructionsUri: string;\n    readonly files: ReadonlyArray<{\n      readonly path: string;\n      readonly uri: string;\n      readonly role: string;\n    }>;\n  };\n\n  const instructions = await client.readResource({ uri: parsedManifest.instructionsUri });\n  const instructionsText = \"text\" in instructions.contents[0]! ? instructions.contents[0]!.text : \"\";\n  console.log(`instructionsPreview: ${instructionsText.split(\"\\n\").slice(0, 6).join(\"\\n\")}`);\n\n  const supportFile = parsedManifest.files.find((file) => file.role !== \"instructions\");\n  if (supportFile) {\n    const support = await client.readResource({ uri: supportFile.uri });\n    const supportText = \"text\" in support.contents[0]! ? support.contents[0]!.text : \"\";\n    console.log(`supportFile: ${supportFile.path}`);\n    console.log(`supportPreview: ${supportText.split(\"\\n\").slice(0, 4).join(\"\\n\")}`);\n  }\n} finally {\n  await client.close().catch(() => undefined);\n  await transport.close().catch(() => undefined);\n  await server.close().catch(() => undefined);\n}\n"
  },
  {
    "path": "examples/serve-skills-via-mcp/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "knip.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/knip@5/schema.json\",\n  \"exclude\": [\n    \"duplicates\"\n  ],\n  \"ignoreIssues\": {\n    \"packages/sources/openapi/src/openapi-extractor-wasm/openapi_extractor.js\": [\n      \"exports\"\n    ]\n  },\n  \"workspaces\": {\n    \".\": {\n      \"entry\": [],\n      \"project\": []\n    },\n    \"apps/*\": {\n      \"entry\": [\n        \"src/index.ts\",\n        \"src/main.ts\",\n        \"src/server.ts\",\n        \"src/cli/main.ts\"\n      ],\n      \"project\": [\n        \"src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}\"\n      ]\n    },\n    \"examples/*\": {\n      \"entry\": [\n        \"src/index.ts\",\n        \"src/main.ts\",\n        \"src/server.ts\",\n        \"src/smoke.ts\"\n      ],\n      \"project\": [\n        \"src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}\"\n      ]\n    },\n    \"packages/*/*\": {\n      \"entry\": [\n        \"src/index.ts\",\n        \"src/main.ts\",\n        \"src/playground.ts\"\n      ],\n      \"project\": [\n        \"src/**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}\"\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "opencode.json",
    "content": "{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"executor\": {\n      \"type\": \"remote\",\n      \"url\": \"http://localhost:8788/mcp\",\n      \"enabled\": true\n    }\n  }\n}"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"executor\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"packageManager\": \"bun@1.2.22\",\n  \"workspaces\": [\n    \"packages/*/*\",\n    \"apps/*\",\n    \"examples/*\",\n    \"apps/docs\"\n  ],\n  \"catalog\": {\n    \"@effect/cli\": \"^0.73.2\",\n    \"@effect/platform\": \"^0.94.5\",\n    \"@effect/platform-node\": \"^0.104.1\",\n    \"@effect/vitest\": \"^0.27.0\",\n    \"@types/node\": \"^24.3.1\",\n    \"bun-types\": \"^1.2.22\",\n    \"effect\": \"^3.19.19\",\n    \"vitest\": \"^3.2.4\",\n    \"zod\": \"^4.3.6\"\n  },\n  \"scripts\": {\n    \"dev\": \"turbo run dev\",\n    \"trace:up\": \"docker compose -f compose.tracing.yaml up -d\",\n    \"trace:down\": \"docker compose -f compose.tracing.yaml down\",\n    \"docs:dev\": \"turbo run dev --filter=@executor/docs\",\n    \"lint\": \"oxlint -c .oxlintrc.jsonc . --deny-warnings\",\n    \"lint:fix\": \"oxlint -c .oxlintrc.jsonc --fix .\",\n    \"test\": \"turbo run test\",\n    \"executor\": \"./apps/executor/bin/executor\",\n    \"changeset\": \"changeset\",\n    \"changeset:version\": \"changeset version\",\n    \"release:pre:enter\": \"changeset pre enter beta\",\n    \"release:pre:exit\": \"changeset pre exit\",\n    \"release:beta:start\": \"changeset pre enter beta\",\n    \"release:beta:stop\": \"changeset pre exit\",\n    \"fixture:release:capture\": \"bun run --cwd packages/platform/control-plane fixture:release:capture\",\n    \"typecheck\": \"bun run --filter='*' typecheck\",\n    \"knip\": \"knip\"\n  },\n  \"devDependencies\": {\n    \"@changesets/cli\": \"^2.30.0\",\n    \"@oxlint/plugins\": \"^1.56.0\",\n    \"knip\": \"^5.85.0\",\n    \"oxlint\": \"^1.56.0\",\n    \"turbo\": \"^2.5.6\",\n    \"typescript\": \"^5.9.3\"\n  }\n}\n"
  },
  {
    "path": "packages/auth/mcp-oauth/package.json",
    "content": "{\n  \"name\": \"@executor/auth-mcp-oauth\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/auth/mcp-oauth/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class McpOAuthEffectError extends Data.TaggedError(\n  \"McpOAuthEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const mcpOAuthEffectError = (\n  module: string,\n  message: string,\n) => new McpOAuthEffectError({ module, message });\n"
  },
  {
    "path": "packages/auth/mcp-oauth/src/index.ts",
    "content": "import {\n  auth,\n  type OAuthClientProvider,\n  type OAuthDiscoveryState,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type {\n  OAuthClientInformationMixed,\n  OAuthTokens,\n} from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport * as Effect from \"effect/Effect\";\nimport { mcpOAuthEffectError } from \"./effect-errors\";\n\ntype JsonValue =\n  | string\n  | number\n  | boolean\n  | null\n  | JsonObject\n  | ReadonlyArray<JsonValue>;\n\nexport type JsonObject = {\n  readonly [key: string]: JsonValue;\n};\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst toJsonObject = (value: unknown): JsonObject | null =>\n  value !== null && value !== undefined && typeof value === \"object\" && !Array.isArray(value)\n    ? value as JsonObject\n    : null;\n\nconst createClientMetadata = (redirectUrl: string) => ({\n  redirect_uris: [redirectUrl],\n  grant_types: [\"authorization_code\", \"refresh_token\"],\n  response_types: [\"code\"],\n  token_endpoint_auth_method: \"none\",\n  client_name: \"Executor Local\",\n});\n\nexport type McpOAuthStartResult = {\n  authorizationUrl: string;\n  codeVerifier: string;\n  resourceMetadataUrl: string | null;\n  authorizationServerUrl: string | null;\n  resourceMetadata: JsonObject | null;\n  authorizationServerMetadata: JsonObject | null;\n  clientInformation: JsonObject | null;\n};\n\nexport type McpOAuthSession = {\n  endpoint: string;\n  redirectUrl: string;\n  codeVerifier: string;\n  resourceMetadataUrl: string | null;\n  authorizationServerUrl: string | null;\n  resourceMetadata: JsonObject | null;\n  authorizationServerMetadata: JsonObject | null;\n  clientInformation: JsonObject | null;\n};\n\nexport type McpOAuthExchangeResult = {\n  tokens: OAuthTokens;\n  resourceMetadataUrl: string | null;\n  authorizationServerUrl: string | null;\n  resourceMetadata: JsonObject | null;\n  authorizationServerMetadata: JsonObject | null;\n  clientInformation: JsonObject | null;\n};\n\nexport const startMcpOAuthAuthorization = (input: {\n  endpoint: string;\n  redirectUrl: string;\n  state: string;\n}): Effect.Effect<McpOAuthStartResult, Error, never> =>\n  Effect.gen(function* () {\n    const captured: {\n      authorizationUrl?: URL;\n      codeVerifier?: string;\n      discoveryState?: OAuthDiscoveryState;\n      clientInformation?: OAuthClientInformationMixed;\n    } = {};\n\n    const provider: OAuthClientProvider = {\n      get redirectUrl() {\n        return input.redirectUrl;\n      },\n      get clientMetadata() {\n        return createClientMetadata(input.redirectUrl);\n      },\n      state: () => input.state,\n      clientInformation: () => captured.clientInformation,\n      saveClientInformation: (clientInformation) => {\n        captured.clientInformation = clientInformation;\n      },\n      tokens: () => undefined,\n      saveTokens: () => undefined,\n      redirectToAuthorization: (authorizationUrl) => {\n        captured.authorizationUrl = authorizationUrl;\n      },\n      saveCodeVerifier: (codeVerifier) => {\n        captured.codeVerifier = codeVerifier;\n      },\n      codeVerifier: () => {\n        if (!captured.codeVerifier) {\n          throw new Error(\"OAuth code verifier was not captured\");\n        }\n\n        return captured.codeVerifier;\n      },\n      saveDiscoveryState: (state) => {\n        captured.discoveryState = state;\n      },\n      discoveryState: () => captured.discoveryState,\n    };\n\n    const result = yield* Effect.tryPromise({\n      try: () =>\n        auth(provider, {\n          serverUrl: input.endpoint,\n        }),\n      catch: toError,\n    });\n\n    if (result !== \"REDIRECT\" || !captured.authorizationUrl || !captured.codeVerifier) {\n      return yield* mcpOAuthEffectError(\"index\", \"OAuth flow did not produce an authorization redirect\");\n    }\n\n    return {\n      authorizationUrl: captured.authorizationUrl.toString(),\n      codeVerifier: captured.codeVerifier,\n      resourceMetadataUrl: captured.discoveryState?.resourceMetadataUrl ?? null,\n      authorizationServerUrl: captured.discoveryState?.authorizationServerUrl ?? null,\n      resourceMetadata: toJsonObject(captured.discoveryState?.resourceMetadata),\n      authorizationServerMetadata: toJsonObject(\n        captured.discoveryState?.authorizationServerMetadata,\n      ),\n      clientInformation: toJsonObject(captured.clientInformation),\n    } satisfies McpOAuthStartResult;\n  });\n\nexport const exchangeMcpOAuthAuthorizationCode = (input: {\n  session: McpOAuthSession;\n  code: string;\n}): Effect.Effect<McpOAuthExchangeResult, Error, never> =>\n  Effect.gen(function* () {\n    const captured: {\n      tokens?: OAuthTokens;\n      discoveryState?: OAuthDiscoveryState;\n      clientInformation?: OAuthClientInformationMixed;\n    } = {\n      discoveryState: {\n        authorizationServerUrl:\n          input.session.authorizationServerUrl ?? new URL(\"/\", input.session.endpoint).toString(),\n        resourceMetadataUrl: input.session.resourceMetadataUrl ?? undefined,\n        resourceMetadata: input.session.resourceMetadata as OAuthDiscoveryState[\"resourceMetadata\"],\n        authorizationServerMetadata:\n          input.session.authorizationServerMetadata as OAuthDiscoveryState[\"authorizationServerMetadata\"],\n      },\n      clientInformation: input.session.clientInformation as OAuthClientInformationMixed | undefined,\n    };\n\n    const provider: OAuthClientProvider = {\n      get redirectUrl() {\n        return input.session.redirectUrl;\n      },\n      get clientMetadata() {\n        return createClientMetadata(input.session.redirectUrl);\n      },\n      clientInformation: () => captured.clientInformation,\n      saveClientInformation: (clientInformation) => {\n        captured.clientInformation = clientInformation;\n      },\n      tokens: () => undefined,\n      saveTokens: (tokens) => {\n        captured.tokens = tokens;\n      },\n      redirectToAuthorization: () => {\n        throw new Error(\"Unexpected redirect while completing MCP OAuth\");\n      },\n      saveCodeVerifier: () => undefined,\n      codeVerifier: () => input.session.codeVerifier,\n      saveDiscoveryState: (state) => {\n        captured.discoveryState = state;\n      },\n      discoveryState: () => captured.discoveryState,\n    };\n\n    const result = yield* Effect.tryPromise({\n      try: () =>\n        auth(provider, {\n          serverUrl: input.session.endpoint,\n          authorizationCode: input.code,\n        }),\n      catch: toError,\n    });\n\n    if (result !== \"AUTHORIZED\" || !captured.tokens) {\n      return yield* mcpOAuthEffectError(\"index\", \"OAuth redirect did not complete MCP OAuth setup\");\n    }\n\n    return {\n      tokens: captured.tokens,\n      resourceMetadataUrl: captured.discoveryState?.resourceMetadataUrl ?? null,\n      authorizationServerUrl: captured.discoveryState?.authorizationServerUrl ?? null,\n      resourceMetadata: toJsonObject(captured.discoveryState?.resourceMetadata),\n      authorizationServerMetadata: toJsonObject(\n        captured.discoveryState?.authorizationServerMetadata,\n      ),\n      clientInformation: toJsonObject(captured.clientInformation),\n    } satisfies McpOAuthExchangeResult;\n  });\n"
  },
  {
    "path": "packages/auth/mcp-oauth/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.d.ts\"\n  ],\n  \"exclude\": [\n    \"src/**/*.test.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/auth/oauth2/package.json",
    "content": "{\n  \"name\": \"@executor/auth-oauth2\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/auth/oauth2/src/index.ts",
    "content": "import { createHash, randomBytes } from \"node:crypto\";\n\nimport * as Effect from \"effect/Effect\";\n\nexport type OAuth2TokenResponse = {\n  access_token: string;\n  token_type?: string;\n  refresh_token?: string;\n  expires_in?: number;\n  scope?: string;\n};\n\nexport type OAuth2ClientAuthenticationMethod =\n  | \"none\"\n  | \"client_secret_post\";\n\nconst encodeBase64Url = (input: Buffer): string =>\n  input.toString(\"base64\")\n    .replaceAll(\"+\", \"-\")\n    .replaceAll(\"/\", \"_\")\n    .replaceAll(\"=\", \"\");\n\nexport const createPkceCodeVerifier = (): string =>\n  encodeBase64Url(randomBytes(48));\n\nexport const createPkceCodeChallenge = (verifier: string): string =>\n  encodeBase64Url(createHash(\"sha256\").update(verifier).digest());\n\nexport const buildOAuth2AuthorizationUrl = (input: {\n  authorizationEndpoint: string;\n  clientId: string;\n  redirectUri: string;\n  scopes: ReadonlyArray<string>;\n  state: string;\n  codeVerifier: string;\n  extraParams?: Readonly<Record<string, string>>;\n}): string => {\n  const url = new URL(input.authorizationEndpoint);\n  url.searchParams.set(\"client_id\", input.clientId);\n  url.searchParams.set(\"redirect_uri\", input.redirectUri);\n  url.searchParams.set(\"response_type\", \"code\");\n  url.searchParams.set(\"scope\", input.scopes.join(\" \"));\n  url.searchParams.set(\"state\", input.state);\n  url.searchParams.set(\"code_challenge_method\", \"S256\");\n  url.searchParams.set(\"code_challenge\", createPkceCodeChallenge(input.codeVerifier));\n\n  for (const [key, value] of Object.entries(input.extraParams ?? {})) {\n    url.searchParams.set(key, value);\n  }\n\n  return url.toString();\n};\n\nconst parseOAuth2TokenResponse = async (response: Response): Promise<OAuth2TokenResponse> => {\n  const rawText = await response.text();\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(rawText);\n  } catch {\n    throw new Error(`OAuth token endpoint returned non-JSON response (${response.status})`);\n  }\n\n  if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n    throw new Error(`OAuth token endpoint returned invalid JSON payload (${response.status})`);\n  }\n\n  const record = parsed as Record<string, unknown>;\n  const accessToken =\n    typeof record.access_token === \"string\" && record.access_token.length > 0\n      ? record.access_token\n      : null;\n\n  if (!response.ok) {\n    const description =\n      typeof record.error_description === \"string\" && record.error_description.length > 0\n        ? record.error_description\n        : typeof record.error === \"string\" && record.error.length > 0\n          ? record.error\n          : `status ${response.status}`;\n    throw new Error(`OAuth token exchange failed: ${description}`);\n  }\n\n  if (accessToken === null) {\n    throw new Error(\"OAuth token endpoint did not return an access_token\");\n  }\n\n  return {\n    access_token: accessToken,\n    token_type: typeof record.token_type === \"string\" ? record.token_type : undefined,\n    refresh_token: typeof record.refresh_token === \"string\" ? record.refresh_token : undefined,\n    expires_in: typeof record.expires_in === \"number\"\n      ? record.expires_in\n      : typeof record.expires_in === \"string\"\n        ? Number(record.expires_in)\n        : undefined,\n    scope: typeof record.scope === \"string\" ? record.scope : undefined,\n  };\n};\n\nconst postFormToOAuth2TokenEndpoint = (input: {\n  tokenEndpoint: string;\n  body: URLSearchParams;\n}): Effect.Effect<OAuth2TokenResponse, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      const response = await fetch(input.tokenEndpoint, {\n        method: \"POST\",\n        headers: {\n          \"content-type\": \"application/x-www-form-urlencoded\",\n          accept: \"application/json\",\n        },\n        body: input.body,\n        signal: AbortSignal.timeout(20_000),\n      });\n\n      return parseOAuth2TokenResponse(response);\n    },\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nexport const exchangeOAuth2AuthorizationCode = (input: {\n  tokenEndpoint: string;\n  clientId: string;\n  clientAuthentication: OAuth2ClientAuthenticationMethod;\n  clientSecret?: string | null;\n  redirectUri: string;\n  codeVerifier: string;\n  code: string;\n}): Effect.Effect<OAuth2TokenResponse, Error, never> =>\n  Effect.gen(function* () {\n    const body = new URLSearchParams({\n      grant_type: \"authorization_code\",\n      client_id: input.clientId,\n      redirect_uri: input.redirectUri,\n      code_verifier: input.codeVerifier,\n      code: input.code,\n    });\n\n    if (input.clientAuthentication === \"client_secret_post\" && input.clientSecret) {\n      body.set(\"client_secret\", input.clientSecret);\n    }\n\n    return yield* postFormToOAuth2TokenEndpoint({\n      tokenEndpoint: input.tokenEndpoint,\n      body,\n    });\n  });\n\nexport const refreshOAuth2AccessToken = (input: {\n  tokenEndpoint: string;\n  clientId: string;\n  clientAuthentication: OAuth2ClientAuthenticationMethod;\n  clientSecret?: string | null;\n  refreshToken: string;\n  scopes?: ReadonlyArray<string> | null;\n}): Effect.Effect<OAuth2TokenResponse, Error, never> =>\n  Effect.gen(function* () {\n    const body = new URLSearchParams({\n      grant_type: \"refresh_token\",\n      client_id: input.clientId,\n      refresh_token: input.refreshToken,\n    });\n\n    if (input.clientAuthentication === \"client_secret_post\" && input.clientSecret) {\n      body.set(\"client_secret\", input.clientSecret);\n    }\n\n    if (input.scopes && input.scopes.length > 0) {\n      body.set(\"scope\", input.scopes.join(\" \"));\n    }\n\n    return yield* postFormToOAuth2TokenEndpoint({\n      tokenEndpoint: input.tokenEndpoint,\n      body,\n    });\n  });\n"
  },
  {
    "path": "packages/auth/oauth2/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.d.ts\"\n  ],\n  \"exclude\": [\n    \"src/**/*.test.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/clients/react/CHANGELOG.md",
    "content": "# @executor/react\n\n## null\n\n### Patch Changes\n\n- @executor/control-plane@null\n"
  },
  {
    "path": "packages/clients/react/package.json",
    "content": "{\n  \"name\": \"@executor/react\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"bunx vitest run\",\n    \"test:watch\": \"bunx vitest\"\n  },\n  \"dependencies\": {\n    \"@effect-atom/atom\": \"0.5.3\",\n    \"@effect-atom/atom-react\": \"0.5.0\",\n    \"@executor/control-plane\": \"workspace:*\",\n    \"effect\": \"catalog:\"\n  },\n  \"peerDependencies\": {\n    \"react\": \">=18 <20\"\n  },\n  \"devDependencies\": {\n    \"@effect/platform\": \"catalog:\",\n    \"@effect/platform-node\": \"catalog:\",\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/jsdom\": \"^21.1.7\",\n    \"@types/node\": \"catalog:\",\n    \"@types/react\": \"^19.2.10\",\n    \"@types/react-dom\": \"^19.2.3\",\n    \"bun-types\": \"catalog:\",\n    \"jsdom\": \"^26.1.0\",\n    \"react-dom\": \"^19.2.0\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/clients/react/src/index.test.tsx",
    "content": "import { createServer } from \"node:http\";\n\nimport { FileSystem, HttpApiBuilder, HttpServer } from \"@effect/platform\";\nimport { NodeFileSystem, NodeHttpServer } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport {\n  createControlPlaneApiLayer,\n  createControlPlaneRuntime,\n  type LocalInstallation,\n  type Source,\n  type ControlPlaneRuntime,\n} from \"@executor/control-plane\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as Scope from \"effect/Scope\";\nimport { JSDOM } from \"jsdom\";\nimport * as React from \"react\";\nimport { createRoot } from \"react-dom/client\";\n\nimport {\n  ExecutorReactProvider,\n  setExecutorApiBaseUrl,\n  type Loadable,\n  useCreateSource,\n  useRemoveSource,\n  useSource,\n  useSourceInspection,\n  useSources,\n  useUpdateSource,\n} from \"./index\";\n\nconst dom = new JSDOM(\"<!doctype html><html><body></body></html>\", {\n  url: \"http://127.0.0.1/\",\n});\n\nglobalThis.window = dom.window as unknown as typeof globalThis.window;\nglobalThis.document = dom.window.document;\nObject.defineProperty(globalThis, \"navigator\", {\n  value: dom.window.navigator,\n  configurable: true,\n});\nglobalThis.HTMLElement = dom.window.HTMLElement;\nglobalThis.Node = dom.window.Node;\nglobalThis.MutationObserver = dom.window.MutationObserver;\nglobalThis.Event = dom.window.Event;\nglobalThis.EventTarget = dom.window.EventTarget;\n\nglobalThis.requestAnimationFrame = (callback: FrameRequestCallback) =>\n  setTimeout(() => callback(Date.now()), 0) as unknown as number;\nglobalThis.cancelAnimationFrame = (handle: number) => {\n  clearTimeout(handle);\n};\n\n(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;\n\ntype DelayRule = {\n  method: string;\n  pathname: RegExp;\n  durationMs: number;\n};\n\ntype RunningServer = {\n  baseUrl: string;\n  close: () => Promise<void>;\n};\n\ntype ApiServer = RunningServer & {\n  runtime: ControlPlaneRuntime;\n};\n\ntype HookHarness<T> = {\n  current: T | null;\n  unmount: () => Promise<void>;\n};\n\ntype CreateHarnessState = {\n  sources: Loadable<ReadonlyArray<Source>>;\n  createSource: ReturnType<typeof useCreateSource>;\n};\n\ntype SourceHarnessState = {\n  sources: Loadable<ReadonlyArray<Source>>;\n  source: Loadable<Source>;\n  inspection: ReturnType<typeof useSourceInspection>;\n  updateSource: ReturnType<typeof useUpdateSource>;\n  removeSource: ReturnType<typeof useRemoveSource>;\n};\n\nconst closeScope = (scope: Scope.CloseableScope) =>\n  Scope.close(scope, Exit.void).pipe(Effect.orDie);\n\nconst startControlPlaneServer = async (): Promise<ApiServer> => {\n  const workspaceRoot = await Effect.runPromise(\n    FileSystem.FileSystem.pipe(\n      Effect.flatMap((fs) => fs.makeTempDirectory({ prefix: \"executor-react-test-\" })),\n      Effect.provide(NodeFileSystem.layer),\n    ),\n  );\n  const runtime = await Effect.runPromise(\n    createControlPlaneRuntime({\n      workspaceRoot,\n    }),\n  );\n  const scope = await Effect.runPromise(Scope.make());\n\n  try {\n    const serverLayer = HttpApiBuilder.serve().pipe(\n      Layer.provide(createControlPlaneApiLayer(runtime.runtimeLayer)),\n      Layer.provideMerge(NodeHttpServer.layerTest),\n    );\n    const context = await Effect.runPromise(Layer.buildWithScope(serverLayer, scope));\n    const server = Context.get(context, HttpServer.HttpServer);\n\n    return {\n      runtime,\n      baseUrl: HttpServer.formatAddress(server.address),\n      close: async () => {\n        await Effect.runPromise(closeScope(scope));\n        await runtime.close();\n      },\n    };\n  } catch (error) {\n    await Effect.runPromise(closeScope(scope));\n    await runtime.close();\n    throw error;\n  }\n};\n\nconst startProxyServer = async (input: {\n  targetBaseUrl: string;\n  delays?: ReadonlyArray<DelayRule>;\n}): Promise<RunningServer> => {\n  const server = createServer(async (req, res) => {\n    try {\n      const method = req.method ?? \"GET\";\n      const url = new URL(req.url ?? \"/\", \"http://127.0.0.1\");\n      const rule = input.delays?.find(\n        (candidate) =>\n          candidate.method === method && candidate.pathname.test(url.pathname),\n      );\n\n      if (rule) {\n        await new Promise((resolve) => setTimeout(resolve, rule.durationMs));\n      }\n\n      const headers = new Headers();\n      for (const [name, value] of Object.entries(req.headers)) {\n        if (value === undefined) {\n          continue;\n        }\n\n        if (Array.isArray(value)) {\n          value.forEach((item) => headers.append(name, item));\n          continue;\n        }\n\n        headers.set(name, value);\n      }\n      headers.delete(\"host\");\n\n      const bodyChunks: Array<Uint8Array> = [];\n      for await (const chunk of req) {\n        bodyChunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n      }\n\n      const targetUrl = new URL(`${url.pathname}${url.search}`, input.targetBaseUrl);\n      const response = await fetch(targetUrl, {\n        method,\n        headers,\n        body: bodyChunks.length > 0 ? Buffer.concat(bodyChunks) : undefined,\n      });\n\n      res.statusCode = response.status;\n      response.headers.forEach((value, name) => {\n        res.setHeader(name, value);\n      });\n      res.end(Buffer.from(await response.arrayBuffer()));\n    } catch (error) {\n      res.statusCode = 500;\n      res.end(error instanceof Error ? error.message : String(error));\n    }\n  });\n\n  await new Promise<void>((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(0, \"127.0.0.1\", () => resolve());\n  });\n\n  const address = server.address();\n  if (!address || typeof address === \"string\") {\n    throw new Error(\"Failed to bind proxy server\");\n  }\n\n  const baseUrl = `http://127.0.0.1:${address.port}`;\n\n  return {\n    baseUrl,\n    close: () =>\n      new Promise<void>((resolve, reject) => {\n        server.close((error) => {\n          if (error) {\n            reject(error);\n            return;\n          }\n\n          resolve();\n        });\n      }),\n  };\n};\n\ntype OpenApiSpecServer = RunningServer & {\n  specUrl: string;\n};\n\nconst startOpenApiSpecServer = async (): Promise<OpenApiSpecServer> => {\n  const spec = {\n    openapi: \"3.0.3\",\n    info: {\n      title: \"Hook Test API\",\n      version: \"1.0.0\",\n    },\n    paths: {\n      \"/ping\": {\n        get: {\n          operationId: \"ping\",\n          responses: {\n            200: {\n              description: \"ok\",\n              content: {\n                \"application/json\": {\n                  schema: {\n                    type: \"object\",\n                    properties: {\n                      ok: { type: \"boolean\" },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n      },\n    },\n  };\n\n  const server = createServer((req, res) => {\n    if (req.url === \"/openapi.json\") {\n      res.statusCode = 200;\n      res.setHeader(\"content-type\", \"application/json\");\n      res.end(JSON.stringify(spec));\n      return;\n    }\n\n    if (req.url === \"/ping\") {\n      res.statusCode = 200;\n      res.setHeader(\"content-type\", \"application/json\");\n      res.end(JSON.stringify({ ok: true }));\n      return;\n    }\n\n    res.statusCode = 404;\n    res.end(\"not found\");\n  });\n\n  await new Promise<void>((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(0, \"127.0.0.1\", () => resolve());\n  });\n\n  const address = server.address();\n  if (!address || typeof address === \"string\") {\n    throw new Error(\"Failed to bind OpenAPI spec server\");\n  }\n\n  const baseUrl = `http://127.0.0.1:${address.port}`;\n\n  return {\n    baseUrl,\n    specUrl: `${baseUrl}/openapi.json`,\n    close: () =>\n      new Promise<void>((resolve, reject) => {\n        server.close((error) => {\n          if (error) {\n            reject(error);\n            return;\n          }\n\n          resolve();\n        });\n      }),\n  };\n};\n\nasync function requestJson<T>(input: {\n  baseUrl: string;\n  path: string;\n  method?: \"GET\" | \"POST\" | \"PATCH\" | \"DELETE\";\n  payload?: unknown;\n  accountId?: string;\n}): Promise<T> {\n  const response = await fetch(new URL(input.path, input.baseUrl), {\n    method: input.method ?? \"GET\",\n    headers: {\n      ...(input.accountId ? { \"x-executor-account-id\": input.accountId } : {}),\n      ...(input.payload !== undefined ? { \"content-type\": \"application/json\" } : {}),\n    },\n    ...(input.payload !== undefined\n      ? {\n          body: JSON.stringify(input.payload),\n        }\n      : {}),\n  });\n\n  if (!response.ok) {\n    throw new Error(await response.text());\n  }\n\n  return response.json() as Promise<T>;\n}\n\nconst getInstallation = (baseUrl: string) =>\n  requestJson<LocalInstallation>({\n    baseUrl,\n    path: \"/v1/local/installation\",\n  });\n\nconst seedStoredOpenApiSource = async (input: {\n  server: ApiServer;\n  installation: LocalInstallation;\n  name: string;\n  specUrl?: string;\n}): Promise<Source> => {\n  const sourceDocumentText = JSON.stringify({\n    openapi: \"3.0.3\",\n    info: {\n      title: input.name,\n      version: \"1.0.0\",\n    },\n    paths: {\n      \"/ping\": {\n        get: {\n          operationId: \"ping\",\n          responses: {\n            200: {\n              description: \"ok\",\n              content: {\n                \"application/json\": {\n                  schema: {\n                    type: \"object\",\n                    properties: {\n                      ok: { type: \"boolean\" },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n      },\n    },\n  });\n  const specUrl = input.specUrl ?? `data:application/json,${encodeURIComponent(sourceDocumentText)}`;\n\n  return requestJson<Source>({\n    baseUrl: input.server.baseUrl,\n    path: `/v1/workspaces/${input.installation.workspaceId}/sources`,\n    method: \"POST\",\n    accountId: input.installation.accountId,\n    payload: {\n      name: input.name,\n      kind: \"openapi\",\n      endpoint: \"https://example.com/api\",\n      status: \"connected\",\n      enabled: true,\n      namespace: \"hooks-test\",\n      binding: {\n        specUrl,\n      },\n      auth: {\n        kind: \"none\",\n      },\n    },\n  });\n};\n\nasync function renderExecutorHarness<T>(useValue: () => T): Promise<HookHarness<T>> {\n  const container = document.createElement(\"div\");\n  document.body.appendChild(container);\n  const root = createRoot(container);\n  const snapshot: { current: T | null } = { current: null };\n\n  const Probe = () => {\n    const value = useValue();\n\n    React.useLayoutEffect(() => {\n      snapshot.current = value;\n    }, [value]);\n\n    return null;\n  };\n\n  await React.act(async () => {\n    root.render(\n      <ExecutorReactProvider>\n        <Probe />\n      </ExecutorReactProvider>,\n    );\n  });\n\n  return {\n    get current() {\n      return snapshot.current;\n    },\n    unmount: async () => {\n      await React.act(async () => {\n        root.unmount();\n      });\n      container.remove();\n    },\n  };\n}\n\nconst renderCreateHarness = () =>\n  renderExecutorHarness<CreateHarnessState>(() => ({\n    sources: useSources(),\n    createSource: useCreateSource(),\n  }));\n\nconst renderSourceHarness = (sourceId: string) =>\n  renderExecutorHarness<SourceHarnessState>(() => ({\n    sources: useSources(),\n    source: useSource(sourceId),\n    inspection: useSourceInspection(sourceId),\n    updateSource: useUpdateSource(),\n    removeSource: useRemoveSource(),\n  }));\n\nasync function waitForValue<T>(\n  read: () => T | null,\n  predicate: (value: T) => boolean,\n  timeoutMs = 10_000,\n): Promise<T> {\n  const deadline = Date.now() + timeoutMs;\n\n  while (Date.now() < deadline) {\n    const value = read();\n    if (value !== null && predicate(value)) {\n      return value;\n    }\n\n    await React.act(async () => {\n      await new Promise((resolve) => setTimeout(resolve, 20));\n    });\n  }\n\n  throw new Error(\"Timed out waiting for test state\");\n}\n\nfunction isReady<T>(\n  loadable: Loadable<T>,\n): loadable is { status: \"ready\"; data: T } {\n  return loadable.status === \"ready\";\n}\n\nfunction getReadyData<T>(loadable: Loadable<T>): T {\n  if (!isReady(loadable)) {\n    throw new Error(\"Expected loadable data to be ready\");\n  }\n\n  return loadable.data;\n}\n\n\ndescribe(\"executor-react source hooks\", () => {\n  it.effect(\"rejects invalid source creation before applying optimistic state\", () =>\n    Effect.promise(async () => {\n    const apiServer = await startControlPlaneServer();\n    const proxyServer = await startProxyServer({\n      targetBaseUrl: apiServer.baseUrl,\n      delays: [\n        {\n          method: \"POST\",\n          pathname: /^\\/v1\\/workspaces\\/[^/]+\\/sources$/,\n          durationMs: 150,\n        },\n      ],\n    });\n\n    setExecutorApiBaseUrl(proxyServer.baseUrl);\n\n    const harness = await renderCreateHarness();\n\n    try {\n      await waitForValue(\n        () => harness.current,\n        (value) => isReady(value.sources) && value.sources.data.length === 0,\n      );\n\n      let mutationPromise!: Promise<{ ok: true; value: Source } | { ok: false; error: unknown }>;\n      await React.act(async () => {\n        mutationPromise = harness.current!.createSource.mutateAsync({\n          name: \"\" as never,\n          kind: \"openapi\",\n          endpoint: \"https://example.com\",\n          binding: {\n            specUrl: \"https://example.com/openapi.json\",\n          },\n        }).then(\n          (value) => ({ ok: true as const, value }),\n          (error) => ({ ok: false as const, error }),\n        );\n        await Promise.resolve();\n      });\n\n      const failed = await waitForValue(\n        () => harness.current,\n        (value) =>\n          value.createSource.status === \"error\"\n          && isReady(value.sources)\n          && value.sources.data.length === 0,\n      );\n\n      const result = await mutationPromise;\n      expect(result.ok).toBe(false);\n      if (result.ok) {\n        throw new Error(\"Expected invalid source creation to fail\");\n      }\n\n      expect(result.error).toBeInstanceOf(Error);\n      expect(failed.createSource.error).toBeInstanceOf(Error);\n    } finally {\n      await harness.unmount();\n      await proxyServer.close();\n      await apiServer.close();\n    }\n    }),\n    60_000,\n  );\n\n  it.effect(\"applies optimistic source updates and refreshes live inspection data after success\", () =>\n    Effect.promise(async () => {\n    const apiServer = await startControlPlaneServer();\n    const proxyServer = await startProxyServer({\n      targetBaseUrl: apiServer.baseUrl,\n      delays: [\n        {\n          method: \"PATCH\",\n          pathname: /^\\/v1\\/workspaces\\/[^/]+\\/sources\\/[^/]+$/,\n          durationMs: 150,\n        },\n      ],\n    });\n    const specServer = await startOpenApiSpecServer();\n\n    setExecutorApiBaseUrl(proxyServer.baseUrl);\n\n    try {\n      const installation = await getInstallation(apiServer.baseUrl);\n      const source = await seedStoredOpenApiSource({\n        server: apiServer,\n        installation,\n        name: \"Original Source\",\n        specUrl: specServer.specUrl,\n      });\n      const harness = await renderSourceHarness(source.id);\n\n      try {\n        await waitForValue(\n          () => harness.current,\n          (value) =>\n            isReady(value.sources)\n            && isReady(value.source)\n            && isReady(value.inspection)\n            && value.source.data.name === \"Original Source\"\n            && value.inspection.data.source.name === \"Original Source\",\n        );\n\n        let mutationPromise!: Promise<Source>;\n        await React.act(async () => {\n          mutationPromise = harness.current!.updateSource.mutateAsync({\n            sourceId: source.id,\n            payload: {\n              name: \"Renamed Source\",\n            },\n          });\n          await Promise.resolve();\n        });\n\n        const optimistic = await waitForValue(\n          () => harness.current,\n          (value) =>\n            value.updateSource.status === \"pending\"\n            && isReady(value.sources)\n            && isReady(value.source)\n            && isReady(value.inspection)\n            && value.sources.data.some((item) => item.id === source.id && item.name === \"Renamed Source\")\n            && value.source.data.name === \"Renamed Source\"\n            && value.inspection.data.source.name === \"Original Source\",\n        );\n\n        expect(getReadyData(optimistic.source).name).toBe(\"Renamed Source\");\n        expect(getReadyData(optimistic.inspection).source.name).toBe(\"Original Source\");\n\n        let updated!: Source;\n        await React.act(async () => {\n          updated = await mutationPromise;\n        });\n\n        expect(updated.name).toBe(\"Renamed Source\");\n\n        const refreshed = await waitForValue(\n          () => harness.current,\n          (value) =>\n            value.updateSource.status === \"success\"\n            && isReady(value.source)\n            && isReady(value.inspection)\n            && value.source.data.name === \"Renamed Source\"\n            && value.inspection.data.source.name === \"Renamed Source\",\n        );\n\n        expect(getReadyData(refreshed.inspection).source.name).toBe(\"Renamed Source\");\n      } finally {\n        await harness.unmount();\n      }\n    } finally {\n      await specServer.close();\n      await proxyServer.close();\n      await apiServer.close();\n    }\n    }),\n    60_000,\n  );\n\n  it.effect(\"optimistically removes deleted sources and invalidates mounted source queries\", () =>\n    Effect.promise(async () => {\n    const apiServer = await startControlPlaneServer();\n    const proxyServer = await startProxyServer({\n      targetBaseUrl: apiServer.baseUrl,\n      delays: [\n        {\n          method: \"DELETE\",\n          pathname: /^\\/v1\\/workspaces\\/[^/]+\\/sources\\/[^/]+$/,\n          durationMs: 150,\n        },\n      ],\n    });\n\n    setExecutorApiBaseUrl(proxyServer.baseUrl);\n\n    try {\n      const installation = await getInstallation(apiServer.baseUrl);\n      const source = await seedStoredOpenApiSource({\n        server: apiServer,\n        installation,\n        name: \"Disposable Source\",\n      });\n      const harness = await renderSourceHarness(source.id);\n\n      try {\n        await waitForValue(\n          () => harness.current,\n          (value) =>\n            isReady(value.sources)\n            && isReady(value.source)\n            && isReady(value.inspection)\n            && value.sources.data.some((item) => item.id === source.id),\n        );\n\n        let mutationPromise!: Promise<{ removed: boolean }>;\n        await React.act(async () => {\n          mutationPromise = harness.current!.removeSource.mutateAsync(source.id);\n          await Promise.resolve();\n        });\n\n        const optimistic = await waitForValue(\n          () => harness.current,\n          (value) =>\n            value.removeSource.status === \"pending\"\n            && isReady(value.sources)\n            && !value.sources.data.some((item) => item.id === source.id),\n        );\n\n        expect(\n          getReadyData(optimistic.sources).some((item: Source) => item.id === source.id),\n        ).toBe(false);\n\n        let removed!: { removed: boolean };\n        await React.act(async () => {\n          removed = await mutationPromise;\n        });\n\n        expect(removed.removed).toBe(true);\n\n        const invalidated = await waitForValue(\n          () => harness.current,\n          (value) =>\n            value.removeSource.status === \"success\"\n            && isReady(value.sources)\n            && value.sources.data.length === 0\n            && value.source.status === \"error\"\n            && value.inspection.status === \"error\",\n        );\n\n        expect(invalidated.source.status).toBe(\"error\");\n        expect(invalidated.inspection.status).toBe(\"error\");\n      } finally {\n        await harness.unmount();\n      }\n    } finally {\n      await proxyServer.close();\n      await apiServer.close();\n    }\n    }),\n    60_000,\n  );\n\n  it.effect(\"surfaces missing sources as errors instead of staying loading\", () =>\n    Effect.promise(async () => {\n      const apiServer = await startControlPlaneServer();\n      setExecutorApiBaseUrl(apiServer.baseUrl);\n\n      try {\n        const harness = await renderSourceHarness(\"src_missing\");\n\n        try {\n          const missing = await waitForValue(\n            () => harness.current,\n            (value) =>\n              isReady(value.sources)\n              && value.sources.data.length === 0\n              && value.source.status === \"error\"\n              && value.inspection.status === \"error\",\n          );\n\n          expect(missing.source.status).toBe(\"error\");\n          expect(missing.inspection.status).toBe(\"error\");\n          if (missing.source.status === \"error\") {\n            expect(missing.source.error.message).toContain(\"Source not found\");\n          }\n          if (missing.inspection.status === \"error\") {\n            expect(missing.inspection.error.message).toContain(\"Source not found\");\n          }\n        } finally {\n          await harness.unmount();\n        }\n      } finally {\n        await apiServer.close();\n      }\n    }),\n    60_000,\n  );\n});\n"
  },
  {
    "path": "packages/clients/react/src/index.ts",
    "content": "import { Atom, Result } from \"@effect-atom/atom\";\nimport type * as Registry from \"@effect-atom/atom/Registry\";\nimport { RegistryContext, RegistryProvider, useAtomValue } from \"@effect-atom/atom-react\";\nimport { createControlPlaneClient } from \"@executor/control-plane/client\";\nimport type {\n  CompleteSourceOAuthResult,\n  ConnectSourceBatchPayload,\n  ConnectSourceBatchResult,\n  ConnectSourcePayload,\n  ConnectSourceResult,\n  ControlPlaneClient,\n  CreateSecretPayload,\n  CreateSecretResult,\n  CreateSourcePayload,\n  CreateWorkspaceOauthClientPayload,\n  DeleteSecretResult,\n  DiscoverSourcePayload,\n  InstanceConfig,\n  LocalInstallation,\n  SecretListItem,\n  Source,\n  SourceDiscoveryResult,\n  SourceInspection,\n  SourceInspectionDiscoverResult,\n  SourceInspectionToolDetail,\n  StartSourceOAuthPayload,\n  StartSourceOAuthResult,\n  UpdateSecretPayload,\n  UpdateSecretResult,\n  UpdateSourcePayload,\n  WorkspaceOauthClient,\n} from \"@executor/control-plane\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Option from \"effect/Option\";\nimport * as Runtime from \"effect/Runtime\";\nimport * as React from \"react\";\n\nconst DEFAULT_EXECUTOR_API_BASE_URL = \"http://127.0.0.1:8788\";\nconst PLACEHOLDER_WORKSPACE_ID = \"ws_placeholder\" as Source[\"workspaceId\"];\nconst PLACEHOLDER_ACCOUNT_ID = \"acc_placeholder\";\nconst PLACEHOLDER_SOURCE_ID = \"src_placeholder\" as Source[\"id\"];\n\ntype SourceMutationState<T> = {\n  status: \"idle\" | \"pending\" | \"success\" | \"error\";\n  data: T | null;\n  error: Error | null;\n};\n\nexport type SourceRemoveResult = {\n  removed: boolean;\n};\n\ntype AtomKeyPart = string | number | boolean | null | undefined;\n\ntype SourcesKeyParts = readonly [boolean, Source[\"workspaceId\"], string];\ntype SourceKeyParts = readonly [boolean, Source[\"workspaceId\"], string, Source[\"id\"]];\ntype SourceToolDetailKeyParts = readonly [\n  boolean,\n  Source[\"workspaceId\"],\n  string,\n  Source[\"id\"],\n  string | null,\n];\ntype SourceDiscoveryKeyParts = readonly [\n  boolean,\n  Source[\"workspaceId\"],\n  string,\n  Source[\"id\"],\n  string,\n  number | null,\n];\ntype WorkspaceOauthClientsKeyParts = readonly [\n  boolean,\n  Source[\"workspaceId\"],\n  string,\n  string,\n];\n\ntype InvalidationTarget = {\n  workspaceId?: Source[\"workspaceId\"];\n  accountId?: string;\n  sourceId?: Source[\"id\"];\n};\n\ntype ActiveQueryCollections = {\n  sourceLists: Set<string>;\n  sources: Set<string>;\n  workspaceOauthClients: Set<string>;\n  inspections: Set<string>;\n  toolDetails: Set<string>;\n  discoveries: Set<string>;\n};\n\ntype ExecutorQueryContextValue = {\n  registry: Registry.Registry;\n  activeQueries: ActiveQueryCollections;\n  invalidateQueries: (target?: InvalidationTarget) => void;\n};\n\ntype MutationExecutionContext = {\n  workspaceId: Source[\"workspaceId\"];\n  accountId: string;\n  registry: Registry.Registry;\n  invalidateQueries: (target?: InvalidationTarget) => void;\n};\n\ntype OptimisticMutationResult<T> =\n  | void\n  | (() => void)\n  | {\n      rollback?: () => void;\n      value?: T;\n    };\n\ntype MutationOptions<TInput, TOutput, TOptimistic = never> = {\n  optimisticUpdate?: (\n    context: MutationExecutionContext,\n    payload: TInput,\n  ) => OptimisticMutationResult<TOptimistic>;\n  onSuccess?: (\n    context: MutationExecutionContext,\n    payload: TInput,\n    data: TOutput,\n    optimisticValue: TOptimistic | undefined,\n  ) => void;\n};\n\ntype InternalNode<A> = {\n  setValue: (value: A) => void;\n  valueOption?: () => Option.Option<A>;\n};\n\nlet apiBaseUrl =\n  typeof window !== \"undefined\" && typeof window.location?.origin === \"string\"\n    ? window.location.origin\n    : DEFAULT_EXECUTOR_API_BASE_URL;\n\nconst ExecutorQueryContext = React.createContext<ExecutorQueryContextValue | null>(null);\n\nconst encodeAtomKey = (parts: ReadonlyArray<AtomKeyPart>): string => JSON.stringify(parts);\n\nconst decodeAtomKey = <T extends ReadonlyArray<AtomKeyPart>>(key: string): T => JSON.parse(key) as T;\n\nconst encodeSourcesKey = (\n  enabled: boolean,\n  workspaceId: Source[\"workspaceId\"],\n  accountId: string,\n): string => encodeAtomKey([enabled, workspaceId, accountId] satisfies SourcesKeyParts);\n\nconst encodeSourceKey = (\n  enabled: boolean,\n  workspaceId: Source[\"workspaceId\"],\n  accountId: string,\n  sourceId: Source[\"id\"],\n): string => encodeAtomKey([enabled, workspaceId, accountId, sourceId] satisfies SourceKeyParts);\n\nconst encodeToolDetailKey = (\n  enabled: boolean,\n  workspaceId: Source[\"workspaceId\"],\n  accountId: string,\n  sourceId: Source[\"id\"],\n  toolPath: string | null,\n): string =>\n  encodeAtomKey([enabled, workspaceId, accountId, sourceId, toolPath] satisfies SourceToolDetailKeyParts);\n\nconst encodeDiscoveryKey = (\n  enabled: boolean,\n  workspaceId: Source[\"workspaceId\"],\n  accountId: string,\n  sourceId: Source[\"id\"],\n  query: string,\n  limit: number | null,\n): string =>\n  encodeAtomKey([enabled, workspaceId, accountId, sourceId, query, limit] satisfies SourceDiscoveryKeyParts);\n\nconst encodeWorkspaceOauthClientsKey = (\n  enabled: boolean,\n  workspaceId: Source[\"workspaceId\"],\n  accountId: string,\n  providerKey: string,\n): string =>\n  encodeAtomKey(\n    [enabled, workspaceId, accountId, providerKey] satisfies WorkspaceOauthClientsKeyParts,\n  );\n\nconst causeMessage = (cause: Cause.Cause<unknown>): Error =>\n  new Error(Cause.pretty(cause));\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst shouldLogExecutorDevErrors = (): boolean => {\n  if (typeof window === \"undefined\") {\n    return false;\n  }\n\n  const hostname = window.location.hostname;\n  return hostname === \"localhost\" || hostname === \"127.0.0.1\";\n};\n\nconst describeExecutorDevError = (cause: unknown): Record<string, unknown> => {\n  if (Runtime.isFiberFailure(cause)) {\n    const inner = cause[Runtime.FiberFailureCauseId];\n    return {\n      name: cause.name,\n      message: cause.message,\n      cause: Cause.pretty(inner),\n    };\n  }\n\n  if (cause instanceof Error) {\n    return {\n      name: cause.name,\n      message: cause.message,\n      stack: cause.stack,\n    };\n  }\n\n  return {\n    message: String(cause),\n  };\n};\n\nconst logExecutorDevError = (label: string, details: Record<string, unknown>): void => {\n  if (!shouldLogExecutorDevErrors()) {\n    return;\n  }\n\n  console.error(`[executor react] ${label}`, details);\n};\n\nconst runControlPlane = async <A>(input: {\n  baseUrl?: string;\n  accountId?: string;\n  execute: (client: ControlPlaneClient) => Effect.Effect<A, unknown, never>;\n}): Promise<A> => {\n  const baseUrl = input.baseUrl ?? apiBaseUrl;\n  const accountId = input.accountId;\n\n  const exit = await Effect.runPromiseExit(\n    createControlPlaneClient({\n      baseUrl,\n      ...(accountId !== undefined ? { accountId } : {}),\n    }).pipe(Effect.flatMap(input.execute)),\n  );\n\n  if (Exit.isSuccess(exit)) {\n    return exit.value;\n  }\n\n  const error = Cause.squash(exit.cause);\n  logExecutorDevError(\"control-plane request failed\", {\n    baseUrl,\n    accountId,\n    error: describeExecutorDevError(error),\n    cause: Cause.pretty(exit.cause),\n  });\n  throw error;\n};\n\nconst controlPlaneRequest = <A>(input: {\n  baseUrl?: string;\n  accountId?: string;\n  execute: (client: ControlPlaneClient) => Effect.Effect<A, unknown, never>;\n}): Effect.Effect<A, Error> =>\n  Effect.tryPromise({\n    try: () => runControlPlane(input),\n    catch: toError,\n  });\n\nconst localInstallationAtom = Atom.family((baseUrl: string) =>\n  Atom.make(\n    controlPlaneRequest({\n      baseUrl,\n      execute: (client) => client.local.installation({}),\n    }),\n  ).pipe(Atom.keepAlive),\n);\n\nconst instanceConfigAtom = Atom.family((baseUrl: string) =>\n  Atom.make(\n    controlPlaneRequest({\n      baseUrl,\n      execute: (client) => client.local.config({}),\n    }),\n  ).pipe(Atom.keepAlive),\n);\n\nconst secretsAtom = Atom.family((baseUrl: string) =>\n  Atom.make(\n    controlPlaneRequest({\n      baseUrl,\n      execute: (client) => client.local.listSecrets({}),\n    }),\n  ).pipe(Atom.keepAlive),\n);\n\nconst sourcesAtom = Atom.family((key: string) => {\n  const [enabled, workspaceId, accountId] = decodeAtomKey<SourcesKeyParts>(key);\n\n  return Atom.make(\n    enabled\n      ? controlPlaneRequest({\n            accountId,\n            execute: (client) => client.sources.list({\n              path: {\n                workspaceId,\n              },\n            }),\n          })\n      : Effect.never,\n  ).pipe(Atom.keepAlive);\n});\n\nconst sourceAtom = Atom.family((key: string) => {\n  const [enabled, workspaceId, accountId, sourceId] = decodeAtomKey<SourceKeyParts>(key);\n\n  return Atom.make(\n    enabled\n      ? controlPlaneRequest({\n            accountId,\n            execute: (client) => client.sources.get({\n              path: {\n                workspaceId,\n                sourceId,\n              },\n            }),\n          })\n      : Effect.never,\n  ).pipe(Atom.keepAlive);\n});\n\nconst sourceInspectionAtom = Atom.family((key: string) => {\n  const [enabled, workspaceId, accountId, sourceId] = decodeAtomKey<SourceKeyParts>(key);\n\n  return Atom.make(\n    enabled\n      ? controlPlaneRequest({\n            accountId,\n            execute: (client) => client.sources.inspection({\n              path: {\n                workspaceId,\n                sourceId,\n              },\n            }),\n          })\n      : Effect.never,\n  ).pipe(Atom.keepAlive);\n});\n\nconst sourceInspectionToolAtom = Atom.family((key: string) => {\n  const [enabled, workspaceId, accountId, sourceId, toolPath] = decodeAtomKey<SourceToolDetailKeyParts>(key);\n\n  return Atom.make(\n    enabled && toolPath\n      ? controlPlaneRequest({\n            accountId,\n            execute: (client) => client.sources.inspectionTool({\n              path: {\n                workspaceId,\n                sourceId,\n                toolPath,\n              },\n            }),\n          })\n      : Effect.succeed<SourceInspectionToolDetail | null>(null),\n  ).pipe(Atom.keepAlive);\n});\n\nconst sourceDiscoveryAtom = Atom.family((key: string) => {\n  const [enabled, workspaceId, accountId, sourceId, query, limit] = decodeAtomKey<SourceDiscoveryKeyParts>(key);\n\n  return Atom.make(\n    !enabled\n      ? Effect.never\n      : query.trim().length === 0\n        ? Effect.succeed<SourceInspectionDiscoverResult>({\n            query: \"\",\n            queryTokens: [],\n            bestPath: null,\n            total: 0,\n            results: [],\n          })\n        : controlPlaneRequest({\n              accountId,\n              execute: (client) => client.sources.inspectionDiscover({\n                path: {\n                  workspaceId,\n                  sourceId,\n                },\n                payload: {\n                  query,\n                  ...(limit !== null ? { limit } : {}),\n                },\n              }),\n            }),\n  ).pipe(Atom.keepAlive);\n});\n\nconst workspaceOauthClientsAtom = Atom.family((key: string) => {\n  const [enabled, workspaceId, accountId, providerKey] = decodeAtomKey<WorkspaceOauthClientsKeyParts>(key);\n\n  return Atom.make(\n    enabled\n      ? controlPlaneRequest({\n          accountId,\n          execute: (client) => client.sources.listWorkspaceOauthClients({\n            path: {\n              workspaceId,\n            },\n            urlParams: {\n              providerKey,\n            },\n          }),\n        })\n      : Effect.never,\n  ).pipe(Atom.keepAlive);\n});\n\nexport type Loadable<T> =\n  | { status: \"loading\" }\n  | { status: \"error\"; error: Error }\n  | { status: \"ready\"; data: T };\n\ntype WorkspaceContext = {\n  installation: LocalInstallation;\n  workspaceId: Source[\"workspaceId\"];\n  accountId: string;\n};\n\nconst toLoadable = <T>(result: Result.Result<T, Error>): Loadable<T> => {\n  if (Result.isSuccess(result)) {\n    return {\n      status: \"ready\",\n      data: result.value,\n    };\n  }\n\n  if (Result.isFailure(result)) {\n    return {\n      status: \"error\",\n      error: causeMessage(result.cause),\n    };\n  }\n\n  return {\n    status: \"loading\",\n  };\n};\n\nconst pendingLoadable = <T>(workspace: Loadable<WorkspaceContext>): Loadable<T> => {\n  if (workspace.status === \"loading\") {\n    return { status: \"loading\" };\n  }\n\n  if (workspace.status === \"error\") {\n    return { status: \"error\", error: workspace.error };\n  }\n\n  throw new Error(\"Expected workspace loadable to be pending or errored\");\n};\n\nconst useLoadableAtom = <T>(atom: Atom.Atom<Result.Result<T, Error>>): Loadable<T> => {\n  const result = useAtomValue(atom);\n  return React.useMemo(() => toLoadable(result), [result]);\n};\n\nconst useWorkspaceContext = (): Loadable<WorkspaceContext> => {\n  const installation = useLoadableAtom(localInstallationAtom(apiBaseUrl));\n\n  return React.useMemo(() => {\n    if (installation.status !== \"ready\") {\n      return installation;\n    }\n\n    return {\n      status: \"ready\",\n      data: {\n        installation: installation.data,\n        workspaceId: installation.data.workspaceId,\n        accountId: installation.data.accountId,\n      },\n    } satisfies Loadable<WorkspaceContext>;\n  }, [installation]);\n};\n\nconst useWorkspaceRequestContext = () => {\n  const workspace = useWorkspaceContext();\n  const enabled = workspace.status === \"ready\";\n\n  const workspaceId = enabled\n    ? workspace.data.workspaceId\n    : PLACEHOLDER_WORKSPACE_ID;\n  const accountId = enabled\n    ? workspace.data.accountId\n    : PLACEHOLDER_ACCOUNT_ID;\n\n  return React.useMemo(\n    () => ({\n      workspace,\n      enabled,\n      workspaceId,\n      accountId,\n    }),\n    [accountId, enabled, workspace, workspaceId],\n  );\n};\n\nconst getCachedAtomValue = <A>(\n  registry: Registry.Registry,\n  atom: Atom.Atom<Result.Result<A, Error>>,\n): A | undefined => {\n  const node = (registry.getNodes().get(atom) ?? null) as InternalNode<Result.Result<A, Error>> | null;\n  if (node === null || typeof node.valueOption !== \"function\") {\n    return undefined;\n  }\n\n  const option = node.valueOption();\n  if (Option.isNone(option)) {\n    return undefined;\n  }\n\n  if (!Result.isSuccess(option.value)) {\n    return undefined;\n  }\n\n  return option.value.value;\n};\n\nconst setCachedAtomValue = <A>(\n  registry: Registry.Registry,\n  atom: Atom.Atom<Result.Result<A, Error>>,\n  value: A,\n): void => {\n  const ensureNode = (registry as {\n    ensureNode?: (atom: Atom.Atom<Result.Result<A, Error>>) => InternalNode<Result.Result<A, Error>>;\n  }).ensureNode;\n  if (typeof ensureNode !== \"function\") {\n    return;\n  }\n\n  ensureNode.call(registry, atom).setValue(Result.success(value));\n};\n\nconst createActiveQueryCollections = (): ActiveQueryCollections => ({\n  sourceLists: new Set(),\n  sources: new Set(),\n  workspaceOauthClients: new Set(),\n  inspections: new Set(),\n  toolDetails: new Set(),\n  discoveries: new Set(),\n});\n\nconst targetMatches = (\n  target: InvalidationTarget | undefined,\n  workspaceId: Source[\"workspaceId\"],\n  accountId: string,\n  sourceId?: Source[\"id\"],\n): boolean => {\n  if (target?.workspaceId !== undefined && target.workspaceId !== workspaceId) {\n    return false;\n  }\n  if (target?.accountId !== undefined && target.accountId !== accountId) {\n    return false;\n  }\n  if (target?.sourceId !== undefined && target.sourceId !== sourceId) {\n    return false;\n  }\n  return true;\n};\n\nconst invalidateTrackedQueries = (\n  registry: Registry.Registry,\n  activeQueries: ActiveQueryCollections,\n  target?: InvalidationTarget,\n): void => {\n  activeQueries.sourceLists.forEach((key) => {\n    const [enabled, workspaceId, accountId] = decodeAtomKey<SourcesKeyParts>(key);\n    if (enabled && targetMatches(target, workspaceId, accountId)) {\n      registry.refresh(sourcesAtom(key));\n    }\n  });\n\n  activeQueries.sources.forEach((key) => {\n    const [enabled, workspaceId, accountId, sourceId] = decodeAtomKey<SourceKeyParts>(key);\n    if (enabled && targetMatches(target, workspaceId, accountId, sourceId)) {\n      registry.refresh(sourceAtom(key));\n    }\n  });\n\n  activeQueries.workspaceOauthClients.forEach((key) => {\n    const [enabled, workspaceId, accountId] = decodeAtomKey<WorkspaceOauthClientsKeyParts>(key);\n    if (enabled && targetMatches(target, workspaceId, accountId)) {\n      registry.refresh(workspaceOauthClientsAtom(key));\n    }\n  });\n\n  activeQueries.inspections.forEach((key) => {\n    const [enabled, workspaceId, accountId, sourceId] = decodeAtomKey<SourceKeyParts>(key);\n    if (enabled && targetMatches(target, workspaceId, accountId, sourceId)) {\n      registry.refresh(sourceInspectionAtom(key));\n    }\n  });\n\n  activeQueries.toolDetails.forEach((key) => {\n    const [enabled, workspaceId, accountId, sourceId] = decodeAtomKey<SourceToolDetailKeyParts>(key);\n    if (enabled && targetMatches(target, workspaceId, accountId, sourceId)) {\n      registry.refresh(sourceInspectionToolAtom(key));\n    }\n  });\n\n  activeQueries.discoveries.forEach((key) => {\n    const [enabled, workspaceId, accountId, sourceId] = decodeAtomKey<SourceDiscoveryKeyParts>(key);\n    if (enabled && targetMatches(target, workspaceId, accountId, sourceId)) {\n      registry.refresh(sourceDiscoveryAtom(key));\n    }\n  });\n};\n\nconst useExecutorQueryContext = (): ExecutorQueryContextValue => {\n  const context = React.useContext(ExecutorQueryContext);\n  if (context === null) {\n    throw new Error(\"ExecutorReactProvider is missing from the React tree\");\n  }\n  return context;\n};\n\nconst useTrackActiveKey = (\n  collection: keyof ActiveQueryCollections,\n  key: string,\n  enabled: boolean,\n): void => {\n  const { activeQueries } = useExecutorQueryContext();\n\n  React.useEffect(() => {\n    if (!enabled) {\n      return;\n    }\n\n    const bucket = activeQueries[collection];\n    bucket.add(key);\n    return () => {\n      bucket.delete(key);\n    };\n  }, [activeQueries, collection, enabled, key]);\n};\n\nconst upsertSourceInList = (\n  sources: ReadonlyArray<Source>,\n  nextSource: Source,\n): ReadonlyArray<Source> => {\n  const index = sources.findIndex((source) => source.id === nextSource.id);\n  if (index === -1) {\n    return [nextSource, ...sources];\n  }\n\n  const next = sources.slice();\n  next[index] = nextSource;\n  return next;\n};\n\nconst removeSourceFromList = (\n  sources: ReadonlyArray<Source>,\n  sourceId: Source[\"id\"],\n): ReadonlyArray<Source> => sources.filter((source) => source.id !== sourceId);\n\nconst createOptimisticSource = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  payload: CreateSourcePayload;\n}): Source => {\n  const now = Date.now();\n\n  return {\n    id: `src_optimistic_${crypto.randomUUID()}` as Source[\"id\"],\n    workspaceId: input.workspaceId,\n    name: input.payload.name,\n    kind: input.payload.kind,\n    endpoint: input.payload.endpoint,\n    status: input.payload.status ?? \"draft\",\n    enabled: input.payload.enabled ?? true,\n    namespace: input.payload.namespace ?? null,\n    bindingVersion: 1,\n    binding: input.payload.binding ?? {},\n    importAuthPolicy: input.payload.importAuthPolicy ?? \"reuse_runtime\",\n    importAuth: input.payload.importAuth ?? { kind: \"none\" },\n    auth: input.payload.auth ?? { kind: \"none\" },\n    sourceHash: input.payload.sourceHash ?? null,\n    lastError: input.payload.lastError ?? null,\n    createdAt: now,\n    updatedAt: now,\n  };\n};\n\nconst applyUpdatePayloadToSource = (source: Source, payload: UpdateSourcePayload): Source => ({\n  ...source,\n  name: payload.name ?? source.name,\n  endpoint: payload.endpoint ?? source.endpoint,\n  status: payload.status ?? source.status,\n  enabled: payload.enabled ?? source.enabled,\n  namespace: payload.namespace !== undefined ? payload.namespace : source.namespace,\n  binding: payload.binding !== undefined ? payload.binding : source.binding,\n  auth: payload.auth !== undefined ? payload.auth : source.auth,\n  sourceHash: payload.sourceHash !== undefined ? payload.sourceHash : source.sourceHash,\n  lastError: payload.lastError !== undefined ? payload.lastError : source.lastError,\n  updatedAt: Date.now(),\n});\n\nconst useSourceMutation = <TInput, TOutput, TOptimistic = never>(\n  execute: (input: {\n    workspaceId: Source[\"workspaceId\"];\n    accountId: string;\n    payload: TInput;\n  }) => Promise<TOutput>,\n  options?: MutationOptions<TInput, TOutput, TOptimistic>,\n) => {\n  const workspace = useWorkspaceRequestContext();\n  const { registry, invalidateQueries } = useExecutorQueryContext();\n  const [state, setState] = React.useState<SourceMutationState<TOutput>>({\n    status: \"idle\",\n    data: null,\n    error: null,\n  });\n\n  const mutateAsync = React.useCallback(async (payload: TInput) => {\n    if (!workspace.enabled) {\n      const error = new Error(\"Executor workspace context is not ready\");\n      setState({ status: \"error\", data: null, error });\n      throw error;\n    }\n\n    const executionContext: MutationExecutionContext = {\n      workspaceId: workspace.workspaceId,\n      accountId: workspace.accountId,\n      registry,\n      invalidateQueries,\n    };\n\n    setState((current) => ({\n      status: \"pending\",\n      data: current.data,\n      error: null,\n    }));\n\n    const optimistic = options?.optimisticUpdate?.(executionContext, payload);\n    const rollback = typeof optimistic === \"function\"\n      ? optimistic\n      : optimistic?.rollback;\n    const optimisticValue = typeof optimistic === \"function\"\n      ? undefined\n      : optimistic?.value;\n\n    try {\n      const data = await execute({\n        workspaceId: workspace.workspaceId,\n        accountId: workspace.accountId,\n        payload,\n      });\n      options?.onSuccess?.(executionContext, payload, data, optimisticValue);\n      setState({ status: \"success\", data, error: null });\n      return data;\n    } catch (cause) {\n      rollback?.();\n      logExecutorDevError(\"source mutation failed\", {\n        workspaceId: workspace.workspaceId,\n        accountId: workspace.accountId,\n        payload,\n        error: describeExecutorDevError(cause),\n        cause,\n      });\n      const error = cause instanceof Error ? cause : new Error(String(cause));\n      setState({ status: \"error\", data: null, error });\n      throw error;\n    }\n  }, [execute, invalidateQueries, options, registry, workspace.accountId, workspace.enabled, workspace.workspaceId]);\n\n  const reset = React.useCallback(() => {\n    setState({ status: \"idle\", data: null, error: null });\n  }, []);\n\n  return React.useMemo(\n    () => ({\n      ...state,\n      mutateAsync,\n      reset,\n    }),\n    [mutateAsync, reset, state],\n  );\n};\n\nconst ExecutorReactProviderInner = (props: React.PropsWithChildren) => {\n  const registry = React.useContext(RegistryContext);\n  const activeQueries = React.useMemo(createActiveQueryCollections, []);\n  const invalidateQueries = React.useCallback((target?: InvalidationTarget) => {\n    invalidateTrackedQueries(registry, activeQueries, target);\n  }, [activeQueries, registry]);\n\n  const value = React.useMemo<ExecutorQueryContextValue>(() => ({\n    registry,\n    activeQueries,\n    invalidateQueries,\n  }), [activeQueries, invalidateQueries, registry]);\n\n  return React.createElement(ExecutorQueryContext.Provider, { value }, props.children);\n};\n\nexport const setExecutorApiBaseUrl = (baseUrl: string): void => {\n  apiBaseUrl = baseUrl;\n};\n\nexport const ExecutorReactProvider = (props: React.PropsWithChildren) =>\n  React.createElement(\n    RegistryProvider,\n    null,\n    React.createElement(ExecutorReactProviderInner, null, props.children),\n  );\n\nexport const useInvalidateExecutorQueries = (): (() => void) => {\n  const { invalidateQueries } = useExecutorQueryContext();\n  return React.useCallback(() => {\n    invalidateQueries();\n  }, [invalidateQueries]);\n};\n\nexport const useLocalInstallation = (): Loadable<LocalInstallation> =>\n  useLoadableAtom(localInstallationAtom(apiBaseUrl));\n\nexport const useInstanceConfig = (): Loadable<InstanceConfig> =>\n  useLoadableAtom(instanceConfigAtom(apiBaseUrl));\n\nexport const useSecrets = (): Loadable<ReadonlyArray<SecretListItem>> =>\n  useLoadableAtom(secretsAtom(apiBaseUrl));\n\nexport const useRefreshSecrets = (): (() => void) => {\n  const registry = React.useContext(RegistryContext);\n  return React.useCallback(() => {\n    registry.refresh(secretsAtom(apiBaseUrl));\n  }, [registry]);\n};\n\ntype SecretMutationState<T> = {\n  status: \"idle\" | \"pending\" | \"success\" | \"error\";\n  data: T | null;\n  error: Error | null;\n};\n\nconst useSecretMutation = <TInput, TOutput>(\n  execute: (input: TInput) => Promise<TOutput>,\n) => {\n  const registry = React.useContext(RegistryContext);\n  const [state, setState] = React.useState<SecretMutationState<TOutput>>({\n    status: \"idle\",\n    data: null,\n    error: null,\n  });\n\n  const mutateAsync = React.useCallback(async (payload: TInput) => {\n    setState((current) => ({\n      status: \"pending\",\n      data: current.data,\n      error: null,\n    }));\n\n    try {\n      const data = await execute(payload);\n      registry.refresh(secretsAtom(apiBaseUrl));\n      setState({ status: \"success\", data, error: null });\n      return data;\n    } catch (cause) {\n      const error = cause instanceof Error ? cause : new Error(String(cause));\n      setState({ status: \"error\", data: null, error });\n      throw error;\n    }\n  }, [execute, registry]);\n\n  const reset = React.useCallback(() => {\n    setState({ status: \"idle\", data: null, error: null });\n  }, []);\n\n  return React.useMemo(\n    () => ({\n      ...state,\n      mutateAsync,\n      reset,\n    }),\n    [mutateAsync, reset, state],\n  );\n};\n\nexport const useCreateSecret = () =>\n  useSecretMutation<CreateSecretPayload, CreateSecretResult>(\n    React.useCallback(\n      (payload) =>\n        runControlPlane({\n          execute: (client) => client.local.createSecret({\n            payload,\n          }),\n        }),\n      [],\n    ),\n  );\n\nexport const useUpdateSecret = () =>\n  useSecretMutation<{ secretId: string; payload: UpdateSecretPayload }, UpdateSecretResult>(\n    React.useCallback(\n      (input) =>\n        runControlPlane({\n          execute: (client) => client.local.updateSecret({\n            path: { secretId: input.secretId },\n            payload: input.payload,\n          }),\n        }),\n      [],\n    ),\n  );\n\nexport const useDeleteSecret = () =>\n  useSecretMutation<string, DeleteSecretResult>(\n    React.useCallback(\n      (secretId) =>\n        runControlPlane({\n          execute: (client) => client.local.deleteSecret({\n            path: { secretId },\n          }),\n        }),\n      [],\n    ),\n  );\n\nexport const useSources = (): Loadable<ReadonlyArray<Source>> => {\n  const workspace = useWorkspaceRequestContext();\n  const key = encodeSourcesKey(workspace.enabled, workspace.workspaceId, workspace.accountId);\n  useTrackActiveKey(\"sourceLists\", key, workspace.enabled);\n  const sources = useLoadableAtom(sourcesAtom(key));\n\n  return workspace.enabled ? sources : pendingLoadable(workspace.workspace);\n};\n\nexport const useSource = (sourceId: string): Loadable<Source> => {\n  const workspace = useWorkspaceRequestContext();\n  const requestedSourceId = workspace.enabled\n    ? (sourceId as Source[\"id\"])\n    : PLACEHOLDER_SOURCE_ID;\n  const key = encodeSourceKey(\n    workspace.enabled,\n    workspace.workspaceId,\n    workspace.accountId,\n    requestedSourceId,\n  );\n  useTrackActiveKey(\"sources\", key, workspace.enabled);\n  const source = useLoadableAtom(sourceAtom(key));\n\n  return workspace.enabled ? source : pendingLoadable(workspace.workspace);\n};\n\nexport const useWorkspaceOauthClients = (\n  providerKey: string | null,\n): Loadable<ReadonlyArray<WorkspaceOauthClient>> => {\n  const workspace = useWorkspaceRequestContext();\n  const key = encodeWorkspaceOauthClientsKey(\n    workspace.enabled && providerKey !== null,\n    workspace.workspaceId,\n    workspace.accountId,\n    providerKey ?? \"\",\n  );\n  useTrackActiveKey(\n    \"workspaceOauthClients\",\n    key,\n    workspace.enabled && providerKey !== null,\n  );\n  const oauthClients = useLoadableAtom(workspaceOauthClientsAtom(key));\n\n  if (!workspace.enabled) {\n    return pendingLoadable(workspace.workspace);\n  }\n\n  if (providerKey === null) {\n    return {\n      status: \"ready\",\n      data: [],\n    };\n  }\n\n  return oauthClients;\n};\n\nexport const useSourceInspection = (sourceId: string): Loadable<SourceInspection> => {\n  const workspace = useWorkspaceRequestContext();\n  const requestedSourceId = workspace.enabled\n    ? (sourceId as Source[\"id\"])\n    : PLACEHOLDER_SOURCE_ID;\n  const key = encodeSourceKey(\n    workspace.enabled,\n    workspace.workspaceId,\n    workspace.accountId,\n    requestedSourceId,\n  );\n  useTrackActiveKey(\"inspections\", key, workspace.enabled);\n  const inspection = useLoadableAtom(sourceInspectionAtom(key));\n\n  return workspace.enabled ? inspection : pendingLoadable(workspace.workspace);\n};\n\nexport const useSourceToolDetail = (\n  sourceId: string,\n  toolPath: string | null,\n): Loadable<SourceInspectionToolDetail | null> => {\n  const workspace = useWorkspaceRequestContext();\n  const requestedSourceId = workspace.enabled\n    ? (sourceId as Source[\"id\"])\n    : PLACEHOLDER_SOURCE_ID;\n  const key = encodeToolDetailKey(\n    workspace.enabled,\n    workspace.workspaceId,\n    workspace.accountId,\n    requestedSourceId,\n    toolPath,\n  );\n  useTrackActiveKey(\"toolDetails\", key, workspace.enabled && toolPath !== null);\n  const detail = useLoadableAtom(sourceInspectionToolAtom(key));\n\n  return workspace.enabled ? detail : pendingLoadable(workspace.workspace);\n};\n\nexport const useSourceDiscovery = (input: {\n  sourceId: string;\n  query: string;\n  limit?: number;\n}): Loadable<SourceInspectionDiscoverResult> => {\n  const workspace = useWorkspaceRequestContext();\n  const requestedSourceId = workspace.enabled\n    ? (input.sourceId as Source[\"id\"])\n    : PLACEHOLDER_SOURCE_ID;\n  const key = encodeDiscoveryKey(\n    workspace.enabled,\n    workspace.workspaceId,\n    workspace.accountId,\n    requestedSourceId,\n    input.query,\n    input.limit ?? null,\n  );\n  useTrackActiveKey(\"discoveries\", key, workspace.enabled);\n  const results = useLoadableAtom(sourceDiscoveryAtom(key));\n\n  return workspace.enabled ? results : pendingLoadable(workspace.workspace);\n};\n\nexport const usePrefetchToolDetail = () => {\n  const registry = React.useContext(RegistryContext);\n  const workspace = useWorkspaceRequestContext();\n\n  return React.useCallback(\n    (sourceId: string, toolPath: string): (() => void) => {\n      if (!workspace.enabled) return () => {};\n      const requestedSourceId = sourceId as Source[\"id\"];\n      const atom = sourceInspectionToolAtom(\n        encodeToolDetailKey(\n          workspace.enabled,\n          workspace.workspaceId,\n          workspace.accountId,\n          requestedSourceId,\n          toolPath,\n        ),\n      );\n      return registry.mount(atom);\n    },\n    [registry, workspace.accountId, workspace.enabled, workspace.workspaceId],\n  );\n};\n\nexport const useCreateSource = () =>\n  useSourceMutation<CreateSourcePayload, Source, Source>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.create({\n            path: {\n              workspaceId,\n            },\n            payload,\n          }),\n        }),\n      [],\n    ),\n    {\n      optimisticUpdate: (context, payload) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const previousList = getCachedAtomValue(context.registry, listAtom);\n        if (previousList === undefined) {\n          return;\n        }\n\n        const optimisticSource = createOptimisticSource({\n          workspaceId: context.workspaceId,\n          payload,\n        });\n        setCachedAtomValue(context.registry, listAtom, [optimisticSource, ...previousList]);\n        return {\n          value: optimisticSource,\n          rollback: () => {\n            setCachedAtomValue(context.registry, listAtom, previousList);\n          },\n        };\n      },\n      onSuccess: (context, _payload, source, optimisticSource) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const currentList = getCachedAtomValue(context.registry, listAtom);\n        if (currentList !== undefined) {\n          const withoutOptimistic = optimisticSource\n            ? currentList.filter((candidate) => candidate.id !== optimisticSource.id)\n            : currentList;\n          setCachedAtomValue(context.registry, listAtom, upsertSourceInList(withoutOptimistic, source));\n        }\n\n        setCachedAtomValue(\n          context.registry,\n          sourceAtom(encodeSourceKey(true, context.workspaceId, context.accountId, source.id)),\n          source,\n        );\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n        });\n      },\n    },\n  );\n\nexport const useUpdateSource = () =>\n  useSourceMutation<{ sourceId: Source[\"id\"]; payload: UpdateSourcePayload }, Source>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.update({\n            path: {\n              workspaceId,\n              sourceId: payload.sourceId,\n            },\n            payload: payload.payload,\n          }),\n        }),\n      [],\n    ),\n    {\n      optimisticUpdate: (context, input) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const detailAtom = sourceAtom(encodeSourceKey(true, context.workspaceId, context.accountId, input.sourceId));\n        const previousList = getCachedAtomValue(context.registry, listAtom);\n        const previousSource = getCachedAtomValue(context.registry, detailAtom)\n          ?? previousList?.find((source) => source.id === input.sourceId);\n        if (previousSource === undefined) {\n          return;\n        }\n\n        const optimisticSource = applyUpdatePayloadToSource(previousSource, input.payload);\n        if (previousList !== undefined) {\n          setCachedAtomValue(context.registry, listAtom, upsertSourceInList(previousList, optimisticSource));\n        }\n        setCachedAtomValue(context.registry, detailAtom, optimisticSource);\n\n        return () => {\n          if (previousList !== undefined) {\n            setCachedAtomValue(context.registry, listAtom, previousList);\n          }\n          setCachedAtomValue(context.registry, detailAtom, previousSource);\n        };\n      },\n      onSuccess: (context, input, source) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const detailAtom = sourceAtom(encodeSourceKey(true, context.workspaceId, context.accountId, input.sourceId));\n        const currentList = getCachedAtomValue(context.registry, listAtom);\n        if (currentList !== undefined) {\n          setCachedAtomValue(context.registry, listAtom, upsertSourceInList(currentList, source));\n        }\n        setCachedAtomValue(context.registry, detailAtom, source);\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n          sourceId: input.sourceId,\n        });\n      },\n    },\n  );\n\nexport const useStartSourceOAuth = () =>\n  useSourceMutation<StartSourceOAuthPayload, StartSourceOAuthResult>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.oauth.startSourceAuth({\n            path: {\n              workspaceId,\n            },\n            payload,\n          }),\n        }),\n      [],\n    ),\n  );\n\nexport const useRemoveSource = () =>\n  useSourceMutation<Source[\"id\"], SourceRemoveResult>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.remove({\n            path: {\n              workspaceId,\n              sourceId: payload,\n            },\n          }),\n        }),\n      [],\n    ),\n    {\n      optimisticUpdate: (context, sourceId) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const previousList = getCachedAtomValue(context.registry, listAtom);\n        if (previousList === undefined) {\n          return;\n        }\n\n        setCachedAtomValue(context.registry, listAtom, removeSourceFromList(previousList, sourceId));\n        return () => {\n          setCachedAtomValue(context.registry, listAtom, previousList);\n        };\n      },\n      onSuccess: (context, sourceId) => {\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n          sourceId,\n        });\n      },\n    },\n  );\n\nexport const useDiscoverSource = () =>\n  useSourceMutation<DiscoverSourcePayload, SourceDiscoveryResult>(\n    React.useCallback(\n      ({ accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.discover({\n            payload,\n          }),\n        }),\n      [],\n    ),\n  );\n\nexport const useConnectSource = () =>\n  useSourceMutation<ConnectSourcePayload, ConnectSourceResult, Source>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.connect({\n            path: {\n              workspaceId,\n            },\n            payload,\n          } as any),\n        }),\n      [],\n    ),\n    {\n      onSuccess: (context, _payload, result) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const currentList = getCachedAtomValue(context.registry, listAtom);\n        if (currentList !== undefined) {\n          setCachedAtomValue(context.registry, listAtom, upsertSourceInList(currentList, result.source));\n        }\n\n        setCachedAtomValue(\n          context.registry,\n          sourceAtom(encodeSourceKey(true, context.workspaceId, context.accountId, result.source.id)),\n          result.source,\n        );\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n        });\n      },\n    },\n  );\n\nexport const useConnectSourceBatch = () =>\n  useSourceMutation<ConnectSourceBatchPayload, ConnectSourceBatchResult>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.connectBatch({\n            path: {\n              workspaceId,\n            },\n            payload,\n          } as any),\n        }),\n      [],\n    ),\n    {\n      onSuccess: (context, _payload, result) => {\n        const listAtom = sourcesAtom(encodeSourcesKey(true, context.workspaceId, context.accountId));\n        const currentList = getCachedAtomValue(context.registry, listAtom);\n        if (currentList !== undefined) {\n          let nextList = currentList;\n          for (const entry of result.results) {\n            nextList = upsertSourceInList(nextList, entry.source);\n            setCachedAtomValue(\n              context.registry,\n              sourceAtom(encodeSourceKey(true, context.workspaceId, context.accountId, entry.source.id)),\n              entry.source,\n            );\n          }\n          setCachedAtomValue(context.registry, listAtom, nextList);\n        }\n\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n        });\n      },\n    },\n  );\n\nexport const useCreateWorkspaceOauthClient = () =>\n  useSourceMutation<CreateWorkspaceOauthClientPayload, WorkspaceOauthClient>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.createWorkspaceOauthClient({\n            path: {\n              workspaceId,\n            },\n            payload,\n          }),\n        }),\n      [],\n    ),\n    {\n      onSuccess: (context) => {\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n        });\n      },\n    },\n  );\n\nexport const useRemoveWorkspaceOauthClient = () =>\n  useSourceMutation<WorkspaceOauthClient[\"id\"], { removed: boolean }>(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.removeWorkspaceOauthClient({\n            path: {\n              workspaceId,\n              oauthClientId: payload,\n            },\n          }),\n        }),\n      [],\n    ),\n    {\n      onSuccess: (context) => {\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n        });\n      },\n    },\n  );\n\nexport const useRemoveProviderAuthGrant = () =>\n  useSourceMutation<\n    Extract<Source[\"auth\"], { kind: \"provider_grant_ref\" }>[\"grantId\"],\n    { removed: boolean }\n  >(\n    React.useCallback(\n      ({ workspaceId, accountId, payload }) =>\n        runControlPlane({\n          accountId,\n          execute: (client) => client.sources.removeProviderAuthGrant({\n            path: {\n              workspaceId,\n              grantId: payload,\n            },\n          }),\n        }),\n      [],\n    ),\n    {\n      onSuccess: (context) => {\n        context.invalidateQueries({\n          workspaceId: context.workspaceId,\n          accountId: context.accountId,\n        });\n      },\n    },\n  );\n\nexport type {\n  CompleteSourceOAuthResult,\n  ConnectSourceBatchPayload,\n  ConnectSourceBatchResult,\n  ConnectSourcePayload,\n  ConnectSourceResult,\n  CreateSecretPayload,\n  CreateSecretResult,\n  CreateSourcePayload,\n  CreateWorkspaceOauthClientPayload,\n  DeleteSecretResult,\n  DiscoverSourcePayload,\n  InstanceConfig,\n  LocalInstallation,\n\n  SecretListItem,\n  Source,\n  SourceDiscoveryResult,\n  SourceInspection,\n  SourceInspectionDiscoverResult,\n  SourceInspectionToolDetail,\n  StartSourceOAuthPayload,\n  StartSourceOAuthResult,\n  UpdateSecretPayload,\n  UpdateSecretResult,\n  UpdateSourcePayload,\n  WorkspaceOauthClient,\n};\n"
  },
  {
    "path": "packages/clients/react/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\", \"DOM\"],\n    \"jsx\": \"react-jsx\",\n    \"types\": [\"bun-types\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.tsx\"\n  ]\n}\n"
  },
  {
    "path": "packages/clients/react/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    environment: \"node\",\n    include: [\"src/**/*.test.ts\", \"src/**/*.test.tsx\"],\n  },\n});\n"
  },
  {
    "path": "packages/dev/kitchen-sink/CHANGELOG.md",
    "content": "# @executor/kitchen-sink\n\n## null\n\n### Patch Changes\n\n- @executor/ai-sdk-adapter@null\n- @executor/codemode-core@null\n- @executor/source-openapi@null\n- @executor/control-plane@null\n- @executor/runtime-ses@null\n"
  },
  {
    "path": "packages/dev/kitchen-sink/package.json",
    "content": "{\n  \"name\": \"@executor/kitchen-sink\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\",\n    \"demo\": \"bun run src/playground.ts\"\n  },\n  \"dependencies\": {\n    \"@effect/platform\": \"catalog:\",\n    \"@executor/ai-sdk-adapter\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"@executor/source-openapi\": \"workspace:*\",\n    \"@executor/control-plane\": \"workspace:*\",\n    \"@executor/runtime-ses\": \"workspace:*\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/dev/kitchen-sink/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class KitchenSinkEffectError extends Data.TaggedError(\n  \"KitchenSinkEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const kitchenSinkEffectError = (\n  module: string,\n  message: string,\n) => new KitchenSinkEffectError({ module, message });\n"
  },
  {
    "path": "packages/dev/kitchen-sink/src/index.ts",
    "content": "export {}\n"
  },
  {
    "path": "packages/dev/kitchen-sink/src/kitchen-sink.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  createCodeTool,\n} from \"@executor/ai-sdk-adapter/ai\";\nimport {\n  allowAllToolInteractions,\n  makeToolInvokerFromTools,\n  toExecutorTool,\n} from \"@executor/codemode-core\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\nimport { kitchenSinkEffectError } from \"./effect-errors\";\n\nconst numberPairInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    a: Schema.Number,\n    b: Schema.Number,\n  }),\n);\n\nconst messageInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    message: Schema.String,\n  }),\n);\n\nconst tools = {\n  \"math.add\": {\n    description: \"Add two numbers\",\n    inputSchema: numberPairInputSchema,\n    execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n  },\n  \"notifications.send\": toExecutorTool({\n    tool: {\n      description: \"Send a message\",\n      inputSchema: messageInputSchema,\n      execute: ({ message }: { message: string }) => ({ delivered: true, message }),\n    },\n    metadata: {\n      interaction: \"required\",\n    },\n  }),\n};\n\ndescribe(\"kitchen-sink\", () => {\n  it.effect(\"executes code with SES runtime\", () =>\n    Effect.gen(function* () {\n      const executor = makeSesExecutor();\n      const toolInvoker = makeToolInvokerFromTools({\n        tools,\n        onToolInteraction: allowAllToolInteractions,\n      });\n\n      const output = yield* executor.execute(\n        [\n          \"const math = await tools.math.add({ a: 19, b: 23 });\",\n          \"await tools.notifications.send({ message: `sum is ${math.sum}` });\",\n          \"return math;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 42 });\n    }),\n  );\n\n  it.effect(\"executes through lazy tool invoker\", () =>\n    Effect.gen(function* () {\n      const executor = makeSesExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        \"return await tools.math.add({ a: 40, b: 2 });\",\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 42 });\n    }),\n  );\n\n  it.effect(\"does not expose process inside SES sandbox\", () =>\n    Effect.gen(function* () {\n      const executor = makeSesExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\"return typeof process;\", toolInvoker);\n\n      expect(output.result).toBe(\"undefined\");\n    }),\n  );\n\n  it.effect(\"createCodeTool wraps Effect execution for AI SDK\", () =>\n    Effect.gen(function* () {\n      const executor = makeSesExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n      const codemode = createCodeTool({ toolInvoker, executor });\n      const execute = (codemode as unknown as {\n        execute?: (input: { code: string }) => Promise<unknown>;\n      }).execute;\n\n      if (!execute) {\n        return yield* kitchenSinkEffectError(\"kitchen-sink.test\", \"Code tool execute function is missing\");\n      }\n\n      const output = yield* Effect.tryPromise({\n        try: () => execute({ code: \"return await tools.math.add({ a: 1, b: 2 });\" }),\n        catch: (cause: unknown) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      });\n\n      expect(output).toEqual({\n        code: \"return await tools.math.add({ a: 1, b: 2 });\",\n        result: { sum: 3 },\n        logs: [],\n      });\n    }),\n  );\n\n  it.effect(\"fetch is disabled by default\", () =>\n    Effect.gen(function* () {\n      const executor = makeSesExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        'await fetch(\"https://example.com\"); return 1;',\n        toolInvoker,\n      );\n\n      expect(output.error).toContain(\"fetch is disabled in SES executor\");\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/dev/kitchen-sink/src/playground.ts",
    "content": "import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  makeToolInvokerFromTools,\n  toExecutorTool,\n} from \"@executor/codemode-core\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\n\nconst numberPairInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    a: Schema.Number,\n    b: Schema.Number,\n  }),\n);\n\nconst messageInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    message: Schema.String,\n  }),\n);\n\n\nconst tools = {\n  \"math.add\": {\n    inputSchema: numberPairInputSchema,\n    execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n  },\n  \"notifications.send\": toExecutorTool({\n    tool: {\n      inputSchema: messageInputSchema,\n      execute: ({ message }: { message: string }) => ({ delivered: true, message }),\n    },\n  }),\n};\n\nconst run = Effect.gen(function* () {\n  const outputWithTools = yield* makeSesExecutor().execute(\n    \"return await tools.math.add({ a: 20, b: 22 });\",\n    makeToolInvokerFromTools({ tools }),\n  );\n\n  const outputWithInvoker = yield* makeSesExecutor().execute(\n    \"return await tools.math.add({ a: 39, b: 3 });\",\n    makeToolInvokerFromTools({ tools }),\n  );\n\n  return {\n    outputWithTools,\n    outputWithInvoker,\n  };\n});\n\nconst result = await Effect.runPromise(run);\nconsole.log(JSON.stringify(result, null, 2));\n"
  },
  {
    "path": "packages/dev/kitchen-sink/src/source-runtime.test.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport {\n  HttpApi,\n  HttpApiEndpoint,\n  HttpApiGroup,\n  HttpApiSchema,\n  OpenApi,\n} from \"@effect/platform\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport { Schema as EffectSchema } from \"effect\";\n\nimport {\n  type SecretRef,\n  type Source,\n  type SourceId,\n  type WorkspaceId,\n} from \"@executor/control-plane\";\nimport {\n  createToolCatalogDiscovery,\n  createToolCatalogFromTools,\n  createSystemToolMap,\n  makeToolInvokerFromTools,\n  mergeToolMaps,\n  type ToolCatalog,\n  type ToolMap,\n  type ToolPath,\n  type ToolInvocationContext,\n  type ToolInvoker,\n} from \"@executor/codemode-core\";\nimport { createOpenApiToolsFromSpec } from \"@executor/source-openapi\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\nconst asSourceId = (value: string): SourceId => value as SourceId;\nconst asWorkspaceId = (value: string): WorkspaceId => value as WorkspaceId;\n\nconst tokenize = (value: string): string[] =>\n  value\n    .trim()\n    .toLowerCase()\n    .split(/\\s+/)\n    .filter(Boolean);\n\nconst normalizeSearchText = (...parts: ReadonlyArray<string | null | undefined>): string =>\n  parts\n    .flatMap((part) => {\n      const normalized = part?.trim();\n      return normalized ? [normalized] : [];\n    })\n    .join(\" \")\n    .toLowerCase();\n\nconst catalogNamespaceFromPath = (path: string): string => {\n  const [first, second] = path.split(\".\");\n  return second ? `${first}.${second}` : first;\n};\n\ntype StoredToolArtifactRecord = {\n  workspaceId: WorkspaceId;\n  path: string;\n  toolId: string;\n  sourceId: SourceId;\n  title: string | null;\n  description: string | null;\n  searchNamespace: string;\n  searchText: string;\n  inputSchema: unknown | null;\n  outputSchema: unknown | null;\n  providerKind: \"openapi\";\n  openApiMethod: \"get\" | \"put\" | \"post\" | \"delete\" | \"patch\" | \"head\" | \"options\" | \"trace\";\n  openApiPathTemplate: string | null;\n  openApiOperationHash: string | null;\n  openApiRawToolId: string | null;\n  openApiOperationId: string | null;\n  openApiTagsJson: string | null;\n  openApiRequestBodyRequired: boolean | null;\n  createdAt: number;\n  updatedAt: number;\n};\n\nconst toDescriptor = (\n  artifact: StoredToolArtifactRecord,\n  includeSchemas: boolean,\n) => ({\n  path: asToolPath(artifact.path),\n  sourceKey: artifact.sourceId,\n  description: artifact.description ?? artifact.title ?? undefined,\n  interaction: \"auto\" as const,\n  inputTypePreview: includeSchemas && artifact.inputSchema ? \"object\" : undefined,\n  outputTypePreview: includeSchemas && artifact.outputSchema ? \"output\" : undefined,\n  inputSchema: includeSchemas ? artifact.inputSchema ?? undefined : undefined,\n  outputSchema: includeSchemas ? artifact.outputSchema ?? undefined : undefined,\n});\n\ntype SourceCallContext = {\n  auth:\n    | { kind: \"none\" }\n    | {\n        kind: \"headers\";\n        headers: Record<string, string>;\n      };\n};\n\ninterface SecretMaterialProvider {\n  providerId: string;\n  get(input: {\n    handle: string;\n  }): Promise<string>;\n}\n\ninterface SecretMaterialRegistry {\n  get(input: {\n    ref: SecretRef;\n  }): Promise<string>;\n}\n\ninterface ProviderInvoker {\n  invoke(input: {\n    source: Source;\n    artifact: StoredToolArtifactRecord;\n    args: unknown;\n    runtime: SourceCallContext;\n    context?: ToolInvocationContext;\n  }): Promise<unknown>;\n}\n\ntype WorkspaceScopedSourceStore = {\n  registerSource(input: {\n    workspaceId: WorkspaceId;\n    source: Source;\n  }): Promise<void>;\n  getById(input: {\n    sourceId: SourceId;\n  }): Promise<Source | null>;\n};\n\ntype WorkspaceScopedToolStore = {\n  indexArtifacts(input: {\n    workspaceId: WorkspaceId;\n    artifacts: readonly StoredToolArtifactRecord[];\n  }): Promise<void>;\n  listNamespaces(input: {\n    workspaceId: WorkspaceId;\n    limit?: number;\n  }): Promise<\n    readonly {\n      namespace: string;\n      toolCount: number;\n    }[]\n  >;\n  list(input: {\n    workspaceId: WorkspaceId;\n    query?: string;\n    namespace?: string;\n    limit?: number;\n  }): Promise<readonly StoredToolArtifactRecord[]>;\n  getByPath(input: {\n    workspaceId: WorkspaceId;\n    path: ToolPath;\n  }): Promise<StoredToolArtifactRecord | null>;\n};\n\nconst createInMemorySourceStore = (): WorkspaceScopedSourceStore => {\n  const byWorkspace = new Map<string, Map<string, Source>>();\n\n  const getWorkspaceMap = (workspaceId: WorkspaceId) => {\n    const existing = byWorkspace.get(workspaceId);\n    if (existing) {\n      return existing;\n    }\n\n    const created = new Map<string, Source>();\n    byWorkspace.set(workspaceId, created);\n    return created;\n  };\n\n  return {\n    async registerSource({ workspaceId, source }) {\n      getWorkspaceMap(workspaceId).set(source.id, source);\n    },\n    async getById({ sourceId }) {\n      for (const workspace of byWorkspace.values()) {\n        const source = workspace.get(sourceId);\n        if (source) {\n          return source;\n        }\n      }\n      return null;\n    },\n  };\n};\n\nconst createInMemoryToolStore = (): WorkspaceScopedToolStore => {\n  const byWorkspace = new Map<string, Map<string, StoredToolArtifactRecord>>();\n\n  const getWorkspaceMap = (workspaceId: WorkspaceId) => {\n    const existing = byWorkspace.get(workspaceId);\n    if (existing) {\n      return existing;\n    }\n\n    const created = new Map<string, StoredToolArtifactRecord>();\n    byWorkspace.set(workspaceId, created);\n    return created;\n  };\n\n  return {\n    async indexArtifacts({ workspaceId, artifacts }) {\n      const workspace = getWorkspaceMap(workspaceId);\n      for (const artifact of artifacts) {\n        workspace.set(artifact.path, artifact);\n      }\n    },\n    async listNamespaces({ workspaceId, limit = 200 }) {\n      const counts = new Map<string, number>();\n      for (const artifact of getWorkspaceMap(workspaceId).values()) {\n        counts.set(\n          artifact.searchNamespace,\n          (counts.get(artifact.searchNamespace) ?? 0) + 1,\n        );\n      }\n\n      return [...counts.entries()]\n        .map(([namespace, toolCount]) => ({\n          namespace,\n          toolCount,\n        }))\n        .sort((left, right) => left.namespace.localeCompare(right.namespace))\n        .slice(0, limit);\n    },\n    async list({ workspaceId, namespace, query, limit = 200 }) {\n      return [...getWorkspaceMap(workspaceId).values()]\n        .filter((artifact) => !namespace || artifact.searchNamespace === namespace)\n        .filter((artifact) =>\n          !query || tokenize(query).every((token) => artifact.searchText.includes(token))\n        )\n        .slice(0, limit);\n    },\n    async getByPath({ workspaceId, path }) {\n      return getWorkspaceMap(workspaceId).get(path) ?? null;\n    },\n  };\n};\n\nconst createStaticSecretProvider = (\n  providerId: string,\n  values: Record<string, string>,\n): SecretMaterialProvider => {\n  const handles = new Map(Object.entries(values));\n\n  return {\n    providerId,\n    async get({ handle }) {\n      const value = handles.get(handle);\n      if (!value) {\n        throw new Error(`Unknown secret handle ${providerId}:${handle}`);\n      }\n      return value;\n    },\n  };\n};\n\nconst createSecretRegistry = (\n  providers: readonly SecretMaterialProvider[],\n): SecretMaterialRegistry => {\n  const byId = new Map(providers.map((provider) => [provider.providerId, provider]));\n\n  return {\n    async get({ ref }) {\n      const provider = byId.get(ref.providerId);\n      if (!provider) {\n        throw new Error(`Unknown secret provider ${ref.providerId}`);\n      }\n      return provider.get({ handle: ref.handle });\n    },\n  };\n};\n\nconst resolveSourceCallContext = (input: {\n  secretRegistry: SecretMaterialRegistry;\n}) =>\n  async (source: Source): Promise<SourceCallContext> => {\n    switch (source.auth.kind) {\n      case \"none\":\n        return { auth: { kind: \"none\" } };\n      case \"bearer\": {\n        const token = await input.secretRegistry.get({ ref: source.auth.token });\n        return {\n          auth: {\n            kind: \"headers\",\n            headers: {\n              [source.auth.headerName]: `${source.auth.prefix}${token}`,\n            },\n          },\n        };\n      }\n      case \"oauth2\": {\n        const token = await input.secretRegistry.get({ ref: source.auth.accessToken });\n        return {\n          auth: {\n            kind: \"headers\",\n            headers: {\n              [source.auth.headerName]: `${source.auth.prefix}${token}`,\n            },\n          },\n        };\n      }\n      case \"oauth2_authorized_user\":\n        throw new Error(\"oauth2_authorized_user auth requires persistence-backed runtime resolution\");\n      case \"provider_grant_ref\":\n        throw new Error(\"provider_grant_ref auth requires persistence-backed runtime resolution\");\n      case \"mcp_oauth\":\n        throw new Error(\"mcp_oauth auth requires persistence-backed runtime resolution\");\n    }\n  };\n\nconst createProviderInvoker = (): ProviderInvoker => ({\n  async invoke({ source, artifact, args, runtime, context }) {\n    const invocation = {\n      method: artifact.openApiMethod,\n      pathTemplate: artifact.openApiPathTemplate,\n      operationHash: artifact.openApiOperationHash,\n    };\n\n    return {\n      sourceId: source.id,\n      path: artifact.path,\n      provider: artifact.providerKind,\n      invocation,\n      args,\n      auth: runtime.auth,\n      workspaceId: context?.workspaceId ?? null,\n      runId: context?.runId ?? null,\n    };\n  },\n});\n\nconst createWorkspaceToolCatalog = (input: {\n  workspaceId: WorkspaceId;\n  toolStore: WorkspaceScopedToolStore;\n}): ToolCatalog => ({\n  listNamespaces: ({ limit }) =>\n    Effect.promise(() =>\n      input.toolStore.listNamespaces({\n        workspaceId: input.workspaceId,\n        limit,\n      }).then((namespaces) =>\n        namespaces.map((namespace) => ({\n          namespace: namespace.namespace,\n          toolCount: namespace.toolCount,\n        }))\n      )\n    ),\n  listTools: ({ namespace, query, limit, includeSchemas = false }) =>\n    Effect.promise(() =>\n      input.toolStore.list({\n        workspaceId: input.workspaceId,\n        ...(namespace !== undefined ? { namespace } : {}),\n        ...(query !== undefined ? { query } : {}),\n        limit,\n      }).then((artifacts) => artifacts.map((artifact) => toDescriptor(artifact, includeSchemas)))\n    ),\n  getToolByPath: ({ path, includeSchemas }) =>\n    Effect.promise(() =>\n      input.toolStore.getByPath({\n        workspaceId: input.workspaceId,\n        path,\n      }).then((artifact) => (artifact ? toDescriptor(artifact, includeSchemas) : null))\n    ),\n  searchTools: ({ query, namespace, limit }) =>\n    Effect.promise(() =>\n      input.toolStore.list({\n        workspaceId: input.workspaceId,\n        ...(namespace !== undefined ? { namespace } : {}),\n        query,\n        limit: 500,\n      }).then((artifacts) => {\n        const queryTokens = tokenize(query);\n\n        return artifacts\n          .map((artifact) => {\n            const score = queryTokens.reduce(\n              (total, token) => total + (artifact.searchText.includes(token) ? 1 : 0),\n              0,\n            );\n\n            return {\n              path: asToolPath(artifact.path),\n              score,\n            };\n          })\n          .filter((hit) => hit.score > 0)\n          .sort((left, right) => right.score - left.score)\n          .slice(0, limit);\n      })\n    ),\n});\n\nconst createWorkspaceToolInvoker = (input: {\n  workspaceId: WorkspaceId;\n  sourceStore: WorkspaceScopedSourceStore;\n  toolStore: WorkspaceScopedToolStore;\n  resolveSourceCallContext: (source: Source) => Promise<SourceCallContext>;\n  providerInvoker: ProviderInvoker;\n}): ToolInvoker => ({\n  invoke: (() => {\n    const catalog = createWorkspaceToolCatalog({\n      workspaceId: input.workspaceId,\n      toolStore: input.toolStore,\n    });\n    const systemTools = createSystemToolMap({\n      catalog,\n      sourceKey: \"system\",\n    });\n    const systemToolPaths = new Set(Object.keys(systemTools));\n    const systemToolInvoker = makeToolInvokerFromTools({\n      tools: systemTools,\n      sourceKey: \"system\",\n    });\n\n    return ({ path, args, context }) =>\n      systemToolPaths.has(path)\n        ? systemToolInvoker.invoke({ path, args, context })\n        : Effect.tryPromise({\n          try: async () => {\n        const mergedContext: ToolInvocationContext = {\n          ...context,\n          workspaceId: input.workspaceId,\n        };\n\n        const artifact = await input.toolStore.getByPath({\n          workspaceId: input.workspaceId,\n          path: asToolPath(path),\n        });\n        if (!artifact) {\n          throw new Error(`Unknown tool path: ${path}`);\n        }\n\n        const source = await input.sourceStore.getById({\n          sourceId: artifact.sourceId,\n        });\n        if (!source) {\n          throw new Error(`Unknown source for tool path: ${path}`);\n        }\n\n        const runtime = await input.resolveSourceCallContext(source);\n\n        return input.providerInvoker.invoke({\n          source,\n          artifact,\n          args,\n          runtime,\n          context: mergedContext,\n        });\n          },\n          catch: (cause) => (cause instanceof Error ? cause : new Error(String(cause))),\n        });\n  })(),\n});\n\nconst toolInvokerFromWorkspace = (input: {\n  workspaceId: WorkspaceId;\n  sourceStore: WorkspaceScopedSourceStore;\n  toolStore: WorkspaceScopedToolStore;\n  secretRegistry: SecretMaterialRegistry;\n  providerInvoker?: ProviderInvoker;\n}): ToolInvoker =>\n  createWorkspaceToolInvoker({\n    workspaceId: input.workspaceId,\n    sourceStore: input.sourceStore,\n    toolStore: input.toolStore,\n    resolveSourceCallContext: resolveSourceCallContext({\n      secretRegistry: input.secretRegistry,\n    }),\n    providerInvoker: input.providerInvoker ?? createProviderInvoker(),\n  });\n\nconst bearerSourceAuth = (input: {\n  providerId: string;\n  handle: string;\n}): Source[\"auth\"] => ({\n  kind: \"bearer\",\n  headerName: \"Authorization\",\n  prefix: \"Bearer \",\n  token: {\n    providerId: input.providerId,\n    handle: input.handle,\n  },\n});\n\nconst openApiSource = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  displayName: string;\n  baseUrl: string;\n  specUrl?: string;\n  namespace?: string;\n  auth: Source[\"auth\"];\n}): Source => ({\n  id: input.sourceId,\n  workspaceId: input.workspaceId,\n  name: input.displayName,\n  kind: \"openapi\",\n  endpoint: input.baseUrl,\n  status: \"connected\",\n  enabled: true,\n  namespace: input.namespace ?? null,\n  bindingVersion: 1,\n  binding: {\n    specUrl: input.specUrl ?? null,\n    defaultHeaders: null,\n  },\n  importAuthPolicy: \"reuse_runtime\",\n  importAuth: { kind: \"none\" },\n  auth: input.auth,\n  sourceHash: null,\n  lastError: null,\n  createdAt: 0,\n  updatedAt: 0,\n});\n\nconst openApiArtifact = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  path: ToolPath;\n  toolId: string;\n  title: string;\n  description?: string;\n  method: NonNullable<StoredToolArtifactRecord[\"openApiMethod\"]>;\n  pathTemplate: string;\n  operationHash?: string;\n  inputSchema?: unknown | null;\n  outputSchema?: unknown | null;\n}): StoredToolArtifactRecord => {\n  const path = input.path as string;\n  const description =\n    input.description ?? `${input.method.toUpperCase()} ${input.pathTemplate}`;\n\n  return {\n    workspaceId: input.workspaceId,\n    path,\n    toolId: input.toolId,\n    sourceId: input.sourceId,\n    title: input.title,\n    description,\n    searchNamespace: catalogNamespaceFromPath(path),\n    searchText: normalizeSearchText(\n      path,\n      catalogNamespaceFromPath(path),\n      input.title,\n      description,\n      input.method.toUpperCase(),\n      input.pathTemplate,\n    ),\n    inputSchema: input.inputSchema ?? null,\n    outputSchema: input.outputSchema ?? null,\n    providerKind: \"openapi\",\n    openApiMethod: input.method,\n    openApiPathTemplate: input.pathTemplate,\n    openApiOperationHash: input.operationHash ?? input.toolId,\n    openApiRawToolId: input.toolId,\n    openApiOperationId: input.toolId,\n    openApiTagsJson: null,\n    openApiRequestBodyRequired: null,\n    createdAt: 0,\n    updatedAt: 0,\n  };\n};\n\nconst numberPairInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    a: Schema.Number,\n    b: Schema.Number,\n  }),\n);\n\nconst createDiscoveryBackedToolMap = (input: {\n  tools: ToolMap;\n  namespace: string;\n  sourceKey?: string;\n}) => {\n  const sourceKey = input.sourceKey ?? \"in_memory.tools\";\n  const catalog = createToolCatalogFromTools({\n    tools: input.tools,\n    defaultNamespace: input.namespace,\n  });\n  const discovery = createToolCatalogDiscovery({ catalog });\n\n  return {\n    executeDescription: discovery.executeDescription,\n    tools: mergeToolMaps([\n      input.tools,\n      createSystemToolMap({\n        catalog,\n        sourceKey,\n      }),\n    ]),\n  };\n};\n\nconst ownerParam = HttpApiSchema.param(\"owner\", EffectSchema.String);\nconst repoParam = HttpApiSchema.param(\"repo\", EffectSchema.String);\n\nclass GeneratedReposApi extends HttpApiGroup.make(\"repos\")\n  .add(\n    HttpApiEndpoint.get(\"getRepo\")`/repos/${ownerParam}/${repoParam}`\n      .addSuccess(EffectSchema.Unknown),\n  ) {}\n\nclass GeneratedApi extends HttpApi.make(\"generated\").add(GeneratedReposApi) {}\n\nconst generatedOpenApiSpec = OpenApi.fromApi(GeneratedApi);\n\ntype OpenApiTestServer = {\n  baseUrl: string;\n  requests: Array<{\n    method: string;\n    path: string;\n    authorization: string | null;\n  }>;\n  close: () => Promise<void>;\n};\n\nconst makeOpenApiTestServer = Effect.acquireRelease(\n  Effect.promise<OpenApiTestServer>(\n    () =>\n      new Promise<OpenApiTestServer>((resolve, reject) => {\n        const requests: OpenApiTestServer[\"requests\"] = [];\n\n        const server = createServer((req, res) => {\n          requests.push({\n            method: req.method ?? \"GET\",\n            path: req.url ?? \"/\",\n            authorization:\n              typeof req.headers.authorization === \"string\"\n                ? req.headers.authorization\n                : null,\n          });\n\n          res.statusCode = 200;\n          res.setHeader(\"content-type\", \"application/json\");\n          res.end(\n            JSON.stringify({\n              ok: true,\n              path: req.url ?? \"/\",\n              authorization:\n                typeof req.headers.authorization === \"string\"\n                  ? req.headers.authorization\n                  : null,\n            }),\n          );\n        });\n\n        server.once(\"error\", reject);\n        server.listen(0, \"127.0.0.1\", () => {\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"failed to resolve test server address\"));\n            return;\n          }\n\n          resolve({\n            baseUrl: `http://127.0.0.1:${address.port}`,\n            requests,\n            close: async () => {\n              await new Promise<void>((closeResolve, closeReject) => {\n                server.close((error) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n                  closeResolve();\n                });\n              });\n            },\n          });\n        });\n      }),\n  ),\n  (server) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\ndescribe(\"source runtime\", () => {\n  it.effect(\"searches serialized workspace tools and calls one\", () =>\n    Effect.gen(function* () {\n      const workspaceId = asWorkspaceId(\"workspace_123\");\n      const sourceStore = createInMemorySourceStore();\n      const toolStore = createInMemoryToolStore();\n      const secretRegistry = createSecretRegistry([\n        createStaticSecretProvider(\"local\", {\n          \"github-db-token\": \"ghp_from_db\",\n        }),\n      ]);\n\n      const githubSource = openApiSource({\n        workspaceId,\n        sourceId: asSourceId(\"github\"),\n        displayName: \"GitHub API\",\n        baseUrl: \"https://api.github.com\",\n        specUrl: \"https://api.github.com/openapi.json\",\n        namespace: \"github\",\n        auth: bearerSourceAuth({\n          providerId: \"local\",\n          handle: \"github-db-token\",\n        }),\n      });\n\n      yield* Effect.promise(() =>\n        sourceStore.registerSource({\n          workspaceId,\n          source: githubSource,\n        })\n      );\n      yield* Effect.promise(() =>\n        toolStore.indexArtifacts({\n          workspaceId,\n          artifacts: [\n            openApiArtifact({\n              workspaceId,\n              sourceId: githubSource.id,\n              path: asToolPath(\"github.issues.list\"),\n              toolId: \"issues.list\",\n              title: \"List issues\",\n              description: \"Serialized artifact loaded from a database row\",\n              method: \"get\",\n              pathTemplate: \"/repos/{owner}/{repo}/issues\",\n            }),\n          ],\n        })\n      );\n\n      const toolInvoker = toolInvokerFromWorkspace({\n        workspaceId,\n        sourceStore,\n        toolStore,\n        secretRegistry,\n      });\n      const workspaceCatalog = createWorkspaceToolCatalog({\n        workspaceId,\n        toolStore,\n      });\n      const executeDescription = yield* createToolCatalogDiscovery({\n        catalog: workspaceCatalog,\n      }).executeDescription;\n\n      const output = yield* makeSesExecutor().execute(\n        [\n          'const matches = await tools.discover({ query: \"github issues\", limit: 3 });',\n          \"const result = await tools.github.issues.list({ owner: 'vercel', repo: 'next.js' });\",\n          \"return { matches, result };\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toMatchObject({\n        matches: {\n          bestPath: \"github.issues.list\",\n          results: [\n            {\n              path: \"github.issues.list\",\n              score: expect.any(Number),\n              description: \"Serialized artifact loaded from a database row\",\n              interaction: \"auto\",\n            },\n          ],\n          total: 1,\n        },\n        result: {\n          provider: \"openapi\",\n          path: \"github.issues.list\",\n          auth: {\n            kind: \"headers\",\n            headers: {\n              Authorization: \"Bearer ghp_from_db\",\n            },\n          },\n          workspaceId,\n        },\n      });\n      expect(executeDescription).toBe(\n        [\n          \"Execute TypeScript in sandbox; call tools via discovery workflow.\",\n          \"Available namespaces:\",\n          \"- github.issues\",\n          \"Workflow:\",\n          '1) const matches = await tools.discover({ query: \"<intent>\", limit: 12 });',\n          \"2) const details = await tools.describe.tool({ path, includeSchemas: true });\",\n          \"3) Read details.inputSchema/details.outputSchema when you need the projected shape.\",\n          \"4) Call selected tools.<path>(input).\",\n          \"Do not use fetch; use tools.* only.\",\n        ].join(\"\\n\"),\n      );\n    }),\n  );\n\n  it.scoped(\"loads an api from inline sources and calls it\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeOpenApiTestServer;\n\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"github\",\n        openApiSpec: generatedOpenApiSpec,\n        baseUrl: server.baseUrl,\n        namespace: \"github\",\n        credentialHeaders: {\n          Authorization: \"Bearer ghp_from_keychain\",\n        },\n      });\n\n      const discoveryBacked = createDiscoveryBackedToolMap({\n        tools: extracted.tools,\n        namespace: \"github\",\n        sourceKey: \"github.openapi\",\n      });\n\n      const toolInvoker = makeToolInvokerFromTools({\n        tools: discoveryBacked.tools,\n      });\n\n      const output = yield* makeSesExecutor().execute(\n        [\n          'const matches = await tools.discover({ query: \"github repo\", limit: 3 });',\n          \"const result = await tools.github.repos.getRepo({ owner: 'vercel', repo: 'ai' });\",\n          \"return { matches, result };\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({\n        matches: {\n          bestPath: \"github.repos.getRepo\",\n          results: [\n            {\n              path: \"github.repos.getRepo\",\n              score: expect.any(Number),\n              description: \"GET /repos/{owner}/{repo}\",\n              interaction: \"auto\",\n              inputTypePreview: \"{ owner: string, repo: string }\",\n              outputTypePreview: \"unknown\",\n            },\n          ],\n          total: 1,\n        },\n        result: {\n          ok: true,\n          path: \"/repos/vercel/ai\",\n          authorization: \"Bearer ghp_from_keychain\",\n        },\n      });\n      expect(yield* discoveryBacked.executeDescription).toBe(\n        [\n          \"Execute TypeScript in sandbox; call tools via discovery workflow.\",\n          \"Available namespaces:\",\n          \"- github\",\n          \"Workflow:\",\n          '1) const matches = await tools.discover({ query: \"<intent>\", limit: 12 });',\n          \"2) const details = await tools.describe.tool({ path, includeSchemas: true });\",\n          \"3) Read details.inputSchema/details.outputSchema when you need the projected shape.\",\n          \"4) Call selected tools.<path>(input).\",\n          \"Do not use fetch; use tools.* only.\",\n        ].join(\"\\n\"),\n      );\n      expect(server.requests).toEqual([\n        {\n          method: \"GET\",\n          path: \"/repos/vercel/ai\",\n          authorization: \"Bearer ghp_from_keychain\",\n        },\n      ]);\n    }),\n  );\n\n  it.effect(\"basic calling of tools via codemode\", () =>\n    Effect.gen(function* () {\n      const toolInvoker = makeToolInvokerFromTools({\n        tools: {\n          \"math.add\": {\n            description: \"Add two numbers\",\n            inputSchema: numberPairInputSchema,\n            execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n          },\n        },\n      });\n\n      const output = yield* makeSesExecutor().execute(\n        \"return await tools.math.add({ a: 20, b: 22 });\",\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 42 });\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/dev/kitchen-sink/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}"
  },
  {
    "path": "packages/dev/kitchen-sink/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    include: [\"src/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/hosts/ai-sdk/CHANGELOG.md",
    "content": "# @executor/ai-sdk-adapter\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n- @executor/runtime-ses@null\n"
  },
  {
    "path": "packages/hosts/ai-sdk/package.json",
    "content": "{\n  \"name\": \"@executor/ai-sdk-adapter\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./ai\": \"./src/ai.ts\",\n    \"./example\": \"./src/example.ts\",\n    \"./example-static\": \"./src/example-static.ts\",\n    \"./example-dynamic\": \"./src/example-dynamic.ts\",\n    \"./example-codemode-inproc\": \"./src/example-codemode-inproc.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"@executor/runtime-ses\": \"workspace:*\",\n    \"ai\": \"^6.0.0\",\n    \"effect\": \"catalog:\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/ai.ts",
    "content": "export {\n  CodeToolInputSchema,\n  createCodeTool,\n  createToolsFromAiSdkTools,\n  type AiSdkToolMap,\n  type CodeToolInput,\n} from \"./index\";\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class AiSdkEffectError extends Data.TaggedError(\n  \"AiSdkEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const aiSdkEffectError = (\n  module: string,\n  message: string,\n) => new AiSdkEffectError({ module, message });\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/example-codemode-inproc.ts",
    "content": "import { tool } from \"ai\";\nimport * as Effect from \"effect/Effect\";\nimport { z } from \"zod\";\n\nimport { makeToolInvokerFromTools } from \"@executor/codemode-core\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\n\nimport {\n  createCodeTool,\n  createToolsFromAiSdkTools,\n} from \"./index\";\n\nconst addNumbers = tool({\n  description: \"Add two numbers\",\n  inputSchema: z.object({ a: z.number(), b: z.number() }),\n  execute: async ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n});\n\nconst notify = tool({\n  description: \"Send notification message\",\n  inputSchema: z.object({ message: z.string() }),\n  execute: async ({ message }: { message: string }) => ({ delivered: true, message }),\n});\n\nconst tools = createToolsFromAiSdkTools({\n  tools: {\n    \"math.add\": addNumbers,\n    \"notifications.send\": notify,\n  },\n  sourceKey: \"in_memory.demo\",\n});\n\nconst executor = makeSesExecutor();\nconst toolInvoker = makeToolInvokerFromTools({ tools });\n\nexport const codemode = createCodeTool({\n  toolInvoker,\n  executor,\n});\n\nexport const runCodemodeDemo = async () =>\n  Effect.runPromise(\n    executor.execute(\n      [\n        \"const math = await tools.math.add({ a: 2, b: 3 });\",\n        \"await tools.notifications.send({ message: `sum is ${math.sum}` });\",\n        \"return math;\",\n      ].join(\"\\n\"),\n      toolInvoker,\n    ),\n  );\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/example-dynamic.ts",
    "content": "import * as Effect from \"effect/Effect\";\n\nimport {\n  type ToolCatalog,\n  type ToolPath,\n  createToolCatalogDiscovery,\n} from \"@executor/codemode-core\";\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst catalog: ToolCatalog = {\n  listNamespaces({ limit }) {\n    return Effect.succeed([\n      { namespace: \"src_api\", displayName: \"API Sources\", toolCount: 6800 },\n      { namespace: \"src_mcp\", displayName: \"MCP Sources\", toolCount: 3200 },\n    ].slice(0, limit));\n  },\n  listTools({ namespace }) {\n    return Effect.succeed([\n      {\n        path: asToolPath(\"source.src_api.github.issues.list\"),\n        sourceKey: \"source.src_api\",\n        description: \"Hydrated metadata for selected path\",\n        inputTypePreview: \"object\",\n        outputTypePreview: \"object\",\n      },\n    ].filter((tool) => !namespace || tool.path.startsWith(`source.${namespace}.`)));\n  },\n  getToolByPath({ path }) {\n    return Effect.succeed({\n      path,\n      sourceKey: \"source.src_api\",\n      description: \"Hydrated metadata for selected path\",\n      inputTypePreview: \"object\",\n      outputTypePreview: \"object\",\n    });\n  },\n  searchTools({ limit }) {\n    return Effect.succeed(\n      [\n        { path: asToolPath(\"source.src_api.github.issues.list\"), score: 0.99 },\n        { path: asToolPath(\"source.src_api.github.issues.create\"), score: 0.92 },\n      ].slice(0, limit),\n    );\n  },\n};\n\nexport const dynamicDemo = createToolCatalogDiscovery({\n  catalog,\n});\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/example-static.ts",
    "content": "import { tool } from \"ai\";\nimport { z } from \"zod\";\n\nimport { createStaticDiscoveryFromTools } from \"@executor/codemode-core\";\n\nimport { createToolsFromAiSdkTools } from \"./index\";\n\nconst listIssues = tool({\n  description: \"List repository issues\",\n  inputSchema: z.object({ owner: z.string(), repo: z.string() }),\n  execute: async ({ owner, repo }: { owner: string; repo: string }) => ({\n    items: [`${owner}/${repo}#1`],\n  }),\n});\n\nconst createIssue = tool({\n  description: \"Create repository issue\",\n  inputSchema: z.object({\n    owner: z.string(),\n    repo: z.string(),\n    title: z.string(),\n  }),\n  execute: async ({ owner, repo, title }: { owner: string; repo: string; title: string }) => ({\n    id: \"issue_123\",\n    owner,\n    repo,\n    title,\n  }),\n});\n\nconst wrappedTools = createToolsFromAiSdkTools({\n  tools: {\n    \"github.issues.list\": listIssues,\n    \"github.issues.create\": createIssue,\n  },\n  sourceKey: \"api.github\",\n});\n\nexport const staticDemo = createStaticDiscoveryFromTools({\n  tools: wrappedTools,\n  sourceKey: \"api.github\",\n});\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/example.ts",
    "content": "export { staticDemo } from \"./example-static\";\nexport { dynamicDemo } from \"./example-dynamic\";\nexport { codemode, runCodemodeDemo } from \"./example-codemode-inproc\";\n"
  },
  {
    "path": "packages/hosts/ai-sdk/src/index.ts",
    "content": "import { tool } from \"ai\";\nimport type { ToolSet } from \"ai\";\nimport * as Effect from \"effect/Effect\";\nimport { z } from \"zod\";\n\nimport {\n  createToolsFromRecord,\n  type CodeExecutor,\n  type CodeToolOutput,\n  type ExecuteResult,\n  type ExecutableTool,\n  type ToolMap,\n  type ToolInvoker,\n} from \"@executor/codemode-core\";\nimport { aiSdkEffectError } from \"./effect-errors\";\n\nexport type AiSdkToolMap = ToolSet;\n\nexport const CodeToolInputSchema = z.object({\n  code: z.string(),\n});\n\nexport type CodeToolInput = z.infer<typeof CodeToolInputSchema>;\n\nexport function createToolsFromAiSdkTools(input: {\n  tools: AiSdkToolMap;\n  sourceKey?: string;\n}): ToolMap {\n  return createToolsFromRecord({\n    tools: input.tools as Record<string, ExecutableTool>,\n    sourceKey: input.sourceKey,\n  });\n}\n\nexport function createCodeTool(input: {\n  toolInvoker: ToolInvoker;\n  executor: CodeExecutor;\n  description?: string;\n}) {\n  return tool({\n    description:\n      input.description\n      ?? [\n        \"Write JavaScript and run it against tools.\",\n        \"Use `await tools.<path>(input)` for tool calls.\",\n      ].join(\"\\n\"),\n    inputSchema: CodeToolInputSchema,\n    execute: ({ code }: CodeToolInput): Promise<CodeToolOutput> =>\n      Effect.runPromise(\n        input.executor.execute(code, input.toolInvoker).pipe(\n          Effect.flatMap((result: ExecuteResult) =>\n            result.error\n              ? Effect.fail(aiSdkEffectError(\"index\", result.error))\n              : Effect.succeed({\n                  code,\n                  result: result.result,\n                  logs: result.logs,\n                } satisfies CodeToolOutput),\n          ),\n          Effect.mapError((cause) =>\n            cause instanceof Error ? cause : new Error(String(cause)),\n          ),\n        ),\n      ),\n  });\n}\n"
  },
  {
    "path": "packages/hosts/ai-sdk/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/hosts/mcp/CHANGELOG.md",
    "content": "# @executor/executor-mcp\n\n## null\n\n### Patch Changes\n\n- @executor/control-plane@null\n"
  },
  {
    "path": "packages/hosts/mcp/package.json",
    "content": "{\n  \"name\": \"@executor/executor-mcp\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run --passWithNoTests\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@executor/control-plane\": \"workspace:*\",\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"effect\": \"catalog:\",\n    \"zod\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/hosts/mcp/src/index.ts",
    "content": "import type {\n  ExecutionEnvelope,\n  ControlPlaneRuntime,\n} from \"@executor/control-plane\";\nimport {\n  EXECUTOR_SOURCES_ADD_HELP_LINES,\n  ExecutionIdSchema,\n  RuntimeExecutionResolverService,\n  createExecution,\n  getExecution,\n  resumeExecution,\n} from \"@executor/control-plane\";\nimport * as Effect from \"effect/Effect\";\nimport * as Cause from \"effect/Cause\";\nimport * as Exit from \"effect/Exit\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { WebStandardStreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js\";\nimport { z } from \"zod/v4\";\n\nimport {\n  buildPausedResultText,\n  parseInteractionPayload,\n} from \"./paused-result\";\n\nconst pollingIntervalMs = 200;\n\nconst executeInputSchema = {\n  code: z.string().trim().min(1),\n};\n\nconst resumeInputSchema = {\n  resumePayload: z.object({\n    executionId: z.string().trim().min(1),\n  }),\n  response: z.object({\n    action: z.enum([\"accept\", \"decline\", \"cancel\"]),\n    content: z.record(z.string(), z.unknown()).optional(),\n  }).optional(),\n};\n\ntype ResumePayload = {\n  executionId: string;\n};\n\ntype ResumeResponseInput = {\n  action: \"accept\" | \"decline\" | \"cancel\";\n  content?: Record<string, unknown>;\n};\n\ntype ExecutorMcpToolResult = {\n  content: Array<{ type: \"text\"; text: string }>;\n  structuredContent: Record<string, unknown>;\n  isError?: boolean;\n};\n\nexport type ExecutorMcpRequestHandler = {\n  handleRequest: (request: Request) => Promise<Response>;\n  close: () => Promise<void>;\n};\n\nconst parseJsonValue = (value: string | null): unknown => {\n  if (value === null) {\n    return null;\n  }\n\n  try {\n    return JSON.parse(value);\n  } catch {\n    return value;\n  }\n};\n\nconst maxResultPreviewChars = 30_000;\n\nconst truncateText = (value: string, maxLength: number): string =>\n  value.length > maxLength\n    ? `${value.slice(0, maxLength)}\\n... [result preview truncated ${value.length - maxLength} chars]`\n    : value;\n\nconst formatResultPreview = (resultJson: string): string => {\n  try {\n    const parsed = JSON.parse(resultJson) as unknown;\n    const serialized = typeof parsed === \"string\" ? parsed : JSON.stringify(parsed, null, 2) ?? String(parsed);\n    return truncateText(serialized, maxResultPreviewChars);\n  } catch {\n    return truncateText(resultJson, maxResultPreviewChars);\n  }\n};\nconst runControlPlane = async <A, E, R>(\n  runtime: ControlPlaneRuntime,\n  effect: Effect.Effect<A, E, R>,\n): Promise<A> => {\n  const exit = await Effect.runPromiseExit(\n    effect.pipe(Effect.provide(runtime.runtimeLayer)) as Effect.Effect<A, E, never>,\n  );\n\n  if (Exit.isSuccess(exit)) {\n    return exit.value;\n  }\n\n  const error = Cause.squash(exit.cause);\n  if (error instanceof Error) {\n    // Preserve the original error with its stack trace and message rather\n    // than wrapping it in an opaque FiberFailure.\n    throw error;\n  }\n  throw error;\n};\n\nconst sleep = (ms: number) =>\n  new Promise<void>((resolve) => {\n    setTimeout(resolve, ms);\n  });\n\nconst supportsManagedElicitation = (server: McpServer): boolean => {\n  const capabilities = server.server.getClientCapabilities();\n  return Boolean(capabilities?.elicitation?.form) && Boolean(capabilities?.elicitation?.url);\n};\n\nconst interactionModeForServer = (server: McpServer): \"live_form\" | \"detach\" =>\n  supportsManagedElicitation(server) ? \"live_form\" : \"detach\";\n\ntype CatalogLike = {\n  listNamespaces: (input: { limit: number }) => Effect.Effect<\n    ReadonlyArray<{ namespace: string; displayName?: string }>,\n    unknown\n  >;\n};\n\nconst buildExecuteWorkflowText = (namespaces: readonly string[] = []): string =>\n  [\n    \"Execute TypeScript in sandbox; call tools via discovery workflow.\",\n    ...(namespaces.length > 0\n      ? [\n          \"Available namespaces:\",\n          ...namespaces.map((namespace) => `- ${namespace}`),\n        ]\n      : []),\n    \"Workflow:\",\n    '1) const matches = await tools.discover({ query: \"<intent>\", limit: 12 });',\n    \"2) const details = await tools.describe.tool({ path, includeSchemas: true });\",\n    \"3) Call selected tools.<path>(input).\",\n    '4) To connect a source, call tools.executor.sources.add(...) for MCP, OpenAPI, or GraphQL APIs.',\n    ...EXECUTOR_SOURCES_ADD_HELP_LINES,\n    \"5) If execution pauses for interaction, resume it with the returned resumePayload or the available resume flow.\",\n    \"Do not use fetch; use tools.* only.\",\n  ].join(\"\\n\");\n\nconst defaultExecuteDescription = buildExecuteWorkflowText();\n\nconst loadExecuteDescription = (runtime: ControlPlaneRuntime): Promise<string> =>\n  runControlPlane(\n    runtime,\n    Effect.gen(function* () {\n      const resolveExecutionEnvironment = yield* RuntimeExecutionResolverService;\n      const environment = yield* resolveExecutionEnvironment({\n        workspaceId: runtime.localInstallation.workspaceId,\n        accountId: runtime.localInstallation.accountId,\n        executionId: ExecutionIdSchema.make(\"exec_mcp_help\"),\n      });\n\n      const catalog = environment.catalog as CatalogLike | undefined;\n      if (!catalog) {\n        return defaultExecuteDescription;\n      }\n\n      const namespaces = yield* catalog.listNamespaces({ limit: 200 }).pipe(\n        Effect.map((items) =>\n          items.length > 0\n            ? items.map((item) => item.displayName ?? item.namespace)\n            : [\"none discovered yet\"],\n        ),\n        Effect.catchAll(() => Effect.succeed([\"none discovered yet\"])),\n      );\n\n      return buildExecuteWorkflowText(namespaces);\n    }).pipe(Effect.catchAll(() => Effect.succeed(defaultExecuteDescription))),\n  );\n\nconst summarizeExecution = (execution: ExecutionEnvelope[\"execution\"]): string => {\n  switch (execution.status) {\n    case \"completed\": {\n      if (execution.resultJson === null) {\n        return `Execution ${execution.id} completed.`;\n      }\n\n      return `Execution ${execution.id} completed.\\nResult:\\n${formatResultPreview(execution.resultJson)}`;\n    }\n    case \"failed\":\n      return execution.errorText\n        ? `Execution ${execution.id} failed: ${execution.errorText}`\n        : `Execution ${execution.id} failed.`;\n    case \"waiting_for_interaction\":\n      return `Execution ${execution.id} is waiting for interaction.`;\n    default:\n      return `Execution ${execution.id} is ${execution.status}.`;\n  }\n};\n\nconst executionStructuredContent = (envelope: ExecutionEnvelope): Record<string, unknown> => ({\n  executionId: envelope.execution.id,\n  status: envelope.execution.status,\n  result: parseJsonValue(envelope.execution.resultJson),\n  errorText: envelope.execution.errorText,\n  logs: parseJsonValue(envelope.execution.logsJson),\n});\n\nconst buildFinalResult = (\n  envelope: ExecutionEnvelope,\n  options: { isError?: boolean } = {},\n): ExecutorMcpToolResult => ({\n  content: [{ type: \"text\", text: summarizeExecution(envelope.execution) }],\n  structuredContent: executionStructuredContent(envelope),\n  ...(options.isError ? { isError: true } : {}),\n});\n\nconst buildPausedResult = (envelope: ExecutionEnvelope): ExecutorMcpToolResult => {\n  const interaction = envelope.pendingInteraction;\n  const parsed = interaction ? parseInteractionPayload(interaction) : null;\n\n  return {\n    content: [{\n      type: \"text\",\n      text: buildPausedResultText(envelope),\n    }],\n    structuredContent: {\n      executionId: envelope.execution.id,\n      status: \"waiting_for_interaction\",\n      interaction: interaction\n        ? {\n            id: interaction.id,\n            purpose: interaction.purpose,\n            kind: interaction.kind,\n            message: parsed?.message ?? \"Interaction required\",\n            mode: parsed?.mode ?? (interaction.kind === \"url\" ? \"url\" : \"form\"),\n            url: parsed?.url ?? null,\n            requestedSchema: parsed?.requestedSchema ?? null,\n          }\n        : null,\n      resumePayload: {\n        executionId: envelope.execution.id,\n      } satisfies ResumePayload,\n    },\n  };\n};\n\nconst buildToolResult = (envelope: ExecutionEnvelope): ExecutorMcpToolResult => {\n  switch (envelope.execution.status) {\n    case \"completed\":\n      return buildFinalResult(envelope);\n    case \"failed\":\n    case \"cancelled\":\n      return buildFinalResult(envelope, { isError: true });\n    case \"waiting_for_interaction\":\n      return buildPausedResult(envelope);\n    default:\n      return buildFinalResult(envelope);\n  }\n};\n\nconst waitForInteractionProgress = async (input: {\n  runtime: ControlPlaneRuntime;\n  workspaceId: string;\n  executionId: string;\n  pendingInteractionId: string;\n}): Promise<ExecutionEnvelope> => {\n  while (true) {\n    const next = await runControlPlane(\n      input.runtime,\n      getExecution({\n        workspaceId: input.workspaceId as never,\n        executionId: input.executionId as never,\n      }),\n    );\n\n    if (\n      next.execution.status !== \"waiting_for_interaction\"\n      || next.pendingInteraction?.id !== input.pendingInteractionId\n    ) {\n      return next;\n    }\n\n    await sleep(pollingIntervalMs);\n  }\n};\n\nconst driveExecutionWithElicitation = async (input: {\n  runtime: ControlPlaneRuntime;\n  workspaceId: string;\n  accountId: string;\n  server: McpServer;\n  envelope: ExecutionEnvelope;\n}): Promise<ExecutionEnvelope> => {\n  let current = input.envelope;\n\n  while (current.execution.status === \"waiting_for_interaction\") {\n    const pending = current.pendingInteraction;\n    if (pending === null) {\n      return current;\n    }\n\n    const parsed = parseInteractionPayload(pending);\n    if (!parsed) {\n      return current;\n    }\n\n    if (parsed.mode === \"form\") {\n      const response = await input.server.server.elicitInput({\n        mode: \"form\",\n        message: parsed.message,\n        requestedSchema: (parsed.requestedSchema ?? {\n          type: \"object\",\n          properties: {},\n        }) as never,\n      });\n\n      current = await runControlPlane(\n        input.runtime,\n        resumeExecution({\n          workspaceId: input.workspaceId as never,\n          executionId: current.execution.id as never,\n          payload: {\n            responseJson: JSON.stringify(response),\n            interactionMode: interactionModeForServer(input.server),\n          },\n          resumedByAccountId: input.accountId as never,\n        }),\n      );\n      continue;\n    }\n\n    const response = await input.server.server.elicitInput({\n      mode: \"url\",\n      message: parsed.message,\n      url: parsed.url ?? \"\",\n      elicitationId: parsed.elicitationId ?? pending.id,\n    });\n\n    if (response.action !== \"accept\") {\n      current = await runControlPlane(\n        input.runtime,\n        resumeExecution({\n          workspaceId: input.workspaceId as never,\n          executionId: current.execution.id as never,\n          payload: {\n            responseJson: JSON.stringify(response),\n            interactionMode: interactionModeForServer(input.server),\n          },\n          resumedByAccountId: input.accountId as never,\n        }),\n      );\n      continue;\n    }\n\n    current = await waitForInteractionProgress({\n      runtime: input.runtime,\n      workspaceId: input.workspaceId,\n      executionId: current.execution.id,\n      pendingInteractionId: pending.id,\n    });\n  }\n\n  return current;\n};\n\nconst driveExecutionWithoutElicitation = async (input: {\n  runtime: ControlPlaneRuntime;\n  workspaceId: string;\n  accountId: string;\n  executionId: string;\n  initialResponse?: ResumeResponseInput;\n}): Promise<ExecutionEnvelope> => {\n  let current = await runControlPlane(\n    input.runtime,\n    getExecution({\n      workspaceId: input.workspaceId as never,\n      executionId: input.executionId as never,\n    }),\n  );\n  let response = input.initialResponse;\n\n  while (current.execution.status === \"waiting_for_interaction\") {\n    const pending = current.pendingInteraction;\n    if (pending === null || response === undefined) {\n      return current;\n    }\n\n    current = await runControlPlane(\n      input.runtime,\n        resumeExecution({\n          workspaceId: input.workspaceId as never,\n          executionId: current.execution.id as never,\n          payload: {\n            responseJson: JSON.stringify(response),\n            interactionMode: \"detach\",\n          },\n          resumedByAccountId: input.accountId as never,\n        }),\n    );\n    response = undefined;\n  }\n\n  return current;\n};\n\nconst createExecutorMcpServer = async (config: {\n  runtime: ControlPlaneRuntime;\n}): Promise<McpServer> => {\n  const executeDescription = await loadExecuteDescription(config.runtime);\n  const server = new McpServer(\n    { name: \"executor\", version: \"1.0.0\" },\n    {\n      capabilities: {\n        tools: {},\n      },\n    },\n  );\n\n  const workspaceId = config.runtime.localInstallation.workspaceId;\n  const accountId = config.runtime.localInstallation.accountId;\n\n  const executeTool = server.registerTool(\n    \"execute\",\n    {\n      description: executeDescription,\n      inputSchema: executeInputSchema,\n    },\n    async ({ code }: { code: string }) => {\n      let created = await runControlPlane(\n        config.runtime,\n        createExecution({\n          workspaceId,\n          payload: {\n            code,\n            interactionMode: interactionModeForServer(server),\n          },\n          createdByAccountId: accountId,\n        }),\n      );\n\n      if (supportsManagedElicitation(server)) {\n        created = await driveExecutionWithElicitation({\n          runtime: config.runtime,\n          workspaceId,\n          accountId,\n          server,\n          envelope: created,\n        });\n      }\n\n      return buildToolResult(created);\n    },\n  );\n\n  const resumeTool = server.registerTool(\n    \"resume\",\n    {\n      description: [\n        \"Resume a paused executor execution using the resumePayload returned by execute.\",\n        \"Never call this without getting approval from the user first unless they explicitly state otherwise.\",\n      ].join(\"\\n\"),\n      inputSchema: resumeInputSchema,\n    },\n    async (\n      input: {\n        resumePayload: ResumePayload;\n        response?: ResumeResponseInput;\n      },\n    ) => {\n      const resumed = await driveExecutionWithoutElicitation({\n        runtime: config.runtime,\n        workspaceId,\n        accountId,\n        executionId: input.resumePayload.executionId,\n        initialResponse: input.response,\n      });\n\n      return buildToolResult(resumed);\n    },\n  );\n\n  const syncToolAvailability = () => {\n    if (supportsManagedElicitation(server)) {\n      executeTool.enable();\n      resumeTool.disable();\n      return;\n    }\n\n    executeTool.enable();\n    resumeTool.enable();\n  };\n\n  syncToolAvailability();\n  server.server.oninitialized = syncToolAvailability;\n\n  return server;\n};\n\nconst jsonErrorResponse = (status: number, code: number, message: string) =>\n  new Response(JSON.stringify({\n    jsonrpc: \"2.0\",\n    error: {\n      code,\n      message,\n    },\n    id: null,\n  }), {\n    status,\n    headers: {\n      \"content-type\": \"application/json\",\n    },\n  });\n\nexport const createExecutorMcpRequestHandler = (\n  runtime: ControlPlaneRuntime,\n): ExecutorMcpRequestHandler => {\n  const transports = new Map<string, WebStandardStreamableHTTPServerTransport>();\n  const servers = new Map<string, McpServer>();\n\n  const disposeSession = async (\n    sessionId: string,\n    options: { closeTransport?: boolean; closeServer?: boolean } = {},\n  ) => {\n    const transport = transports.get(sessionId);\n    const server = servers.get(sessionId);\n\n    transports.delete(sessionId);\n    servers.delete(sessionId);\n\n    if (options.closeTransport) {\n      await transport?.close().catch(() => undefined);\n    }\n\n    if (options.closeServer) {\n      await server?.close().catch(() => undefined);\n    }\n  };\n\n  return {\n    handleRequest: async (request) => {\n      const sessionId = request.headers.get(\"mcp-session-id\");\n      if (sessionId) {\n        const transport = transports.get(sessionId);\n        if (!transport) {\n          return jsonErrorResponse(404, -32001, \"Session not found\");\n        }\n\n        return transport.handleRequest(request);\n      }\n\n      let createdServer: McpServer | undefined;\n      const transport = new WebStandardStreamableHTTPServerTransport({\n        sessionIdGenerator: () => crypto.randomUUID(),\n        enableJsonResponse: true,\n        onsessioninitialized: (newSessionId) => {\n          transports.set(newSessionId, transport);\n          if (createdServer) {\n            servers.set(newSessionId, createdServer);\n          }\n        },\n        onsessionclosed: (closedSessionId) => {\n          void disposeSession(closedSessionId, { closeServer: true });\n        },\n      });\n\n      transport.onclose = () => {\n        const closedSessionId = transport.sessionId;\n        if (closedSessionId) {\n          void disposeSession(closedSessionId, { closeServer: true });\n        }\n      };\n\n      try {\n        createdServer = await createExecutorMcpServer({\n          runtime,\n        });\n        await createdServer.connect(transport);\n        const response = await transport.handleRequest(request);\n\n        if (!transport.sessionId) {\n          await transport.close().catch(() => undefined);\n          await createdServer.close().catch(() => undefined);\n        }\n\n        return response;\n      } catch (error) {\n        if (!transport.sessionId) {\n          await transport.close().catch(() => undefined);\n          await createdServer?.close().catch(() => undefined);\n        }\n\n        return jsonErrorResponse(\n          500,\n          -32603,\n          error instanceof Error ? error.message : \"Internal server error\",\n        );\n      }\n    },\n    close: async () => {\n      const sessionIds = new Set<string>([\n        ...transports.keys(),\n        ...servers.keys(),\n      ]);\n\n      await Promise.all(\n        [...sessionIds].map((sessionId) =>\n          disposeSession(sessionId, {\n            closeTransport: true,\n            closeServer: true,\n          }),\n        ),\n      );\n    },\n  };\n};\n"
  },
  {
    "path": "packages/hosts/mcp/src/paused-result.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport type { ExecutionEnvelope, ExecutionInteraction } from \"@executor/control-plane\";\n\nimport {\n  buildPausedResultText,\n  parseInteractionPayload,\n} from \"./paused-result\";\n\nconst makeInteraction = (patch: Partial<ExecutionInteraction> = {}): ExecutionInteraction => ({\n  id: \"exec_123:source_connect_oauth2:call_1\" as never,\n  executionId: \"exec_123\" as never,\n  status: \"pending\",\n  kind: \"url\",\n  purpose: \"source_connect_oauth2\",\n  payloadJson: JSON.stringify({\n    elicitation: {\n      mode: \"url\",\n      message: \"Finish connecting Axiom\",\n      url: \"https://mcp.axiom.co/authorize\",\n      elicitationId: \"oauth-session-123\",\n    },\n  }),\n  responseJson: null,\n  responsePrivateJson: null,\n  createdAt: 1,\n  updatedAt: 1,\n  ...patch,\n});\n\nconst makeEnvelope = (\n  patch: Partial<ExecutionEnvelope> = {},\n): ExecutionEnvelope => ({\n  execution: {\n    id: \"exec_123\" as never,\n    workspaceId: \"ws_123\" as never,\n    createdByAccountId: \"acct_123\" as never,\n    status: \"waiting_for_interaction\",\n    code: \"return await tools.executor.sources.add({ endpoint: 'https://mcp.axiom.co/mcp' });\",\n    resultJson: null,\n    errorText: null,\n    logsJson: null,\n    startedAt: 1,\n    completedAt: null,\n    createdAt: 1,\n    updatedAt: 1,\n  },\n  pendingInteraction: makeInteraction(),\n  ...patch,\n});\n\ndescribe(\"paused-result\", () => {\n  it(\"parses the browser URL from a paused interaction payload\", () => {\n    const parsed = parseInteractionPayload(makeInteraction());\n\n    expect(parsed).not.toBeNull();\n    expect(parsed?.mode).toBe(\"url\");\n    expect(parsed?.url).toBe(\"https://mcp.axiom.co/authorize\");\n    expect(parsed?.elicitationId).toBe(\"oauth-session-123\");\n  });\n\n  it(\"includes URL and resume instructions in the paused text for browser auth\", () => {\n    const text = buildPausedResultText(makeEnvelope());\n\n    expect(text).toContain(\"Finish connecting Axiom\");\n    expect(text).toContain(\"Open this URL in a browser:\");\n    expect(text).toContain(\"https://mcp.axiom.co/authorize\");\n    expect(text).toContain(\"executor.resume\");\n    expect(text).toContain('\"executionId\": \"exec_123\"');\n  });\n\n  it(\"includes resume guidance for form interactions\", () => {\n    const text = buildPausedResultText(\n      makeEnvelope({\n        pendingInteraction: makeInteraction({\n          kind: \"form\",\n          purpose: \"tool_execution_gate\",\n          payloadJson: JSON.stringify({\n            elicitation: {\n              mode: \"form\",\n              message: \"Approve the tool call\",\n              requestedSchema: {\n                type: \"object\",\n                properties: {\n                  approve: { type: \"boolean\" },\n                },\n                required: [\"approve\"],\n              },\n            },\n          }),\n        }),\n      }),\n    );\n\n    expect(text).toContain(\"Approve the tool call\");\n    expect(text).toContain(\"include a response object matching the requested schema\");\n    expect(text).toContain('\"executionId\": \"exec_123\"');\n  });\n});\n"
  },
  {
    "path": "packages/hosts/mcp/src/paused-result.ts",
    "content": "import type {\n  ExecutionEnvelope,\n  ExecutionInteraction,\n} from \"@executor/control-plane\";\n\nexport type ParsedInteractionPayload = {\n  mode: \"form\" | \"url\";\n  message: string;\n  url?: string;\n  requestedSchema?: Record<string, unknown>;\n  elicitationId?: string;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const parseInteractionPayload = (\n  interaction: ExecutionInteraction,\n): ParsedInteractionPayload | null => {\n  try {\n    const parsed = JSON.parse(interaction.payloadJson) as {\n      elicitation?: {\n        mode?: \"form\" | \"url\";\n        message?: string;\n        url?: string;\n        requestedSchema?: Record<string, unknown>;\n        elicitationId?: string;\n        id?: string;\n      };\n    };\n\n    if (!parsed.elicitation || typeof parsed.elicitation.message !== \"string\") {\n      return null;\n    }\n\n    return {\n      mode: parsed.elicitation.mode === \"url\" ? \"url\" : \"form\",\n      message: parsed.elicitation.message,\n      url: parsed.elicitation.url,\n      requestedSchema: isRecord(parsed.elicitation.requestedSchema)\n        ? parsed.elicitation.requestedSchema\n        : undefined,\n      elicitationId:\n        typeof parsed.elicitation.elicitationId === \"string\"\n          ? parsed.elicitation.elicitationId\n          : typeof parsed.elicitation.id === \"string\"\n            ? parsed.elicitation.id\n            : undefined,\n    };\n  } catch {\n    return null;\n  }\n};\n\nconst formatResumePayload = (executionId: string): string =>\n  JSON.stringify({ executionId }, null, 2);\n\nexport const buildPausedResultText = (envelope: ExecutionEnvelope): string => {\n  const interaction = envelope.pendingInteraction;\n  const parsed = interaction ? parseInteractionPayload(interaction) : null;\n\n  if (!interaction) {\n    return [\n      `Execution ${envelope.execution.id} is waiting for interaction.`,\n      \"Resume with executor.resume using this resumePayload:\",\n      formatResumePayload(envelope.execution.id),\n    ].join(\"\\n\");\n  }\n\n  const lines = [\n    `Execution ${envelope.execution.id} paused: ${parsed?.message ?? \"Interaction required.\"}`,\n  ];\n\n  if (parsed?.mode === \"url\" && typeof parsed.url === \"string\" && parsed.url.trim().length > 0) {\n    lines.push(\"Open this URL in a browser:\");\n    lines.push(parsed.url.trim());\n    lines.push(\n      \"After finishing the browser flow, call executor.resume with this resumePayload if your client does not refresh automatically:\",\n    );\n    lines.push(formatResumePayload(envelope.execution.id));\n    return lines.join(\"\\n\");\n  }\n\n  if (parsed?.mode === \"form\") {\n    lines.push(\n      \"Resume with executor.resume using this resumePayload and include a response object matching the requested schema:\",\n    );\n    lines.push(formatResumePayload(envelope.execution.id));\n    return lines.join(\"\\n\");\n  }\n\n  lines.push(\"Resume with executor.resume using this resumePayload:\");\n  lines.push(formatResumePayload(envelope.execution.id));\n  return lines.join(\"\\n\");\n};\n"
  },
  {
    "path": "packages/hosts/mcp/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\", \"DOM\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}"
  },
  {
    "path": "packages/kernel/core/CHANGELOG.md",
    "content": "# @executor/codemode-core\n\n## null\n"
  },
  {
    "path": "packages/kernel/core/package.json",
    "content": "{\n  \"name\": \"@executor/codemode-core\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@standard-schema/spec\": \"^1.0.0\",\n    \"ajv\": \"^8.17.1\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/kernel/core/src/discovery.ts",
    "content": "import * as Effect from \"effect/Effect\";\n\nimport { toolDescriptorsFromTools } from \"./tool-map\";\nimport type {\n  CatalogPrimitive,\n  DescribePrimitive,\n  DiscoverPrimitive,\n  DiscoveryPrimitives,\n  SearchHit,\n  ToolCatalog,\n  ToolCatalogEntry,\n  ToolDescriptor,\n  ToolMap,\n  ToolNamespace,\n  ToolPath,\n} from \"./types\";\n\nconst tokenize = (value: string): string[] =>\n  value\n    .toLowerCase()\n    .split(/\\W+/)\n    .map((token) => token.trim())\n    .filter(Boolean);\n\nconst searchableTextForTool = (tool: ToolDescriptor): string =>\n  [\n    tool.path,\n    tool.sourceKey,\n    tool.description ?? \"\",\n    tool.contract?.inputTypePreview ?? \"\",\n    tool.contract?.outputTypePreview ?? \"\",\n  ]\n    .join(\" \")\n    .toLowerCase();\n\nconst descriptorContract = (\n  descriptor: ToolDescriptor,\n  includeSchemas: boolean,\n): ToolDescriptor[\"contract\"] | undefined => {\n  const contract = descriptor.contract;\n  if (!contract) {\n    return undefined;\n  }\n\n  if (includeSchemas) {\n    return contract;\n  }\n\n  return {\n    ...(contract.inputTypePreview !== undefined\n      ? { inputTypePreview: contract.inputTypePreview }\n      : {}),\n    ...(contract.outputTypePreview !== undefined\n      ? { outputTypePreview: contract.outputTypePreview }\n      : {}),\n    ...(contract.exampleInput !== undefined\n      ? { exampleInput: contract.exampleInput }\n      : {}),\n    ...(contract.exampleOutput !== undefined\n      ? { exampleOutput: contract.exampleOutput }\n      : {}),\n  };\n};\n\nconst projectDescriptor = (input: {\n  descriptor: ToolDescriptor;\n  includeSchemas: boolean;\n}): ToolDescriptor => {\n  const { descriptor, includeSchemas } = input;\n\n  if (includeSchemas) {\n    return descriptor;\n  }\n\n  return {\n    ...descriptor,\n    ...(descriptorContract(descriptor, false)\n      ? { contract: descriptorContract(descriptor, false) }\n      : {}),\n  };\n};\n\nconst formatToolLine = (tool: ToolDescriptor): string =>\n  tool.description && tool.description.trim().length > 0\n    ? `- ${tool.path}: ${tool.description.trim()}`\n    : `- ${tool.path}`;\n\nconst namespaceFromPath = (path: string): string => {\n  const [first, second] = path.split(\".\");\n  return second ? `${first}.${second}` : first;\n};\n\nconst namespaceFromCatalogEntry = (entry: ToolCatalogEntry): string =>\n  entry.namespace ?? namespaceFromPath(entry.descriptor.path);\n\nconst searchableTextForEntry = (entry: ToolCatalogEntry): string =>\n  entry.searchText?.trim().toLowerCase() || searchableTextForTool(entry.descriptor);\n\nconst scoreCatalogEntry = (\n  queryTokens: readonly string[],\n  entry: ToolCatalogEntry,\n): number => {\n  if (entry.score) {\n    return entry.score(queryTokens);\n  }\n\n  const haystack = searchableTextForEntry(entry);\n  return queryTokens.reduce(\n    (total, token) => total + (haystack.includes(token) ? 1 : 0),\n    0,\n  );\n};\n\nconst mergeToolNamespaces = (\n  groups: ReadonlyArray<readonly ToolNamespace[]>,\n): ToolNamespace[] => {\n  const merged = new Map<string, ToolNamespace>();\n\n  for (const group of groups) {\n    for (const namespace of group) {\n      const existing = merged.get(namespace.namespace);\n      merged.set(namespace.namespace, {\n        namespace: namespace.namespace,\n        displayName: existing?.displayName ?? namespace.displayName,\n        ...(existing?.toolCount !== undefined || namespace.toolCount !== undefined\n          ? {\n              toolCount:\n                (existing?.toolCount ?? 0) + (namespace.toolCount ?? 0),\n            }\n          : {}),\n      });\n    }\n  }\n\n  return [...merged.values()].sort((left, right) =>\n    left.namespace.localeCompare(right.namespace),\n  );\n};\n\nconst dedupeToolDescriptors = (\n  groups: ReadonlyArray<readonly ToolDescriptor[]>,\n): ToolDescriptor[] => {\n  const merged = new Map<string, ToolDescriptor>();\n\n  for (const group of groups) {\n    for (const descriptor of group) {\n      if (!merged.has(descriptor.path)) {\n        merged.set(descriptor.path, descriptor);\n      }\n    }\n  }\n\n  return [...merged.values()].sort((left, right) =>\n    left.path.localeCompare(right.path),\n  );\n};\n\nconst dedupeSearchHits = (\n  groups: ReadonlyArray<readonly SearchHit[]>,\n): SearchHit[] => {\n  const merged = new Map<string, SearchHit>();\n\n  for (const group of groups) {\n    for (const hit of group) {\n      if (!merged.has(hit.path)) {\n        merged.set(hit.path, hit);\n      }\n    }\n  }\n\n  return [...merged.values()].sort(\n    (left, right) => right.score - left.score || left.path.localeCompare(right.path),\n  );\n};\n\nexport function createToolCatalogFromTools(input: {\n  tools: ToolMap;\n  defaultNamespace?: string;\n}): ToolCatalog {\n  return createToolCatalogFromEntries({\n    entries: toolDescriptorsFromTools({\n      tools: input.tools,\n    }).map((descriptor) => ({\n      descriptor,\n      ...(input.defaultNamespace !== undefined\n        ? { namespace: input.defaultNamespace }\n        : {}),\n    })),\n  });\n}\n\nexport function createToolCatalogFromEntries(input: {\n  entries: ReadonlyArray<ToolCatalogEntry>;\n}): ToolCatalog {\n  const entries = [...input.entries];\n  const byPath = new Map(\n    entries.map((entry) => [entry.descriptor.path as string, entry]),\n  );\n  const namespaceCounts = new Map<string, number>();\n\n  for (const entry of entries) {\n    const namespace = namespaceFromCatalogEntry(entry);\n    namespaceCounts.set(namespace, (namespaceCounts.get(namespace) ?? 0) + 1);\n  }\n\n  return {\n    listNamespaces: ({ limit }) =>\n      Effect.succeed(\n        [...namespaceCounts.entries()]\n          .map(([namespace, toolCount]) => ({ namespace, toolCount }))\n          .slice(0, limit),\n      ),\n    listTools: ({ namespace, query, limit, includeSchemas = false }) =>\n      Effect.succeed(\n        entries\n          .filter((entry) =>\n            !namespace || namespaceFromCatalogEntry(entry) === namespace,\n          )\n          .filter((entry) => {\n            if (!query) {\n              return true;\n            }\n\n            const haystack = searchableTextForEntry(entry);\n            return tokenize(query).every((token) => haystack.includes(token));\n          })\n          .slice(0, limit)\n          .map((entry) =>\n            projectDescriptor({\n              descriptor: entry.descriptor,\n              includeSchemas,\n            })\n          ),\n      ),\n    getToolByPath: ({ path, includeSchemas }) =>\n      Effect.succeed(\n        byPath.get(path)\n          ? projectDescriptor({\n              descriptor: byPath.get(path)!.descriptor,\n              includeSchemas,\n            })\n          : null,\n      ),\n    searchTools: ({ query, namespace, limit }) => {\n      const queryTokens = tokenize(query);\n\n      return Effect.succeed(\n        entries\n          .filter((entry) =>\n            !namespace || namespaceFromCatalogEntry(entry) === namespace,\n          )\n          .map((entry) => ({\n            path: entry.descriptor.path,\n            score: scoreCatalogEntry(queryTokens, entry),\n          }))\n          .filter((hit) => hit.score > 0)\n          .sort((left, right) => right.score - left.score)\n          .slice(0, limit),\n      );\n    },\n  } satisfies ToolCatalog;\n}\n\nexport function mergeToolCatalogs(input: {\n  catalogs: ReadonlyArray<ToolCatalog>;\n}): ToolCatalog {\n  const catalogs = [...input.catalogs];\n\n  return {\n    listNamespaces: ({ limit }) =>\n      Effect.gen(function* () {\n        const groups = yield* Effect.forEach(\n          catalogs,\n          (catalog) => catalog.listNamespaces({ limit: Math.max(limit, limit * catalogs.length) }),\n          { concurrency: \"unbounded\" },\n        );\n\n        return mergeToolNamespaces(groups).slice(0, limit);\n      }),\n\n    listTools: ({ namespace, query, limit, includeSchemas = false }) =>\n      Effect.gen(function* () {\n        const groups = yield* Effect.forEach(\n          catalogs,\n          (catalog) =>\n            catalog.listTools({\n              ...(namespace !== undefined ? { namespace } : {}),\n              ...(query !== undefined ? { query } : {}),\n              limit: Math.max(limit, limit * catalogs.length),\n              includeSchemas,\n            }),\n          { concurrency: \"unbounded\" },\n        );\n\n        return dedupeToolDescriptors(groups).slice(0, limit);\n      }),\n\n    getToolByPath: ({ path, includeSchemas }) =>\n      Effect.gen(function* () {\n        for (const catalog of catalogs) {\n          const descriptor = yield* catalog.getToolByPath({ path, includeSchemas });\n          if (descriptor) {\n            return descriptor;\n          }\n        }\n\n        return null;\n      }),\n\n    searchTools: ({ query, namespace, limit }) =>\n      Effect.gen(function* () {\n        const groups = yield* Effect.forEach(\n          catalogs,\n          (catalog) =>\n            catalog.searchTools({\n              query,\n              ...(namespace !== undefined ? { namespace } : {}),\n              limit: Math.max(limit, limit * catalogs.length),\n            }),\n          { concurrency: \"unbounded\" },\n        );\n\n        return dedupeSearchHits(groups).slice(0, limit);\n      }),\n  } satisfies ToolCatalog;\n}\n\nexport function createStaticDiscoveryFromTools(input: {\n  tools: ToolMap;\n  sourceKey?: string;\n}): {\n  tools: ToolDescriptor[];\n  executeDescription: Effect.Effect<string, never>;\n} {\n  const tools = toolDescriptorsFromTools({\n    tools: input.tools,\n    sourceKey: input.sourceKey,\n  });\n\n  return {\n    tools,\n    executeDescription: Effect.succeed(buildStaticExecuteDescription({ tools })),\n  };\n}\n\nexport function createToolCatalogDiscovery(input: {\n  catalog: ToolCatalog;\n}): {\n  primitives: DiscoveryPrimitives;\n  executeDescription: Effect.Effect<string, unknown>;\n} {\n  const primitives = createDiscoveryPrimitivesFromToolCatalog({\n    catalog: input.catalog,\n  });\n\n  return {\n    primitives,\n    executeDescription: buildDynamicExecuteDescription({\n      catalog: input.catalog,\n    }),\n  };\n}\n\nexport function createDiscoveryPrimitivesFromToolCatalog(input: {\n  catalog: ToolCatalog;\n}): DiscoveryPrimitives {\n  const { catalog } = input;\n\n  const describe: DescribePrimitive = {\n    tool: ({ path, includeSchemas = false }) =>\n      catalog.getToolByPath({ path, includeSchemas }),\n  };\n\n  const discover: DiscoverPrimitive = ({\n    query,\n    sourceKey: _sourceKey,\n    limit = 12,\n    includeSchemas = false,\n  }) =>\n    Effect.gen(function* () {\n      const hits = yield* catalog.searchTools({\n        query,\n        limit,\n      });\n\n      if (hits.length === 0) {\n        return {\n          bestPath: null,\n          results: [],\n          total: 0,\n        };\n      }\n\n      const descriptors = yield* Effect.forEach(\n        hits,\n        (hit) =>\n          catalog.getToolByPath({\n            path: hit.path,\n            includeSchemas,\n          }),\n        { concurrency: \"unbounded\" },\n      );\n\n      const hydrated = hits\n        .map((hit, index) => {\n          const descriptor = descriptors[index];\n          if (!descriptor) {\n            return null;\n          }\n\n          return {\n            path: descriptor.path,\n            score: hit.score,\n            description: descriptor.description,\n            interaction: descriptor.interaction ?? \"auto\",\n            ...(descriptorContract(descriptor, includeSchemas)\n              ? { contract: descriptorContract(descriptor, includeSchemas) }\n              : {}),\n          };\n        })\n        .filter(Boolean) as Array<\n        Record<string, unknown> & { path: ToolPath; score: number }\n      >;\n\n      return {\n        bestPath: hydrated[0]?.path ?? null,\n        results: hydrated,\n        total: hydrated.length,\n      };\n    });\n\n  const catalogPrimitive: CatalogPrimitive = {\n    namespaces: ({ limit = 200 }) =>\n      catalog.listNamespaces({ limit }).pipe(\n        Effect.map((namespaces) => ({ namespaces })),\n      ),\n    tools: ({ namespace, query, limit = 200, includeSchemas = false }) =>\n      catalog.listTools({\n        ...(namespace !== undefined ? { namespace } : {}),\n        ...(query !== undefined ? { query } : {}),\n        limit,\n        includeSchemas,\n      }).pipe(\n        Effect.map((results) => ({ results })),\n      ),\n  };\n\n  return {\n    catalog: catalogPrimitive,\n    describe,\n    discover,\n  };\n}\n\nexport function buildStaticExecuteDescription(input: {\n  tools: readonly ToolDescriptor[];\n}): string {\n  return [\n    \"Execute TypeScript in sandbox; call tools directly.\",\n    \"Available tools:\",\n    ...input.tools.map(formatToolLine),\n    \"Do not use fetch; use tools.* only.\",\n  ].join(\"\\n\");\n}\n\nexport function buildDynamicExecuteDescription(input: {\n  catalog: ToolCatalog;\n}): Effect.Effect<string, unknown> {\n  return Effect.gen(function* () {\n    const namespaces = yield* input.catalog.listNamespaces({ limit: 200 });\n\n    return [\n      \"Execute TypeScript in sandbox; call tools via discovery workflow.\",\n      \"Available namespaces:\",\n      ...namespaces.map((namespace) => `- ${namespace.displayName ?? namespace.namespace}`),\n      \"Workflow:\",\n      '1) const matches = await tools.discover({ query: \"<intent>\", limit: 12 });',\n      \"2) const details = await tools.describe.tool({ path, includeSchemas: true });\",\n      \"3) Read details.contract?.inputSchema/details.contract?.outputSchema when you need the projected shape.\",\n      \"4) Call selected tools.<path>(input).\",\n      \"Do not use fetch; use tools.* only.\",\n    ].join(\"\\n\");\n  });\n}\n"
  },
  {
    "path": "packages/kernel/core/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class KernelCoreEffectError extends Data.TaggedError(\n  \"KernelCoreEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const kernelCoreEffectError = (\n  module: string,\n  message: string,\n) => new KernelCoreEffectError({ module, message });\n"
  },
  {
    "path": "packages/kernel/core/src/http-request-placements.ts",
    "content": "export type HttpRequestPlacements = {\n  headers?: Readonly<Record<string, string>>;\n  queryParams?: Readonly<Record<string, string>>;\n  cookies?: Readonly<Record<string, string>>;\n  bodyValues?: Readonly<Record<string, string>>;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst decodeJsonPointerSegment = (value: string): string =>\n  value.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n\nconst pathSegmentsFromPlacementPath = (value: string): ReadonlyArray<string> => {\n  const trimmed = value.trim();\n  if (trimmed.length === 0) {\n    return [];\n  }\n\n  if (trimmed.startsWith(\"/\")) {\n    return trimmed\n      .split(\"/\")\n      .slice(1)\n      .map(decodeJsonPointerSegment)\n      .filter((segment) => segment.length > 0);\n  }\n\n  return trimmed.split(\".\").filter((segment) => segment.length > 0);\n};\n\nconst findHeaderKey = (\n  headers: Readonly<Record<string, string>>,\n  name: string,\n): string | null => {\n  const lowered = name.toLowerCase();\n  for (const key of Object.keys(headers)) {\n    if (key.toLowerCase() === lowered) {\n      return key;\n    }\n  }\n\n  return null;\n};\n\nconst parseCookieHeader = (value: string): Record<string, string> => {\n  const parsed: Record<string, string> = {};\n\n  for (const part of value.split(\";\")) {\n    const trimmed = part.trim();\n    if (trimmed.length === 0) {\n      continue;\n    }\n\n    const separatorIndex = trimmed.indexOf(\"=\");\n    if (separatorIndex === -1) {\n      parsed[trimmed] = \"\";\n      continue;\n    }\n\n    const name = trimmed.slice(0, separatorIndex).trim();\n    const cookieValue = trimmed.slice(separatorIndex + 1).trim();\n    if (name.length > 0) {\n      parsed[name] = cookieValue;\n    }\n  }\n\n  return parsed;\n};\n\nconst setNestedRecordValue = (\n  target: Record<string, unknown>,\n  path: ReadonlyArray<string>,\n  value: string,\n) => {\n  let current = target;\n\n  for (let index = 0; index < path.length - 1; index += 1) {\n    const segment = path[index]!;\n    const next = current[segment];\n    if (isRecord(next)) {\n      current = next;\n      continue;\n    }\n\n    const replacement: Record<string, unknown> = {};\n    current[segment] = replacement;\n    current = replacement;\n  }\n\n  current[path[path.length - 1]!] = value;\n};\n\nexport const applyHttpQueryPlacementsToUrl = (input: {\n  url: string | URL;\n  queryParams?: Readonly<Record<string, string>>;\n}): URL => {\n  const url = input.url instanceof URL ? new URL(input.url.toString()) : new URL(input.url);\n\n  for (const [key, value] of Object.entries(input.queryParams ?? {})) {\n    url.searchParams.set(key, value);\n  }\n\n  return url;\n};\n\nexport const applyCookiePlacementsToHeaders = (input: {\n  headers: Readonly<Record<string, string>>;\n  cookies?: Readonly<Record<string, string>>;\n}): Record<string, string> => {\n  const cookies = input.cookies ?? {};\n  if (Object.keys(cookies).length === 0) {\n    return { ...input.headers };\n  }\n\n  const cookieHeaderKey = findHeaderKey(input.headers, \"cookie\");\n  const cookieHeaderValue = cookieHeaderKey ? input.headers[cookieHeaderKey] : null;\n  const mergedCookies = {\n    ...(cookieHeaderValue ? parseCookieHeader(cookieHeaderValue) : {}),\n    ...cookies,\n  };\n  const headers = { ...input.headers };\n\n  headers[cookieHeaderKey ?? \"cookie\"] = Object.entries(mergedCookies)\n    .map(([name, value]) => `${name}=${encodeURIComponent(value)}`)\n    .join(\"; \");\n\n  return headers;\n};\n\nexport const applyJsonBodyPlacements = (input: {\n  body: unknown;\n  bodyValues?: Readonly<Record<string, string>>;\n  label?: string;\n}): unknown => {\n  const bodyValues = input.bodyValues ?? {};\n  if (Object.keys(bodyValues).length === 0) {\n    return input.body;\n  }\n\n  const root =\n    input.body == null\n      ? {}\n      : isRecord(input.body)\n        ? structuredClone(input.body)\n        : null;\n\n  if (root === null) {\n    throw new Error(\n      `${input.label ?? \"HTTP request\"} auth body placements require an object JSON body`,\n    );\n  }\n\n  for (const [rawPath, value] of Object.entries(bodyValues)) {\n    const path = pathSegmentsFromPlacementPath(rawPath);\n    if (path.length === 0) {\n      throw new Error(\n        `${input.label ?? \"HTTP request\"} auth body placement path cannot be empty`,\n      );\n    }\n    setNestedRecordValue(root, path, value);\n  }\n\n  return root;\n};\n"
  },
  {
    "path": "packages/kernel/core/src/index.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport { assertInstanceOf, assertNone, assertTrue } from \"@effect/vitest/utils\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Fiber from \"effect/Fiber\";\n\nimport * as Schema from \"effect/Schema\";\nimport * as TestClock from \"effect/TestClock\";\n\nimport {\n  allowAllToolInteractions,\n  createToolCatalogDiscovery,\n  createToolCatalogFromEntries,\n  createToolCatalogFromTools,\n  createStaticDiscoveryFromTools,\n  createSystemToolMap,\n  makeToolInvokerFromTools,\n  mergeToolMaps,\n  standardSchemaFromJsonSchema,\n  ToolInteractionDeniedError,\n  ToolInteractionPendingError,\n  toTool,\n  type ToolCatalog,\n  type CodeExecutor,\n  type ToolDescriptor,\n  type ToolMap,\n  type ToolPath,\n} from \"./index\";\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst numberPairInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    a: Schema.Number,\n    b: Schema.Number,\n  }),\n);\n\nconst titleInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    title: Schema.String,\n  }),\n);\n\nconst messageInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    message: Schema.String,\n  }),\n);\n\n\ndescribe(\"codemode-core\", () => {\n  it.effect(\"builds static discovery from tool map keys\", () =>\n    Effect.gen(function* () {\n      const tools = {\n        \"math.add\": {\n          description: \"Add two numbers\",\n          inputSchema: numberPairInputSchema,\n          execute: async ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n        },\n        \"issues.create\": toTool({\n          tool: {\n            description: \"Create issue\",\n            inputSchema: titleInputSchema,\n            execute: async ({ title }: { title: string }) => ({ id: \"issue_1\", title }),\n          },\n          metadata: {\n            interaction: \"required\",\n          },\n        }),\n      } satisfies ToolMap;\n\n      const staticDiscovery = createStaticDiscoveryFromTools({\n        tools,\n        sourceKey: \"api.demo\",\n      });\n\n      expect(staticDiscovery.tools.map((tool) => tool.path)).toEqual([\n        \"issues.create\",\n        \"math.add\",\n      ]);\n\n      const createIssueDescriptor = staticDiscovery.tools.find(\n        (tool) => tool.path === \"issues.create\",\n      );\n      expect(createIssueDescriptor?.interaction).toBe(\"required\");\n      expect(createIssueDescriptor?.sourceKey).toBe(\"api.demo\");\n      expect(yield* staticDiscovery.executeDescription).toBe(\n        [\n          \"Execute TypeScript in sandbox; call tools directly.\",\n          \"Available tools:\",\n          \"- issues.create: Create issue\",\n          \"- math.add: Add two numbers\",\n          \"Do not use fetch; use tools.* only.\",\n        ].join(\"\\n\"),\n      );\n    }),\n  );\n\n\n  it.effect(\"returns pending interaction error for required tools\", () =>\n    Effect.gen(function* () {\n      const invoker = makeToolInvokerFromTools({\n        tools: {\n          \"issues.create\": toTool({\n            tool: {\n              inputSchema: titleInputSchema,\n              execute: ({ title }: { title: string }) => ({ id: \"issue_1\", title }),\n            },\n            metadata: {\n              interaction: \"required\",\n            },\n          }),\n        },\n      });\n\n      const pendingError = yield* Effect.flip(\n        invoker.invoke({\n          path: \"issues.create\",\n          args: { title: \"hello\" },\n        }),\n      );\n\n      assertInstanceOf(pendingError, ToolInteractionPendingError);\n      expect(pendingError.path).toBe(\"issues.create\");\n      expect(pendingError.elicitation.mode).toBe(\"form\");\n    }),\n  );\n\n  it.effect(\"waits for elicitation response and executes when accepted\", () =>\n    Effect.gen(function* () {\n      const invoker = makeToolInvokerFromTools({\n        tools: {\n          \"issues.create\": toTool({\n            tool: {\n              inputSchema: titleInputSchema,\n              execute: ({ title }: { title: string }) => ({ id: \"issue_1\", title }),\n            },\n            metadata: {\n              interaction: \"required\",\n            },\n          }),\n        },\n        onElicitation: () =>\n          Effect.succeed({\n            action: \"accept\" as const,\n          }),\n      });\n\n      const output = yield* invoker.invoke({\n        path: \"issues.create\",\n        args: { title: \"hello\" },\n        context: { runId: \"run_1\", callId: \"call_1\" },\n      });\n\n      expect(output).toEqual({ id: \"issue_1\", title: \"hello\" });\n    }),\n  );\n\n  it.effect(\"waits through polling-style elicitation callback and then executes\", () =>\n    Effect.gen(function* () {\n      let pollingSleeps = 0;\n\n      const invoker = makeToolInvokerFromTools({\n        tools: {\n          \"issues.create\": toTool({\n            tool: {\n              inputSchema: titleInputSchema,\n              execute: ({ title }: { title: string }) => ({ id: \"issue_1\", title }),\n            },\n            metadata: {\n              interaction: \"required\",\n            },\n          }),\n        },\n        onElicitation: () =>\n          Effect.gen(function* () {\n            for (let attempt = 0; attempt < 3; attempt += 1) {\n              pollingSleeps += 1;\n              yield* Effect.sleep(\"200 seconds\");\n            }\n\n            return {\n              action: \"accept\" as const,\n            };\n          }),\n      });\n\n      const fiber = yield* invoker.invoke({\n        path: \"issues.create\",\n        args: { title: \"hello\" },\n        context: { runId: \"run_poll\", callId: \"call_poll\" },\n      }).pipe(Effect.fork);\n\n      yield* TestClock.adjust(\"200 seconds\");\n      const firstPoll = yield* Fiber.poll(fiber);\n      assertNone(firstPoll);\n\n      yield* TestClock.adjust(\"200 seconds\");\n      const secondPoll = yield* Fiber.poll(fiber);\n      assertNone(secondPoll);\n\n      yield* TestClock.adjust(\"200 seconds\");\n      const output = yield* Fiber.join(fiber);\n\n      expect(output).toEqual({ id: \"issue_1\", title: \"hello\" });\n      expect(pollingSleeps).toBe(3);\n    }),\n  );\n\n  it.effect(\"fails when elicitation is declined\", () =>\n    Effect.gen(function* () {\n      const invoker = makeToolInvokerFromTools({\n        tools: {\n          \"issues.create\": toTool({\n            tool: {\n              inputSchema: titleInputSchema,\n              execute: ({ title }: { title: string }) => ({ id: \"issue_1\", title }),\n            },\n            metadata: {\n              interaction: \"required\",\n            },\n          }),\n        },\n        onElicitation: () =>\n          Effect.succeed({\n            action: \"decline\" as const,\n            content: {\n              reason: \"User declined tool execution\",\n            },\n          }),\n      });\n\n      const declinedError = yield* Effect.flip(\n        invoker.invoke({\n          path: \"issues.create\",\n          args: { title: \"hello\" },\n        }),\n      );\n\n      assertInstanceOf(declinedError, ToolInteractionDeniedError);\n      expect(declinedError.reason).toContain(\"User declined\");\n    }),\n  );\n\n  it.effect(\"builds Standard Schema validators from JSON Schema\", () =>\n    Effect.gen(function* () {\n      const tools = {\n        \"math.add\": {\n          description: \"Add two numbers\",\n          inputSchema: standardSchemaFromJsonSchema({\n            type: \"object\",\n            required: [\"a\", \"b\"],\n            properties: {\n              a: { type: \"number\" },\n              b: { type: \"number\" },\n            },\n            additionalProperties: false,\n          }),\n          execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n        },\n      } satisfies ToolMap;\n\n      const invoker = makeToolInvokerFromTools({ tools });\n\n      const success = yield* invoker.invoke({\n        path: \"math.add\",\n        args: { a: 1, b: 2 },\n      });\n      expect(success).toEqual({ sum: 3 });\n\n      const failure = yield* Effect.either(\n        invoker.invoke({\n          path: \"math.add\",\n          args: { a: \"1\", b: 2 },\n        }),\n      );\n\n      assertTrue(Either.isLeft(failure));\n      assertInstanceOf(failure.left, Error);\n      expect(failure.left.message).toContain(\"Input validation failed\");\n    }),\n  );\n\n  it.effect(\"hydrates dynamic discover results via tool catalog\", () =>\n    Effect.gen(function* () {\n      const descriptors: Record<string, ToolDescriptor> = {\n        \"source.docs.search\": {\n          path: asToolPath(\"source.docs.search\"),\n          sourceKey: \"source.docs\",\n          description: \"Search docs\",\n          contract: {\n            inputTypePreview: \"object\",\n            outputTypePreview: \"object\",\n          },\n        },\n        \"source.issues.create\": {\n          path: asToolPath(\"source.issues.create\"),\n          sourceKey: \"source.issues\",\n          description: \"Create issue\",\n          interaction: \"required\",\n          contract: {\n            inputTypePreview: \"object\",\n            outputTypePreview: \"object\",\n          },\n        },\n      };\n\n      const catalog: ToolCatalog = {\n        listNamespaces: () =>\n          Effect.succeed([\n            {\n              namespace: \"docs\",\n              displayName: \"Docs\",\n              toolCount: 1,\n            },\n            {\n              namespace: \"issues\",\n              displayName: \"Issues\",\n              toolCount: 1,\n            },\n          ]),\n        listTools: ({ namespace, limit, includeSchemas = false }) =>\n          Effect.succeed(\n            Object.values(descriptors)\n              .filter((descriptor) =>\n                !namespace\n                  || descriptor.path.startsWith(`${namespace}.`)\n                  || descriptor.path.startsWith(`source.${namespace}.`)\n              )\n              .slice(0, limit)\n              .map((descriptor) => ({\n                ...descriptor,\n                ...(descriptor.contract\n                  ? {\n                      contract: {\n                        ...(descriptor.contract.inputTypePreview !== undefined\n                          ? { inputTypePreview: descriptor.contract.inputTypePreview }\n                          : {}),\n                        ...(descriptor.contract.outputTypePreview !== undefined\n                          ? { outputTypePreview: descriptor.contract.outputTypePreview }\n                          : {}),\n                        ...(includeSchemas && descriptor.contract.inputSchema !== undefined\n                          ? { inputSchema: descriptor.contract.inputSchema }\n                          : {}),\n                        ...(includeSchemas && descriptor.contract.outputSchema !== undefined\n                          ? { outputSchema: descriptor.contract.outputSchema }\n                          : {}),\n                      },\n                    }\n                  : {}),\n              })),\n          ),\n        getToolByPath: ({ path }) =>\n          Effect.succeed(descriptors[path] ?? null),\n        searchTools: () =>\n          Effect.succeed([\n            { path: asToolPath(\"source.issues.create\"), score: 0.93 },\n            { path: asToolPath(\"source.docs.search\"), score: 0.72 },\n          ]),\n      };\n\n      const dynamic = createToolCatalogDiscovery({ catalog });\n\n      const namespaces = yield* dynamic.primitives.catalog!.namespaces({ limit: 10 });\n      expect(namespaces.namespaces).toHaveLength(2);\n\n      const discovered = yield* dynamic.primitives.discover!({\n        query: \"create issue\",\n        limit: 5,\n      });\n\n      expect(discovered.bestPath).toBe(\"source.issues.create\");\n      expect(discovered.results[0]?.path).toBe(\"source.issues.create\");\n      expect(discovered.results[0]?.interaction).toBe(\"required\");\n    }),\n  );\n\n  it.effect(\"builds a tool catalog from descriptor entries\", () =>\n    Effect.gen(function* () {\n      const catalog = createToolCatalogFromEntries({\n        entries: [\n          {\n            namespace: \"github.repos\",\n            searchText: \"github repository details get repo\",\n            descriptor: {\n              path: asToolPath(\"github.repos.getRepo\"),\n              sourceKey: \"source.github\",\n              description: \"Get repository details\",\n              contract: {\n                inputTypePreview: \"{ owner: string; repo: string }\",\n                outputTypePreview: \"Repository\",\n                inputSchema: { type: \"object\" },\n              },\n            },\n          },\n          {\n            namespace: \"github.issues\",\n            searchText: \"github issues list repository issues\",\n            score: (queryTokens) =>\n              queryTokens.includes(\"issues\") && queryTokens.includes(\"repository\")\n                ? 50\n                : 0,\n            descriptor: {\n              path: asToolPath(\"github.issues.list\"),\n              sourceKey: \"source.github\",\n              description: \"List repository issues\",\n              contract: {\n                inputTypePreview: \"{ owner: string; repo: string }\",\n                outputTypePreview: \"Issue[]\",\n              },\n            },\n          },\n        ],\n      });\n\n      const namespaces = yield* catalog.listNamespaces({ limit: 10 });\n      expect(namespaces).toEqual([\n        { namespace: \"github.repos\", toolCount: 1 },\n        { namespace: \"github.issues\", toolCount: 1 },\n      ]);\n\n      const listed = yield* catalog.listTools({\n        namespace: \"github.repos\",\n        query: \"repository details\",\n        limit: 10,\n        includeSchemas: false,\n      });\n      expect(listed[0]?.path).toBe(\"github.repos.getRepo\");\n      expect(listed[0]?.contract?.inputSchema).toBeUndefined();\n\n      const discovered = yield* catalog.searchTools({\n        query: \"repository issues\",\n        limit: 10,\n      });\n      expect(discovered[0]?.path).toBe(\"github.issues.list\");\n\n      const described = yield* catalog.getToolByPath({\n        path: asToolPath(\"github.repos.getRepo\"),\n        includeSchemas: true,\n      });\n      expect(described?.contract?.inputSchema).toEqual({ type: \"object\" });\n    }),\n  );\n\n  it.effect(\"system tools can be composed as normal tools\", () =>\n    Effect.gen(function* () {\n      const catalog = createToolCatalogFromTools({\n        tools: {\n          \"source.issues.create\": toTool({\n            tool: {\n              description: \"Create issue\",\n              inputSchema: titleInputSchema,\n              execute: ({ title }: { title: string }) => ({ id: \"issue_1\", title }),\n            },\n            metadata: {\n              interaction: \"required\",\n              sourceKey: \"source.issues\",\n            },\n          }),\n        },\n        defaultNamespace: \"issues\",\n      });\n\n      const systemTools = createSystemToolMap({ catalog });\n      const allTools = mergeToolMaps([\n        {\n          \"math.add\": {\n            inputSchema: numberPairInputSchema,\n            execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n          },\n        },\n        systemTools,\n      ]);\n\n      const invoker = makeToolInvokerFromTools({ tools: allTools });\n      const discovered = yield* invoker.invoke({\n        path: \"discover\",\n        args: { query: \"create issue\", limit: 5 },\n      });\n\n      expect(discovered).toMatchObject({\n        bestPath: \"source.issues.create\",\n        total: 1,\n      });\n\n      const namespaces = yield* invoker.invoke({\n        path: \"catalog.namespaces\",\n        args: { limit: 10 },\n      });\n\n      expect(namespaces).toEqual({\n        namespaces: [\n          {\n            namespace: \"issues\",\n            toolCount: 1,\n          },\n        ],\n      });\n    }),\n  );\n\n  it.effect(\"executes code against tool map via executor contract\", () =>\n    Effect.gen(function* () {\n      const tools = {\n        \"math.add\": {\n          inputSchema: numberPairInputSchema,\n          execute: async ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n        },\n        \"notifications.send\": toTool({\n          tool: {\n            inputSchema: messageInputSchema,\n            execute: async ({ message }: { message: string }) => ({ delivered: true, message }),\n          },\n          metadata: { interaction: \"required\" },\n        }),\n      } satisfies ToolMap;\n\n      const executor: CodeExecutor = {\n        execute: (code, toolInvoker) =>\n          Effect.gen(function* () {\n            const math = yield* toolInvoker.invoke({\n              path: \"math.add\",\n              args: { a: 2, b: 3 },\n            });\n            const notification = yield* toolInvoker.invoke({\n              path: \"notifications.send\",\n              args: { message: \"sum is 5\" },\n            });\n            return {\n              result: { code, math, notification },\n              logs: [\"executed\"],\n            };\n          }),\n      };\n\n      const code = \"return await tools.math.add({ a: 2, b: 3 });\";\n      const output = yield* executor.execute(\n        code,\n        makeToolInvokerFromTools({\n          tools,\n          onToolInteraction: allowAllToolInteractions,\n        }),\n      );\n\n      expect(output.result).toEqual({\n        code,\n        math: { sum: 5 },\n        notification: { delivered: true, message: \"sum is 5\" },\n      });\n      expect(output.logs).toEqual([\"executed\"]);\n    }),\n  );\n\n  it.effect(\"supports lazy tool invoker without passing tools\", () =>\n    Effect.gen(function* () {\n      let mathCalls = 0;\n\n      const toolInvoker = makeToolInvokerFromTools({\n        tools: {\n          \"math.add\": {\n            inputSchema: numberPairInputSchema,\n            execute: ({ a, b }: { a: number; b: number }) => {\n              mathCalls += 1;\n              return { sum: a + b };\n            },\n          },\n        },\n      });\n\n      const executor: CodeExecutor = {\n        execute: (code, invoker) =>\n          Effect.gen(function* () {\n            const math = yield* invoker.invoke({\n              path: \"math.add\",\n              args: { a: 20, b: 22 },\n            });\n            return {\n              result: { code, math },\n              logs: [\"lazy\"],\n            };\n          }),\n      };\n\n      const code = \"return await tools.math.add({ a: 20, b: 22 });\";\n      const output = yield* executor.execute(code, toolInvoker);\n\n      expect(mathCalls).toBe(1);\n      expect(output.result).toEqual({\n        code,\n        math: { sum: 42 },\n      });\n      expect(output.logs).toEqual([\"lazy\"]);\n    }),\n  );\n\n  it.effect(\"surfaces executor-reported errors\", () =>\n    Effect.gen(function* () {\n      const executor: CodeExecutor = {\n        execute: (_code, _toolInvoker) =>\n          Effect.succeed({ result: null, error: \"boom\" }),\n      };\n\n      const output = yield* executor.execute(\n        \"return 1\",\n        makeToolInvokerFromTools({ tools: {} }),\n      );\n\n      expect(output.error).toBe(\"boom\");\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/kernel/core/src/index.ts",
    "content": "export * from \"./types\";\nexport * from \"./json-schema\";\nexport * from \"./schema-types\";\nexport * from \"./tool-map\";\nexport * from \"./discovery\";\nexport * from \"./system-tools\";\nexport * from \"./http-request-placements\";\nexport * from \"./isomorphic-hash\";\n"
  },
  {
    "path": "packages/kernel/core/src/isomorphic-hash.ts",
    "content": "/**\n * Isomorphic SHA-256 implementation that works in both Node.js and the browser.\n *\n * Avoids importing `node:crypto`, which Vite externalizes for browser builds,\n * causing runtime errors when this module is pulled into client bundles.\n *\n * Uses the same SHA-256 algorithm as `node:crypto`, producing identical hex output.\n */\n\n// SHA-256 constants: first 32 bits of the fractional parts of the cube roots of the first 64 primes\nconst K = new Uint32Array([\n  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n]);\n\nconst rotr = (x: number, n: number): number => (x >>> n) | (x << (32 - n));\n\nconst sha256Compress = (state: Uint32Array, block: Uint32Array): void => {\n  const w = new Uint32Array(64);\n  for (let i = 0; i < 16; i++) w[i] = block[i];\n  for (let i = 16; i < 64; i++) {\n    const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ (w[i - 15] >>> 3);\n    const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ (w[i - 2] >>> 10);\n    w[i] = (w[i - 16] + s0 + w[i - 7] + s1) | 0;\n  }\n\n  let a = state[0], b = state[1], c = state[2], d = state[3];\n  let e = state[4], f = state[5], g = state[6], h = state[7];\n\n  for (let i = 0; i < 64; i++) {\n    const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);\n    const ch = (e & f) ^ (~e & g);\n    const temp1 = (h + S1 + ch + K[i] + w[i]) | 0;\n    const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);\n    const maj = (a & b) ^ (a & c) ^ (b & c);\n    const temp2 = (S0 + maj) | 0;\n\n    h = g; g = f; f = e; e = (d + temp1) | 0;\n    d = c; c = b; b = a; a = (temp1 + temp2) | 0;\n  }\n\n  state[0] = (state[0] + a) | 0;\n  state[1] = (state[1] + b) | 0;\n  state[2] = (state[2] + c) | 0;\n  state[3] = (state[3] + d) | 0;\n  state[4] = (state[4] + e) | 0;\n  state[5] = (state[5] + f) | 0;\n  state[6] = (state[6] + g) | 0;\n  state[7] = (state[7] + h) | 0;\n};\n\nconst utf8Encode = (str: string): Uint8Array => {\n  if (typeof TextEncoder !== \"undefined\") {\n    return new TextEncoder().encode(str);\n  }\n\n  // Fallback for environments without TextEncoder\n  const bytes: number[] = [];\n  for (let i = 0; i < str.length; i++) {\n    let c = str.charCodeAt(i);\n    if (c < 0x80) {\n      bytes.push(c);\n    } else if (c < 0x800) {\n      bytes.push(0xc0 | (c >> 6), 0x80 | (c & 0x3f));\n    } else if (c >= 0xd800 && c < 0xdc00 && i + 1 < str.length) {\n      const next = str.charCodeAt(++i);\n      c = 0x10000 + ((c - 0xd800) << 10) + (next - 0xdc00);\n      bytes.push(0xf0 | (c >> 18), 0x80 | ((c >> 12) & 0x3f), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));\n    } else {\n      bytes.push(0xe0 | (c >> 12), 0x80 | ((c >> 6) & 0x3f), 0x80 | (c & 0x3f));\n    }\n  }\n  return new Uint8Array(bytes);\n};\n\nconst sha256 = (data: Uint8Array): Uint8Array => {\n  const state = new Uint32Array([\n    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\n    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n  ]);\n\n  const bitLen = data.length * 8;\n\n  // Padding: append 1 bit, then zeros, then 64-bit big-endian length\n  const padded = new Uint8Array(Math.ceil((data.length + 9) / 64) * 64);\n  padded.set(data);\n  padded[data.length] = 0x80;\n  // Write the 64-bit big-endian bit length at the end\n  const view = new DataView(padded.buffer);\n  // For strings up to ~256 MB, the high 32 bits of the bit length are zero\n  view.setUint32(padded.length - 4, bitLen, false);\n  if (bitLen > 0xffffffff) {\n    view.setUint32(padded.length - 8, Math.floor(bitLen / 0x100000000), false);\n  }\n\n  // Process each 64-byte block\n  const block = new Uint32Array(16);\n  for (let offset = 0; offset < padded.length; offset += 64) {\n    for (let i = 0; i < 16; i++) {\n      block[i] = view.getUint32(offset + i * 4, false);\n    }\n    sha256Compress(state, block);\n  }\n\n  const result = new Uint8Array(32);\n  const resultView = new DataView(result.buffer);\n  for (let i = 0; i < 8; i++) {\n    resultView.setUint32(i * 4, state[i], false);\n  }\n  return result;\n};\n\nconst hexFromBytes = (bytes: Uint8Array): string => {\n  let hex = \"\";\n  for (let i = 0; i < bytes.length; i++) {\n    hex += bytes[i].toString(16).padStart(2, \"0\");\n  }\n  return hex;\n};\n\n/**\n * Compute a SHA-256 hex digest of a UTF-8 string.\n * Drop-in replacement for `createHash(\"sha256\").update(value).digest(\"hex\")`.\n */\nexport const sha256Hex = (value: string): string =>\n  hexFromBytes(sha256(utf8Encode(value)));\n"
  },
  {
    "path": "packages/kernel/core/src/json-schema.ts",
    "content": "import type { ErrorObject } from \"ajv\";\nimport Ajv2020 from \"ajv/dist/2020\";\n\nimport type { StandardSchema } from \"./types\";\nimport { unknownInputSchema } from \"./types\";\n\nconst ajv = new Ajv2020({\n  allErrors: true,\n  strict: false,\n  validateSchema: false,\n  allowUnionTypes: true,\n});\n\nconst decodePointerSegment = (segment: string): PropertyKey => {\n  const decoded = segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n  return /^\\d+$/.test(decoded) ? Number(decoded) : decoded;\n};\n\nconst pointerToPath = (pointer: string | undefined): ReadonlyArray<PropertyKey> | undefined => {\n  if (!pointer || pointer.length === 0 || pointer === \"/\") {\n    return undefined;\n  }\n\n  return pointer\n    .split(\"/\")\n    .slice(1)\n    .filter((segment) => segment.length > 0)\n    .map(decodePointerSegment);\n};\n\nconst toIssueMessage = (error: ErrorObject): string => {\n  const keyword = error.keyword.trim();\n  const message = (error.message ?? \"Invalid value\").trim();\n  return keyword.length > 0 ? `${keyword}: ${message}` : message;\n};\n\nexport const standardSchemaFromJsonSchema = (\n  schema: unknown,\n  options?: {\n    vendor?: string;\n    fallback?: StandardSchema;\n  },\n): StandardSchema => {\n  try {\n    const validate = ajv.compile(schema as Record<string, unknown>);\n\n    return {\n      \"~standard\": {\n        version: 1,\n        vendor: options?.vendor ?? \"json-schema\",\n        validate: (value: unknown) => {\n          const valid = validate(value);\n          if (valid) {\n            return { value };\n          }\n\n          const issues = (validate.errors ?? []).map((error) => ({\n            message: toIssueMessage(error),\n            path: pointerToPath(error.instancePath),\n          }));\n\n          return {\n            issues: issues.length > 0\n              ? issues\n              : [{ message: \"Invalid value\" }],\n          };\n        },\n      },\n    };\n  } catch {\n    return options?.fallback ?? unknownInputSchema;\n  }\n};\n"
  },
  {
    "path": "packages/kernel/core/src/schema-types.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\n\nimport { typeSignatureFromSchema } from \"./schema-types\";\n\ndescribe(\"schema-types\", () => {\n  it(\"expands local $defs refs in type signatures\", () => {\n    const schema = {\n      type: \"object\",\n      properties: {\n        args: {\n          type: \"object\",\n          properties: {\n            input: {\n              $ref: \"#/$defs/input\",\n            },\n          },\n          required: [\"input\"],\n          additionalProperties: false,\n        },\n      },\n      required: [\"args\"],\n      additionalProperties: false,\n      $defs: {\n        input: {\n          type: \"object\",\n          properties: {\n            issueId: {\n              type: \"string\",\n            },\n            externalLink: {\n              type: \"string\",\n            },\n          },\n          required: [\"issueId\"],\n          additionalProperties: false,\n        },\n      },\n    };\n\n    expect(typeSignatureFromSchema(schema, \"unknown\", Infinity)).toBe(\n      \"{ args: { input: { issueId: string, externalLink?: string } } }\",\n    );\n  });\n\n  it(\"renders GraphQL error arrays with object item shapes\", () => {\n    const schema = {\n      type: \"object\",\n      properties: {\n        data: {\n          type: \"object\",\n          properties: {\n            success: {\n              type: \"boolean\",\n            },\n          },\n          required: [\"success\"],\n          additionalProperties: false,\n        },\n        errors: {\n          type: \"array\",\n          items: {\n            type: \"object\",\n            properties: {\n              message: {\n                type: \"string\",\n              },\n            },\n            required: [\"message\"],\n            additionalProperties: true,\n          },\n        },\n      },\n      required: [\"data\", \"errors\"],\n      additionalProperties: false,\n    };\n\n    expect(typeSignatureFromSchema(schema, \"unknown\", Infinity)).toContain(\n      \"errors: { message: string }[]\",\n    );\n  });\n\n  it(\"quotes invalid object property names\", () => {\n    const schema = {\n      type: \"object\",\n      properties: {\n        \"x-request-id\": {\n          type: \"string\",\n        },\n      },\n      required: [\"x-request-id\"],\n      additionalProperties: false,\n    };\n\n    expect(typeSignatureFromSchema(schema, \"unknown\", Infinity)).toBe(\n      '{ \"x-request-id\": string }',\n    );\n  });\n});\n"
  },
  {
    "path": "packages/kernel/core/src/schema-types.ts",
    "content": "type JsonSchemaRecord = Record<string, unknown>;\n\nexport type TypeSignatureRenderOptions = {\n  maxLength?: number;\n  maxDepth?: number;\n  maxProperties?: number;\n};\n\nconst asRecord = (value: unknown): JsonSchemaRecord =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as JsonSchemaRecord)\n    : {};\n\nconst asStringArray = (value: unknown): Array<string> =>\n  Array.isArray(value)\n    ? value.filter((item): item is string => typeof item === \"string\")\n    : [];\n\nconst truncate = (value: string, maxLength: number): string =>\n  value.length <= maxLength\n    ? value\n    : `${value.slice(0, Math.max(0, maxLength - 4))} ...`;\n\nconst VALID_IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nconst formatPropertyKey = (value: string): string =>\n  VALID_IDENTIFIER_PATTERN.test(value) ? value : JSON.stringify(value);\n\nconst compositeLabel = (\n  key: \"oneOf\" | \"anyOf\" | \"allOf\",\n  schema: JsonSchemaRecord,\n  render: (input: unknown) => string,\n): string | null => {\n  const items = Array.isArray(schema[key]) ? schema[key].map(asRecord) : [];\n  if (items.length === 0) {\n    return null;\n  }\n\n  const labels = items\n    .map((item) => render(item))\n    .filter((label) => label.length > 0);\n\n  if (labels.length === 0) {\n    return null;\n  }\n\n  return labels.join(key === \"allOf\" ? \" & \" : \" | \");\n};\n\nconst refSegments = (ref: string): Array<string> | null => {\n  if (!ref.startsWith(\"#/\")) {\n    return null;\n  }\n\n  return ref\n    .slice(2)\n    .split(\"/\")\n    .map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n};\n\nconst resolveLocalRef = (\n  root: JsonSchemaRecord,\n  ref: string,\n): JsonSchemaRecord | null => {\n  const segments = refSegments(ref);\n  if (!segments || segments.length === 0) {\n    return null;\n  }\n\n  let current: unknown = root;\n  for (const segment of segments) {\n    const record = asRecord(current);\n    if (!(segment in record)) {\n      return null;\n    }\n    current = record[segment];\n  }\n\n  const resolved = asRecord(current);\n  return Object.keys(resolved).length > 0 ? resolved : null;\n};\n\nconst refFallbackLabel = (ref: string): string => {\n  const segments = refSegments(ref);\n  return segments?.at(-1) ?? ref;\n};\n\nexport const schemaToTypeSignatureWithOptions = (\n  input: unknown,\n  options: TypeSignatureRenderOptions = {},\n): string => {\n  const root = asRecord(input);\n  const maxLength = options.maxLength ?? 220;\n  const boundedSummary = Number.isFinite(maxLength);\n  const maxDepth = options.maxDepth ?? (boundedSummary ? 4 : Number.POSITIVE_INFINITY);\n  const maxProperties = options.maxProperties ?? (boundedSummary ? 6 : Number.POSITIVE_INFINITY);\n\n  const render = (\n    currentInput: unknown,\n    seenRefs: ReadonlySet<string>,\n    depthRemaining: number,\n  ): string => {\n    const schema = asRecord(currentInput);\n\n    if (depthRemaining <= 0) {\n      if (typeof schema.title === \"string\" && schema.title.length > 0) {\n        return schema.title;\n      }\n\n      if (schema.type === \"array\") {\n        return \"unknown[]\";\n      }\n\n      if (schema.type === \"object\" || schema.properties) {\n        return schema.additionalProperties ? \"Record<string, unknown>\" : \"object\";\n      }\n    }\n\n    if (typeof schema.$ref === \"string\") {\n      const ref = schema.$ref.trim();\n      if (ref.length === 0) {\n        return \"unknown\";\n      }\n\n      if (seenRefs.has(ref)) {\n        return refFallbackLabel(ref);\n      }\n\n      const target = resolveLocalRef(root, ref);\n      if (!target) {\n        return refFallbackLabel(ref);\n      }\n\n      return render(target, new Set([...seenRefs, ref]), depthRemaining - 1);\n    }\n\n    if (\"const\" in schema) {\n      return JSON.stringify(schema.const);\n    }\n\n    const enumValues = Array.isArray(schema.enum) ? schema.enum : [];\n    if (enumValues.length > 0) {\n      return truncate(\n        enumValues.map((value) => JSON.stringify(value)).join(\" | \"),\n        maxLength,\n      );\n    }\n\n    const composite =\n      compositeLabel(\"oneOf\", schema, (value) => render(value, seenRefs, depthRemaining - 1))\n      ?? compositeLabel(\"anyOf\", schema, (value) => render(value, seenRefs, depthRemaining - 1))\n      ?? compositeLabel(\"allOf\", schema, (value) => render(value, seenRefs, depthRemaining - 1));\n    if (composite) {\n      return truncate(composite, maxLength);\n    }\n\n    if (schema.type === \"array\") {\n      const itemLabel = schema.items\n        ? render(schema.items, seenRefs, depthRemaining - 1)\n        : \"unknown\";\n      return truncate(`${itemLabel}[]`, maxLength);\n    }\n\n    if (schema.type === \"object\" || schema.properties) {\n      const properties = asRecord(schema.properties);\n      const keys = Object.keys(properties);\n      if (keys.length === 0) {\n        return schema.additionalProperties ? \"Record<string, unknown>\" : \"object\";\n      }\n\n      const required = new Set(asStringArray(schema.required));\n      const visibleKeys = keys.slice(0, maxProperties);\n      const parts = visibleKeys.map((key) =>\n        `${formatPropertyKey(key)}${required.has(key) ? \"\" : \"?\"}: ${render(properties[key], seenRefs, depthRemaining - 1)}`\n      );\n      if (visibleKeys.length < keys.length) {\n        parts.push(\"...\");\n      }\n\n      return truncate(`{ ${parts.join(\", \")} }`, maxLength);\n    }\n\n    if (Array.isArray(schema.type)) {\n      return truncate(schema.type.join(\" | \"), maxLength);\n    }\n\n    if (typeof schema.type === \"string\") {\n      return schema.type;\n    }\n\n    return \"unknown\";\n  };\n\n  return render(root, new Set(), maxDepth);\n};\n\nexport const schemaToTypeSignature = (\n  input: unknown,\n  maxLength: number = 220,\n): string =>\n  schemaToTypeSignatureWithOptions(input, { maxLength });\n\nexport const typeSignatureFromSchemaJson = (\n  schemaJson: string | undefined,\n  fallback: string,\n  maxLength: number = 220,\n): string => {\n  if (!schemaJson) {\n    return fallback;\n  }\n\n  try {\n    return schemaToTypeSignature(JSON.parse(schemaJson) as unknown, maxLength);\n  } catch {\n    return fallback;\n  }\n};\n\nexport const typeSignatureFromSchema = (\n  schema: unknown,\n  fallback: string,\n  maxLength: number = 220,\n): string => {\n  if (schema === undefined) {\n    return fallback;\n  }\n\n  try {\n    return schemaToTypeSignature(schema, maxLength);\n  } catch {\n    return fallback;\n  }\n};\n\nexport const typeSignatureFromSchemaWithOptions = (\n  schema: unknown,\n  fallback: string,\n  options: TypeSignatureRenderOptions = {},\n): string => {\n  if (schema === undefined) {\n    return fallback;\n  }\n\n  try {\n    return schemaToTypeSignatureWithOptions(schema, options);\n  } catch {\n    return fallback;\n  }\n};\n"
  },
  {
    "path": "packages/kernel/core/src/system-tools.ts",
    "content": "import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { createDiscoveryPrimitivesFromToolCatalog } from \"./discovery\";\nimport { toTool } from \"./tool-map\";\nimport {\n  ToolDescriptorSchema,\n  ToolNamespaceSchema,\n  type ToolCatalog,\n  type ToolMap,\n  type ToolPath,\n} from \"./types\";\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst catalogNamespacesInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    limit: Schema.optional(Schema.Number),\n  }),\n);\n\nconst catalogNamespacesOutputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    namespaces: Schema.Array(ToolNamespaceSchema),\n  }),\n);\n\nconst catalogToolsInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    namespace: Schema.optional(Schema.String),\n    query: Schema.optional(Schema.String),\n    limit: Schema.optional(Schema.Number),\n    includeSchemas: Schema.optional(Schema.Boolean),\n  }),\n);\n\nconst catalogToolsOutputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    results: Schema.Array(ToolDescriptorSchema),\n  }),\n);\n\nconst describeToolInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    path: Schema.String,\n    includeSchemas: Schema.optional(Schema.Boolean),\n  }),\n);\n\nconst describeToolOutputSchema = Schema.standardSchemaV1(\n  Schema.NullOr(ToolDescriptorSchema),\n);\n\nconst discoverInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    query: Schema.String,\n    limit: Schema.optional(Schema.Number),\n    includeSchemas: Schema.optional(Schema.Boolean),\n  }),\n);\n\nconst discoverResultItemSchema = Schema.extend(\n  ToolDescriptorSchema,\n  Schema.Struct({\n    score: Schema.Number,\n  }),\n);\n\nconst discoverOutputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    bestPath: Schema.NullOr(Schema.String),\n    results: Schema.Array(discoverResultItemSchema),\n    total: Schema.Number,\n  }),\n);\n\nexport type CreateSystemToolMapInput = {\n  catalog?: ToolCatalog;\n  getCatalog?: () => ToolCatalog;\n  sourceKey?: string;\n};\n\nexport const createSystemToolMap = (\n  input: CreateSystemToolMapInput,\n): ToolMap => {\n  const sourceKey = input.sourceKey ?? \"system\";\n  const getCatalog = (): ToolCatalog => {\n    if (input.catalog) {\n      return input.catalog;\n    }\n    if (input.getCatalog) {\n      return input.getCatalog();\n    }\n\n    throw new Error(\"createSystemToolMap requires a catalog or getCatalog\");\n  };\n  const getPrimitives = () =>\n    createDiscoveryPrimitivesFromToolCatalog({\n      catalog: getCatalog(),\n    }) as Required<ReturnType<typeof createDiscoveryPrimitivesFromToolCatalog>>;\n\n  const tools: ToolMap = {};\n\n  tools[\"catalog.namespaces\"] = toTool({\n    tool: {\n      description: \"List available namespaces with display names and tool counts\",\n      inputSchema: catalogNamespacesInputSchema,\n      outputSchema: catalogNamespacesOutputSchema,\n      execute: ({ limit }: { limit?: number }) =>\n        Effect.runPromise(\n          getPrimitives().catalog.namespaces((limit !== undefined ? { limit } : {})),\n        ),\n    },\n    metadata: {\n      sourceKey,\n      interaction: \"auto\",\n    },\n  });\n\n  tools[\"catalog.tools\"] = toTool({\n    tool: {\n      description: \"List tools with optional namespace and query filters\",\n      inputSchema: catalogToolsInputSchema,\n      outputSchema: catalogToolsOutputSchema,\n      execute: (\n        toolInput: {\n          namespace?: string;\n          query?: string;\n          limit?: number;\n          includeSchemas?: boolean;\n        },\n      ) =>\n        Effect.runPromise(\n          getPrimitives().catalog.tools({\n            ...(toolInput.namespace !== undefined\n              ? { namespace: toolInput.namespace }\n              : {}),\n            ...(toolInput.query !== undefined ? { query: toolInput.query } : {}),\n            ...(toolInput.limit !== undefined ? { limit: toolInput.limit } : {}),\n            ...(toolInput.includeSchemas !== undefined\n              ? { includeSchemas: toolInput.includeSchemas }\n              : {}),\n          }),\n        ),\n    },\n    metadata: {\n      sourceKey,\n      interaction: \"auto\",\n    },\n  });\n\n  tools[\"describe.tool\"] = toTool({\n    tool: {\n      description: \"Get metadata and optional schemas for a tool path\",\n      inputSchema: describeToolInputSchema,\n      outputSchema: describeToolOutputSchema,\n      execute: ({ path, includeSchemas }: { path: string; includeSchemas?: boolean }) =>\n        Effect.runPromise(\n          getPrimitives().describe.tool({\n            path: asToolPath(path),\n            ...(includeSchemas !== undefined ? { includeSchemas } : {}),\n          }),\n        ),\n    },\n    metadata: {\n      sourceKey,\n      interaction: \"auto\",\n    },\n  });\n\n  tools.discover = toTool({\n    tool: {\n      description: \"Search tools by intent and return ranked matches\",\n      inputSchema: discoverInputSchema,\n      outputSchema: discoverOutputSchema,\n      execute: (\n        toolInput: {\n          query: string;\n          limit?: number;\n          includeSchemas?: boolean;\n        },\n      ) =>\n        Effect.runPromise(\n          getPrimitives().discover({\n            query: toolInput.query,\n            ...(toolInput.limit !== undefined ? { limit: toolInput.limit } : {}),\n            ...(toolInput.includeSchemas !== undefined\n              ? { includeSchemas: toolInput.includeSchemas }\n              : {}),\n          }),\n        ),\n    },\n    metadata: {\n      sourceKey,\n      interaction: \"auto\",\n    },\n  });\n\n  return tools;\n};\n\nexport type MergeToolMapsOptions = {\n  conflictMode?: \"throw\" | \"override\";\n};\n\nexport const mergeToolMaps = (\n  maps: ReadonlyArray<ToolMap>,\n  options: MergeToolMapsOptions = {},\n): ToolMap => {\n  const conflictMode = options.conflictMode ?? \"throw\";\n  const merged: ToolMap = {};\n\n  for (const map of maps) {\n    for (const [path, tool] of Object.entries(map)) {\n      if (conflictMode === \"throw\" && path in merged) {\n        throw new Error(`Tool path conflict: ${path}`);\n      }\n      merged[path] = tool;\n    }\n  }\n\n  return merged;\n};\n"
  },
  {
    "path": "packages/kernel/core/src/tool-map.ts",
    "content": "import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as JSONSchema from \"effect/JSONSchema\";\nimport { typeSignatureFromSchema } from \"./schema-types\";\n\nimport type {\n  ElicitationRequest,\n  ElicitationResponse,\n  ExecutableTool,\n  OnElicitation,\n  OnToolInteraction,\n  ToolDefinition,\n  ToolDescriptor,\n  ToolElicitationRequest,\n  ToolInput,\n  ToolInteractionDecision,\n  ToolInteractionRequest,\n  ToolInvocationContext,\n  ToolInvoker,\n  ToolMap,\n  ToolMetadata,\n  ToolPath,\n} from \"./types\";\nimport { kernelCoreEffectError } from \"./effect-errors\";\n\ntype ResolvedTool = {\n  path: ToolPath;\n  tool: ExecutableTool;\n  metadata?: ToolMetadata;\n};\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst getSchemaValidator = (schema: unknown):\n  | ((value: unknown, options?: StandardSchemaV1.Options) =>\n    | StandardSchemaV1.Result<unknown>\n    | Promise<StandardSchemaV1.Result<unknown>>)\n  | null => {\n  if (!schema || (typeof schema !== \"object\" && typeof schema !== \"function\")) {\n    return null;\n  }\n\n  const standard = (schema as { \"~standard\"?: unknown })[\"~standard\"];\n  if (!standard || typeof standard !== \"object\") {\n    return null;\n  }\n\n  const validate = (standard as { validate?: unknown }).validate;\n  return typeof validate === \"function\"\n    ? (validate as (\n      value: unknown,\n      options?: StandardSchemaV1.Options,\n    ) =>\n      | StandardSchemaV1.Result<unknown>\n      | Promise<StandardSchemaV1.Result<unknown>>)\n    : null;\n};\n\nconst formatIssuePath = (\n  path: ReadonlyArray<PropertyKey | StandardSchemaV1.PathSegment> | undefined,\n): string => {\n  if (!path || path.length === 0) {\n    return \"$\";\n  }\n\n  return path\n    .map((segment) =>\n      typeof segment === \"object\" && segment !== null && \"key\" in segment\n        ? String(segment.key)\n        : String(segment),\n    )\n    .join(\".\");\n};\n\nconst formatIssues = (issues: ReadonlyArray<StandardSchemaV1.Issue>): string =>\n  issues\n    .map((issue) => `${formatIssuePath(issue.path)}: ${issue.message}`)\n    .join(\"; \");\n\nconst parseInput = (input: {\n  schema: unknown;\n  value: unknown;\n  path: string;\n}): Effect.Effect<unknown, Error> => {\n  const validate = getSchemaValidator(input.schema);\n  if (!validate) {\n    return Effect.fail(\n      kernelCoreEffectError(\"tool-map\", `Tool ${input.path} has no Standard Schema validator on inputSchema`),\n    );\n  }\n\n  return Effect.tryPromise({\n    try: () => Promise.resolve(validate(input.value)),\n    catch: toError,\n  }).pipe(\n    Effect.flatMap((result) => {\n      if (\"issues\" in result && result.issues) {\n        return Effect.fail(\n          kernelCoreEffectError(\"tool-map\", \n            `Input validation failed for ${input.path}: ${formatIssues(result.issues)}`,\n          ),\n        );\n      }\n      return Effect.succeed(result.value);\n    }),\n  );\n};\n\nconst defaultRequiredElicitation = (path: string): ElicitationRequest => ({\n  mode: \"form\",\n  message: `Approval required before invoking ${path}`,\n  requestedSchema: {\n    type: \"object\",\n    properties: {},\n    additionalProperties: false,\n  },\n});\n\nconst executeDecision: ToolInteractionDecision = { kind: \"execute\" };\n\nconst toElicitationDecision = (input: {\n  metadata?: ToolMetadata;\n  path: string;\n}): ToolInteractionDecision | null => {\n  if (input.metadata?.elicitation) {\n    return {\n      kind: \"elicit\",\n      elicitation: input.metadata.elicitation,\n    };\n  }\n\n  if (input.metadata?.interaction === \"required\") {\n    return {\n      kind: \"elicit\",\n      elicitation: defaultRequiredElicitation(input.path),\n    };\n  }\n\n  return null;\n};\n\nconst defaultInteractionDecision = (input: {\n  metadata?: ToolMetadata;\n  path: string;\n}): ToolInteractionDecision =>\n  toElicitationDecision(input) ?? executeDecision;\n\nexport class ToolInteractionPendingError extends Data.TaggedError(\n  \"ToolInteractionPendingError\",\n)<{\n  readonly path: string;\n  readonly elicitation: ElicitationRequest;\n  readonly interactionId?: string;\n}> {}\n\nexport class ToolInteractionDeniedError extends Data.TaggedError(\n  \"ToolInteractionDeniedError\",\n)<{\n  readonly path: string;\n  readonly reason: string;\n}> {}\n\nexport const allowAllToolInteractions: OnToolInteraction = () =>\n  Effect.succeed(executeDecision);\n\nconst evaluateInteractionDecision = (input: {\n  path: ToolPath;\n  args: unknown;\n  metadata?: ToolMetadata;\n  sourceKey: string;\n  context?: ToolInvocationContext;\n  onToolInteraction?: OnToolInteraction;\n}): Effect.Effect<ToolInteractionDecision, unknown> => {\n  const defaultDecision = defaultInteractionDecision({\n    metadata: input.metadata,\n    path: input.path,\n  });\n\n  if (!input.onToolInteraction) {\n    return Effect.succeed(defaultDecision);\n  }\n\n  const request: ToolInteractionRequest = {\n    path: input.path,\n    sourceKey: input.sourceKey,\n    args: input.args,\n    metadata: input.metadata,\n    context: input.context,\n    defaultElicitation:\n      defaultDecision.kind === \"elicit\"\n        ? defaultDecision.elicitation\n        : null,\n  };\n\n  return input.onToolInteraction(request);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst mergeAcceptedElicitationContent = (input: {\n  path: ToolPath;\n  args: unknown;\n  response: ElicitationResponse;\n  inputSchema: unknown;\n}): Effect.Effect<unknown, Error> => {\n  if (!input.response.content) {\n    return Effect.succeed(input.args);\n  }\n\n  if (!isRecord(input.args)) {\n    return Effect.fail(\n      kernelCoreEffectError(\"tool-map\", \n        `Tool ${input.path} cannot merge elicitation content into non-object arguments`,\n      ),\n    );\n  }\n\n  const merged = {\n    ...input.args,\n    ...input.response.content,\n  };\n\n  return parseInput({\n    schema: input.inputSchema,\n    value: merged,\n    path: input.path,\n  });\n};\n\nconst declineReasonFromResponse = (input: {\n  path: ToolPath;\n  response: ElicitationResponse;\n}): string => {\n  const reason =\n    input.response.content\n    && typeof input.response.content.reason === \"string\"\n    && input.response.content.reason.trim().length > 0\n      ? input.response.content.reason.trim()\n      : null;\n\n  if (reason) {\n    return reason;\n  }\n\n  return input.response.action === \"cancel\"\n    ? `Interaction cancelled for ${input.path}`\n    : `Interaction declined for ${input.path}`;\n};\n\nconst resolveInteractionDecision = (input: {\n  path: ToolPath;\n  args: unknown;\n  inputSchema: unknown;\n  metadata?: ToolMetadata;\n  sourceKey: string;\n  context?: ToolInvocationContext;\n  decision: ToolInteractionDecision;\n  interactionId: string;\n  onElicitation?: OnElicitation;\n}): Effect.Effect<unknown, ToolInteractionPendingError | ToolInteractionDeniedError | Error> => {\n  if (input.decision.kind === \"execute\") {\n    return Effect.succeed(input.args);\n  }\n\n  if (input.decision.kind === \"decline\") {\n    return Effect.fail(\n      new ToolInteractionDeniedError({\n        path: input.path,\n        reason: input.decision.reason,\n      }),\n    );\n  }\n\n  if (!input.onElicitation) {\n    return Effect.fail(\n      new ToolInteractionPendingError({\n        path: input.path,\n        elicitation: input.decision.elicitation,\n        interactionId: input.interactionId,\n      }),\n    );\n  }\n\n  const elicitationRequest: ToolElicitationRequest = {\n    interactionId: input.interactionId,\n    path: input.path,\n    sourceKey: input.sourceKey,\n    args: input.args,\n    metadata: input.metadata,\n    context: input.context,\n    elicitation: input.decision.elicitation,\n  };\n\n  return input.onElicitation(elicitationRequest).pipe(\n    Effect.mapError(toError),\n    Effect.flatMap((response) => {\n      if (response.action !== \"accept\") {\n        return Effect.fail(\n          new ToolInteractionDeniedError({\n            path: input.path,\n            reason: declineReasonFromResponse({\n              path: input.path,\n              response,\n            }),\n          }),\n        );\n      }\n\n      return mergeAcceptedElicitationContent({\n        path: input.path,\n        args: input.args,\n        response,\n        inputSchema: input.inputSchema,\n      });\n    }),\n  );\n};\n\nexport function wrapTool(input: {\n  tool: ExecutableTool;\n  metadata?: ToolMetadata;\n}): ToolDefinition {\n  return {\n    tool: input.tool,\n    metadata: input.metadata,\n  };\n}\n\nexport const toTool = wrapTool;\nexport const toExecutorTool = wrapTool;\n\nconst isToolDefinition = (value: ToolInput): value is ToolDefinition =>\n  typeof value === \"object\" && value !== null && \"tool\" in value;\n\nconst deriveSchemaValue = (value: unknown): unknown | undefined => {\n  if (value === undefined || value === null) {\n    return undefined;\n  }\n\n  try {\n    if (\n      (typeof value === \"object\" || typeof value === \"function\")\n      && value !== null\n      && \"~standard\" in value\n    ) {\n      return JSONSchema.make(value as any);\n    }\n\n    return value;\n  } catch {\n    return undefined;\n  }\n};\n\nconst inferTypeFromSchemaValue = (\n  schema: unknown,\n  fallback: string,\n  maxLength: number = 240,\n): string => typeSignatureFromSchema(schema, fallback, maxLength);\n\nexport function createToolsFromRecord(input: {\n  tools: Record<string, ExecutableTool>;\n  sourceKey?: string;\n}): ToolMap {\n  const { tools, sourceKey = \"in_memory.tools\" } = input;\n\n  return Object.fromEntries(\n    Object.entries(tools)\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([path, tool]) => [\n        path,\n        wrapTool({\n          tool,\n          metadata: { sourceKey },\n        }),\n      ]),\n  ) as ToolMap;\n}\n\nconst resolveToolsFromMap = (input: {\n  tools: ToolMap;\n  sourceKey?: string;\n}): ResolvedTool[] => {\n  const defaultSourceKey = input.sourceKey ?? \"in_memory.tools\";\n\n  return Object.entries(input.tools)\n    .sort(([left], [right]) => left.localeCompare(right))\n    .map(([path, value]) => {\n      const entry = isToolDefinition(value) ? value : { tool: value };\n      const metadata = entry.metadata\n        ? {\n            sourceKey: defaultSourceKey,\n            ...entry.metadata,\n          }\n        : { sourceKey: defaultSourceKey };\n\n      return {\n        path: asToolPath(path),\n        tool: entry.tool,\n        metadata,\n      } satisfies ResolvedTool;\n    });\n};\n\nexport function toolDescriptorsFromTools(input: {\n  tools: ToolMap;\n  sourceKey?: string;\n}): ToolDescriptor[] {\n  const resolvedTools = resolveToolsFromMap({\n    tools: input.tools,\n    sourceKey: input.sourceKey,\n  });\n\n  return resolvedTools.map((entry) => {\n    const metadata = entry.metadata;\n    const definition = entry.tool;\n    const inputSchema =\n      metadata?.contract?.inputSchema\n      ?? deriveSchemaValue(definition.inputSchema)\n      ?? deriveSchemaValue(definition.parameters);\n    const outputSchema =\n      metadata?.contract?.outputSchema\n      ?? deriveSchemaValue(definition.outputSchema);\n    const contract = {\n      inputTypePreview:\n        metadata?.contract?.inputTypePreview ?? inferTypeFromSchemaValue(inputSchema, \"unknown\"),\n      outputTypePreview:\n        metadata?.contract?.outputTypePreview ?? inferTypeFromSchemaValue(outputSchema, \"unknown\"),\n      ...(inputSchema !== undefined ? { inputSchema } : {}),\n      ...(outputSchema !== undefined ? { outputSchema } : {}),\n      ...(metadata?.contract?.exampleInput !== undefined\n        ? { exampleInput: metadata.contract.exampleInput }\n        : {}),\n      ...(metadata?.contract?.exampleOutput !== undefined\n        ? { exampleOutput: metadata.contract.exampleOutput }\n        : {}),\n    } satisfies NonNullable<ToolDescriptor[\"contract\"]>;\n\n    return {\n      path: entry.path,\n      sourceKey: metadata?.sourceKey ?? \"in_memory.tools\",\n      description: definition.description,\n      interaction: metadata?.interaction,\n      elicitation: metadata?.elicitation,\n      contract,\n      ...(metadata?.providerKind ? { providerKind: metadata.providerKind } : {}),\n      ...(metadata?.providerData !== undefined\n        ? { providerData: metadata.providerData }\n        : {}),\n    } satisfies ToolDescriptor;\n  });\n}\n\nconst asInteractionIdPart = (value: string): string =>\n  value.replace(/[^a-zA-Z0-9._-]/g, \"_\");\n\nconst createInteractionIdFactory = () => {\n  let sequence = 0;\n\n  return (input: { path: ToolPath; context?: ToolInvocationContext }): string => {\n    sequence += 1;\n\n    const runId =\n      typeof input.context?.runId === \"string\" && input.context.runId.length > 0\n        ? input.context.runId\n        : \"run\";\n    const callId =\n      typeof input.context?.callId === \"string\" && input.context.callId.length > 0\n        ? input.context.callId\n        : `call_${String(sequence)}`;\n\n    return `${asInteractionIdPart(runId)}:${asInteractionIdPart(callId)}:${asInteractionIdPart(String(input.path))}:${String(sequence)}`;\n  };\n};\n\nexport const makeToolInvokerFromTools = (input: {\n  tools: ToolMap;\n  sourceKey?: string;\n  onToolInteraction?: OnToolInteraction;\n  onElicitation?: OnElicitation;\n}): ToolInvoker => {\n  const resolvedTools = resolveToolsFromMap({\n    tools: input.tools,\n    sourceKey: input.sourceKey,\n  });\n  const byPath = new Map(resolvedTools.map((entry) => [entry.path as string, entry]));\n  const nextInteractionId = createInteractionIdFactory();\n\n  return {\n    invoke: ({ path, args, context }) =>\n      Effect.gen(function* () {\n        const entry = byPath.get(path);\n        if (!entry) {\n          return yield* kernelCoreEffectError(\"tool-map\", `Unknown tool path: ${path}`);\n        }\n\n        const parsedInput = yield* parseInput({\n          schema: entry.tool.inputSchema,\n          value: args,\n          path,\n        });\n\n        const decision = yield* evaluateInteractionDecision({\n          path: entry.path,\n          args: parsedInput,\n          metadata: entry.metadata,\n          sourceKey: entry.metadata?.sourceKey ?? \"in_memory.tools\",\n          context,\n          onToolInteraction: input.onToolInteraction,\n        });\n\n        const interactionId =\n          decision.kind === \"elicit\" && decision.interactionId\n            ? decision.interactionId\n            : nextInteractionId({ path: entry.path, context });\n\n        const executableInput = yield* resolveInteractionDecision({\n          path: entry.path,\n          args: parsedInput,\n          inputSchema: entry.tool.inputSchema,\n          metadata: entry.metadata,\n          sourceKey: entry.metadata?.sourceKey ?? \"in_memory.tools\",\n          context,\n          decision,\n          interactionId,\n          onElicitation: input.onElicitation,\n        });\n\n        return yield* Effect.tryPromise({\n          try: () =>\n            Promise.resolve(\n              entry.tool.execute(executableInput, {\n                path: entry.path,\n                sourceKey: entry.metadata?.sourceKey ?? \"in_memory.tools\",\n                metadata: entry.metadata,\n                invocation: context,\n                onElicitation: input.onElicitation,\n              }),\n            ),\n          catch: toError,\n        });\n      }),\n  };\n};\n"
  },
  {
    "path": "packages/kernel/core/src/types.ts",
    "content": "import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nexport type ToolPath = string & { readonly __toolPath: unique symbol };\n\nexport type StandardSchema<Input = unknown, Output = unknown> =\n  StandardSchemaV1<Input, Output>;\n\nexport type ElicitationFormRequest = {\n  mode?: \"form\";\n  message: string;\n  requestedSchema: Record<string, unknown>;\n};\n\nexport type ElicitationUrlRequest = {\n  mode: \"url\";\n  message: string;\n  url: string;\n  elicitationId: string;\n};\n\nexport type ElicitationRequest =\n  | ElicitationFormRequest\n  | ElicitationUrlRequest;\n\nexport type ElicitationAction = \"accept\" | \"decline\" | \"cancel\";\n\nexport type ElicitationResponse = {\n  action: ElicitationAction;\n  content?: Record<string, unknown>;\n};\n\nexport type ToolInvocationContext = {\n  runId?: string;\n  callId?: string;\n  scope?: string;\n  actor?: string;\n  [key: string]: unknown;\n};\n\nexport type ToolInteractionRequest = {\n  path: ToolPath;\n  sourceKey: string;\n  args: unknown;\n  metadata?: ToolMetadata;\n  context?: ToolInvocationContext;\n  defaultElicitation: ElicitationRequest | null;\n};\n\nexport type ToolInteractionDecision =\n  | { kind: \"execute\" }\n  | { kind: \"decline\"; reason: string }\n  | {\n    kind: \"elicit\";\n    elicitation: ElicitationRequest;\n    interactionId?: string;\n  };\n\nexport type ToolElicitationRequest = {\n  interactionId: string;\n  path: ToolPath;\n  sourceKey: string;\n  args: unknown;\n  metadata?: ToolMetadata;\n  context?: ToolInvocationContext;\n  elicitation: ElicitationRequest;\n};\n\nexport type OnToolInteraction = (\n  input: ToolInteractionRequest,\n) => Effect.Effect<ToolInteractionDecision, unknown>;\n\nexport type OnElicitation = (\n  input: ToolElicitationRequest,\n) => Effect.Effect<ElicitationResponse, unknown>;\n\nexport type ToolContract = {\n  inputTypePreview?: string;\n  outputTypePreview?: string;\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n  exampleInput?: unknown;\n  exampleOutput?: unknown;\n};\n\nexport const ToolContractSchema = Schema.Struct({\n  inputTypePreview: Schema.optional(Schema.String),\n  outputTypePreview: Schema.optional(Schema.String),\n  inputSchema: Schema.optional(Schema.Unknown),\n  outputSchema: Schema.optional(Schema.Unknown),\n  exampleInput: Schema.optional(Schema.Unknown),\n  exampleOutput: Schema.optional(Schema.Unknown),\n});\n\nexport type ToolMetadata = {\n  interaction?: \"auto\" | \"required\";\n  elicitation?: ElicitationRequest;\n  contract?: ToolContract;\n  sourceKey?: string;\n  providerKind?: string;\n  providerData?: unknown;\n};\n\nexport type ToolExecutionContext = {\n  path: ToolPath;\n  sourceKey: string;\n  metadata?: ToolMetadata;\n  invocation?: ToolInvocationContext;\n  onElicitation?: OnElicitation;\n};\n\nexport type ExecutableTool = {\n  description?: string;\n  inputSchema: StandardSchema;\n  outputSchema?: StandardSchema;\n  parameters?: StandardSchema;\n  execute: (...args: any[]) => unknown;\n};\n\nexport const unknownInputSchema: StandardSchema = {\n  \"~standard\": {\n    version: 1,\n    vendor: \"@executor/codemode-core\",\n    validate: (value: unknown) => ({\n      value,\n    }),\n  },\n};\n\n\nexport type ToolDefinition = {\n  tool: ExecutableTool;\n  metadata?: ToolMetadata;\n};\n\nexport type ToolInput = ExecutableTool | ToolDefinition;\n\nexport type ToolMap = Record<string, ToolInput>;\n\nexport type ToolDescriptor = {\n  path: ToolPath;\n  sourceKey: string;\n  description?: string;\n  interaction?: \"auto\" | \"required\";\n  elicitation?: ElicitationRequest;\n  contract?: ToolContract;\n  providerKind?: string;\n  providerData?: unknown;\n};\n\nexport const ToolDescriptorSchema = Schema.Struct({\n  path: Schema.String,\n  sourceKey: Schema.String,\n  description: Schema.optional(Schema.String),\n  interaction: Schema.optional(\n    Schema.Union(Schema.Literal(\"auto\"), Schema.Literal(\"required\")),\n  ),\n  elicitation: Schema.optional(Schema.Unknown),\n  contract: Schema.optional(ToolContractSchema),\n  providerKind: Schema.optional(Schema.String),\n  providerData: Schema.optional(Schema.Unknown),\n});\n\nexport type ToolNamespace = {\n  namespace: string;\n  displayName?: string;\n  toolCount?: number;\n};\n\nexport const ToolNamespaceSchema = Schema.Struct({\n  namespace: Schema.String,\n  displayName: Schema.optional(Schema.String),\n  toolCount: Schema.optional(Schema.Number),\n});\n\nexport type SearchHit = {\n  path: ToolPath;\n  score: number;\n};\n\nexport type ToolCatalogEntry = {\n  descriptor: ToolDescriptor;\n  namespace?: string;\n  searchText?: string;\n  score?: (queryTokens: readonly string[]) => number;\n};\n\nexport interface ToolCatalog {\n  listNamespaces(input: {\n    limit: number;\n  }): Effect.Effect<readonly ToolNamespace[], unknown>;\n\n  listTools(input: {\n    namespace?: string;\n    query?: string;\n    limit: number;\n    includeSchemas?: boolean;\n  }): Effect.Effect<readonly ToolDescriptor[], unknown>;\n\n  getToolByPath(input: {\n    path: ToolPath;\n    includeSchemas: boolean;\n  }): Effect.Effect<ToolDescriptor | null, unknown>;\n\n  searchTools(input: {\n    query: string;\n    namespace?: string;\n    limit: number;\n  }): Effect.Effect<readonly SearchHit[], unknown>;\n}\n\nexport type CatalogPrimitive = {\n  namespaces(input: {\n    limit?: number;\n  }): Effect.Effect<\n    { namespaces: readonly ToolNamespace[] },\n    unknown\n  >;\n\n  tools(input: {\n    namespace?: string;\n    query?: string;\n    limit?: number;\n    includeSchemas?: boolean;\n  }): Effect.Effect<{ results: readonly ToolDescriptor[] }, unknown>;\n};\n\nexport type DescribePrimitive = {\n  tool(input: {\n    path: ToolPath;\n    includeSchemas?: boolean;\n  }): Effect.Effect<ToolDescriptor | null, unknown>;\n};\n\nexport type DiscoverPrimitive = (input: {\n  query: string;\n  sourceKey?: string;\n  limit?: number;\n  includeSchemas?: boolean;\n}) => Effect.Effect<\n  {\n    bestPath: ToolPath | null;\n    results: readonly (Record<string, unknown> & {\n      path: ToolPath;\n      score: number;\n    })[];\n    total: number;\n  },\n  unknown\n>;\n\nexport type DiscoveryPrimitives = {\n  catalog?: CatalogPrimitive;\n  describe?: DescribePrimitive;\n  discover?: DiscoverPrimitive;\n};\n\nexport type ExecuteResult = {\n  result: unknown;\n  error?: string;\n  logs?: string[];\n};\n\nexport type ToolInvocationInput = {\n  path: string;\n  args: unknown;\n  context?: ToolInvocationContext;\n};\n\nexport interface ToolInvoker {\n  invoke(input: ToolInvocationInput): Effect.Effect<unknown, unknown>;\n}\n\nexport interface CodeExecutor {\n  execute(\n    code: string,\n    toolInvoker: ToolInvoker,\n  ): Effect.Effect<ExecuteResult, unknown>;\n}\n\nexport type CodeToolOutput = {\n  code: string;\n  result: unknown;\n  logs?: string[];\n};\n"
  },
  {
    "path": "packages/kernel/core/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/kernel/core/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    include: [\"src/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/kernel/ir/README.md",
    "content": "# IR v1\n\n`@executor/ir` is the greenfield semantic center for imported sources.\n\n## Boundary\n\n- `CatalogSnapshotV1` is the canonical persisted import artifact.\n- `CatalogV1` is the normalized semantic graph.\n- `CatalogFragmentV1` is the adapter/importer output contract.\n- `ToolDescriptor`, search docs, and inspect views are projections.\n\n## Direction\n\nImporters should move toward:\n\n`source -> CatalogFragmentV1 -> merge -> CatalogV1 -> projectors`\n\nThe existing runtime-specific compiled payload blobs are no longer the target semantic center.\n\n## Package Surface\n\nUse either:\n\n- `@executor/ir`\n\n## Guarantees\n\n- provenance is required on entities\n- synthetic entities are marked explicitly\n- lossy normalization is represented by diagnostics\n- inheritance is preserved in scopes and resolved at projection/planning time\n"
  },
  {
    "path": "packages/kernel/ir/package.json",
    "content": "{\n  \"name\": \"@executor/ir\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./catalog\": \"./src/catalog.ts\",\n    \"./ids\": \"./src/ids.ts\",\n    \"./model\": \"./src/model.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/kernel/ir/src/catalog.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\n\nimport {\n  createCatalogSnapshotV1,\n  createEmptyCatalogV1,\n  decodeCatalogSnapshotV1,\n  mergeCatalogFragments,\n  projectCatalogForAgentSdk,\n  projectSymbolExpandedView,\n  projectSymbolShallowView,\n  validateCatalogInvariants,\n} from \"./catalog\";\nimport {\n  CapabilityIdSchema,\n  DiagnosticIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ExampleSymbolIdSchema,\n  ParameterSymbolIdSchema,\n  RequestBodySymbolIdSchema,\n  ResourceIdSchema,\n  ResponseSetIdSchema,\n  ResponseSymbolIdSchema,\n  ScopeIdSchema,\n  SecuritySchemeSymbolIdSchema,\n  ShapeSymbolIdSchema,\n} from \"./ids\";\nimport type { CatalogV1, CatalogFragmentV1, ProvenanceRef } from \"./model\";\n\nconst put = <K extends string, V>(record: Record<K, V>, key: K, value: V) => {\n  record[key] = value;\n};\n\nconst expectNullableShapeContains = (\n  catalog: CatalogV1,\n  nullableShapeId: ReturnType<typeof ShapeSymbolIdSchema.make>,\n  expectedInnerShapeId: ReturnType<typeof ShapeSymbolIdSchema.make>,\n) => {\n  const shape = catalog.symbols[nullableShapeId];\n  if (shape?.kind !== \"shape\" || shape.node.type !== \"anyOf\") {\n    throw new Error(\"Expected nullable anyOf shape\");\n  }\n\n  expect(shape.node.items).toContain(expectedInnerShapeId);\n};\n\nconst docId = DocumentIdSchema.make(\"doc_primary\");\nconst baseProvenance = (pointer: string): ProvenanceRef[] => [{\n  relation: \"declared\",\n  documentId: docId,\n  pointer,\n}];\n\nconst createHttpCatalog = (input: {\n  collideIds?: boolean;\n  method?: string;\n} = {}): CatalogV1 => {\n  const catalog = createEmptyCatalogV1();\n\n  const resourceId = ResourceIdSchema.make(\"res_primary\");\n  const scopeId = ScopeIdSchema.make(\"scope_service\");\n  const authSchemeId = SecuritySchemeSymbolIdSchema.make(\"sym_security_oauth\");\n  const bodyShapeId = ShapeSymbolIdSchema.make(\"shape_event_body\");\n  const callShapeId = ShapeSymbolIdSchema.make(\"shape_event_call\");\n  const pathGroupShapeId = ShapeSymbolIdSchema.make(\"shape_event_call_path\");\n  const queryGroupShapeId = ShapeSymbolIdSchema.make(\"shape_event_call_query\");\n  const resultShapeId = ShapeSymbolIdSchema.make(\"shape_event_result\");\n  const stringShapeId = ShapeSymbolIdSchema.make(\"shape_string\");\n  const idPathParamId = ParameterSymbolIdSchema.make(\"sym_param_path_event_id\");\n  const calendarParamId = ParameterSymbolIdSchema.make(\"sym_param_path_calendar_id\");\n  const queryParamId = ParameterSymbolIdSchema.make(\n    input.collideIds ? \"sym_param_query_id\" : \"sym_param_query_send_updates\",\n  );\n  const requestBodyId = RequestBodySymbolIdSchema.make(\"sym_request_body_event\");\n  const responseId = ResponseSymbolIdSchema.make(\"sym_response_200\");\n  const responseSetId = ResponseSetIdSchema.make(\"response_set_events_update\");\n  const executableId = ExecutableIdSchema.make(\"exec_http_events_update\");\n  const capabilityId = CapabilityIdSchema.make(\"cap_events_update\");\n  const exampleId = ExampleSymbolIdSchema.make(\"sym_example_event_body\");\n  const collisionDiagnosticId = DiagnosticIdSchema.make(\"diag_projection_collision_grouped_fields\");\n\n  put(catalog.documents as Record<typeof docId, CatalogV1[\"documents\"][typeof docId]>, docId, {\n    id: docId,\n    kind: \"openapi\",\n    title: \"Calendar API\",\n    fetchedAt: \"2026-03-14T00:00:00.000Z\",\n    rawRef: \"memory://calendar/openapi.json\",\n  });\n\n  put(catalog.resources as Record<typeof resourceId, CatalogV1[\"resources\"][typeof resourceId]>, resourceId, {\n    id: resourceId,\n    documentId: docId,\n    canonicalUri: \"https://example.test/openapi.json\",\n    baseUri: \"https://example.test/openapi.json\",\n    anchors: {},\n    dynamicAnchors: {},\n    synthetic: false,\n    provenance: baseProvenance(\"#\"),\n  });\n\n  put(catalog.scopes as Record<typeof scopeId, CatalogV1[\"scopes\"][typeof scopeId]>, scopeId, {\n    id: scopeId,\n    kind: \"service\",\n    name: \"Calendar\",\n    namespace: \"google.calendar\",\n    docs: {\n      summary: \"Calendar service\",\n      description: \"Manage calendar events.\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/servers/0\"),\n  });\n\n  put(catalog.symbols as Record<typeof authSchemeId, CatalogV1[\"symbols\"][typeof authSchemeId]>, authSchemeId, {\n    id: authSchemeId,\n    kind: \"securityScheme\",\n    schemeType: \"oauth2\",\n    docs: {\n      summary: \"OAuth 2.0\",\n    },\n    oauth: {\n      scopes: {\n        \"calendar.events\": \"Manage calendar events\",\n      },\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/components/securitySchemes/oauth2\"),\n  });\n\n  put(catalog.symbols as Record<typeof stringShapeId, CatalogV1[\"symbols\"][typeof stringShapeId]>, stringShapeId, {\n    id: stringShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"String\",\n    node: {\n      type: \"scalar\",\n      scalar: \"string\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/components/schemas/String\"),\n  });\n\n  put(catalog.symbols as Record<typeof bodyShapeId, CatalogV1[\"symbols\"][typeof bodyShapeId]>, bodyShapeId, {\n    id: bodyShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"EventUpdateBody\",\n    node: {\n      type: \"object\",\n      fields: {\n        summary: {\n          shapeId: stringShapeId,\n        },\n      },\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/components/schemas/EventUpdateBody\"),\n  });\n\n  put(catalog.symbols as Record<typeof resultShapeId, CatalogV1[\"symbols\"][typeof resultShapeId]>, resultShapeId, {\n    id: resultShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"Event\",\n    node: {\n      type: \"object\",\n      fields: {\n        id: {\n          shapeId: stringShapeId,\n        },\n        summary: {\n          shapeId: stringShapeId,\n        },\n      },\n      required: [\"id\"],\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/components/schemas/Event\"),\n  });\n\n  if (input.collideIds) {\n    put(catalog.symbols as Record<typeof pathGroupShapeId, CatalogV1[\"symbols\"][typeof pathGroupShapeId]>, pathGroupShapeId, {\n      id: pathGroupShapeId,\n      kind: \"shape\",\n      resourceId,\n      title: \"UpdateEventPathParams\",\n      node: {\n        type: \"object\",\n        fields: {\n          id: { shapeId: stringShapeId },\n          eventId: { shapeId: stringShapeId },\n        },\n        required: [\"id\", \"eventId\"],\n        additionalProperties: false,\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/components/schemas/UpdateEventPathParams\"),\n    });\n\n    put(catalog.symbols as Record<typeof queryGroupShapeId, CatalogV1[\"symbols\"][typeof queryGroupShapeId]>, queryGroupShapeId, {\n      id: queryGroupShapeId,\n      kind: \"shape\",\n      resourceId,\n      title: \"UpdateEventQueryParams\",\n      node: {\n        type: \"object\",\n        fields: {\n          id: { shapeId: stringShapeId },\n        },\n        required: [\"id\"],\n        additionalProperties: false,\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/components/schemas/UpdateEventQueryParams\"),\n    });\n  }\n\n  put(catalog.symbols as Record<typeof callShapeId, CatalogV1[\"symbols\"][typeof callShapeId]>, callShapeId, {\n    id: callShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"UpdateEventCall\",\n    node: input.collideIds\n      ? {\n          type: \"object\",\n          fields: {\n            path: { shapeId: pathGroupShapeId },\n            query: { shapeId: queryGroupShapeId },\n            body: { shapeId: bodyShapeId },\n          },\n          required: [\"path\", \"query\", \"body\"],\n          additionalProperties: false,\n        }\n      : {\n          type: \"object\",\n          fields: {\n            calendarId: { shapeId: stringShapeId },\n            eventId: { shapeId: stringShapeId },\n            sendUpdates: { shapeId: stringShapeId },\n            body: { shapeId: bodyShapeId },\n          },\n          required: [\"calendarId\", \"eventId\", \"body\"],\n          additionalProperties: false,\n        },\n    synthetic: false,\n    provenance: baseProvenance(\"#/components/schemas/UpdateEventCall\"),\n    ...(input.collideIds\n      ? { diagnosticIds: [collisionDiagnosticId] }\n      : {}),\n  });\n\n  put(catalog.symbols as Record<typeof exampleId, CatalogV1[\"symbols\"][typeof exampleId]>, exampleId, {\n    id: exampleId,\n    kind: \"example\",\n    exampleKind: \"value\",\n    name: \"Event body example\",\n    value: {\n      summary: \"Team sync\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/components/examples/EventBody\"),\n  });\n\n  put(catalog.symbols as Record<typeof calendarParamId, CatalogV1[\"symbols\"][typeof calendarParamId]>, calendarParamId, {\n    id: calendarParamId,\n    kind: \"parameter\",\n    name: input.collideIds ? \"id\" : \"calendarId\",\n    location: \"path\",\n    required: true,\n    docs: {\n      summary: \"Calendar identifier\",\n      description: \"The target calendar.\",\n    },\n    schemaShapeId: stringShapeId,\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events~1{calendarId}/parameters/0\"),\n  });\n\n  put(catalog.symbols as Record<typeof idPathParamId, CatalogV1[\"symbols\"][typeof idPathParamId]>, idPathParamId, {\n    id: idPathParamId,\n    kind: \"parameter\",\n    name: \"eventId\",\n    location: \"path\",\n    required: true,\n    docs: {\n      summary: \"Event identifier\",\n    },\n    schemaShapeId: stringShapeId,\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events~1{eventId}/parameters/0\"),\n  });\n\n  put(catalog.symbols as Record<typeof queryParamId, CatalogV1[\"symbols\"][typeof queryParamId]>, queryParamId, {\n    id: queryParamId,\n    kind: \"parameter\",\n    name: input.collideIds ? \"id\" : \"sendUpdates\",\n    location: \"query\",\n    docs: {\n      summary: \"Notification mode\",\n    },\n    schemaShapeId: stringShapeId,\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events/parameters/0\"),\n  });\n\n  put(catalog.symbols as Record<typeof requestBodyId, CatalogV1[\"symbols\"][typeof requestBodyId]>, requestBodyId, {\n    id: requestBodyId,\n    kind: \"requestBody\",\n    required: true,\n    docs: {\n      summary: \"Event payload\",\n    },\n    contents: [\n      {\n        mediaType: \"application/json\",\n        shapeId: bodyShapeId,\n        exampleIds: [exampleId],\n      },\n    ],\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events/requestBody\"),\n  });\n\n  put(catalog.symbols as Record<typeof responseId, CatalogV1[\"symbols\"][typeof responseId]>, responseId, {\n    id: responseId,\n    kind: \"response\",\n    docs: {\n      summary: \"Updated event\",\n    },\n    contents: [\n      {\n        mediaType: \"application/json\",\n        shapeId: resultShapeId,\n      },\n    ],\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events/responses/200\"),\n  });\n\n  put(catalog.responseSets as Record<typeof responseSetId, CatalogV1[\"responseSets\"][typeof responseSetId]>, responseSetId, {\n    id: responseSetId,\n    variants: [\n      {\n        match: {\n          kind: \"exact\",\n          status: 200,\n        },\n        responseId,\n        traits: [\"success\"],\n      },\n    ],\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events/responses\"),\n  });\n\n  if (input.collideIds) {\n    put(catalog.diagnostics as Record<typeof collisionDiagnosticId, CatalogV1[\"diagnostics\"][typeof collisionDiagnosticId]>, collisionDiagnosticId, {\n      id: collisionDiagnosticId,\n      level: \"info\",\n      code: \"projection_collision_grouped_fields\",\n      message: \"Grouped parameter fields to avoid collisions\",\n      provenance: baseProvenance(\"#/paths/~1events/patch\"),\n    });\n  }\n\n  put(catalog.executables as Record<typeof executableId, CatalogV1[\"executables\"][typeof executableId]>, executableId, {\n    id: executableId,\n    capabilityId,\n    scopeId,\n    adapterKey: \"openapi\",\n    bindingVersion: 1,\n    binding: {},\n    projection: {\n      responseSetId,\n      callShapeId,\n    },\n    display: {\n      protocol: \"http\",\n      method: input.method ?? \"PATCH\",\n      pathTemplate: \"/calendars/{calendarId}/events/{eventId}\",\n      operationId: \"update\",\n      group: \"events\",\n      leaf: \"update\",\n      rawToolId: \"events.update\",\n      title: \"Update event\",\n      summary: \"Update a calendar event.\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events/patch\"),\n  });\n\n  put(catalog.capabilities as Record<typeof capabilityId, CatalogV1[\"capabilities\"][typeof capabilityId]>, capabilityId, {\n    id: capabilityId,\n    serviceScopeId: scopeId,\n    surface: {\n      toolPath: [\"google\", \"calendar\", \"events\", \"update\"],\n      title: \"Update event\",\n      summary: \"Update a calendar event.\",\n      description: \"Updates an existing event by ID.\",\n      tags: [\"calendar\", \"events\"],\n    },\n    semantics: {\n      effect: \"write\",\n      safe: false,\n      idempotent: false,\n      destructive: false,\n    },\n    auth: {\n      kind: \"scheme\",\n      schemeId: authSchemeId,\n      scopes: [\"calendar.events\"],\n    },\n    interaction: {\n      approval: {\n        mayRequire: true,\n        reasons: [\"write\"],\n      },\n      elicitation: {\n        mayRequest: false,\n      },\n      resume: {\n        supported: true,\n      },\n    },\n    executableIds: [executableId],\n    preferredExecutableId: executableId,\n    synthetic: false,\n    provenance: baseProvenance(\"#/paths/~1events/patch\"),\n  });\n\n  return catalog;\n};\n\nconst createGraphqlCatalog = (): CatalogV1 => {\n  const catalog = createEmptyCatalogV1();\n\n  const resourceId = ResourceIdSchema.make(\"res_graphql\");\n  const scopeId = ScopeIdSchema.make(\"scope_graphql_service\");\n  const argShapeId = ShapeSymbolIdSchema.make(\"shape_graphql_args\");\n  const inputShapeId = ShapeSymbolIdSchema.make(\"shape_graphql_input\");\n  const selectShapeId = ShapeSymbolIdSchema.make(\"shape_graphql_select\");\n  const resultShapeId = ShapeSymbolIdSchema.make(\"shape_graphql_result\");\n  const stringShapeId = ShapeSymbolIdSchema.make(\"shape_graphql_string\");\n  const responseId = ResponseSymbolIdSchema.make(\"sym_graphql_response\");\n  const responseSetId = ResponseSetIdSchema.make(\"response_set_graphql\");\n  const executableId = ExecutableIdSchema.make(\"exec_graphql_update\");\n  const capabilityId = CapabilityIdSchema.make(\"cap_graphql_update\");\n\n  put(catalog.documents as Record<typeof docId, CatalogV1[\"documents\"][typeof docId]>, docId, {\n    id: docId,\n    kind: \"graphql-schema\",\n    title: \"GraphQL schema\",\n    fetchedAt: \"2026-03-14T00:00:00.000Z\",\n    rawRef: \"memory://graphql/schema.json\",\n  });\n\n  put(catalog.resources as Record<typeof resourceId, CatalogV1[\"resources\"][typeof resourceId]>, resourceId, {\n    id: resourceId,\n    documentId: docId,\n    canonicalUri: \"https://example.test/graphql\",\n    baseUri: \"https://example.test/graphql\",\n    anchors: {},\n    dynamicAnchors: {},\n    synthetic: false,\n    provenance: baseProvenance(\"#\"),\n  });\n\n  put(catalog.scopes as Record<typeof scopeId, CatalogV1[\"scopes\"][typeof scopeId]>, scopeId, {\n    id: scopeId,\n    kind: \"service\",\n    name: \"GraphQL\",\n    synthetic: false,\n    provenance: baseProvenance(\"#/schema\"),\n  });\n\n  put(catalog.symbols as Record<typeof stringShapeId, CatalogV1[\"symbols\"][typeof stringShapeId]>, stringShapeId, {\n    id: stringShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"String\",\n    node: {\n      type: \"scalar\",\n      scalar: \"string\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/$defs/String\"),\n  });\n\n  put(catalog.symbols as Record<typeof inputShapeId, CatalogV1[\"symbols\"][typeof inputShapeId]>, inputShapeId, {\n    id: inputShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"UserInput\",\n    node: {\n      type: \"object\",\n      fields: {\n        name: {\n          shapeId: stringShapeId,\n        },\n      },\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/$defs/UserInput\"),\n  });\n\n  put(catalog.symbols as Record<typeof argShapeId, CatalogV1[\"symbols\"][typeof argShapeId]>, argShapeId, {\n    id: argShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"UpdateUserArgs\",\n    node: {\n      type: \"object\",\n      fields: {\n        id: {\n          shapeId: stringShapeId,\n        },\n        input: {\n          shapeId: inputShapeId,\n        },\n        select: {\n          shapeId: selectShapeId,\n        },\n      },\n      required: [\"id\", \"input\"],\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/$defs/UpdateUserArgs\"),\n  });\n\n  put(catalog.symbols as Record<typeof selectShapeId, CatalogV1[\"symbols\"][typeof selectShapeId]>, selectShapeId, {\n    id: selectShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"UserSelection\",\n    node: {\n      type: \"object\",\n      fields: {\n        id: {\n          shapeId: stringShapeId,\n        },\n        name: {\n          shapeId: stringShapeId,\n        },\n      },\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/$defs/UserSelection\"),\n  });\n\n  put(catalog.symbols as Record<typeof resultShapeId, CatalogV1[\"symbols\"][typeof resultShapeId]>, resultShapeId, {\n    id: resultShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"User\",\n    node: {\n      type: \"object\",\n      fields: {\n        id: {\n          shapeId: stringShapeId,\n        },\n        name: {\n          shapeId: stringShapeId,\n        },\n      },\n      required: [\"id\"],\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/$defs/User\"),\n  });\n\n  put(catalog.symbols as Record<typeof responseId, CatalogV1[\"symbols\"][typeof responseId]>, responseId, {\n    id: responseId,\n    kind: \"response\",\n    contents: [\n      {\n        mediaType: \"application/json\",\n        shapeId: resultShapeId,\n      },\n    ],\n    synthetic: false,\n    provenance: baseProvenance(\"#/responses/default\"),\n  });\n\n  put(catalog.responseSets as Record<typeof responseSetId, CatalogV1[\"responseSets\"][typeof responseSetId]>, responseSetId, {\n    id: responseSetId,\n    variants: [\n      {\n        match: {\n          kind: \"default\",\n        },\n        responseId,\n        traits: [\"success\"],\n      },\n    ],\n    synthetic: false,\n    provenance: baseProvenance(\"#/responses\"),\n  });\n\n  put(catalog.executables as Record<typeof executableId, CatalogV1[\"executables\"][typeof executableId]>, executableId, {\n    id: executableId,\n    capabilityId,\n    scopeId,\n    adapterKey: \"graphql\",\n    bindingVersion: 1,\n    binding: {},\n    projection: {\n      responseSetId,\n      callShapeId: argShapeId,\n      resultDataShapeId: resultShapeId,\n    },\n    display: {\n      protocol: \"graphql\",\n      method: \"mutation\",\n      pathTemplate: \"updateUser\",\n      operationId: \"updateUser\",\n      group: \"mutation\",\n      leaf: \"updateUser\",\n      rawToolId: \"updateUser\",\n      title: \"Update user\",\n      summary: \"Update a user.\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/mutations/updateUser\"),\n  });\n\n  put(catalog.capabilities as Record<typeof capabilityId, CatalogV1[\"capabilities\"][typeof capabilityId]>, capabilityId, {\n    id: capabilityId,\n    serviceScopeId: scopeId,\n    surface: {\n      toolPath: [\"graphql\", \"users\", \"update\"],\n      title: \"Update user\",\n      summary: \"Update a user.\",\n    },\n    semantics: {\n      effect: \"write\",\n    },\n    auth: {\n      kind: \"none\",\n    },\n    interaction: {\n      approval: {\n        mayRequire: true,\n        reasons: [\"write\"],\n      },\n      elicitation: {\n        mayRequest: false,\n      },\n      resume: {\n        supported: false,\n      },\n    },\n    executableIds: [executableId],\n    preferredExecutableId: executableId,\n    synthetic: false,\n    provenance: baseProvenance(\"#/mutations/updateUser\"),\n  });\n\n  return catalog;\n};\n\ndescribe(\"IR catalog\", () => {\n  it(\"decodes a snapshot through the canonical schema\", () => {\n    const catalog = createHttpCatalog();\n    const snapshot = createCatalogSnapshotV1({\n      import: {\n        sourceKind: \"openapi\",\n        adapterKey: \"openapi\",\n        importerVersion: \"1.0.0\",\n        importedAt: \"2026-03-14T00:00:00.000Z\",\n        sourceConfigHash: \"hash_source\",\n      },\n      catalog,\n    });\n\n    const decoded = decodeCatalogSnapshotV1(snapshot);\n    expect(decoded.version).toBe(\"ir.v1.snapshot\");\n    expect(decoded.catalog.capabilities[CapabilityIdSchema.make(\"cap_events_update\")]?.surface.title).toBe(\n      \"Update event\",\n    );\n  });\n\n  it(\"merges fragments and emits diagnostics on conflicting IDs\", () => {\n    const fragmentA: CatalogFragmentV1 = {\n      version: \"ir.v1.fragment\",\n      documents: {\n        [docId]: {\n          id: docId,\n          kind: \"openapi\",\n          title: \"A\",\n          fetchedAt: \"2026-03-14T00:00:00.000Z\",\n          rawRef: \"memory://a\",\n        },\n      },\n    };\n    const fragmentB: CatalogFragmentV1 = {\n      version: \"ir.v1.fragment\",\n      documents: {\n        [docId]: {\n          id: docId,\n          kind: \"openapi\",\n          title: \"B\",\n          fetchedAt: \"2026-03-14T00:00:00.000Z\",\n          rawRef: \"memory://b\",\n        },\n      },\n    };\n\n    const merged = mergeCatalogFragments([fragmentA, fragmentB]);\n    expect(merged.documents[docId]?.title).toBe(\"A\");\n    expect(Object.values(merged.diagnostics).some((diagnostic) => diagnostic.code === \"merge_conflict_preserved_first\")).toBe(true);\n  });\n\n  it(\"reports invariant violations for unresolved shapes without diagnostics\", () => {\n    const catalog = createEmptyCatalogV1();\n    const shapeId = ShapeSymbolIdSchema.make(\"shape_unresolved\");\n\n    put(catalog.documents as Record<typeof docId, CatalogV1[\"documents\"][typeof docId]>, docId, {\n      id: docId,\n      kind: \"custom\",\n      fetchedAt: \"2026-03-14T00:00:00.000Z\",\n      rawRef: \"memory://custom\",\n    });\n\n    put(catalog.symbols as Record<typeof shapeId, CatalogV1[\"symbols\"][typeof shapeId]>, shapeId, {\n      id: shapeId,\n      kind: \"shape\",\n      title: \"Unresolved\",\n      node: {\n        type: \"unknown\",\n        reason: \"unresolved reference #/components/schemas/Missing\",\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/components/schemas/Missing\"),\n    });\n\n    const violations = validateCatalogInvariants(catalog);\n    expect(violations.map((violation) => violation.code)).toContain(\"missing_resource_context\");\n    expect(violations.map((violation) => violation.code)).toContain(\"missing_unresolved_ref_diagnostic\");\n  });\n\n  it(\"reports invariant violations for missing projected shapes\", () => {\n    const catalog = createGraphqlCatalog();\n    const executable = catalog.executables[ExecutableIdSchema.make(\"exec_graphql_update\")]!;\n\n    (catalog.executables as Record<typeof executable.id, typeof executable>)[executable.id] = {\n      ...executable,\n      projection: {\n        ...executable.projection,\n        callShapeId: ShapeSymbolIdSchema.make(\"shape_missing_call\"),\n      },\n    };\n\n    const violations = validateCatalogInvariants(catalog);\n    expect(violations.map((violation) => violation.code)).toContain(\"missing_projection_shape\");\n    expect(violations.some((violation) => violation.message.includes(\"shape_missing_call\"))).toBe(true);\n  });\n\n  it(\"projects HTTP capabilities into ergonomic call and result shapes\", () => {\n    const projected = projectCatalogForAgentSdk({\n      catalog: createHttpCatalog(),\n    });\n\n    const descriptor = projected.toolDescriptors[CapabilityIdSchema.make(\"cap_events_update\")];\n    expect(descriptor.toolPath).toEqual([\"google\", \"calendar\", \"events\", \"update\"]);\n\n    const callShape = projected.catalog.symbols[descriptor.callShapeId];\n    expect(callShape?.kind).toBe(\"shape\");\n    if (callShape?.kind !== \"shape\" || callShape.node.type !== \"object\") {\n      throw new Error(\"Expected projected call shape object\");\n    }\n\n    expect(Object.keys(callShape.node.fields)).toEqual([\n      \"calendarId\",\n      \"eventId\",\n      \"sendUpdates\",\n      \"body\",\n    ]);\n    expect(callShape.node.required).toEqual([\"calendarId\", \"eventId\", \"body\"]);\n\n    const resultShape = descriptor.resultShapeId\n      ? projected.catalog.symbols[descriptor.resultShapeId]\n      : undefined;\n    if (resultShape?.kind !== \"shape\" || resultShape.node.type !== \"object\") {\n      throw new Error(\"Expected projected HTTP result envelope\");\n    }\n    expect(Object.keys(resultShape.node.fields)).toEqual([\"data\", \"error\", \"headers\", \"status\"]);\n    expectNullableShapeContains(\n      projected.catalog,\n      resultShape.node.fields.data.shapeId,\n      ShapeSymbolIdSchema.make(\"shape_event_result\"),\n    );\n\n    const searchDoc = projected.searchDocs[CapabilityIdSchema.make(\"cap_events_update\")];\n    expect(searchDoc.authHints).toContain(\"oauth2\");\n    expect(searchDoc.tags).toEqual([\"calendar\", \"events\"]);\n  });\n\n  it(\"groups colliding HTTP parameter names into path/query containers\", () => {\n    const projected = projectCatalogForAgentSdk({\n      catalog: createHttpCatalog({ collideIds: true }),\n    });\n\n    const descriptor = projected.toolDescriptors[CapabilityIdSchema.make(\"cap_events_update\")];\n    const callShape = projected.catalog.symbols[descriptor.callShapeId];\n    if (callShape?.kind !== \"shape\" || callShape.node.type !== \"object\") {\n      throw new Error(\"Expected projected call shape object\");\n    }\n\n    expect(Object.keys(callShape.node.fields)).toContain(\"path\");\n    expect(Object.keys(callShape.node.fields)).toContain(\"query\");\n    expect(Object.keys(callShape.node.fields)).not.toContain(\"id\");\n    expect(Object.values(projected.catalog.diagnostics).some((diagnostic) => diagnostic.code === \"projection_collision_grouped_fields\")).toBe(true);\n  });\n\n  it(\"keeps GraphQL selection explicit for caller-driven outputs\", () => {\n    const projected = projectCatalogForAgentSdk({\n      catalog: createGraphqlCatalog(),\n    });\n\n    const descriptor = projected.toolDescriptors[CapabilityIdSchema.make(\"cap_graphql_update\")];\n    const callShape = projected.catalog.symbols[descriptor.callShapeId];\n    if (callShape?.kind !== \"shape\" || callShape.node.type !== \"object\") {\n      throw new Error(\"Expected projected GraphQL call shape object\");\n    }\n\n    expect(Object.keys(callShape.node.fields)).toEqual([\"id\", \"input\", \"select\"]);\n    const resultShape = descriptor.resultShapeId\n      ? projected.catalog.symbols[descriptor.resultShapeId]\n      : undefined;\n    if (resultShape?.kind !== \"shape\" || resultShape.node.type !== \"object\") {\n      throw new Error(\"Expected projected GraphQL result envelope\");\n    }\n    expect(Object.keys(resultShape.node.fields)).toEqual([\"data\", \"error\", \"headers\", \"status\"]);\n    expectNullableShapeContains(\n      projected.catalog,\n      resultShape.node.fields.data.shapeId,\n      ShapeSymbolIdSchema.make(\"shape_graphql_result\"),\n    );\n  });\n\n  it(\"builds inspect views from the projected graph\", () => {\n    const projected = projectCatalogForAgentSdk({\n      catalog: createHttpCatalog(),\n    });\n    const capabilityId = CapabilityIdSchema.make(\"cap_events_update\");\n    const descriptor = projected.toolDescriptors[capabilityId];\n    const shallow = projectSymbolShallowView(projected.catalog, descriptor.callShapeId);\n    const expanded = projectSymbolExpandedView(projected.catalog, descriptor.callShapeId);\n\n    expect(shallow.edges.some((edge) => edge.label === \"field:body\")).toBe(true);\n    expect(expanded.symbol.id).toBe(descriptor.callShapeId);\n  });\n});\n"
  },
  {
    "path": "packages/kernel/ir/src/catalog.ts",
    "content": "import { sha256Hex } from \"@executor/codemode-core\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport { Schema } from \"effect\";\n\nimport {\n  type CapabilityId,\n  DiagnosticIdSchema,\n  type DiagnosticId,\n  DocumentIdSchema,\n  type DocumentId,\n  type ExecutableId,\n  ResourceIdSchema,\n  type ResourceId,\n  type ResponseSymbolId,\n  type ResponseSetId,\n  type ShapeSymbolId,\n  ShapeSymbolIdSchema,\n  type SymbolId,\n} from \"./ids\";\nimport {\n  CatalogFragmentV1Schema,\n  type CatalogFragmentV1,\n  CatalogSnapshotV1Schema,\n  CatalogV1Schema,\n  type CatalogV1,\n  type Capability,\n  type ContentSpec,\n  type DocumentationBlock,\n  type Executable,\n  type ImportDiagnostic,\n  type ImportMetadata,\n  type InteractionSpec,\n  type ResponseSet,\n  type ResponseSymbol,\n  type ShapeSymbol,\n  type StatusMatch,\n  type Symbol as IrSymbol,\n} from \"./model\";\n\nexport interface ToolDescriptor {\n  toolPath: string[];\n  capabilityId: CapabilityId;\n  title?: string;\n  summary?: string;\n  effect: Capability[\"semantics\"][\"effect\"];\n  interaction: {\n    mayRequireApproval: boolean;\n    mayElicit: boolean;\n  };\n  callShapeId: ShapeSymbolId;\n  resultShapeId?: ShapeSymbolId;\n  responseSetId: ResponseSetId;\n  diagnosticCounts: {\n    warning: number;\n    error: number;\n  };\n}\n\nexport interface ToolSearchDoc {\n  capabilityId: CapabilityId;\n  toolPath: string[];\n  title?: string;\n  summary?: string;\n  tags?: string[];\n  protocolHints: string[];\n  authHints: string[];\n  effect: Capability[\"semantics\"][\"effect\"];\n}\n\nexport interface CapabilitySummaryView {\n  capabilityId: CapabilityId;\n  toolPath: string[];\n  summary?: string;\n  executableIds: ExecutableId[];\n  auth: Capability[\"auth\"];\n  interaction: InteractionSpec;\n  callShapeId: ShapeSymbolId;\n  resultShapeId?: ShapeSymbolId;\n  responseSetId: ResponseSetId;\n  diagnosticIds?: DiagnosticId[];\n}\n\nexport interface SymbolShallowView {\n  symbolId: SymbolId;\n  kind: IrSymbol[\"kind\"];\n  title?: string;\n  summary?: string;\n  edges: Array<{ label: string; targetId: SymbolId }>;\n}\n\nexport interface SymbolExpandedView {\n  symbolId: SymbolId;\n  symbol: IrSymbol;\n  diagnostics?: ImportDiagnostic[];\n}\n\nexport interface ProjectedCatalog {\n  catalog: CatalogV1;\n  toolDescriptors: Record<CapabilityId, ToolDescriptor>;\n  searchDocs: Record<CapabilityId, ToolSearchDoc>;\n  capabilityViews: Record<CapabilityId, CapabilitySummaryView>;\n}\n\nexport interface CatalogInvariantViolation {\n  code:\n    | \"missing_symbol_provenance\"\n    | \"missing_entity_provenance\"\n    | \"missing_document\"\n    | \"missing_provenance_document\"\n    | \"missing_resource_context\"\n    | \"missing_reference_target\"\n    | \"missing_unresolved_ref_diagnostic\"\n    | \"missing_executable\"\n    | \"missing_response_set\"\n    | \"missing_projection_shape\"\n    | \"missing_scope\"\n    | \"missing_service_scope\"\n    | \"invalid_preferred_executable\"\n    | \"missing_projection_synthetic_marker\";\n  message: string;\n  entityId?: string;\n}\n\nexport type DecodeCatalogError = Error;\n\ntype CatalogSnapshotV1 = {\n  version: \"ir.v1.snapshot\";\n  import: ImportMetadata;\n  catalog: CatalogV1;\n};\n\nconst decodeCatalogSync = Schema.decodeUnknownSync(\n  CatalogV1Schema as Schema.Schema<CatalogV1, unknown, never>,\n);\nconst decodeCatalogSnapshotSync = Schema.decodeUnknownSync(\n  CatalogSnapshotV1Schema as Schema.Schema<CatalogSnapshotV1, unknown, never>,\n);\nconst decodeCatalogFragmentSync = Schema.decodeUnknownSync(\n  CatalogFragmentV1Schema as Schema.Schema<CatalogFragmentV1, unknown, never>,\n);\n\nconst stableStringify = (value: unknown): string => {\n  if (value === null || typeof value !== \"object\") {\n    return JSON.stringify(value);\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map((entry) => stableStringify(entry)).join(\",\")}]`;\n  }\n\n  const entries = Object.entries(value as Record<string, unknown>)\n    .sort(([left], [right]) => left.localeCompare(right))\n    .map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`);\n  return `{${entries.join(\",\")}}`;\n};\n\nconst stableHash = (value: unknown): string => sha256Hex(stableStringify(value)).slice(0, 16);\n\nconst unique = <T>(values: readonly T[]): T[] => [...new Set(values)];\n\nconst cloneCatalog = (catalog: CatalogV1): CatalogV1 => ({\n  version: catalog.version,\n  documents: { ...catalog.documents },\n  resources: { ...catalog.resources },\n  scopes: { ...catalog.scopes },\n  symbols: { ...catalog.symbols },\n  capabilities: { ...catalog.capabilities },\n  executables: { ...catalog.executables },\n  responseSets: { ...catalog.responseSets },\n  diagnostics: { ...catalog.diagnostics },\n});\n\nconst mutableRecord = <K extends string, V>(value: Readonly<Record<K, V>>): Record<K, V> =>\n  value as unknown as Record<K, V>;\n\nconst createStableEntityId = <A extends string>(\n  make: (value: string) => A,\n  prefix: string,\n  value: unknown,\n): A => make(`${prefix}_${stableHash(value)}`);\n\nconst emptyCatalog = (): CatalogV1 => ({\n  version: \"ir.v1\",\n  documents: {},\n  resources: {},\n  scopes: {},\n  symbols: {},\n  capabilities: {},\n  executables: {},\n  responseSets: {},\n  diagnostics: {},\n});\n\nconst authHintStrings = (catalog: CatalogV1, auth: Capability[\"auth\"]): string[] => {\n  switch (auth.kind) {\n    case \"none\":\n      return [\"none\"];\n    case \"scheme\": {\n      const scheme = catalog.symbols[auth.schemeId];\n      if (!scheme || scheme.kind !== \"securityScheme\") {\n        return [\"unknown\"];\n      }\n      return [\n        scheme.schemeType,\n        ...((auth.scopes ?? []).map((scope: string) => `scope:${scope}`)),\n      ];\n    }\n    case \"allOf\":\n    case \"anyOf\":\n      return unique(auth.items.flatMap((item: Capability[\"auth\"]) => authHintStrings(catalog, item)));\n  }\n};\n\nconst docsSummary = (docs: DocumentationBlock | undefined): string | undefined =>\n  docs?.summary ?? docs?.description;\n\nconst getResponseSymbol = (\n  catalog: CatalogV1,\n  responseId: ResponseSymbolId,\n): ResponseSymbol | undefined => {\n  const symbol = catalog.symbols[responseId];\n  return symbol && symbol.kind === \"response\" ? symbol : undefined;\n};\n\nconst isJsonMediaType = (mediaType: string): boolean => {\n  const normalized = mediaType.trim().toLowerCase();\n  return normalized === \"application/json\"\n    || normalized.endsWith(\"+json\")\n    || normalized === \"text/json\";\n};\n\nconst createDiagnostic = (\n  catalog: CatalogV1,\n  input: Omit<ImportDiagnostic, \"id\"> & { idSeed: unknown },\n): DiagnosticId => {\n  const diagnosticId = createStableEntityId(\n    DiagnosticIdSchema.make,\n    \"diag\",\n    input.idSeed,\n  );\n\n  mutableRecord(catalog.diagnostics)[diagnosticId] = {\n    id: diagnosticId,\n    level: input.level,\n    code: input.code,\n    message: input.message,\n    ...(input.relatedSymbolIds ? { relatedSymbolIds: input.relatedSymbolIds } : {}),\n    provenance: input.provenance,\n  };\n\n  return diagnosticId;\n};\n\nconst ensureProjectionResource = (\n  catalog: CatalogV1,\n  capability: Capability,\n): ResourceId => {\n  const resourceId = createStableEntityId(\n    ResourceIdSchema.make,\n    \"res\",\n    {\n      kind: \"projection\",\n      capabilityId: capability.id,\n    },\n  );\n\n  if (!catalog.resources[resourceId]) {\n    const serviceScope = catalog.scopes[capability.serviceScopeId];\n    const documentId = serviceScope?.provenance[0]?.documentId\n      ?? DocumentIdSchema.make(`doc_projection_${stableHash(capability.id)}`);\n\n    if (!catalog.documents[documentId]) {\n      mutableRecord(catalog.documents)[documentId] = {\n        id: documentId,\n        kind: \"custom\",\n        title: `Projection resource for ${capability.id}`,\n        fetchedAt: new Date(0).toISOString(),\n        rawRef: `synthetic://projection/${capability.id}`,\n      };\n    }\n\n    mutableRecord(catalog.resources)[resourceId] = {\n      id: resourceId,\n      documentId,\n      canonicalUri: `synthetic://projection/${capability.id}`,\n      baseUri: `synthetic://projection/${capability.id}`,\n      anchors: {},\n      dynamicAnchors: {},\n      synthetic: true,\n      provenance: capability.provenance,\n    };\n\n    createDiagnostic(catalog, {\n      idSeed: {\n        code: \"synthetic_resource_context_created\",\n        capabilityId: capability.id,\n      },\n      level: \"info\",\n      code: \"synthetic_resource_context_created\",\n      message: `Created synthetic projection resource for ${capability.id}`,\n      provenance: capability.provenance,\n    });\n  }\n\n  return resourceId;\n};\n\nconst createSyntheticShape = (\n  catalog: CatalogV1,\n  input: {\n    capability: Capability;\n    label: string;\n    node: ShapeSymbol[\"node\"];\n    title?: string;\n    docs?: DocumentationBlock;\n    diagnostic?:\n      | {\n          level: ImportDiagnostic[\"level\"];\n          code: ImportDiagnostic[\"code\"];\n          message: string;\n          relatedSymbolIds?: SymbolId[];\n        }\n      | undefined;\n  },\n): ShapeSymbolId => {\n  const resourceId = ensureProjectionResource(catalog, input.capability);\n  const shapeId = createStableEntityId(\n    ShapeSymbolIdSchema.make,\n    \"shape\",\n    {\n      capabilityId: input.capability.id,\n      label: input.label,\n      node: input.node,\n    },\n  );\n\n  if (!catalog.symbols[shapeId]) {\n    const diagnostics = input.diagnostic\n      ? [\n          createDiagnostic(catalog, {\n            idSeed: {\n              code: input.diagnostic.code,\n              shapeId,\n            },\n            level: input.diagnostic.level,\n            code: input.diagnostic.code,\n            message: input.diagnostic.message,\n            ...(input.diagnostic.relatedSymbolIds\n              ? { relatedSymbolIds: input.diagnostic.relatedSymbolIds }\n              : {}),\n            provenance: input.capability.provenance,\n          }),\n        ]\n      : undefined;\n\n    mutableRecord(catalog.symbols)[shapeId] = {\n      id: shapeId,\n      kind: \"shape\",\n      resourceId,\n      ...(input.title ? { title: input.title } : {}),\n      ...(input.docs ? { docs: input.docs } : {}),\n      node: input.node,\n      synthetic: true,\n      provenance: input.capability.provenance,\n      ...(diagnostics ? { diagnosticIds: diagnostics } : {}),\n    };\n  }\n\n  return shapeId;\n};\n\nconst contentShapeId = (\n  catalog: CatalogV1,\n  capability: Capability,\n  contents: readonly ContentSpec[] | undefined,\n  label: string,\n): ShapeSymbolId | undefined => {\n  const shapeIds = unique(\n    (contents ?? [])\n      .map((content) => content.shapeId)\n      .filter((shapeId): shapeId is ShapeSymbolId => shapeId !== undefined),\n  );\n\n  if (shapeIds.length === 0) {\n    return undefined;\n  }\n\n  if (shapeIds.length === 1) {\n    return shapeIds[0];\n  }\n\n  return createSyntheticShape(catalog, {\n    capability,\n    label,\n    title: `${capability.surface.title ?? capability.id} content union`,\n    node: {\n      type: \"anyOf\",\n      items: shapeIds,\n    },\n    diagnostic: {\n      level: \"warning\",\n      code: \"projection_result_shape_synthesized\",\n      message: `Synthesized content union for ${capability.id}`,\n      relatedSymbolIds: shapeIds,\n    },\n  });\n};\n\n\nconst chooseExecutable = (catalog: CatalogV1, capability: Capability): Executable => {\n  const preferredId = capability.preferredExecutableId;\n  if (preferredId) {\n    const preferred = catalog.executables[preferredId];\n    if (preferred) {\n      return preferred;\n    }\n  }\n\n  const executables = capability.executableIds\n    .map((executableId) => catalog.executables[executableId])\n    .filter((executable): executable is Executable => executable !== undefined);\n\n  if (executables.length === 0) {\n    throw new Error(`Capability ${capability.id} has no executables`);\n  }\n\n  return executables[0];\n};\n\nconst scoreStatusMatch = (match: StatusMatch): number => {\n  switch (match.kind) {\n    case \"exact\":\n      return match.status === 200 ? 100 : match.status >= 200 && match.status < 300 ? 80 : 10;\n    case \"range\":\n      return match.value === \"2XX\" ? 60 : 5;\n    case \"default\":\n      return 40;\n  }\n};\n\nconst responseContentCandidates = (\n  response: ResponseSymbol,\n): Array<{ mediaType: string; shapeId: ShapeSymbolId }> =>\n  (response.contents ?? [])\n    .flatMap((content) =>\n      content.shapeId ? [{ mediaType: content.mediaType, shapeId: content.shapeId }] : [],\n    );\n\ntype RankedResponseVariantEntry = {\n  variant: ResponseSet[\"variants\"][number];\n  response: ResponseSymbol;\n  score: number;\n};\n\nconst responseVariantEntries = (\n  catalog: CatalogV1,\n  responseSet: ResponseSet,\n): RankedResponseVariantEntry[] =>\n  [...responseSet.variants]\n    .map((variant) => {\n      const response = getResponseSymbol(catalog, variant.responseId);\n      return response\n        ? {\n            variant,\n            response,\n            score: scoreStatusMatch(variant.match),\n          }\n        : null;\n    })\n    .filter((entry): entry is RankedResponseVariantEntry => entry !== null);\n\nconst isSuccessStatusMatch = (match: StatusMatch): boolean => {\n  switch (match.kind) {\n    case \"exact\":\n      return match.status >= 200 && match.status < 300;\n    case \"range\":\n      return match.value === \"2XX\";\n    case \"default\":\n      return false;\n  }\n};\n\nconst contentShapeIdFromResponseEntries = (\n  catalog: CatalogV1,\n  capability: Capability,\n  label: string,\n  title: string,\n  entries: readonly RankedResponseVariantEntry[],\n): ShapeSymbolId | undefined => {\n  const jsonCandidates = entries.flatMap(({ response }) =>\n    responseContentCandidates(response).filter((candidate) => isJsonMediaType(candidate.mediaType)),\n  );\n\n  if (jsonCandidates.length > 0) {\n    return contentShapeId(\n      catalog,\n      capability,\n      jsonCandidates.map((candidate) => ({\n        mediaType: candidate.mediaType,\n        shapeId: candidate.shapeId,\n      })),\n      `${label}:json`,\n    );\n  }\n\n  const fallbackShapeIds = unique(\n    entries.flatMap(({ response }) =>\n      responseContentCandidates(response).map((candidate) => candidate.shapeId),\n    ),\n  );\n\n  if (fallbackShapeIds.length === 0) {\n    return undefined;\n  }\n\n  if (fallbackShapeIds.length === 1) {\n    return fallbackShapeIds[0];\n  }\n\n  return createSyntheticShape(catalog, {\n    capability,\n    label: `${label}:union`,\n    title,\n    node: {\n      type: \"anyOf\",\n      items: fallbackShapeIds,\n    },\n    diagnostic: {\n      level: \"warning\",\n      code: \"multi_response_union_synthesized\",\n      message: `Synthesized response union for ${capability.id}`,\n      relatedSymbolIds: fallbackShapeIds,\n    },\n  });\n};\n\nconst projectResultShapeFromResponses = (\n  catalog: CatalogV1,\n  capability: Capability,\n  responseSet: ResponseSet,\n): ShapeSymbolId | undefined =>\n  contentShapeIdFromResponseEntries(\n    catalog,\n    capability,\n    `responseSet:${responseSet.id}`,\n    `${capability.surface.title ?? capability.id} result`,\n    responseVariantEntries(catalog, responseSet).filter(({ variant }) => isSuccessStatusMatch(variant.match)),\n  );\n\nconst projectErrorShapeFromResponses = (\n  catalog: CatalogV1,\n  capability: Capability,\n  responseSet: ResponseSet,\n): ShapeSymbolId | undefined =>\n  contentShapeIdFromResponseEntries(\n    catalog,\n    capability,\n    `responseSet:${responseSet.id}:error`,\n    `${capability.surface.title ?? capability.id} error`,\n    responseVariantEntries(catalog, responseSet).filter(({ variant }) => !isSuccessStatusMatch(variant.match)),\n  );\n\nconst scalarShape = (\n  catalog: CatalogV1,\n  capability: Capability,\n  input: {\n    label: string;\n    title: string;\n    scalar: \"string\" | \"number\" | \"integer\" | \"boolean\" | \"null\" | \"bytes\";\n  },\n): ShapeSymbolId =>\n  createSyntheticShape(catalog, {\n    capability,\n    label: input.label,\n    title: input.title,\n    node: {\n      type: \"scalar\",\n      scalar: input.scalar,\n    },\n  });\n\nconst constNullShape = (\n  catalog: CatalogV1,\n  capability: Capability,\n  label: string,\n): ShapeSymbolId =>\n  createSyntheticShape(catalog, {\n    capability,\n    label,\n    title: \"null\",\n    node: {\n      type: \"const\",\n      value: null,\n    },\n  });\n\nconst unknownShape = (\n  catalog: CatalogV1,\n  capability: Capability,\n  input: {\n    label: string;\n    title: string;\n    reason: string;\n  },\n): ShapeSymbolId =>\n  createSyntheticShape(catalog, {\n    capability,\n    label: input.label,\n    title: input.title,\n    node: {\n      type: \"unknown\",\n      reason: input.reason,\n    },\n  });\n\nconst nullableShape = (\n  catalog: CatalogV1,\n  capability: Capability,\n  input: {\n    label: string;\n    title: string;\n    baseShapeId: ShapeSymbolId;\n  },\n): ShapeSymbolId => {\n  const nullShapeId = constNullShape(catalog, capability, `${input.label}:null`);\n  if (input.baseShapeId === nullShapeId) {\n    return nullShapeId;\n  }\n\n  return createSyntheticShape(catalog, {\n    capability,\n    label: `${input.label}:nullable`,\n    title: input.title,\n    node: {\n      type: \"anyOf\",\n      items: unique([input.baseShapeId, nullShapeId]),\n    },\n  });\n};\n\nconst headersShape = (\n  catalog: CatalogV1,\n  capability: Capability,\n  label: string,\n): ShapeSymbolId => {\n  const valueShapeId = scalarShape(catalog, capability, {\n    label: `${label}:value`,\n    title: \"Header value\",\n    scalar: \"string\",\n  });\n\n  return createSyntheticShape(catalog, {\n    capability,\n    label,\n    title: \"Response headers\",\n    node: {\n      type: \"object\",\n      fields: {},\n      additionalProperties: valueShapeId,\n    },\n  });\n};\n\nconst projectExecutionResultShape = (\n  catalog: CatalogV1,\n  capability: Capability,\n  executable: Executable,\n  responseSet: ResponseSet,\n): ShapeSymbolId => {\n  const genericDataShape = unknownShape(catalog, capability, {\n    label: `executionResult:${capability.id}:data:unknown`,\n    title: \"Response data\",\n    reason: `Execution result data for ${capability.id} is not statically known`,\n  });\n  const genericErrorShape = unknownShape(catalog, capability, {\n    label: `executionResult:${capability.id}:error:unknown`,\n    title: \"Response error\",\n    reason: `Execution result error for ${capability.id} is not statically known`,\n  });\n  const genericHeadersShape = headersShape(\n    catalog,\n    capability,\n    `executionResult:${capability.id}:headers`,\n  );\n  const genericStatusShape = scalarShape(catalog, capability, {\n    label: `executionResult:${capability.id}:status`,\n    title: \"Response status\",\n    scalar: \"integer\",\n  });\n\n  let dataShapeId: ShapeSymbolId | undefined;\n  let errorShapeId: ShapeSymbolId | undefined;\n  let headersShapeId: ShapeSymbolId = genericHeadersShape;\n  let statusShapeId: ShapeSymbolId = genericStatusShape;\n  dataShapeId =\n    executable.projection.resultDataShapeId\n    ?? projectResultShapeFromResponses(catalog, capability, responseSet);\n  errorShapeId =\n    executable.projection.resultErrorShapeId\n    ?? projectErrorShapeFromResponses(catalog, capability, responseSet);\n  headersShapeId =\n    executable.projection.resultHeadersShapeId\n    ?? genericHeadersShape;\n  statusShapeId =\n    executable.projection.resultStatusShapeId\n    ?? genericStatusShape;\n\n  const dataFieldShapeId = nullableShape(catalog, capability, {\n    label: `executionResult:${capability.id}:data`,\n    title: \"Result data\",\n    baseShapeId: dataShapeId ?? genericDataShape,\n  });\n  const errorFieldShapeId = nullableShape(catalog, capability, {\n    label: `executionResult:${capability.id}:error`,\n    title: \"Result error\",\n    baseShapeId: errorShapeId ?? genericErrorShape,\n  });\n  const statusFieldShapeId = nullableShape(catalog, capability, {\n    label: `executionResult:${capability.id}:status`,\n    title: \"Result status\",\n    baseShapeId: statusShapeId,\n  });\n\n  return createSyntheticShape(catalog, {\n    capability,\n    label: `executionResult:${capability.id}`,\n    title: `${capability.surface.title ?? capability.id} result`,\n    node: {\n      type: \"object\",\n      fields: {\n        data: {\n          shapeId: dataFieldShapeId,\n          docs: {\n            description: \"Successful result payload when available.\",\n          },\n        },\n        error: {\n          shapeId: errorFieldShapeId,\n          docs: {\n            description: \"Error payload when the remote execution completed but failed.\",\n          },\n        },\n        headers: {\n          shapeId: headersShapeId,\n          docs: {\n            description: \"Response headers when available.\",\n          },\n        },\n        status: {\n          shapeId: statusFieldShapeId,\n          docs: {\n            description: \"Transport status code when available.\",\n          },\n        },\n      },\n      required: [\"data\", \"error\", \"headers\", \"status\"],\n      additionalProperties: false,\n    },\n    diagnostic: {\n      level: \"info\",\n      code: \"projection_result_shape_synthesized\",\n      message: `Synthesized execution result envelope for ${capability.id}`,\n      relatedSymbolIds: unique([\n        dataFieldShapeId,\n        errorFieldShapeId,\n        headersShapeId,\n        statusFieldShapeId,\n      ]),\n    },\n  });\n};\n\nconst projectCapability = (\n  catalog: CatalogV1,\n  capability: Capability,\n): ToolDescriptor => {\n  const executable = chooseExecutable(catalog, capability);\n  const responseSet = catalog.responseSets[executable.projection.responseSetId];\n\n  if (!responseSet) {\n    throw new Error(`Missing response set ${executable.projection.responseSetId} for ${capability.id}`);\n  }\n\n  const callShapeId = executable.projection.callShapeId;\n  const resultShapeId = projectExecutionResultShape(catalog, capability, executable, responseSet);\n\n  const diagnosticIds = unique([\n    ...(capability.diagnosticIds ?? []),\n    ...(executable.diagnosticIds ?? []),\n    ...(responseSet.diagnosticIds ?? []),\n    ...(callShapeId ? catalog.symbols[callShapeId]?.diagnosticIds ?? [] : []),\n    ...(resultShapeId ? catalog.symbols[resultShapeId]?.diagnosticIds ?? [] : []),\n  ]);\n  const diagnostics = diagnosticIds\n    .map((diagnosticId) => catalog.diagnostics[diagnosticId])\n    .filter((diagnostic): diagnostic is ImportDiagnostic => diagnostic !== undefined);\n\n  return {\n    toolPath: [...capability.surface.toolPath],\n    capabilityId: capability.id,\n    ...(capability.surface.title ? { title: capability.surface.title } : {}),\n    ...(capability.surface.summary ? { summary: capability.surface.summary } : {}),\n    effect: capability.semantics.effect,\n    interaction: {\n      mayRequireApproval: capability.interaction.approval.mayRequire,\n      mayElicit: capability.interaction.elicitation.mayRequest,\n    },\n    callShapeId,\n    ...(resultShapeId ? { resultShapeId } : {}),\n    responseSetId: executable.projection.responseSetId,\n    diagnosticCounts: {\n      warning: diagnostics.filter((diagnostic) => diagnostic.level === \"warning\").length,\n      error: diagnostics.filter((diagnostic) => diagnostic.level === \"error\").length,\n    },\n  };\n};\n\nconst summaryView = (\n  catalog: CatalogV1,\n  capability: Capability,\n  descriptor: ToolDescriptor,\n): CapabilitySummaryView => ({\n  capabilityId: capability.id,\n  toolPath: [...capability.surface.toolPath],\n  ...(capability.surface.summary ? { summary: capability.surface.summary } : {}),\n  executableIds: [...capability.executableIds],\n  auth: capability.auth,\n  interaction: capability.interaction,\n  callShapeId: descriptor.callShapeId,\n  ...(descriptor.resultShapeId ? { resultShapeId: descriptor.resultShapeId } : {}),\n  responseSetId: descriptor.responseSetId,\n  ...(capability.diagnosticIds ? { diagnosticIds: [...capability.diagnosticIds] } : {}),\n});\n\nconst searchDoc = (\n  catalog: CatalogV1,\n  capability: Capability,\n): ToolSearchDoc => ({\n  capabilityId: capability.id,\n  toolPath: [...capability.surface.toolPath],\n  ...(capability.surface.title ? { title: capability.surface.title } : {}),\n  ...(capability.surface.summary ? { summary: capability.surface.summary } : {}),\n  ...(capability.surface.tags ? { tags: [...capability.surface.tags] } : {}),\n  protocolHints: unique(\n    capability.executableIds\n      .map((executableId: ExecutableId) =>\n        catalog.executables[executableId]?.display?.protocol\n        ?? catalog.executables[executableId]?.adapterKey\n      )\n      .filter((protocol): protocol is string => protocol !== undefined),\n  ),\n  authHints: authHintStrings(catalog, capability.auth),\n  effect: capability.semantics.effect,\n});\n\nconst symbolTitle = (symbol: IrSymbol): string | undefined => {\n  switch (symbol.kind) {\n    case \"shape\":\n      return symbol.title ?? symbol.docs?.summary;\n    case \"parameter\":\n    case \"header\":\n      return symbol.name;\n    case \"example\":\n      return symbol.name ?? symbol.docs?.summary;\n    case \"requestBody\":\n    case \"response\":\n    case \"securityScheme\":\n      return symbol.docs?.summary;\n  }\n};\n\nconst symbolSummary = (symbol: IrSymbol): string | undefined =>\n  symbol.docs?.summary ?? docsSummary(symbol.docs);\n\nconst symbolEdges = (symbol: IrSymbol): Array<{ label: string; targetId: SymbolId }> => {\n  switch (symbol.kind) {\n    case \"shape\": {\n      const edges: Array<{ label: string; targetId: SymbolId }> = [];\n      switch (symbol.node.type) {\n        case \"object\":\n          for (const [name, field] of Object.entries(symbol.node.fields)) {\n            edges.push({ label: `field:${name}`, targetId: field.shapeId });\n          }\n          if (typeof symbol.node.additionalProperties !== \"boolean\" && symbol.node.additionalProperties) {\n            edges.push({\n              label: \"additionalProperties\",\n              targetId: symbol.node.additionalProperties,\n            });\n          }\n          for (const [pattern, targetId] of Object.entries(symbol.node.patternProperties ?? {})) {\n            edges.push({ label: `pattern:${pattern}`, targetId });\n          }\n          break;\n        case \"array\":\n          edges.push({ label: \"item\", targetId: symbol.node.itemShapeId });\n          break;\n        case \"tuple\":\n          symbol.node.itemShapeIds.forEach((targetId, index) => {\n            edges.push({ label: `item:${String(index)}`, targetId });\n          });\n          if (typeof symbol.node.additionalItems !== \"boolean\" && symbol.node.additionalItems) {\n            edges.push({ label: \"additionalItems\", targetId: symbol.node.additionalItems });\n          }\n          break;\n        case \"map\":\n          edges.push({ label: \"value\", targetId: symbol.node.valueShapeId });\n          break;\n        case \"allOf\":\n        case \"anyOf\":\n        case \"oneOf\":\n          symbol.node.items.forEach((targetId, index) => {\n            edges.push({ label: `${symbol.node.type}:${String(index)}`, targetId });\n          });\n          if (symbol.node.type === \"oneOf\") {\n            for (const [key, targetId] of Object.entries(symbol.node.discriminator?.mapping ?? {})) {\n              edges.push({ label: `discriminator:${key}`, targetId });\n            }\n          }\n          break;\n        case \"nullable\":\n          edges.push({ label: \"item\", targetId: symbol.node.itemShapeId });\n          break;\n        case \"ref\":\n          edges.push({ label: \"target\", targetId: symbol.node.target });\n          break;\n        case \"not\":\n          edges.push({ label: \"not\", targetId: symbol.node.itemShapeId });\n          break;\n        case \"conditional\":\n          edges.push({ label: \"if\", targetId: symbol.node.ifShapeId });\n          if (symbol.node.thenShapeId) {\n            edges.push({ label: \"then\", targetId: symbol.node.thenShapeId });\n          }\n          if (symbol.node.elseShapeId) {\n            edges.push({ label: \"else\", targetId: symbol.node.elseShapeId });\n          }\n          break;\n        case \"graphqlInterface\":\n          for (const [name, field] of Object.entries(symbol.node.fields)) {\n            edges.push({ label: `field:${name}`, targetId: field.shapeId });\n          }\n          symbol.node.possibleTypeIds.forEach((targetId) => {\n            edges.push({ label: \"possibleType\", targetId });\n          });\n          break;\n        case \"graphqlUnion\":\n          symbol.node.memberTypeIds.forEach((targetId) => {\n            edges.push({ label: \"member\", targetId });\n          });\n          break;\n        default:\n          break;\n      }\n      return edges;\n    }\n    case \"parameter\":\n    case \"header\":\n      return unique([\n        ...(symbol.schemaShapeId ? [{ label: \"schema\", targetId: symbol.schemaShapeId as SymbolId }] : []),\n        ...((symbol.content ?? []).flatMap((content, index) => [\n          ...(content.shapeId ? [{ label: `content:${String(index)}`, targetId: content.shapeId as SymbolId }] : []),\n          ...((content.exampleIds ?? []).map((targetId) => ({\n            label: `example:${String(index)}`,\n            targetId: targetId as SymbolId,\n          }))),\n        ])),\n        ...((symbol.exampleIds ?? []).map((targetId) => ({\n          label: \"example\",\n          targetId: targetId as SymbolId,\n        }))),\n      ]);\n    case \"requestBody\":\n      return (symbol.contents ?? []).flatMap((content, index) => [\n        ...(content.shapeId ? [{ label: `content:${String(index)}`, targetId: content.shapeId as SymbolId }] : []),\n        ...((content.exampleIds ?? []).map((targetId) => ({\n          label: `example:${String(index)}`,\n          targetId: targetId as SymbolId,\n        }))),\n      ]);\n    case \"response\":\n      return [\n        ...((symbol.headerIds ?? []).map((targetId) => ({\n          label: \"header\",\n          targetId: targetId as SymbolId,\n        }))),\n        ...((symbol.contents ?? []).flatMap((content, index) => [\n          ...(content.shapeId ? [{ label: `content:${String(index)}`, targetId: content.shapeId as SymbolId }] : []),\n          ...((content.exampleIds ?? []).map((targetId) => ({\n            label: `example:${String(index)}`,\n            targetId: targetId as SymbolId,\n          }))),\n        ])),\n      ];\n    case \"example\":\n    case \"securityScheme\":\n      return [];\n  }\n};\n\nexport const decodeCatalogV1 = (input: unknown): CatalogV1 => {\n  try {\n    return decodeCatalogSync(input);\n  } catch (cause) {\n    throw new Error(ParseResult.TreeFormatter.formatErrorSync(cause as never));\n  }\n};\n\nexport const decodeCatalogFragmentV1 = (input: unknown): CatalogFragmentV1 => {\n  try {\n    return decodeCatalogFragmentSync(input);\n  } catch (cause) {\n    throw new Error(ParseResult.TreeFormatter.formatErrorSync(cause as never));\n  }\n};\n\nexport const decodeCatalogSnapshotV1 = (input: unknown) => {\n  try {\n    const snapshot = decodeCatalogSnapshotSync(input);\n    assertCatalogInvariants(snapshot.catalog);\n    return snapshot;\n  } catch (cause) {\n    if (cause instanceof Error) {\n      throw cause;\n    }\n    throw new Error(ParseResult.TreeFormatter.formatErrorSync(cause as never));\n  }\n};\n\nexport const createEmptyCatalogV1 = (): CatalogV1 => emptyCatalog();\n\nexport const createCatalogSnapshotV1 = (input: {\n  import: ImportMetadata;\n  catalog: CatalogV1;\n}) => {\n  const catalog = assertCatalogInvariants(decodeCatalogV1(input.catalog));\n\n  return {\n    version: \"ir.v1.snapshot\" as const,\n    import: input.import,\n    catalog,\n  };\n};\n\nexport const createCatalogSnapshotV1FromFragments = (input: {\n  import: ImportMetadata;\n  fragments: readonly CatalogFragmentV1[];\n}) =>\n  createCatalogSnapshotV1({\n    import: input.import,\n    catalog: mergeCatalogFragments(input.fragments),\n  });\n\nexport const mergeCatalogFragments = (fragments: readonly CatalogFragmentV1[]): CatalogV1 => {\n  const catalog = emptyCatalog();\n  const seenByCollection = new Map<string, string>();\n\n  const mergeRecord = <T extends { id: string }>(\n    collectionName: keyof CatalogV1,\n    entries: Record<string, T> | undefined,\n  ) => {\n    if (!entries) {\n      return;\n    }\n\n    const target = catalog[collectionName] as Record<string, T>;\n    for (const [id, entry] of Object.entries(entries)) {\n      const existing = target[id];\n      if (!existing) {\n        target[id] = entry;\n        seenByCollection.set(`${String(collectionName)}:${id}`, stableStringify(entry));\n        continue;\n      }\n\n      const existingHash = seenByCollection.get(`${String(collectionName)}:${id}`) ?? stableStringify(existing);\n      const nextHash = stableStringify(entry);\n      if (existingHash === nextHash) {\n        continue;\n      }\n\n      if (collectionName !== \"diagnostics\") {\n        createDiagnostic(catalog, {\n          idSeed: {\n            collectionName,\n            id,\n            existingHash,\n            nextHash,\n          },\n          level: \"error\",\n          code: \"merge_conflict_preserved_first\",\n          message: `Conflicting ${String(collectionName)} entry for ${id}; preserved first value`,\n          provenance: \"provenance\" in existing\n            ? (existing as { provenance: ImportDiagnostic[\"provenance\"] }).provenance\n            : [],\n        });\n      }\n    }\n  };\n\n  for (const fragment of fragments) {\n    mergeRecord(\"documents\", fragment.documents);\n    mergeRecord(\"resources\", fragment.resources);\n    mergeRecord(\"scopes\", fragment.scopes);\n    mergeRecord(\"symbols\", fragment.symbols);\n    mergeRecord(\"capabilities\", fragment.capabilities);\n    mergeRecord(\"executables\", fragment.executables);\n    mergeRecord(\"responseSets\", fragment.responseSets);\n    mergeRecord(\"diagnostics\", fragment.diagnostics);\n  }\n\n  return assertCatalogInvariants(decodeCatalogV1(catalog));\n};\n\nexport const validateCatalogInvariants = (\n  catalog: CatalogV1,\n): CatalogInvariantViolation[] => {\n  const violations: CatalogInvariantViolation[] = [];\n\n  const checkProvenanceDocuments = (input: {\n    entityId: string;\n    provenance: readonly { documentId: DocumentId }[];\n  }) => {\n    for (const provenance of input.provenance) {\n      if (!catalog.documents[provenance.documentId]) {\n        violations.push({\n          code: \"missing_provenance_document\",\n          entityId: input.entityId,\n          message: `Entity ${input.entityId} references missing provenance document ${provenance.documentId}`,\n        });\n      }\n    }\n  };\n\n  for (const symbol of Object.values(catalog.symbols)) {\n    if (symbol.provenance.length === 0) {\n      violations.push({\n        code: \"missing_symbol_provenance\",\n        entityId: symbol.id,\n        message: `Symbol ${symbol.id} is missing provenance`,\n      });\n    }\n\n    if (symbol.kind === \"shape\") {\n      if (!symbol.resourceId && !symbol.synthetic) {\n        violations.push({\n          code: \"missing_resource_context\",\n          entityId: symbol.id,\n          message: `Shape ${symbol.id} must belong to a resource or be synthetic`,\n        });\n      }\n\n      if (symbol.node.type === \"ref\" && !catalog.symbols[symbol.node.target]) {\n        violations.push({\n          code: \"missing_reference_target\",\n          entityId: symbol.id,\n          message: `Shape ${symbol.id} references missing shape ${symbol.node.target}`,\n        });\n      }\n\n      if (symbol.node.type === \"unknown\" && symbol.node.reason?.includes(\"unresolved\")) {\n        const hasDiagnostic = (symbol.diagnosticIds ?? [])\n          .map((diagnosticId) => catalog.diagnostics[diagnosticId])\n          .some((diagnostic) => diagnostic?.code === \"unresolved_ref\");\n\n        if (!hasDiagnostic) {\n          violations.push({\n            code: \"missing_unresolved_ref_diagnostic\",\n            entityId: symbol.id,\n            message: `Shape ${symbol.id} is unresolved but has no unresolved_ref diagnostic`,\n          });\n        }\n      }\n\n      if (symbol.synthetic && symbol.resourceId && !catalog.resources[symbol.resourceId]) {\n        violations.push({\n          code: \"missing_resource_context\",\n          entityId: symbol.id,\n          message: `Synthetic shape ${symbol.id} references missing resource ${symbol.resourceId}`,\n        });\n      }\n    }\n\n    checkProvenanceDocuments({\n      entityId: symbol.id,\n      provenance: symbol.provenance,\n    });\n  }\n\n  for (const collection of [\n    ...Object.values(catalog.resources),\n    ...Object.values(catalog.scopes),\n    ...Object.values(catalog.capabilities),\n    ...Object.values(catalog.executables),\n    ...Object.values(catalog.responseSets),\n  ]) {\n    if (\"provenance\" in collection && collection.provenance.length === 0) {\n      violations.push({\n        code: \"missing_entity_provenance\",\n        entityId: \"id\" in collection ? collection.id : undefined,\n        message: `Entity ${\"id\" in collection ? collection.id : \"unknown\"} is missing provenance`,\n      });\n    }\n\n    if (\"id\" in collection) {\n      checkProvenanceDocuments({\n        entityId: collection.id,\n        provenance: collection.provenance,\n      });\n    }\n  }\n\n  for (const resource of Object.values(catalog.resources)) {\n    if (!catalog.documents[resource.documentId]) {\n      violations.push({\n        code: \"missing_document\",\n        entityId: resource.id,\n        message: `Resource ${resource.id} references missing document ${resource.documentId}`,\n      });\n    }\n  }\n\n  for (const capability of Object.values(catalog.capabilities)) {\n    if (!catalog.scopes[capability.serviceScopeId]) {\n      violations.push({\n        code: \"missing_service_scope\",\n        entityId: capability.id,\n        message: `Capability ${capability.id} references missing scope ${capability.serviceScopeId}`,\n      });\n    }\n\n    if (\n      capability.preferredExecutableId\n      && !capability.executableIds.includes(capability.preferredExecutableId)\n    ) {\n      violations.push({\n        code: \"invalid_preferred_executable\",\n        entityId: capability.id,\n        message: `Capability ${capability.id} preferred executable is not in executableIds`,\n      });\n    }\n\n    for (const executableId of capability.executableIds) {\n      if (!catalog.executables[executableId]) {\n        violations.push({\n          code: \"missing_executable\",\n          entityId: capability.id,\n          message: `Capability ${capability.id} references missing executable ${executableId}`,\n        });\n      }\n    }\n  }\n\n  for (const executable of Object.values(catalog.executables)) {\n    if (!catalog.capabilities[executable.capabilityId]) {\n      violations.push({\n        code: \"missing_executable\",\n        entityId: executable.id,\n        message: `Executable ${executable.id} references missing capability ${executable.capabilityId}`,\n      });\n    }\n\n    if (!catalog.scopes[executable.scopeId]) {\n      violations.push({\n        code: \"missing_scope\",\n        entityId: executable.id,\n        message: `Executable ${executable.id} references missing scope ${executable.scopeId}`,\n      });\n    }\n\n    if (!catalog.responseSets[executable.projection.responseSetId]) {\n      violations.push({\n        code: \"missing_response_set\",\n        entityId: executable.id,\n        message: `Executable ${executable.id} references missing response set ${executable.projection.responseSetId}`,\n      });\n    }\n\n    const projectedShapeRefs = [\n      {\n        kind: \"call\",\n        shapeId: executable.projection.callShapeId,\n      },\n      {\n        kind: \"result data\",\n        shapeId: executable.projection.resultDataShapeId,\n      },\n      {\n        kind: \"result error\",\n        shapeId: executable.projection.resultErrorShapeId,\n      },\n      {\n        kind: \"result headers\",\n        shapeId: executable.projection.resultHeadersShapeId,\n      },\n      {\n        kind: \"result status\",\n        shapeId: executable.projection.resultStatusShapeId,\n      },\n    ];\n\n    for (const projectedShape of projectedShapeRefs) {\n      if (!projectedShape.shapeId) {\n        continue;\n      }\n\n      const symbol = catalog.symbols[projectedShape.shapeId];\n      if (symbol?.kind === \"shape\") {\n        continue;\n      }\n\n      violations.push({\n        code: \"missing_projection_shape\",\n        entityId: executable.id,\n        message: `Executable ${executable.id} references missing ${projectedShape.kind} shape ${projectedShape.shapeId}`,\n      });\n    }\n  }\n\n  return violations;\n};\n\nconst assertCatalogInvariants = (catalog: CatalogV1): CatalogV1 => {\n  const violations = validateCatalogInvariants(catalog);\n  if (violations.length === 0) {\n    return catalog;\n  }\n\n  const preview = violations\n    .slice(0, 5)\n    .map((violation) => `${violation.code}: ${violation.message}`)\n    .join(\"\\n\");\n\n  throw new Error(\n    [\n      `Invalid IR catalog (${violations.length} invariant violation${violations.length === 1 ? \"\" : \"s\"}).`,\n      preview,\n      ...(violations.length > 5 ? [`...and ${String(violations.length - 5)} more`] : []),\n    ].join(\"\\n\"),\n  );\n};\n\nexport const projectCatalogForAgentSdk = (input: {\n  catalog: CatalogV1;\n}): ProjectedCatalog => {\n  const workingCatalog = cloneCatalog(input.catalog);\n  const toolDescriptors = {} as Record<CapabilityId, ToolDescriptor>;\n  const searchDocs = {} as Record<CapabilityId, ToolSearchDoc>;\n  const capabilityViews = {} as Record<CapabilityId, CapabilitySummaryView>;\n\n  const capabilities = Object.values(workingCatalog.capabilities)\n    .sort((left, right) => left.id.localeCompare(right.id));\n\n  for (const capability of capabilities) {\n    const descriptor = projectCapability(workingCatalog, capability);\n    toolDescriptors[capability.id] = descriptor;\n    searchDocs[capability.id] = searchDoc(workingCatalog, capability);\n    capabilityViews[capability.id] = summaryView(workingCatalog, capability, descriptor);\n  }\n\n  return {\n    catalog: workingCatalog,\n    toolDescriptors,\n    searchDocs,\n    capabilityViews,\n  };\n};\n\nexport const projectSymbolShallowView = (\n  catalog: CatalogV1,\n  symbolId: SymbolId,\n): SymbolShallowView => {\n  const symbol = catalog.symbols[symbolId];\n  if (!symbol) {\n    throw new Error(`Unknown symbol ${symbolId}`);\n  }\n\n  return {\n    symbolId,\n    kind: symbol.kind,\n    ...(symbolTitle(symbol) ? { title: symbolTitle(symbol) } : {}),\n    ...(symbolSummary(symbol) ? { summary: symbolSummary(symbol) } : {}),\n    edges: symbolEdges(symbol),\n  };\n};\n\nexport const projectSymbolExpandedView = (\n  catalog: CatalogV1,\n  symbolId: SymbolId,\n): SymbolExpandedView => {\n  const symbol = catalog.symbols[symbolId];\n  if (!symbol) {\n    throw new Error(`Unknown symbol ${symbolId}`);\n  }\n\n  return {\n    symbolId,\n    symbol,\n    ...(symbol.diagnosticIds\n      ? {\n          diagnostics: symbol.diagnosticIds\n            .map((diagnosticId) => catalog.diagnostics[diagnosticId])\n            .filter((diagnostic): diagnostic is ImportDiagnostic => diagnostic !== undefined),\n        }\n      : {}),\n  };\n};\n"
  },
  {
    "path": "packages/kernel/ir/src/ids.ts",
    "content": "import { Schema } from \"effect\";\n\nexport const DocumentIdSchema = Schema.String.pipe(Schema.brand(\"DocumentId\"));\nexport const ResourceIdSchema = Schema.String.pipe(Schema.brand(\"ResourceId\"));\nexport const ScopeIdSchema = Schema.String.pipe(Schema.brand(\"ScopeId\"));\nexport const CapabilityIdSchema = Schema.String.pipe(Schema.brand(\"CapabilityId\"));\nexport const ExecutableIdSchema = Schema.String.pipe(Schema.brand(\"ExecutableId\"));\nexport const ResponseSetIdSchema = Schema.String.pipe(Schema.brand(\"ResponseSetId\"));\nexport const DiagnosticIdSchema = Schema.String.pipe(Schema.brand(\"DiagnosticId\"));\n\nexport const ShapeSymbolIdSchema = Schema.String.pipe(Schema.brand(\"ShapeSymbolId\"));\nexport const ParameterSymbolIdSchema = Schema.String.pipe(Schema.brand(\"ParameterSymbolId\"));\nexport const RequestBodySymbolIdSchema = Schema.String.pipe(\n  Schema.brand(\"RequestBodySymbolId\"),\n);\nexport const ResponseSymbolIdSchema = Schema.String.pipe(\n  Schema.brand(\"ResponseSymbolId\"),\n);\nexport const HeaderSymbolIdSchema = Schema.String.pipe(Schema.brand(\"HeaderSymbolId\"));\nexport const ExampleSymbolIdSchema = Schema.String.pipe(Schema.brand(\"ExampleSymbolId\"));\nexport const SecuritySchemeSymbolIdSchema = Schema.String.pipe(\n  Schema.brand(\"SecuritySchemeSymbolId\"),\n);\n\nexport type DocumentId = typeof DocumentIdSchema.Type;\nexport type ResourceId = typeof ResourceIdSchema.Type;\nexport type ScopeId = typeof ScopeIdSchema.Type;\nexport type CapabilityId = typeof CapabilityIdSchema.Type;\nexport type ExecutableId = typeof ExecutableIdSchema.Type;\nexport type ResponseSetId = typeof ResponseSetIdSchema.Type;\nexport type DiagnosticId = typeof DiagnosticIdSchema.Type;\n\nexport type ShapeSymbolId = typeof ShapeSymbolIdSchema.Type;\nexport type ParameterSymbolId = typeof ParameterSymbolIdSchema.Type;\nexport type RequestBodySymbolId = typeof RequestBodySymbolIdSchema.Type;\nexport type ResponseSymbolId = typeof ResponseSymbolIdSchema.Type;\nexport type HeaderSymbolId = typeof HeaderSymbolIdSchema.Type;\nexport type ExampleSymbolId = typeof ExampleSymbolIdSchema.Type;\nexport type SecuritySchemeSymbolId = typeof SecuritySchemeSymbolIdSchema.Type;\n\nexport type SymbolId =\n  | ShapeSymbolId\n  | ParameterSymbolId\n  | RequestBodySymbolId\n  | ResponseSymbolId\n  | HeaderSymbolId\n  | ExampleSymbolId\n  | SecuritySchemeSymbolId;\n\nexport const SymbolIdSchema = Schema.Union(\n  ShapeSymbolIdSchema,\n  ParameterSymbolIdSchema,\n  RequestBodySymbolIdSchema,\n  ResponseSymbolIdSchema,\n  HeaderSymbolIdSchema,\n  ExampleSymbolIdSchema,\n  SecuritySchemeSymbolIdSchema,\n);\n"
  },
  {
    "path": "packages/kernel/ir/src/index.ts",
    "content": "export * from \"./ids\";\nexport * from \"./model\";\nexport * from \"./catalog\";\n"
  },
  {
    "path": "packages/kernel/ir/src/model.ts",
    "content": "import { Schema } from \"effect\";\n\nimport {\n  CapabilityIdSchema,\n  DiagnosticIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ExampleSymbolIdSchema,\n  HeaderSymbolIdSchema,\n  ParameterSymbolIdSchema,\n  RequestBodySymbolIdSchema,\n  ResourceIdSchema,\n  ResponseSetIdSchema,\n  ResponseSymbolIdSchema,\n  ScopeIdSchema,\n  SecuritySchemeSymbolIdSchema,\n  type SecuritySchemeSymbolId,\n  ShapeSymbolIdSchema,\n  SymbolIdSchema,\n} from \"./ids\";\n\nexport const SourceKindSchema = Schema.Literal(\n  \"openapi\",\n  \"graphql-schema\",\n  \"google-discovery\",\n  \"mcp\",\n  \"custom\",\n);\n\nexport const ScopeKindSchema = Schema.Literal(\n  \"service\",\n  \"document\",\n  \"resource\",\n  \"pathItem\",\n  \"operation\",\n  \"folder\",\n);\n\nexport const EffectKindSchema = Schema.Literal(\n  \"read\",\n  \"write\",\n  \"delete\",\n  \"action\",\n  \"subscribe\",\n);\n\nexport const ParameterLocationSchema = Schema.Literal(\n  \"path\",\n  \"query\",\n  \"header\",\n  \"cookie\",\n);\n\nexport const ResponseTraitSchema = Schema.Literal(\n  \"success\",\n  \"redirect\",\n  \"stream\",\n  \"download\",\n  \"upload\",\n  \"longRunning\",\n);\n\nexport const SecuritySchemeTypeSchema = Schema.Literal(\n  \"oauth2\",\n  \"http\",\n  \"apiKey\",\n  \"basic\",\n  \"bearer\",\n  \"custom\",\n);\n\nexport const StatusRangeSchema = Schema.Literal(\n  \"1XX\",\n  \"2XX\",\n  \"3XX\",\n  \"4XX\",\n  \"5XX\",\n);\n\nexport const PaginationHintKindSchema = Schema.Literal(\n  \"cursor\",\n  \"offset\",\n  \"token\",\n  \"unknown\",\n);\n\nexport const DiagnosticLevelSchema = Schema.Literal(\n  \"info\",\n  \"warning\",\n  \"error\",\n);\n\nexport const DiagnosticCodeSchema = Schema.Literal(\n  \"external_ref_bundled\",\n  \"relative_ref_rebased\",\n  \"schema_hoisted\",\n  \"selection_shape_synthesized\",\n  \"opaque_hook_imported\",\n  \"discriminator_lost\",\n  \"multi_response_union_synthesized\",\n  \"unsupported_link_preserved_native\",\n  \"unsupported_callback_preserved_native\",\n  \"unresolved_ref\",\n  \"merge_conflict_preserved_first\",\n  \"projection_call_shape_synthesized\",\n  \"projection_result_shape_synthesized\",\n  \"projection_collision_grouped_fields\",\n  \"synthetic_resource_context_created\",\n  \"selection_shape_missing\",\n);\n\nexport const NativeEncodingSchema = Schema.Literal(\n  \"json\",\n  \"yaml\",\n  \"graphql\",\n  \"text\",\n  \"unknown\",\n);\n\nexport const ProvenanceRelationSchema = Schema.Literal(\n  \"declared\",\n  \"hoisted\",\n  \"derived\",\n  \"merged\",\n  \"projected\",\n);\n\nexport const DocumentationBlockSchema = Schema.Struct({\n  summary: Schema.optional(Schema.String),\n  description: Schema.optional(Schema.String),\n  externalDocsUrl: Schema.optional(Schema.String),\n});\n\nexport const ProvenanceRefSchema = Schema.Struct({\n  relation: ProvenanceRelationSchema,\n  documentId: DocumentIdSchema,\n  resourceId: Schema.optional(ResourceIdSchema),\n  pointer: Schema.optional(Schema.String),\n  line: Schema.optional(Schema.Number),\n  column: Schema.optional(Schema.Number),\n});\n\nexport const NativeBlobSchema = Schema.Struct({\n  sourceKind: SourceKindSchema,\n  kind: Schema.String,\n  pointer: Schema.optional(Schema.String),\n  encoding: Schema.optional(NativeEncodingSchema),\n  summary: Schema.optional(Schema.String),\n  value: Schema.optional(Schema.Unknown),\n});\n\nexport const EntityBaseSchema = Schema.Struct({\n  synthetic: Schema.Boolean,\n  provenance: Schema.Array(ProvenanceRefSchema),\n  diagnosticIds: Schema.optional(Schema.Array(DiagnosticIdSchema)),\n  native: Schema.optional(Schema.Array(NativeBlobSchema)),\n});\n\nexport const ImportMetadataSchema = Schema.Struct({\n  sourceKind: SourceKindSchema,\n  adapterKey: Schema.String,\n  importerVersion: Schema.String,\n  importedAt: Schema.String,\n  sourceConfigHash: Schema.String,\n});\n\nexport const SourceDocumentSchema = Schema.Struct({\n  id: DocumentIdSchema,\n  kind: SourceKindSchema,\n  title: Schema.optional(Schema.String),\n  versionHint: Schema.optional(Schema.String),\n  fetchedAt: Schema.String,\n  rawRef: Schema.String,\n  entryUri: Schema.optional(Schema.String),\n  native: Schema.optional(Schema.Array(NativeBlobSchema)),\n});\n\nexport const FieldSpecSchema = Schema.Struct({\n  shapeId: ShapeSymbolIdSchema,\n  docs: Schema.optional(DocumentationBlockSchema),\n  deprecated: Schema.optional(Schema.Boolean),\n  exampleIds: Schema.optional(Schema.Array(ExampleSymbolIdSchema)),\n});\n\nexport const DiscriminatorSpecSchema = Schema.Struct({\n  propertyName: Schema.String,\n  mapping: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: ShapeSymbolIdSchema,\n    }),\n  ),\n});\n\nexport const ScalarShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"scalar\"),\n  scalar: Schema.Literal(\"string\", \"number\", \"integer\", \"boolean\", \"null\", \"bytes\"),\n  format: Schema.optional(Schema.String),\n  constraints: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.Unknown,\n    }),\n  ),\n});\n\nexport const UnknownShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"unknown\"),\n  reason: Schema.optional(Schema.String),\n});\n\nexport const ConstShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"const\"),\n  value: Schema.Unknown,\n});\n\nexport const EnumShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"enum\"),\n  values: Schema.Array(Schema.Unknown),\n});\n\nexport const ObjectShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"object\"),\n  fields: Schema.Record({\n    key: Schema.String,\n    value: FieldSpecSchema,\n  }),\n  required: Schema.optional(Schema.Array(Schema.String)),\n  additionalProperties: Schema.optional(\n    Schema.Union(Schema.Boolean, ShapeSymbolIdSchema),\n  ),\n  patternProperties: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: ShapeSymbolIdSchema,\n    }),\n  ),\n});\n\nexport const ArrayShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"array\"),\n  itemShapeId: ShapeSymbolIdSchema,\n  minItems: Schema.optional(Schema.Number),\n  maxItems: Schema.optional(Schema.Number),\n});\n\nexport const TupleShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"tuple\"),\n  itemShapeIds: Schema.Array(ShapeSymbolIdSchema),\n  additionalItems: Schema.optional(\n    Schema.Union(Schema.Boolean, ShapeSymbolIdSchema),\n  ),\n});\n\nexport const MapShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"map\"),\n  valueShapeId: ShapeSymbolIdSchema,\n});\n\nexport const AllOfShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"allOf\"),\n  items: Schema.Array(ShapeSymbolIdSchema),\n});\n\nexport const AnyOfShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"anyOf\"),\n  items: Schema.Array(ShapeSymbolIdSchema),\n});\n\nexport const OneOfShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"oneOf\"),\n  items: Schema.Array(ShapeSymbolIdSchema),\n  discriminator: Schema.optional(DiscriminatorSpecSchema),\n});\n\nexport const NullableShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"nullable\"),\n  itemShapeId: ShapeSymbolIdSchema,\n});\n\nexport const RefShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"ref\"),\n  target: ShapeSymbolIdSchema,\n});\n\nexport const NotShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"not\"),\n  itemShapeId: ShapeSymbolIdSchema,\n});\n\nexport const ConditionalShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"conditional\"),\n  ifShapeId: ShapeSymbolIdSchema,\n  thenShapeId: Schema.optional(ShapeSymbolIdSchema),\n  elseShapeId: Schema.optional(ShapeSymbolIdSchema),\n});\n\nexport const GraphQLInterfaceShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"graphqlInterface\"),\n  fields: Schema.Record({\n    key: Schema.String,\n    value: FieldSpecSchema,\n  }),\n  possibleTypeIds: Schema.Array(ShapeSymbolIdSchema),\n});\n\nexport const GraphQLUnionShapeSchema = Schema.Struct({\n  type: Schema.Literal(\"graphqlUnion\"),\n  memberTypeIds: Schema.Array(ShapeSymbolIdSchema),\n});\n\nexport const ShapeNodeSchema = Schema.Union(\n  UnknownShapeSchema,\n  ScalarShapeSchema,\n  ConstShapeSchema,\n  EnumShapeSchema,\n  ObjectShapeSchema,\n  ArrayShapeSchema,\n  TupleShapeSchema,\n  MapShapeSchema,\n  AllOfShapeSchema,\n  AnyOfShapeSchema,\n  OneOfShapeSchema,\n  NullableShapeSchema,\n  RefShapeSchema,\n  NotShapeSchema,\n  ConditionalShapeSchema,\n  GraphQLInterfaceShapeSchema,\n  GraphQLUnionShapeSchema,\n);\n\nexport const AnchorTargetSchema = Schema.Struct({\n  shapeId: ShapeSymbolIdSchema,\n  pointer: Schema.optional(Schema.String),\n});\n\nexport const SchemaResourceSchema = Schema.extend(\n  Schema.Struct({\n    id: ResourceIdSchema,\n    documentId: DocumentIdSchema,\n    canonicalUri: Schema.String,\n    baseUri: Schema.String,\n    dialectUri: Schema.optional(Schema.String),\n    rootShapeId: Schema.optional(ShapeSymbolIdSchema),\n    anchors: Schema.Record({\n      key: Schema.String,\n      value: AnchorTargetSchema,\n    }),\n    dynamicAnchors: Schema.Record({\n      key: Schema.String,\n      value: AnchorTargetSchema,\n    }),\n  }),\n  EntityBaseSchema,\n);\n\nexport const RequestPlacementHintSchema = Schema.Union(\n  Schema.Struct({\n    location: Schema.Literal(\"header\", \"query\", \"cookie\"),\n    name: Schema.String,\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"body\"),\n    path: Schema.String,\n  }),\n);\n\nexport const OAuthFlowSchema = Schema.Struct({\n  authorizationUrl: Schema.optional(Schema.String),\n  tokenUrl: Schema.optional(Schema.String),\n  refreshUrl: Schema.optional(Schema.String),\n  scopes: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nexport const SecurityPlacementSchema = Schema.Struct({\n  in: Schema.optional(Schema.Literal(\"header\", \"query\", \"cookie\")),\n  name: Schema.optional(Schema.String),\n});\n\nexport const SecuritySchemeSymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: SecuritySchemeSymbolIdSchema,\n    kind: Schema.Literal(\"securityScheme\"),\n    schemeType: SecuritySchemeTypeSchema,\n    docs: Schema.optional(DocumentationBlockSchema),\n    placement: Schema.optional(SecurityPlacementSchema),\n    http: Schema.optional(\n      Schema.Struct({\n        scheme: Schema.String,\n        bearerFormat: Schema.optional(Schema.String),\n      }),\n    ),\n    apiKey: Schema.optional(\n      Schema.Struct({\n        in: Schema.Literal(\"header\", \"query\", \"cookie\"),\n        name: Schema.String,\n      }),\n    ),\n    oauth: Schema.optional(\n      Schema.Struct({\n        flows: Schema.optional(\n          Schema.Record({\n            key: Schema.String,\n            value: OAuthFlowSchema,\n          }),\n        ),\n        scopes: Schema.optional(\n          Schema.Record({\n            key: Schema.String,\n            value: Schema.String,\n          }),\n        ),\n      }),\n    ),\n    custom: Schema.optional(\n      Schema.Struct({\n        placementHints: Schema.optional(Schema.Array(RequestPlacementHintSchema)),\n      }),\n    ),\n  }),\n  EntityBaseSchema,\n);\n\nexport const EncodingSpecSchema = Schema.Struct({\n  contentType: Schema.optional(Schema.String),\n  style: Schema.optional(Schema.String),\n  explode: Schema.optional(Schema.Boolean),\n  allowReserved: Schema.optional(Schema.Boolean),\n  headers: Schema.optional(Schema.Array(HeaderSymbolIdSchema)),\n});\n\nexport const ContentSpecSchema = Schema.Struct({\n  mediaType: Schema.String,\n  shapeId: Schema.optional(ShapeSymbolIdSchema),\n  exampleIds: Schema.optional(Schema.Array(ExampleSymbolIdSchema)),\n  encoding: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: EncodingSpecSchema,\n    }),\n  ),\n});\n\nexport const ShapeSymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: ShapeSymbolIdSchema,\n    kind: Schema.Literal(\"shape\"),\n    resourceId: Schema.optional(ResourceIdSchema),\n    title: Schema.optional(Schema.String),\n    docs: Schema.optional(DocumentationBlockSchema),\n    deprecated: Schema.optional(Schema.Boolean),\n    node: ShapeNodeSchema,\n  }),\n  EntityBaseSchema,\n);\n\nexport const ParameterSymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: ParameterSymbolIdSchema,\n    kind: Schema.Literal(\"parameter\"),\n    name: Schema.String,\n    location: ParameterLocationSchema,\n    required: Schema.optional(Schema.Boolean),\n    docs: Schema.optional(DocumentationBlockSchema),\n    deprecated: Schema.optional(Schema.Boolean),\n    exampleIds: Schema.optional(Schema.Array(ExampleSymbolIdSchema)),\n    schemaShapeId: Schema.optional(ShapeSymbolIdSchema),\n    content: Schema.optional(Schema.Array(ContentSpecSchema)),\n    style: Schema.optional(Schema.String),\n    explode: Schema.optional(Schema.Boolean),\n    allowReserved: Schema.optional(Schema.Boolean),\n  }),\n  EntityBaseSchema,\n);\n\nexport const HeaderSymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: HeaderSymbolIdSchema,\n    kind: Schema.Literal(\"header\"),\n    name: Schema.String,\n    docs: Schema.optional(DocumentationBlockSchema),\n    deprecated: Schema.optional(Schema.Boolean),\n    exampleIds: Schema.optional(Schema.Array(ExampleSymbolIdSchema)),\n    schemaShapeId: Schema.optional(ShapeSymbolIdSchema),\n    content: Schema.optional(Schema.Array(ContentSpecSchema)),\n    style: Schema.optional(Schema.String),\n    explode: Schema.optional(Schema.Boolean),\n  }),\n  EntityBaseSchema,\n);\n\nexport const RequestBodySymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: RequestBodySymbolIdSchema,\n    kind: Schema.Literal(\"requestBody\"),\n    docs: Schema.optional(DocumentationBlockSchema),\n    required: Schema.optional(Schema.Boolean),\n    contents: Schema.Array(ContentSpecSchema),\n  }),\n  EntityBaseSchema,\n);\n\nexport const ResponseSymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: ResponseSymbolIdSchema,\n    kind: Schema.Literal(\"response\"),\n    docs: Schema.optional(DocumentationBlockSchema),\n    headerIds: Schema.optional(Schema.Array(HeaderSymbolIdSchema)),\n    contents: Schema.optional(Schema.Array(ContentSpecSchema)),\n  }),\n  EntityBaseSchema,\n);\n\nexport const ExampleSymbolSchema = Schema.extend(\n  Schema.Struct({\n    id: ExampleSymbolIdSchema,\n    kind: Schema.Literal(\"example\"),\n    name: Schema.optional(Schema.String),\n    docs: Schema.optional(DocumentationBlockSchema),\n    exampleKind: Schema.Literal(\"value\", \"call\"),\n    value: Schema.optional(Schema.Unknown),\n    externalValue: Schema.optional(Schema.String),\n    call: Schema.optional(\n      Schema.Struct({\n        args: Schema.Record({\n          key: Schema.String,\n          value: Schema.Unknown,\n        }),\n        result: Schema.optional(Schema.Unknown),\n      }),\n    ),\n  }),\n  EntityBaseSchema,\n);\n\nexport const SymbolSchema = Schema.Union(\n  ShapeSymbolSchema,\n  ParameterSymbolSchema,\n  RequestBodySymbolSchema,\n  ResponseSymbolSchema,\n  HeaderSymbolSchema,\n  ExampleSymbolSchema,\n  SecuritySchemeSymbolSchema,\n);\n\nexport type AuthRequirement =\n  | {\n      readonly kind: \"none\";\n    }\n  | {\n      readonly kind: \"scheme\";\n      readonly schemeId: SecuritySchemeSymbolId;\n      readonly scopes?: readonly string[];\n    }\n  | {\n      readonly kind: \"allOf\";\n      readonly items: readonly AuthRequirement[];\n    }\n  | {\n      readonly kind: \"anyOf\";\n      readonly items: readonly AuthRequirement[];\n    };\n\nexport const AuthRequirementSchema = Schema.suspend(() =>\n  Schema.Union(\n    Schema.Struct({\n      kind: Schema.Literal(\"none\"),\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"scheme\"),\n      schemeId: SecuritySchemeSymbolIdSchema,\n      scopes: Schema.optional(Schema.Array(Schema.String)),\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"allOf\"),\n      items: Schema.Array(AuthRequirementSchema),\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"anyOf\"),\n      items: Schema.Array(AuthRequirementSchema),\n    }),\n  )\n) as Schema.Schema<AuthRequirement, AuthRequirement, never>;\n\nexport const ServerSpecSchema = Schema.Struct({\n  url: Schema.String,\n  description: Schema.optional(Schema.String),\n  variables: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nexport const ScopeDefaultsSchema = Schema.Struct({\n  servers: Schema.optional(Schema.Array(ServerSpecSchema)),\n  auth: Schema.optional(AuthRequirementSchema),\n  parameterIds: Schema.optional(Schema.Array(ParameterSymbolIdSchema)),\n  headerIds: Schema.optional(Schema.Array(HeaderSymbolIdSchema)),\n  variables: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nexport const ScopeSchema = Schema.extend(\n  Schema.Struct({\n    id: ScopeIdSchema,\n    kind: ScopeKindSchema,\n    parentId: Schema.optional(ScopeIdSchema),\n    name: Schema.optional(Schema.String),\n    namespace: Schema.optional(Schema.String),\n    docs: Schema.optional(DocumentationBlockSchema),\n    defaults: Schema.optional(ScopeDefaultsSchema),\n  }),\n  EntityBaseSchema,\n);\n\nexport const InteractionSpecSchema = Schema.Struct({\n  approval: Schema.Struct({\n    mayRequire: Schema.Boolean,\n    reasons: Schema.optional(\n      Schema.Array(\n        Schema.Literal(\"write\", \"delete\", \"sensitive\", \"externalSideEffect\"),\n      ),\n    ),\n  }),\n  elicitation: Schema.Struct({\n    mayRequest: Schema.Boolean,\n    shapeId: Schema.optional(ShapeSymbolIdSchema),\n  }),\n  resume: Schema.Struct({\n    supported: Schema.Boolean,\n  }),\n});\n\nexport const CapabilitySchema = Schema.extend(\n  Schema.Struct({\n    id: CapabilityIdSchema,\n    serviceScopeId: ScopeIdSchema,\n    surface: Schema.Struct({\n      toolPath: Schema.Array(Schema.String),\n      title: Schema.optional(Schema.String),\n      summary: Schema.optional(Schema.String),\n      description: Schema.optional(Schema.String),\n      aliases: Schema.optional(Schema.Array(Schema.String)),\n      tags: Schema.optional(Schema.Array(Schema.String)),\n    }),\n    semantics: Schema.Struct({\n      effect: EffectKindSchema,\n      safe: Schema.optional(Schema.Boolean),\n      idempotent: Schema.optional(Schema.Boolean),\n      destructive: Schema.optional(Schema.Boolean),\n    }),\n    docs: Schema.optional(DocumentationBlockSchema),\n    auth: AuthRequirementSchema,\n    interaction: InteractionSpecSchema,\n    executableIds: Schema.Array(ExecutableIdSchema),\n    preferredExecutableId: Schema.optional(ExecutableIdSchema),\n    exampleIds: Schema.optional(Schema.Array(ExampleSymbolIdSchema)),\n  }),\n  EntityBaseSchema,\n);\n\nexport const ExecutableDisplaySchema = Schema.Struct({\n  protocol: Schema.optional(Schema.String),\n  method: Schema.optional(Schema.NullOr(Schema.String)),\n  pathTemplate: Schema.optional(Schema.NullOr(Schema.String)),\n  operationId: Schema.optional(Schema.NullOr(Schema.String)),\n  group: Schema.optional(Schema.NullOr(Schema.String)),\n  leaf: Schema.optional(Schema.NullOr(Schema.String)),\n  rawToolId: Schema.optional(Schema.NullOr(Schema.String)),\n  title: Schema.optional(Schema.NullOr(Schema.String)),\n  summary: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nexport const ExecutableProjectionSchema = Schema.Struct({\n  responseSetId: ResponseSetIdSchema,\n  callShapeId: ShapeSymbolIdSchema,\n  resultDataShapeId: Schema.optional(ShapeSymbolIdSchema),\n  resultErrorShapeId: Schema.optional(ShapeSymbolIdSchema),\n  resultHeadersShapeId: Schema.optional(ShapeSymbolIdSchema),\n  resultStatusShapeId: Schema.optional(ShapeSymbolIdSchema),\n});\n\nexport const ExecutableSchema = Schema.extend(\n  Schema.Struct({\n    id: ExecutableIdSchema,\n    capabilityId: CapabilityIdSchema,\n    scopeId: ScopeIdSchema,\n    adapterKey: Schema.String,\n    bindingVersion: Schema.Number,\n    binding: Schema.Unknown,\n    projection: ExecutableProjectionSchema,\n    display: Schema.optional(ExecutableDisplaySchema),\n  }),\n  EntityBaseSchema,\n);\n\nexport const PaginationHintSchema = Schema.Struct({\n  kind: PaginationHintKindSchema,\n  tokenParamName: Schema.optional(Schema.String),\n  nextFieldPath: Schema.optional(Schema.String),\n});\n\nexport const StatusMatchSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"exact\"),\n    status: Schema.Number,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"range\"),\n    value: StatusRangeSchema,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"default\"),\n  }),\n);\n\nexport const ResponseVariantSchema = Schema.Struct({\n  match: StatusMatchSchema,\n  responseId: ResponseSymbolIdSchema,\n  traits: Schema.optional(Schema.Array(ResponseTraitSchema)),\n  pagination: Schema.optional(PaginationHintSchema),\n});\n\nexport const ResponseSetSchema = Schema.extend(\n  Schema.Struct({\n    id: ResponseSetIdSchema,\n    variants: Schema.Array(ResponseVariantSchema),\n  }),\n  EntityBaseSchema,\n);\n\nexport const ImportDiagnosticSchema = Schema.Struct({\n  id: DiagnosticIdSchema,\n  level: DiagnosticLevelSchema,\n  code: DiagnosticCodeSchema,\n  message: Schema.String,\n  relatedSymbolIds: Schema.optional(Schema.Array(SymbolIdSchema)),\n  provenance: Schema.Array(ProvenanceRefSchema),\n});\n\nexport const CatalogV1Schema = Schema.Struct({\n  version: Schema.Literal(\"ir.v1\"),\n  documents: Schema.Record({\n    key: DocumentIdSchema,\n    value: SourceDocumentSchema,\n  }),\n  resources: Schema.Record({\n    key: ResourceIdSchema,\n    value: SchemaResourceSchema,\n  }),\n  scopes: Schema.Record({\n    key: ScopeIdSchema,\n    value: ScopeSchema,\n  }),\n  symbols: Schema.Record({\n    key: Schema.String,\n    value: SymbolSchema,\n  }),\n  capabilities: Schema.Record({\n    key: CapabilityIdSchema,\n    value: CapabilitySchema,\n  }),\n  executables: Schema.Record({\n    key: ExecutableIdSchema,\n    value: ExecutableSchema,\n  }),\n  responseSets: Schema.Record({\n    key: ResponseSetIdSchema,\n    value: ResponseSetSchema,\n  }),\n  diagnostics: Schema.Record({\n    key: DiagnosticIdSchema,\n    value: ImportDiagnosticSchema,\n  }),\n});\n\nexport const CatalogFragmentV1Schema = Schema.Struct({\n  version: Schema.Literal(\"ir.v1.fragment\"),\n  documents: Schema.optional(\n    Schema.Record({\n      key: DocumentIdSchema,\n      value: SourceDocumentSchema,\n    }),\n  ),\n  resources: Schema.optional(\n    Schema.Record({\n      key: ResourceIdSchema,\n      value: SchemaResourceSchema,\n    }),\n  ),\n  scopes: Schema.optional(\n    Schema.Record({\n      key: ScopeIdSchema,\n      value: ScopeSchema,\n    }),\n  ),\n  symbols: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: SymbolSchema,\n    }),\n  ),\n  capabilities: Schema.optional(\n    Schema.Record({\n      key: CapabilityIdSchema,\n      value: CapabilitySchema,\n    }),\n  ),\n  executables: Schema.optional(\n    Schema.Record({\n      key: ExecutableIdSchema,\n      value: ExecutableSchema,\n    }),\n  ),\n  responseSets: Schema.optional(\n    Schema.Record({\n      key: ResponseSetIdSchema,\n      value: ResponseSetSchema,\n    }),\n  ),\n  diagnostics: Schema.optional(\n    Schema.Record({\n      key: DiagnosticIdSchema,\n      value: ImportDiagnosticSchema,\n    }),\n  ),\n});\n\nexport const CatalogSnapshotV1Schema = Schema.Struct({\n  version: Schema.Literal(\"ir.v1.snapshot\"),\n  import: ImportMetadataSchema,\n  catalog: CatalogV1Schema,\n});\n\nexport type SourceKind = typeof SourceKindSchema.Type;\nexport type ScopeKind = typeof ScopeKindSchema.Type;\nexport type EffectKind = typeof EffectKindSchema.Type;\nexport type ParameterLocation = typeof ParameterLocationSchema.Type;\nexport type ResponseTrait = typeof ResponseTraitSchema.Type;\nexport type SecuritySchemeType = typeof SecuritySchemeTypeSchema.Type;\nexport type PaginationHintKind = typeof PaginationHintKindSchema.Type;\nexport type DiagnosticCode = typeof DiagnosticCodeSchema.Type;\nexport type DiagnosticLevel = typeof DiagnosticLevelSchema.Type;\n\nexport type DocumentationBlock = typeof DocumentationBlockSchema.Type;\nexport type ProvenanceRef = typeof ProvenanceRefSchema.Type;\nexport type NativeBlob = typeof NativeBlobSchema.Type;\nexport type EntityBase = typeof EntityBaseSchema.Type;\nexport type ImportMetadata = typeof ImportMetadataSchema.Type;\nexport type SourceDocument = typeof SourceDocumentSchema.Type;\nexport type FieldSpec = typeof FieldSpecSchema.Type;\nexport type DiscriminatorSpec = typeof DiscriminatorSpecSchema.Type;\nexport type ScalarShape = typeof ScalarShapeSchema.Type;\nexport type UnknownShape = typeof UnknownShapeSchema.Type;\nexport type ConstShape = typeof ConstShapeSchema.Type;\nexport type EnumShape = typeof EnumShapeSchema.Type;\nexport type ObjectShape = typeof ObjectShapeSchema.Type;\nexport type ArrayShape = typeof ArrayShapeSchema.Type;\nexport type TupleShape = typeof TupleShapeSchema.Type;\nexport type MapShape = typeof MapShapeSchema.Type;\nexport type AllOfShape = typeof AllOfShapeSchema.Type;\nexport type AnyOfShape = typeof AnyOfShapeSchema.Type;\nexport type OneOfShape = typeof OneOfShapeSchema.Type;\nexport type NullableShape = typeof NullableShapeSchema.Type;\nexport type RefShape = typeof RefShapeSchema.Type;\nexport type NotShape = typeof NotShapeSchema.Type;\nexport type ConditionalShape = typeof ConditionalShapeSchema.Type;\nexport type GraphQLInterfaceShape = typeof GraphQLInterfaceShapeSchema.Type;\nexport type GraphQLUnionShape = typeof GraphQLUnionShapeSchema.Type;\nexport type ShapeNode = typeof ShapeNodeSchema.Type;\nexport type AnchorTarget = typeof AnchorTargetSchema.Type;\nexport type SchemaResource = typeof SchemaResourceSchema.Type;\nexport type RequestPlacementHint = typeof RequestPlacementHintSchema.Type;\nexport type OAuthFlow = typeof OAuthFlowSchema.Type;\nexport type SecurityPlacement = typeof SecurityPlacementSchema.Type;\nexport type SecuritySchemeSymbol = typeof SecuritySchemeSymbolSchema.Type;\nexport type EncodingSpec = typeof EncodingSpecSchema.Type;\nexport type ContentSpec = typeof ContentSpecSchema.Type;\nexport type ShapeSymbol = typeof ShapeSymbolSchema.Type;\nexport type ParameterSymbol = typeof ParameterSymbolSchema.Type;\nexport type HeaderSymbol = typeof HeaderSymbolSchema.Type;\nexport type RequestBodySymbol = typeof RequestBodySymbolSchema.Type;\nexport type ResponseSymbol = typeof ResponseSymbolSchema.Type;\nexport type ExampleSymbol = typeof ExampleSymbolSchema.Type;\nexport type Symbol =\n  | ShapeSymbol\n  | ParameterSymbol\n  | RequestBodySymbol\n  | ResponseSymbol\n  | HeaderSymbol\n  | ExampleSymbol\n  | SecuritySchemeSymbol;\nexport type ServerSpec = typeof ServerSpecSchema.Type;\nexport type ScopeDefaults = typeof ScopeDefaultsSchema.Type;\nexport type Scope = typeof ScopeSchema.Type;\nexport type InteractionSpec = typeof InteractionSpecSchema.Type;\nexport type Capability = typeof CapabilitySchema.Type;\nexport type ExecutableDisplay = typeof ExecutableDisplaySchema.Type;\nexport type ExecutableProjection = typeof ExecutableProjectionSchema.Type;\nexport type Executable = typeof ExecutableSchema.Type;\nexport type PaginationHint = typeof PaginationHintSchema.Type;\nexport type StatusMatch = typeof StatusMatchSchema.Type;\nexport type ResponseVariant = typeof ResponseVariantSchema.Type;\nexport type ResponseSet = typeof ResponseSetSchema.Type;\nexport type ImportDiagnostic = typeof ImportDiagnosticSchema.Type;\nexport type CatalogV1 = typeof CatalogV1Schema.Type;\nexport type CatalogFragmentV1 = typeof CatalogFragmentV1Schema.Type;\nexport type CatalogSnapshotV1 = typeof CatalogSnapshotV1Schema.Type;\n"
  },
  {
    "path": "packages/kernel/ir/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/CHANGELOG.md",
    "content": "# @executor/runtime-deno-subprocess\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/package.json",
    "content": "{\n  \"name\": \"@executor/runtime-deno-subprocess\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/src/deno-subprocess-worker.mjs",
    "content": "// @ts-nocheck\n// This script runs inside the Deno subprocess.\n// It communicates with the host process via line-delimited JSON over stdin/stdout.\n// All IPC messages are prefixed with @@executor-ipc@@ to distinguish from user output.\n\nconst encoder = new TextEncoder();\nconst IPC_PREFIX = \"@@executor-ipc@@\";\n\nconst pendingToolCalls = new Map();\nlet started = false;\n\n/** @type {string[]} */\nconst logs = [];\n\nconst writeIpcMessage = (message) => {\n  const payload = `${IPC_PREFIX}${JSON.stringify(message)}\\n`;\n  Deno.stdout.writeSync(encoder.encode(payload));\n};\n\nconst toErrorMessage = (error) => {\n  if (error instanceof Error) {\n    return error.stack ?? error.message;\n  }\n\n  return String(error);\n};\n\nconst createToolCaller = (toolPath) => (args) =>\n  new Promise((resolve, reject) => {\n    const requestId = crypto.randomUUID();\n    pendingToolCalls.set(requestId, { resolve, reject });\n\n    writeIpcMessage({\n      type: \"tool_call\",\n      requestId,\n      toolPath,\n      args: args === undefined ? {} : args,\n    });\n  });\n\nconst createToolsProxy = (path = []) => {\n  const callable = () => undefined;\n\n  return new Proxy(callable, {\n    get(_target, prop) {\n      if (prop === \"then\") return undefined;\n      if (typeof prop !== \"string\") return undefined;\n      return createToolsProxy([...path, prop]);\n    },\n    apply(_target, _thisArg, args) {\n      const toolPath = path.join(\".\");\n      if (!toolPath) {\n        throw new Error(\"Tool path missing in invocation\");\n      }\n\n      return createToolCaller(toolPath)(args.length > 0 ? args[0] : undefined);\n    },\n  });\n};\n\nconst formatLogArg = (value) => {\n  if (typeof value === \"string\") {\n    return value;\n  }\n\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n};\n\nconst formatLogLine = (args) => args.map(formatLogArg).join(\" \");\n\nconst sandboxConsole = {\n  log: (...args) => {\n    logs.push(`[log] ${formatLogLine(args)}`);\n  },\n  warn: (...args) => {\n    logs.push(`[warn] ${formatLogLine(args)}`);\n  },\n  error: (...args) => {\n    logs.push(`[error] ${formatLogLine(args)}`);\n  },\n  info: (...args) => {\n    logs.push(`[info] ${formatLogLine(args)}`);\n  },\n  debug: (...args) => {\n    logs.push(`[debug] ${formatLogLine(args)}`);\n  },\n};\n\nconst runUserCode = async (code) => {\n  const tools = createToolsProxy();\n\n  const execute = new Function(\n    \"tools\",\n    \"console\",\n    `\"use strict\"; return (async () => {\\n${code}\\n})();`,\n  );\n\n  return await execute(tools, sandboxConsole);\n};\n\nconst handleStart = (message) => {\n  if (started) {\n    writeIpcMessage({\n      type: \"failed\",\n      error: \"start message already received\",\n      logs,\n    });\n    return;\n  }\n\n  started = true;\n\n  runUserCode(message.code)\n    .then((result) => {\n      writeIpcMessage({\n        type: \"completed\",\n        result,\n        logs,\n      });\n    })\n    .catch((error) => {\n      writeIpcMessage({\n        type: \"failed\",\n        error: toErrorMessage(error),\n        logs,\n      });\n    });\n};\n\nconst handleToolResult = (message) => {\n  const pending = pendingToolCalls.get(message.requestId);\n  if (!pending) {\n    return;\n  }\n\n  pendingToolCalls.delete(message.requestId);\n\n  if (message.ok) {\n    pending.resolve(message.value);\n    return;\n  }\n\n  pending.reject(new Error(message.error));\n};\n\nconst handleHostMessage = (message) => {\n  if (!message || typeof message !== \"object\") {\n    return;\n  }\n\n  if (message.type === \"start\") {\n    handleStart(message);\n    return;\n  }\n\n  if (message.type === \"tool_result\") {\n    handleToolResult(message);\n  }\n};\n\nconst decodeLines = async () => {\n  const reader = Deno.stdin.readable.getReader();\n  const decoder = new TextDecoder();\n  let buffer = \"\";\n\n  while (true) {\n    const { value, done } = await reader.read();\n    if (done) {\n      break;\n    }\n\n    buffer += decoder.decode(value, { stream: true });\n\n    while (true) {\n      const lineEnd = buffer.indexOf(\"\\n\");\n      if (lineEnd === -1) {\n        break;\n      }\n\n      const line = buffer.slice(0, lineEnd).trim();\n      buffer = buffer.slice(lineEnd + 1);\n\n      if (line.length === 0) {\n        continue;\n      }\n\n      try {\n        const message = JSON.parse(line);\n        handleHostMessage(message);\n      } catch (error) {\n        writeIpcMessage({\n          type: \"failed\",\n          error: `invalid host message: ${toErrorMessage(error)}`,\n          logs,\n        });\n      }\n    }\n  }\n};\n\nawait decodeLines();\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/src/deno-worker-process.ts",
    "content": "import { spawn } from \"node:child_process\";\n\nexport type DenoPermissions = {\n  /** Allow network access. Pass `true` for all, or an array of allowed hosts. */\n  allowNet?: boolean | string[];\n  /** Allow file read access. Pass `true` for all, or an array of allowed paths. */\n  allowRead?: boolean | string[];\n  /** Allow file write access. Pass `true` for all, or an array of allowed paths. */\n  allowWrite?: boolean | string[];\n  /** Allow environment variable access. Pass `true` for all, or an array of allowed vars. */\n  allowEnv?: boolean | string[];\n  /** Allow running subprocesses. Pass `true` for all, or an array of allowed commands. */\n  allowRun?: boolean | string[];\n  /** Allow FFI (foreign function interface). */\n  allowFfi?: boolean | string[];\n};\n\nexport type SpawnDenoWorkerProcessInput = {\n  executable: string;\n  scriptPath: string;\n  permissions?: DenoPermissions;\n};\n\nexport type DenoWorkerProcessCallbacks = {\n  onStdoutLine: (line: string) => void;\n  onStderr: (chunk: string) => void;\n  onError: (error: Error) => void;\n  onExit: (code: number | null, signal: NodeJS.Signals | null) => void;\n};\n\nexport type DenoWorkerProcess = {\n  stdin: NodeJS.WritableStream;\n  dispose: () => void;\n};\n\nconst normalizeError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst buildPermissionArgs = (permissions?: DenoPermissions): string[] => {\n  if (!permissions) {\n    // Default: deny everything dangerous for maximum sandboxing\n    return [\n      \"--deny-net\",\n      \"--deny-read\",\n      \"--deny-write\",\n      \"--deny-env\",\n      \"--deny-run\",\n      \"--deny-ffi\",\n    ];\n  }\n\n  const args: string[] = [];\n\n  const addPermission = (\n    flag: string,\n    value: boolean | string[] | undefined,\n  ) => {\n    if (value === true) {\n      args.push(`--allow-${flag}`);\n    } else if (Array.isArray(value) && value.length > 0) {\n      args.push(`--allow-${flag}=${value.join(\",\")}`);\n    } else {\n      args.push(`--deny-${flag}`);\n    }\n  };\n\n  addPermission(\"net\", permissions.allowNet);\n  addPermission(\"read\", permissions.allowRead);\n  addPermission(\"write\", permissions.allowWrite);\n  addPermission(\"env\", permissions.allowEnv);\n  addPermission(\"run\", permissions.allowRun);\n  addPermission(\"ffi\", permissions.allowFfi);\n\n  return args;\n};\n\nexport const spawnDenoWorkerProcess = (\n  input: SpawnDenoWorkerProcessInput,\n  callbacks: DenoWorkerProcessCallbacks,\n): DenoWorkerProcess => {\n  const permissionArgs = buildPermissionArgs(input.permissions);\n\n  const child = spawn(\n    input.executable,\n    [\n      \"run\",\n      \"--quiet\",\n      \"--no-prompt\",\n      \"--no-check\",\n      ...permissionArgs,\n      input.scriptPath,\n    ],\n    {\n      stdio: [\"pipe\", \"pipe\", \"pipe\"],\n    },\n  );\n\n  if (!child.stdin || !child.stdout || !child.stderr) {\n    throw new Error(\n      \"Failed to create piped stdio for Deno worker subprocess\",\n    );\n  }\n\n  child.stdout.setEncoding(\"utf8\");\n  child.stderr.setEncoding(\"utf8\");\n\n  let stdoutBuffer = \"\";\n\n  const onStdoutData = (chunk: string) => {\n    stdoutBuffer += chunk;\n\n    while (true) {\n      const newlineIndex = stdoutBuffer.indexOf(\"\\n\");\n      if (newlineIndex === -1) {\n        break;\n      }\n\n      const line = stdoutBuffer.slice(0, newlineIndex);\n      stdoutBuffer = stdoutBuffer.slice(newlineIndex + 1);\n      callbacks.onStdoutLine(line);\n    }\n  };\n\n  const onStderrData = (chunk: string) => {\n    callbacks.onStderr(chunk);\n  };\n\n  const onError = (cause: unknown) => {\n    callbacks.onError(normalizeError(cause));\n  };\n\n  const onExit = (\n    code: number | null,\n    signal: NodeJS.Signals | null,\n  ) => {\n    callbacks.onExit(code, signal);\n  };\n\n  child.stdout.on(\"data\", onStdoutData);\n  child.stderr.on(\"data\", onStderrData);\n  child.on(\"error\", onError);\n  child.on(\"exit\", onExit);\n\n  let disposed = false;\n\n  const dispose = () => {\n    if (disposed) {\n      return;\n    }\n\n    disposed = true;\n    child.stdout!.removeListener(\"data\", onStdoutData);\n    child.stderr!.removeListener(\"data\", onStderrData);\n    child.removeListener(\"error\", onError);\n    child.removeListener(\"exit\", onExit);\n\n    if (!child.killed) {\n      child.kill(\"SIGKILL\");\n    }\n  };\n\n  return {\n    stdin: child.stdin,\n    dispose,\n  };\n};\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/src/index.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  allowAllToolInteractions,\n  makeToolInvokerFromTools,\n  toExecutorTool,\n} from \"@executor/codemode-core\";\nimport { isDenoAvailable, makeDenoSubprocessExecutor } from \"./index\";\n\nconst numberPairInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    a: Schema.Number,\n    b: Schema.Number,\n  }),\n);\n\nconst messageInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    message: Schema.String,\n  }),\n);\n\nconst tools = {\n  \"math.add\": {\n    description: \"Add two numbers\",\n    inputSchema: numberPairInputSchema,\n    execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n  },\n  \"notifications.send\": toExecutorTool({\n    tool: {\n      description: \"Send a message\",\n      inputSchema: messageInputSchema,\n      execute: ({ message }: { message: string }) => ({\n        delivered: true,\n        message,\n      }),\n    },\n    metadata: {\n      interaction: \"required\",\n    },\n  }),\n};\n\nit(\"reports unavailable Deno executables\", () => {\n  expect(isDenoAvailable(\"__executor_missing_deno__\")).toBe(false);\n});\n\nit.effect(\"returns an actionable error when Deno is missing\", () =>\n  Effect.gen(function* () {\n    const executor = makeDenoSubprocessExecutor({\n      denoExecutable: \"__executor_missing_deno__\",\n    });\n    const toolInvoker = makeToolInvokerFromTools({ tools });\n\n    const output = yield* executor.execute(\n      \"return 1 + 2;\",\n      toolInvoker,\n    );\n\n    expect(output.result).toBeNull();\n    expect(output.error).toContain(\"Install Deno or set DENO_BIN\");\n  }),\n);\n\nconst skipUnlessDeno = isDenoAvailable()\n  ? describe\n  : describe.skip;\n\nskipUnlessDeno(\"runtime-deno-subprocess\", () => {\n  it.effect(\"executes simple code and returns result\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        \"return 1 + 2;\",\n        toolInvoker,\n      );\n\n      expect(output.result).toBe(3);\n      expect(output.error).toBeUndefined();\n    }),\n  );\n\n  it.effect(\"executes code with tool calls\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({\n        tools,\n        onToolInteraction: allowAllToolInteractions,\n      });\n\n      const output = yield* executor.execute(\n        [\n          \"const math = await tools.math.add({ a: 19, b: 23 });\",\n          \"await tools.notifications.send({ message: `sum is ${math.sum}` });\",\n          \"return math;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 42 });\n      expect(output.error).toBeUndefined();\n    }),\n  );\n\n  it.effect(\"captures console.log output in logs\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        [\n          'console.log(\"hello from sandbox\");',\n          'console.warn(\"a warning\");',\n          'console.error(\"an error\");',\n          \"return 42;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toBe(42);\n      expect(output.logs).toContain(\"[log] hello from sandbox\");\n      expect(output.logs).toContain(\"[warn] a warning\");\n      expect(output.logs).toContain(\"[error] an error\");\n    }),\n  );\n\n  it.effect(\"reports execution errors without crashing\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        'throw new Error(\"boom\");',\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"boom\");\n    }),\n  );\n\n  it.effect(\"handles tool call errors gracefully\", () =>\n    Effect.gen(function* () {\n      const failingTools = {\n        \"broken.thing\": {\n          description: \"Always fails\",\n          inputSchema: Schema.standardSchemaV1(Schema.Struct({})),\n          execute: () => {\n            throw new Error(\"tool is broken\");\n          },\n        },\n      };\n\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({\n        tools: failingTools,\n      });\n\n      const output = yield* executor.execute(\n        \"return await tools.broken.thing({});\",\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"tool is broken\");\n    }),\n  );\n\n  it.effect(\"respects timeout\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor({\n        timeoutMs: 500,\n      });\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        \"await new Promise(() => {}); return 1;\",\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"timed out\");\n    }),\n  );\n\n  it.effect(\"network access is denied by default\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        'await fetch(\"https://example.com\"); return 1;',\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toBeDefined();\n    }),\n  );\n\n  it.effect(\"network access can be allowed via permissions\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor({\n        permissions: {\n          allowNet: true,\n        },\n      });\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        [\n          'const res = await fetch(\"https://example.com\");',\n          \"return res.status;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toBe(200);\n      expect(output.error).toBeUndefined();\n    }),\n  );\n\n  it.effect(\"multiple sequential tool calls work correctly\", () =>\n    Effect.gen(function* () {\n      const executor = makeDenoSubprocessExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        [\n          \"const r1 = await tools.math.add({ a: 1, b: 2 });\",\n          \"const r2 = await tools.math.add({ a: r1.sum, b: 10 });\",\n          \"const r3 = await tools.math.add({ a: r2.sum, b: 100 });\",\n          \"return r3;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 113 });\n      expect(output.error).toBeUndefined();\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/src/index.ts",
    "content": "import { spawnSync } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type {\n  CodeExecutor,\n  ExecuteResult,\n  ToolInvoker,\n} from \"@executor/codemode-core\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  type DenoPermissions,\n  spawnDenoWorkerProcess,\n} from \"./deno-worker-process\";\n\nexport type { DenoPermissions };\n\nexport type DenoSubprocessExecutorOptions = {\n  /** Path to the deno binary. Falls back to DENO_BIN env, ~/.deno/bin/deno, then \"deno\". */\n  denoExecutable?: string;\n  /** Maximum execution time in milliseconds. Defaults to 5 minutes. */\n  timeoutMs?: number;\n  /** Deno permission flags. Defaults to denying everything (full sandbox). */\n  permissions?: DenoPermissions;\n};\n\nconst IPC_PREFIX = \"@@executor-ipc@@\";\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\n\n// --------------------------------------------------------------------------\n// IPC message types (host <-> worker)\n// --------------------------------------------------------------------------\n\ntype HostStartMessage = {\n  type: \"start\";\n  code: string;\n};\n\ntype HostToolResultMessage = {\n  type: \"tool_result\";\n  requestId: string;\n  ok: boolean;\n  value?: unknown;\n  error?: string;\n};\n\ntype HostToWorkerMessage = HostStartMessage | HostToolResultMessage;\n\ntype WorkerToolCallMessage = {\n  type: \"tool_call\";\n  requestId: string;\n  toolPath: string;\n  args: unknown;\n};\n\ntype WorkerCompletedMessage = {\n  type: \"completed\";\n  result: unknown;\n  logs?: string[];\n};\n\ntype WorkerFailedMessage = {\n  type: \"failed\";\n  error: string;\n  logs?: string[];\n};\n\ntype WorkerToHostMessage =\n  | WorkerToolCallMessage\n  | WorkerCompletedMessage\n  | WorkerFailedMessage;\n\n// --------------------------------------------------------------------------\n// Deno binary resolution\n// --------------------------------------------------------------------------\n\nconst defaultDenoExecutable = (): string => {\n  const configured = process.env.DENO_BIN?.trim();\n  if (configured) {\n    return configured;\n  }\n\n  const home = process.env.HOME?.trim();\n  if (home) {\n    const installedPath = `${home}/.deno/bin/deno`;\n    const installedResult = spawnSync(installedPath, [\"--version\"], {\n      stdio: \"ignore\",\n      timeout: 5000,\n    });\n    if (installedResult.error === undefined && installedResult.status === 0) {\n      return installedPath;\n    }\n  }\n\n  return \"deno\";\n};\n\nconst formatDenoSpawnError = (\n  cause: unknown,\n  executable: string,\n): string => {\n  const code = typeof cause === \"object\" && cause !== null && \"code\" in cause\n    ? String((cause as { code?: unknown }).code)\n    : null;\n\n  if (code === \"ENOENT\") {\n    return `Failed to spawn Deno subprocess: Deno executable \"${executable}\" was not found. Install Deno or set DENO_BIN.`;\n  }\n\n  return `Failed to spawn Deno subprocess: ${cause instanceof Error ? cause.message : String(cause)}`;\n};\n\n// --------------------------------------------------------------------------\n// Worker script resolution\n// --------------------------------------------------------------------------\n\nconst resolveWorkerScriptPath = (): string => {\n  const moduleUrl = String(import.meta.url);\n\n  if (moduleUrl.startsWith(\"/\")) {\n    return moduleUrl;\n  }\n\n  try {\n    const workerUrl = new URL(\n      \"./deno-subprocess-worker.mjs\",\n      moduleUrl,\n    );\n    if (workerUrl.protocol === \"file:\") {\n      return fileURLToPath(workerUrl);\n    }\n\n    return workerUrl.pathname.length > 0\n      ? workerUrl.pathname\n      : workerUrl.toString();\n  } catch {\n    return moduleUrl;\n  }\n};\n\nlet cachedWorkerScriptPath: string | undefined;\n\nconst workerScriptPath = (): string => {\n  if (!cachedWorkerScriptPath) {\n    cachedWorkerScriptPath = resolveWorkerScriptPath();\n  }\n\n  return cachedWorkerScriptPath;\n};\n\n// --------------------------------------------------------------------------\n// Helpers\n// --------------------------------------------------------------------------\n\nconst writeMessage = (\n  stdin: NodeJS.WritableStream,\n  message: HostToWorkerMessage,\n): void => {\n  stdin.write(`${JSON.stringify(message)}\\n`);\n};\n\nconst isWorkerMessage = (value: unknown): value is WorkerToHostMessage =>\n  typeof value === \"object\"\n  && value !== null\n  && \"type\" in value\n  && typeof (value as Record<string, unknown>).type === \"string\";\n\n// --------------------------------------------------------------------------\n// Core execution\n// --------------------------------------------------------------------------\n\nconst executeInDeno = (\n  code: string,\n  toolInvoker: ToolInvoker,\n  options: DenoSubprocessExecutorOptions,\n): Effect.Effect<ExecuteResult, never> =>\n  Effect.gen(function* () {\n    const denoExecutable =\n      options.denoExecutable ?? defaultDenoExecutable();\n    const timeoutMs = Math.max(100, options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n\n    const result = yield* Effect.async<ExecuteResult>((resume) => {\n      let settled = false;\n      let stderrBuffer = \"\";\n      let worker: ReturnType<typeof spawnDenoWorkerProcess> | null =\n        null;\n\n      const finish = (executeResult: ExecuteResult) => {\n        if (settled) {\n          return;\n        }\n\n        settled = true;\n        clearTimeout(timeout);\n        worker?.dispose();\n        resume(Effect.succeed(executeResult));\n      };\n\n      const fail = (\n        error: string,\n        logs?: string[],\n      ) => {\n        finish({\n          result: null,\n          error,\n          logs,\n        });\n      };\n\n      const timeout = setTimeout(() => {\n        fail(\n          `Deno subprocess execution timed out after ${timeoutMs}ms`,\n        );\n      }, timeoutMs);\n\n      const handleStdoutLine = (rawLine: string) => {\n        const line = rawLine.trim();\n        if (line.length === 0 || !line.startsWith(IPC_PREFIX)) {\n          return;\n        }\n\n        const payload = line.slice(IPC_PREFIX.length);\n        let message: WorkerToHostMessage;\n        try {\n          const parsed: unknown = JSON.parse(payload);\n          if (!isWorkerMessage(parsed)) {\n            fail(`Invalid worker message: ${payload}`);\n            return;\n          }\n          message = parsed;\n        } catch (cause) {\n          fail(\n            `Failed to decode worker message: ${payload}\\n${String(cause)}`,\n          );\n          return;\n        }\n\n        if (message.type === \"tool_call\") {\n          if (!worker) {\n            fail(\n              \"Deno subprocess unavailable while handling worker tool_call\",\n            );\n            return;\n          }\n\n          const currentWorker = worker;\n\n          Effect.runPromise(\n            Effect.match(\n              Effect.tryPromise({\n                try: () =>\n                  Effect.runPromise(\n                    toolInvoker.invoke({\n                      path: message.toolPath,\n                      args: message.args,\n                    }),\n                  ),\n                catch: (cause) =>\n                  cause instanceof Error\n                    ? cause\n                    : new Error(String(cause)),\n              }),\n              {\n                onSuccess: (value) => {\n                  writeMessage(currentWorker.stdin, {\n                    type: \"tool_result\",\n                    requestId: message.requestId,\n                    ok: true,\n                    value,\n                  });\n                },\n                onFailure: (error) => {\n                  writeMessage(currentWorker.stdin, {\n                    type: \"tool_result\",\n                    requestId: message.requestId,\n                    ok: false,\n                    error: error.message,\n                  });\n                },\n              },\n            ),\n          ).catch((cause) => {\n            fail(\n              `Failed handling worker tool_call: ${String(cause)}`,\n            );\n          });\n\n          return;\n        }\n\n        if (message.type === \"completed\") {\n          finish({\n            result: message.result,\n            logs: message.logs,\n          });\n          return;\n        }\n\n        // message.type === \"failed\"\n        fail(message.error, message.logs);\n      };\n\n      try {\n        worker = spawnDenoWorkerProcess(\n          {\n            executable: denoExecutable,\n            scriptPath: workerScriptPath(),\n            permissions: options.permissions,\n          },\n          {\n            onStdoutLine: handleStdoutLine,\n            onStderr: (chunk) => {\n              stderrBuffer += chunk;\n            },\n            onError: (cause) => {\n              fail(formatDenoSpawnError(cause, denoExecutable));\n            },\n            onExit: (exitCode, signal) => {\n              if (settled) {\n                return;\n              }\n\n              fail(\n                `Deno subprocess exited before returning terminal message (code=${String(exitCode)} signal=${String(signal)} stderr=${stderrBuffer})`,\n              );\n            },\n          },\n        );\n      } catch (cause) {\n        fail(formatDenoSpawnError(cause, denoExecutable));\n        return;\n      }\n\n      writeMessage(worker.stdin, {\n        type: \"start\",\n        code,\n      });\n    });\n\n    return result;\n  });\n\n// --------------------------------------------------------------------------\n// Public API\n// --------------------------------------------------------------------------\n\n/**\n * Check whether the configured (or default) Deno binary is available on the system.\n */\nexport const isDenoAvailable = (\n  executable: string = defaultDenoExecutable(),\n): boolean => {\n  const result = spawnSync(executable, [\"--version\"], {\n    stdio: \"ignore\",\n    timeout: 5000,\n  });\n\n  return result.error === undefined && result.status === 0;\n};\n\n/**\n * Create a `CodeExecutor` that runs code in a sandboxed Deno subprocess.\n *\n * The subprocess is spawned with `--deny-net --deny-read --deny-write --deny-env --deny-run --deny-ffi`\n * by default, providing strong process-level isolation. Tool calls are proxied back to the host\n * via stdin/stdout IPC and resolved through the provided `ToolInvoker`.\n */\nexport const makeDenoSubprocessExecutor = (\n  options: DenoSubprocessExecutorOptions = {},\n): CodeExecutor => ({\n  execute: (code: string, toolInvoker: ToolInvoker) =>\n    executeInDeno(code, toolInvoker, options),\n});\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/kernel/runtime-deno-subprocess/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    include: [\"src/**/*.test.ts\"],\n    testTimeout: 30_000,\n  },\n});\n"
  },
  {
    "path": "packages/kernel/runtime-quickjs/CHANGELOG.md",
    "content": "# @executor/runtime-quickjs\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n"
  },
  {
    "path": "packages/kernel/runtime-quickjs/package.json",
    "content": "{\n  \"name\": \"@executor/runtime-quickjs\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\",\n    \"quickjs-emscripten\": \"^0.31.0\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/kernel/runtime-quickjs/src/index.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  allowAllToolInteractions,\n  makeToolInvokerFromTools,\n  toExecutorTool,\n} from \"@executor/codemode-core\";\n\nimport { makeQuickJsExecutor } from \"./index\";\n\nconst numberPairInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    a: Schema.Number,\n    b: Schema.Number,\n  }),\n);\n\nconst messageInputSchema = Schema.standardSchemaV1(\n  Schema.Struct({\n    message: Schema.String,\n  }),\n);\n\nconst tools = {\n  \"math.add\": {\n    description: \"Add two numbers\",\n    inputSchema: numberPairInputSchema,\n    execute: ({ a, b }: { a: number; b: number }) => ({ sum: a + b }),\n  },\n  \"notifications.send\": toExecutorTool({\n    tool: {\n      description: \"Send a message\",\n      inputSchema: messageInputSchema,\n      execute: ({ message }: { message: string }) => ({\n        delivered: true,\n        message,\n      }),\n    },\n    metadata: {\n      interaction: \"required\",\n    },\n  }),\n};\n\ndescribe(\"runtime-quickjs\", () => {\n  it.effect(\"executes simple code and returns result\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        \"return 1 + 2;\",\n        toolInvoker,\n      );\n\n      expect(output.result).toBe(3);\n      expect(output.error).toBeUndefined();\n    }),\n  );\n\n  it.effect(\"executes code with tool calls\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({\n        tools,\n        onToolInteraction: allowAllToolInteractions,\n      });\n\n      const output = yield* executor.execute(\n        [\n          \"const math = await tools.math.add({ a: 19, b: 23 });\",\n          \"await tools.notifications.send({ message: `sum is ${math.sum}` });\",\n          \"return math;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 42 });\n      expect(output.error).toBeUndefined();\n    }),\n  );\n\n  it.effect(\"captures console output in logs\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        [\n          'console.log(\"hello from quickjs\");',\n          'console.warn(\"a warning\");',\n          'console.error(\"an error\");',\n          \"return 42;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toBe(42);\n      expect(output.logs).toContain(\"[log] hello from quickjs\");\n      expect(output.logs).toContain(\"[warn] a warning\");\n      expect(output.logs).toContain(\"[error] an error\");\n    }),\n  );\n\n  it.effect(\"reports execution errors without crashing\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        'throw new Error(\"boom\");',\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"boom\");\n    }),\n  );\n\n  it.effect(\"handles tool call errors gracefully\", () =>\n    Effect.gen(function* () {\n      const failingTools = {\n        \"broken.thing\": {\n          description: \"Always fails\",\n          inputSchema: Schema.standardSchemaV1(Schema.Struct({})),\n          execute: () => {\n            throw new Error(\"tool is broken\");\n          },\n        },\n      };\n\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({\n        tools: failingTools,\n      });\n\n      const output = yield* executor.execute(\n        \"return await tools.broken.thing({});\",\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"tool is broken\");\n    }),\n  );\n\n  it.effect(\"respects timeout\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor({\n        timeoutMs: 250,\n      });\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        \"while (true) {}\",\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"timed out\");\n    }),\n  );\n\n  it.effect(\"network access is denied by default\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        'await fetch(\"https://example.com\"); return 1;',\n        toolInvoker,\n      );\n\n      expect(output.result).toBeNull();\n      expect(output.error).toContain(\"fetch is disabled in QuickJS executor\");\n    }),\n  );\n\n  it.effect(\"multiple sequential tool calls work correctly\", () =>\n    Effect.gen(function* () {\n      const executor = makeQuickJsExecutor();\n      const toolInvoker = makeToolInvokerFromTools({ tools });\n\n      const output = yield* executor.execute(\n        [\n          \"const r1 = await tools.math.add({ a: 1, b: 2 });\",\n          \"const r2 = await tools.math.add({ a: r1.sum, b: 10 });\",\n          \"const r3 = await tools.math.add({ a: r2.sum, b: 100 });\",\n          \"return r3;\",\n        ].join(\"\\n\"),\n        toolInvoker,\n      );\n\n      expect(output.result).toEqual({ sum: 113 });\n      expect(output.error).toBeUndefined();\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/kernel/runtime-quickjs/src/index.ts",
    "content": "import type {\n  CodeExecutor,\n  ExecuteResult,\n  ToolInvoker,\n} from \"@executor/codemode-core\";\nimport * as Effect from \"effect/Effect\";\nimport {\n  getQuickJS,\n  shouldInterruptAfterDeadline,\n  type QuickJSContext,\n  type QuickJSDeferredPromise,\n  type QuickJSHandle,\n  type QuickJSRuntime,\n} from \"quickjs-emscripten\";\n\nexport type QuickJsExecutorOptions = {\n  timeoutMs?: number;\n  memoryLimitBytes?: number;\n  maxStackSizeBytes?: number;\n};\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\nconst EXECUTION_FILENAME = \"executor-quickjs-runtime.js\";\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst toErrorMessage = (cause: unknown): string => {\n  if (typeof cause === \"object\" && cause !== null) {\n    const stack = \"stack\" in cause && typeof cause.stack === \"string\"\n      ? cause.stack\n      : undefined;\n    const message = \"message\" in cause && typeof cause.message === \"string\"\n      ? cause.message\n      : undefined;\n\n    if (stack) {\n      return stack;\n    }\n\n    if (message) {\n      return message;\n    }\n  }\n\n  const error = toError(cause);\n  return error.stack ?? error.message;\n};\n\nconst serializeJson = (value: unknown, label: string): string | undefined => {\n  if (typeof value === \"undefined\") {\n    return undefined;\n  }\n\n  try {\n    return JSON.stringify(value);\n  } catch (cause) {\n    throw new Error(\n      `${label} is not JSON serializable: ${toError(cause).message}`,\n    );\n  }\n};\n\nconst looksLikeInterruptedError = (message: string): boolean =>\n  /\\binterrupted\\b/i.test(message);\n\nconst timeoutMessage = (timeoutMs: number): string =>\n  `QuickJS execution timed out after ${timeoutMs}ms`;\n\nconst normalizeExecutionError = (\n  cause: unknown,\n  deadlineMs: number,\n  timeoutMs: number,\n): string => {\n  const message = toErrorMessage(cause);\n  return Date.now() >= deadlineMs && looksLikeInterruptedError(message)\n    ? timeoutMessage(timeoutMs)\n    : message;\n};\n\nconst buildExecutionSource = (code: string): string => {\n  const trimmed = code.trim();\n  const looksLikeArrowFunction =\n    (trimmed.startsWith(\"async\") || trimmed.startsWith(\"(\"))\n    && trimmed.includes(\"=>\");\n\n  const body = looksLikeArrowFunction\n    ? [\n        `const __fn = (${trimmed});`,\n        \"if (typeof __fn !== 'function') throw new Error('Code must evaluate to a function');\",\n        \"return await __fn();\",\n      ].join(\"\\n\")\n    : code;\n\n  return [\n    '\"use strict\";',\n    \"const __formatLogArg = (value) => {\",\n    \"  if (typeof value === 'string') return value;\",\n    \"  try {\",\n    \"    return JSON.stringify(value);\",\n    \"  } catch {\",\n    \"    return String(value);\",\n    \"  }\",\n    \"};\",\n    \"const __formatLogLine = (args) => args.map(__formatLogArg).join(' ');\",\n    \"const __makeToolsProxy = (path = []) => new Proxy(() => undefined, {\",\n    \"  get(_target, prop) {\",\n    \"    if (prop === 'then' || typeof prop === 'symbol') {\",\n    \"      return undefined;\",\n    \"    }\",\n    \"    return __makeToolsProxy([...path, String(prop)]);\",\n    \"  },\",\n    \"  apply(_target, _thisArg, args) {\",\n    \"    const toolPath = path.join('.');\",\n    \"    if (!toolPath) {\",\n    \"      throw new Error('Tool path missing in invocation');\",\n    \"    }\",\n    \"    return Promise.resolve(__executor_invokeTool(toolPath, args[0])).then((raw) => raw === undefined ? undefined : JSON.parse(raw));\",\n    \"  },\",\n    \"});\",\n    \"const tools = __makeToolsProxy();\",\n    \"const console = {\",\n    \"  log: (...args) => __executor_log('log', __formatLogLine(args)),\",\n    \"  warn: (...args) => __executor_log('warn', __formatLogLine(args)),\",\n    \"  error: (...args) => __executor_log('error', __formatLogLine(args)),\",\n    \"  info: (...args) => __executor_log('info', __formatLogLine(args)),\",\n    \"  debug: (...args) => __executor_log('debug', __formatLogLine(args)),\",\n    \"};\",\n    \"const fetch = (..._args) => {\",\n    \"  throw new Error('fetch is disabled in QuickJS executor');\",\n    \"};\",\n    \"(async () => {\",\n    body,\n    \"})()\",\n  ].join(\"\\n\");\n};\n\nconst readPropDump = (\n  context: QuickJSContext,\n  handle: QuickJSHandle,\n  key: string,\n): unknown => {\n  const prop = context.getProp(handle, key);\n  try {\n    return context.dump(prop);\n  } finally {\n    prop.dispose();\n  }\n};\n\nconst readResultState = (\n  context: QuickJSContext,\n  handle: QuickJSHandle,\n): {\n  settled: boolean;\n  value: unknown;\n  error: unknown;\n} => ({\n  settled: readPropDump(context, handle, \"settled\") === true,\n  value: readPropDump(context, handle, \"v\"),\n  error: readPropDump(context, handle, \"e\"),\n});\n\nconst createLogBridge = (\n  context: QuickJSContext,\n  logs: string[],\n): QuickJSHandle =>\n  context.newFunction(\"__executor_log\", (levelHandle, lineHandle) => {\n    const level = context.getString(levelHandle);\n    const line = context.getString(lineHandle);\n    logs.push(`[${level}] ${line}`);\n    return context.undefined;\n  });\n\nconst createToolBridge = (\n  context: QuickJSContext,\n  toolInvoker: ToolInvoker,\n  pendingDeferreds: Set<QuickJSDeferredPromise>,\n): QuickJSHandle =>\n  context.newFunction(\"__executor_invokeTool\", (pathHandle, argsHandle) => {\n    const path = context.getString(pathHandle);\n    const args =\n      argsHandle === undefined || context.typeof(argsHandle) === \"undefined\"\n        ? undefined\n        : context.dump(argsHandle);\n    const deferred = context.newPromise();\n    pendingDeferreds.add(deferred);\n    deferred.settled.finally(() => {\n      pendingDeferreds.delete(deferred);\n    });\n\n    void Effect.runPromise(toolInvoker.invoke({ path, args })).then(\n      (value) => {\n        if (!deferred.alive) {\n          return;\n        }\n\n        const serialized = serializeJson(value, `Tool result for ${path}`);\n        if (typeof serialized === \"undefined\") {\n          deferred.resolve();\n          return;\n        }\n\n        const valueHandle = context.newString(serialized);\n        deferred.resolve(valueHandle);\n        valueHandle.dispose();\n      },\n      (cause) => {\n        if (!deferred.alive) {\n          return;\n        }\n\n        const errorHandle = context.newError(toErrorMessage(cause));\n        deferred.reject(errorHandle);\n        errorHandle.dispose();\n      },\n    );\n\n    return deferred.handle;\n  });\n\nconst drainJobs = (\n  context: QuickJSContext,\n  runtime: QuickJSRuntime,\n  deadlineMs: number,\n  timeoutMs: number,\n): void => {\n  while (runtime.hasPendingJob()) {\n    if (Date.now() >= deadlineMs) {\n      throw new Error(timeoutMessage(timeoutMs));\n    }\n\n    const pending = runtime.executePendingJobs();\n    if (pending.error) {\n      const error = context.dump(pending.error);\n      pending.error.dispose();\n      throw toError(error);\n    }\n  }\n};\n\nconst waitForDeferreds = async (\n  pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,\n  deadlineMs: number,\n  timeoutMs: number,\n): Promise<void> => {\n  const remainingMs = deadlineMs - Date.now();\n  if (remainingMs <= 0) {\n    throw new Error(timeoutMessage(timeoutMs));\n  }\n\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  try {\n    await Promise.race([\n      Promise.race([...pendingDeferreds].map((deferred) => deferred.settled)),\n      new Promise<never>((_, reject) => {\n        timer = setTimeout(() => reject(new Error(timeoutMessage(timeoutMs))), remainingMs);\n      }),\n    ]);\n  } finally {\n    if (timer !== undefined) {\n      clearTimeout(timer);\n    }\n  }\n};\n\nconst drainAsync = async (\n  context: QuickJSContext,\n  runtime: QuickJSRuntime,\n  pendingDeferreds: ReadonlySet<QuickJSDeferredPromise>,\n  deadlineMs: number,\n  timeoutMs: number,\n): Promise<void> => {\n  drainJobs(context, runtime, deadlineMs, timeoutMs);\n\n  while (pendingDeferreds.size > 0) {\n    await waitForDeferreds(pendingDeferreds, deadlineMs, timeoutMs);\n    drainJobs(context, runtime, deadlineMs, timeoutMs);\n  }\n\n  drainJobs(context, runtime, deadlineMs, timeoutMs);\n};\n\nconst evaluateInQuickJs = async (\n  options: QuickJsExecutorOptions,\n  code: string,\n  toolInvoker: ToolInvoker,\n): Promise<ExecuteResult> => {\n  const timeoutMs = Math.max(100, options.timeoutMs ?? DEFAULT_TIMEOUT_MS);\n  const deadlineMs = Date.now() + timeoutMs;\n  const logs: string[] = [];\n  const pendingDeferreds = new Set<QuickJSDeferredPromise>();\n  const QuickJS = await getQuickJS();\n  const runtime = QuickJS.newRuntime();\n\n  try {\n    if (options.memoryLimitBytes !== undefined) {\n      runtime.setMemoryLimit(options.memoryLimitBytes);\n    }\n\n    if (options.maxStackSizeBytes !== undefined) {\n      runtime.setMaxStackSize(options.maxStackSizeBytes);\n    }\n\n    runtime.setInterruptHandler(shouldInterruptAfterDeadline(deadlineMs));\n\n    const context = runtime.newContext();\n    try {\n      const logBridge = createLogBridge(context, logs);\n      context.setProp(context.global, \"__executor_log\", logBridge);\n      logBridge.dispose();\n\n      const toolBridge = createToolBridge(context, toolInvoker, pendingDeferreds);\n      context.setProp(context.global, \"__executor_invokeTool\", toolBridge);\n      toolBridge.dispose();\n\n      const evaluated = context.evalCode(\n        buildExecutionSource(code),\n        EXECUTION_FILENAME,\n      );\n      if (evaluated.error) {\n        const error = context.dump(evaluated.error);\n        evaluated.error.dispose();\n        return {\n          result: null,\n          error: normalizeExecutionError(error, deadlineMs, timeoutMs),\n          logs,\n        } satisfies ExecuteResult;\n      }\n\n      context.setProp(context.global, \"__executor_result\", evaluated.value);\n      evaluated.value.dispose();\n\n      const stateResult = context.evalCode(\n        \"(function(p){ var s = { v: void 0, e: void 0, settled: false }; var formatError = function(e){ if (e && typeof e === 'object') { var message = typeof e.message === 'string' ? e.message : ''; var stack = typeof e.stack === 'string' ? e.stack : ''; if (message && stack) { return stack.indexOf(message) === -1 ? message + '\\\\n' + stack : stack; } if (message) return message; if (stack) return stack; } return String(e); }; p.then(function(v){ s.v = v; s.settled = true; }, function(e){ s.e = formatError(e); s.settled = true; }); return s; })(__executor_result)\",\n      );\n      if (stateResult.error) {\n        const error = context.dump(stateResult.error);\n        stateResult.error.dispose();\n        return {\n          result: null,\n          error: normalizeExecutionError(error, deadlineMs, timeoutMs),\n          logs,\n        } satisfies ExecuteResult;\n      }\n\n      const stateHandle = stateResult.value;\n      try {\n        await drainAsync(context, runtime, pendingDeferreds, deadlineMs, timeoutMs);\n        const state = readResultState(context, stateHandle);\n        if (!state.settled) {\n          return {\n            result: null,\n            error: timeoutMessage(timeoutMs),\n            logs,\n          } satisfies ExecuteResult;\n        }\n\n        if (typeof state.error !== \"undefined\") {\n          return {\n            result: null,\n            error: normalizeExecutionError(state.error, deadlineMs, timeoutMs),\n            logs,\n          } satisfies ExecuteResult;\n        }\n\n        return {\n          result: state.value,\n          logs,\n        } satisfies ExecuteResult;\n      } finally {\n        stateHandle.dispose();\n      }\n    } finally {\n      for (const deferred of pendingDeferreds) {\n        if (deferred.alive) {\n          deferred.dispose();\n        }\n      }\n\n      pendingDeferreds.clear();\n      context.dispose();\n    }\n  } catch (cause) {\n    return {\n      result: null,\n      error: normalizeExecutionError(cause, deadlineMs, timeoutMs),\n      logs,\n    } satisfies ExecuteResult;\n  } finally {\n    runtime.dispose();\n  }\n};\n\nconst runInQuickJs = (\n  options: QuickJsExecutorOptions,\n  code: string,\n  toolInvoker: ToolInvoker,\n): Effect.Effect<ExecuteResult, Error> =>\n  Effect.tryPromise({\n    try: () => evaluateInQuickJs(options, code, toolInvoker),\n    catch: toError,\n  });\n\nexport const makeQuickJsExecutor = (\n  options: QuickJsExecutorOptions = {},\n): CodeExecutor => ({\n  execute: (code: string, toolInvoker: ToolInvoker) =>\n    runInQuickJs(options, code, toolInvoker),\n});\n"
  },
  {
    "path": "packages/kernel/runtime-quickjs/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/kernel/runtime-ses/CHANGELOG.md",
    "content": "# @executor/runtime-ses\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n"
  },
  {
    "path": "packages/kernel/runtime-ses/package.json",
    "content": "{\n  \"name\": \"@executor/runtime-ses\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\",\n    \"ses\": \"^1.15.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/kernel/runtime-ses/src/index.ts",
    "content": "import { fork, type ChildProcess } from \"node:child_process\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type {\n  CodeExecutor,\n  ExecuteResult,\n  ToolInvoker,\n} from \"@executor/codemode-core\";\nimport * as Effect from \"effect/Effect\";\n\nexport type SesExecutorOptions = {\n  timeoutMs?: number;\n  allowFetch?: boolean;\n};\n\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\nconst DEFAULT_EVALUATION_ID = \"evaluation\";\nconst WORKER_PATH = fileURLToPath(new URL(\"./sandbox-worker.mjs\", import.meta.url));\n\ntype ReadyMessage = {\n  type: \"ready\";\n};\n\ntype ToolCallMessage = {\n  type: \"tool-call\";\n  callId: string;\n  path: string;\n  args: unknown;\n};\n\ntype ResultMessage = {\n  type: \"result\";\n  id: string;\n  value?: unknown;\n  error?: string;\n  logs?: string[];\n};\n\ntype WorkerMessage = ReadyMessage | ToolCallMessage | ResultMessage;\n\ntype EvaluateMessage = {\n  type: \"evaluate\";\n  id: string;\n  code: string;\n  allowFetch: boolean;\n};\n\ntype ToolResponseMessage = {\n  type: \"tool-response\";\n  callId: string;\n  value?: unknown;\n  error?: string;\n};\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst createSandboxWorker = (): ChildProcess => fork(WORKER_PATH, [], { silent: true });\n\nconst describeWorkerExit = (\n  code: number | null,\n  signal: NodeJS.Signals | null,\n  stderr: string,\n): Error => {\n  const stderrSuffix = stderr.trim().length > 0 ? `\\n${stderr.trim()}` : \"\";\n\n  if (signal) {\n    return new Error(`SES worker exited from signal ${signal}${stderrSuffix}`);\n  }\n\n  if (typeof code === \"number\") {\n    return new Error(`SES worker exited with code ${code}${stderrSuffix}`);\n  }\n\n  return new Error(`SES worker exited before returning a result${stderrSuffix}`);\n};\n\nconst sendMessage = (child: ChildProcess, message: EvaluateMessage | ToolResponseMessage): void => {\n  if (typeof child.send !== \"function\") {\n    throw new Error(\"SES worker IPC channel is unavailable\");\n  }\n\n  child.send(message);\n};\n\nconst evaluateInSandbox = async (\n  options: SesExecutorOptions,\n  code: string,\n  toolInvoker: ToolInvoker,\n): Promise<ExecuteResult> => {\n  const child = createSandboxWorker();\n  const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n  const stderrChunks: string[] = [];\n\n  if (child.stderr) {\n    child.stderr.on(\"data\", (chunk) => {\n      stderrChunks.push(chunk.toString());\n    });\n  }\n\n  return new Promise<ExecuteResult>((resolve, reject) => {\n    let settled = false;\n    let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n    const cleanup = () => {\n      if (timeoutHandle) {\n        clearTimeout(timeoutHandle);\n        timeoutHandle = undefined;\n      }\n\n      child.off(\"error\", onError);\n      child.off(\"exit\", onExit);\n      child.off(\"message\", onMessage);\n\n      if (!child.killed) {\n        child.kill();\n      }\n    };\n\n    const settle = (effect: () => void) => {\n      if (settled) {\n        return;\n      }\n\n      settled = true;\n      cleanup();\n      effect();\n    };\n\n    const resetTimeout = () => {\n      if (timeoutHandle) {\n        clearTimeout(timeoutHandle);\n      }\n\n      timeoutHandle = setTimeout(() => {\n        settle(() => {\n          reject(new Error(`Execution timed out after ${timeoutMs}ms`));\n        });\n      }, timeoutMs);\n    };\n\n    const onError = (error: Error) => {\n      settle(() => {\n        reject(error);\n      });\n    };\n\n    const onExit = (code: number | null, signal: NodeJS.Signals | null) => {\n      settle(() => {\n        reject(describeWorkerExit(code, signal, stderrChunks.join(\"\")));\n      });\n    };\n\n    const onMessage = (message: WorkerMessage) => {\n      if (message.type === \"ready\") {\n        resetTimeout();\n        sendMessage(child, {\n          type: \"evaluate\",\n          id: DEFAULT_EVALUATION_ID,\n          code,\n          allowFetch: options.allowFetch === true,\n        });\n        return;\n      }\n\n      if (message.type === \"tool-call\") {\n        resetTimeout();\n\n        void Effect.runPromise(toolInvoker.invoke({ path: message.path, args: message.args }))\n          .then((value) => {\n            if (settled) {\n              return;\n            }\n\n            resetTimeout();\n            sendMessage(child, {\n              type: \"tool-response\",\n              callId: message.callId,\n              value,\n            });\n          })\n          .catch((cause) => {\n            if (settled) {\n              return;\n            }\n\n            resetTimeout();\n            const error = toError(cause);\n            sendMessage(child, {\n              type: \"tool-response\",\n              callId: message.callId,\n              error: error.stack ?? error.message,\n            });\n          });\n        return;\n      }\n\n      if (message.type === \"result\") {\n        settle(() => {\n          if (message.error) {\n            resolve({\n              result: null,\n              error: message.error,\n              logs: message.logs ?? [],\n            });\n            return;\n          }\n\n          resolve({\n            result: message.value,\n            logs: message.logs ?? [],\n          });\n        });\n      }\n    };\n\n    child.on(\"error\", onError);\n    child.on(\"exit\", onExit);\n    child.on(\"message\", onMessage);\n\n    resetTimeout();\n  });\n};\n\nconst runInSes = (\n  options: SesExecutorOptions,\n  code: string,\n  toolInvoker: ToolInvoker,\n): Effect.Effect<ExecuteResult, Error> =>\n  Effect.tryPromise({\n    try: () => evaluateInSandbox(options, code, toolInvoker),\n    catch: toError,\n  });\n\nexport const makeSesExecutor = (\n  options: SesExecutorOptions = {},\n): CodeExecutor => ({\n  execute: (code: string, toolInvoker: ToolInvoker) => runInSes(options, code, toolInvoker),\n});\n"
  },
  {
    "path": "packages/kernel/runtime-ses/src/sandbox-worker.mjs",
    "content": "import \"ses\";\n\nlockdown({\n  errorTaming: \"unsafe\",\n  overrideTaming: \"moderate\",\n  consoleTaming: \"unsafe\",\n  stackFiltering: \"verbose\",\n});\n\nconst pendingToolCalls = new Map();\nlet nextCallId = 1;\n\nconst formatLogArg = (value) => {\n  if (typeof value === \"string\") {\n    return value;\n  }\n\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n};\n\nconst formatLogLine = (args) => args.map(formatLogArg).join(\" \");\n\nconst toSerializableValue = (value) => {\n  if (typeof value === \"undefined\") {\n    return undefined;\n  }\n\n  return JSON.parse(JSON.stringify(value));\n};\n\nconst buildExecutionSource = (code) => {\n  const trimmed = code.trim();\n  const looksLikeArrowFunction =\n    (trimmed.startsWith(\"async\") || trimmed.startsWith(\"(\")) && trimmed.includes(\"=>\");\n\n  if (looksLikeArrowFunction) {\n    return [\n      '\"use strict\";',\n      \"(async () => {\",\n      `const __fn = (${trimmed});`,\n      \"if (typeof __fn !== 'function') throw new Error('Code must evaluate to a function');\",\n      \"return await __fn();\",\n      \"})()\",\n    ].join(\"\\n\");\n  }\n\n  return [\n    '\"use strict\";',\n    \"(async () => {\",\n    code,\n    \"})()\",\n  ].join(\"\\n\");\n};\n\nconst addGlobal = (globals, key, value) => {\n  if (typeof value !== \"undefined\") {\n    globals[key] = value;\n  }\n};\n\nconst makeToolsProxy = (path = []) =>\n  new Proxy(() => undefined, {\n    get(_target, prop) {\n      if (prop === \"then\" || typeof prop === \"symbol\") {\n        return undefined;\n      }\n\n      return makeToolsProxy([...path, prop]);\n    },\n    apply(_target, _thisArg, args) {\n      const toolPath = path.join(\".\");\n      if (!toolPath) {\n        throw new Error(\"Tool path missing in invocation\");\n      }\n\n      const callId = `call_${nextCallId++}`;\n      return new Promise((resolve, reject) => {\n        pendingToolCalls.set(callId, { resolve, reject });\n        process.send?.({\n          type: \"tool-call\",\n          callId,\n          path: toolPath,\n          args: args[0],\n        });\n      });\n    },\n  });\n\nconst blockedFetch = async (..._args) => {\n  throw new Error(\"fetch is disabled in SES executor\");\n};\n\nconst createGlobals = ({ logs, allowFetch }) => {\n  const globals = {\n    tools: makeToolsProxy(),\n    console: {\n      log: (...args) => {\n        logs.push(`[log] ${formatLogLine(args)}`);\n      },\n      warn: (...args) => {\n        logs.push(`[warn] ${formatLogLine(args)}`);\n      },\n      error: (...args) => {\n        logs.push(`[error] ${formatLogLine(args)}`);\n      },\n    },\n    fetch: allowFetch ? fetch : blockedFetch,\n  };\n\n  addGlobal(globals, \"setTimeout\", globalThis.setTimeout);\n  addGlobal(globals, \"clearTimeout\", globalThis.clearTimeout);\n  addGlobal(globals, \"setInterval\", globalThis.setInterval);\n  addGlobal(globals, \"clearInterval\", globalThis.clearInterval);\n  addGlobal(globals, \"URL\", globalThis.URL);\n  addGlobal(globals, \"URLSearchParams\", globalThis.URLSearchParams);\n  addGlobal(globals, \"AbortController\", globalThis.AbortController);\n  addGlobal(globals, \"AbortSignal\", globalThis.AbortSignal);\n  addGlobal(globals, \"Headers\", globalThis.Headers);\n  addGlobal(globals, \"Request\", globalThis.Request);\n  addGlobal(globals, \"Response\", globalThis.Response);\n  addGlobal(globals, \"TextEncoder\", globalThis.TextEncoder);\n  addGlobal(globals, \"TextDecoder\", globalThis.TextDecoder);\n  addGlobal(globals, \"structuredClone\", globalThis.structuredClone);\n  addGlobal(globals, \"crypto\", globalThis.crypto);\n\n  return globals;\n};\n\nprocess.on(\"message\", async (message) => {\n  if (!message || typeof message !== \"object\") {\n    return;\n  }\n\n  if (message.type === \"tool-response\") {\n    const pending = pendingToolCalls.get(message.callId);\n    if (!pending) {\n      return;\n    }\n\n    pendingToolCalls.delete(message.callId);\n\n    if (message.error) {\n      pending.reject(new Error(message.error));\n      return;\n    }\n\n    pending.resolve(message.value);\n    return;\n  }\n\n  if (message.type === \"evaluate\") {\n    const logs = [];\n\n    try {\n      const compartment = new Compartment({\n        globals: createGlobals({ logs, allowFetch: message.allowFetch === true }),\n        __options__: true,\n      });\n      const result = await compartment.evaluate(buildExecutionSource(message.code));\n\n      process.send?.({\n        type: \"result\",\n        id: message.id,\n        value: toSerializableValue(result),\n        logs,\n      });\n    } catch (error) {\n      process.send?.({\n        type: \"result\",\n        id: message.id,\n        error: error instanceof Error ? error.stack ?? error.message : String(error),\n        logs,\n      });\n    }\n  }\n});\n\nprocess.send?.({ type: \"ready\" });\n"
  },
  {
    "path": "packages/kernel/runtime-ses/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/platform/control-plane/CHANGELOG.md",
    "content": "# @executor/control-plane\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n- @executor/source-google-discovery@null\n- @executor/source-mcp@null\n- @executor/source-openapi@null\n- @executor/runtime-deno-subprocess@null\n- @executor/runtime-quickjs@null\n- @executor/runtime-ses@null\n"
  },
  {
    "path": "packages/platform/control-plane/package.json",
    "content": "{\n  \"name\": \"@executor/control-plane\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./client\": \"./src/client.ts\",\n    \"./schema\": \"./src/schema/index.ts\"\n  },\n  \"imports\": {\n    \"#schema\": \"./src/schema/index.ts\",\n    \"#domain\": \"./src/domain/index.ts\",\n    \"#api\": \"./src/api/index.ts\",\n    \"#runtime\": \"./src/runtime/index.ts\"\n  },\n  \"scripts\": {\n    \"fixture:release:capture\": \"bun run ./src/runtime/local/capture-release-workspace-fixture.ts\",\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@effect/platform\": \"catalog:\",\n    \"@executor/source-core\": \"workspace:*\",\n    \"@executor/source-builtins\": \"workspace:*\",\n    \"@executor/auth-mcp-oauth\": \"workspace:*\",\n    \"@executor/auth-oauth2\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"@executor/source-google-discovery\": \"workspace:*\",\n    \"@executor/source-graphql\": \"workspace:*\",\n    \"@executor/ir\": \"workspace:*\",\n    \"@executor/source-mcp\": \"workspace:*\",\n    \"@executor/source-openapi\": \"workspace:*\",\n    \"@executor/runtime-deno-subprocess\": \"workspace:*\",\n    \"@executor/runtime-quickjs\": \"workspace:*\",\n    \"@executor/runtime-ses\": \"workspace:*\",\n    \"effect\": \"catalog:\",\n    \"graphql\": \"^16.12.0\",\n    \"jsonc-parser\": \"3.3.1\",\n    \"postgres\": \"^3.4.8\",\n    \"prettier\": \"^3.8.1\",\n    \"typescript\": \"^5.9.3\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"@effect/platform-node\": \"catalog:\",\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\",\n    \"zod\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/api.ts",
    "content": "import { HttpApi, OpenApi } from \"@effect/platform\";\n\nimport { ExecutionsApi } from \"./executions/api\";\nimport { LocalApi } from \"./local/api\";\nimport { OAuthApi } from \"./oauth/api\";\nimport { PoliciesApi } from \"./policies/api\";\nimport { SourcesApi } from \"./sources/api\";\n\nexport class ControlPlaneApi extends HttpApi.make(\"controlPlane\")\n  .add(LocalApi)\n  .add(OAuthApi)\n  .add(SourcesApi)\n  .add(PoliciesApi)\n  .add(ExecutionsApi)\n  .annotateContext(\n    OpenApi.annotations({\n      title: \"Executor Control Plane API\",\n      description: \"Local-first control plane for workspace sources, policies, auth, and execution\",\n    }),\n  ) {}\n\nexport const controlPlaneOpenApiSpec = OpenApi.fromApi(ControlPlaneApi);\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/errors.ts",
    "content": "import { HttpApiSchema } from \"@effect/platform\";\nimport * as Schema from \"effect/Schema\";\n\nexport class ControlPlaneBadRequestError extends Schema.TaggedError<ControlPlaneBadRequestError>()(\n  \"ControlPlaneBadRequestError\",\n  {\n    operation: Schema.String,\n    message: Schema.String,\n    details: Schema.String,\n  },\n  HttpApiSchema.annotations({ status: 400 }),\n) {}\n\nexport class ControlPlaneUnauthorizedError extends Schema.TaggedError<ControlPlaneUnauthorizedError>()(\n  \"ControlPlaneUnauthorizedError\",\n  {\n    operation: Schema.String,\n    message: Schema.String,\n    details: Schema.String,\n  },\n  HttpApiSchema.annotations({ status: 401 }),\n) {}\n\nexport class ControlPlaneForbiddenError extends Schema.TaggedError<ControlPlaneForbiddenError>()(\n  \"ControlPlaneForbiddenError\",\n  {\n    operation: Schema.String,\n    message: Schema.String,\n    details: Schema.String,\n  },\n  HttpApiSchema.annotations({ status: 403 }),\n) {}\n\nexport class ControlPlaneNotFoundError extends Schema.TaggedError<ControlPlaneNotFoundError>()(\n  \"ControlPlaneNotFoundError\",\n  {\n    operation: Schema.String,\n    message: Schema.String,\n    details: Schema.String,\n  },\n  HttpApiSchema.annotations({ status: 404 }),\n) {}\n\nexport class ControlPlaneStorageError extends Schema.TaggedError<ControlPlaneStorageError>()(\n  \"ControlPlaneStorageError\",\n  {\n    operation: Schema.String,\n    message: Schema.String,\n    details: Schema.String,\n  },\n  HttpApiSchema.annotations({ status: 500 }),\n) {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/executions/api.ts",
    "content": "import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from \"@effect/platform\";\nimport {\n  ExecutionIdSchema,\n  ExecutionEnvelopeSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneForbiddenError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n  ControlPlaneUnauthorizedError,\n} from \"../errors\";\nimport { TrimmedNonEmptyStringSchema } from \"../string-schemas\";\n\nexport const CreateExecutionPayloadSchema = Schema.Struct({\n  code: TrimmedNonEmptyStringSchema,\n  interactionMode: Schema.optional(Schema.Literal(\"live\", \"live_form\", \"detach\")),\n});\n\nexport type CreateExecutionPayload = typeof CreateExecutionPayloadSchema.Type;\n\nexport const ResumeExecutionPayloadSchema = Schema.Struct({\n  responseJson: Schema.optional(Schema.String),\n  interactionMode: Schema.optional(Schema.Literal(\"live\", \"live_form\", \"detach\")),\n});\n\nexport type ResumeExecutionPayload = typeof ResumeExecutionPayloadSchema.Type;\n\nconst workspaceIdParam = HttpApiSchema.param(\"workspaceId\", WorkspaceIdSchema);\nconst executionIdParam = HttpApiSchema.param(\"executionId\", ExecutionIdSchema);\n\nexport class ExecutionsApi extends HttpApiGroup.make(\"executions\")\n  .add(\n    HttpApiEndpoint.post(\"create\")`/workspaces/${workspaceIdParam}/executions`\n      .setPayload(CreateExecutionPayloadSchema)\n      .addSuccess(ExecutionEnvelopeSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"get\")`/workspaces/${workspaceIdParam}/executions/${executionIdParam}`\n      .addSuccess(ExecutionEnvelopeSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"resume\")`/workspaces/${workspaceIdParam}/executions/${executionIdParam}/resume`\n      .setPayload(ResumeExecutionPayloadSchema)\n      .addSuccess(ExecutionEnvelopeSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .prefix(\"/v1\") {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/executions/http.ts",
    "content": "import { HttpApiBuilder } from \"@effect/platform\";\nimport * as Effect from \"effect/Effect\";\nimport {\n  createExecution,\n  getExecution,\n  resumeExecution,\n} from \"../../runtime/execution/service\";\n\nimport { ControlPlaneApi } from \"../api\";\nimport { resolveRequestedLocalWorkspace } from \"../local-context\";\n\nexport const ControlPlaneExecutionsLive = HttpApiBuilder.group(\n  ControlPlaneApi,\n  \"executions\",\n  (handlers) =>\n    handlers\n      .handle(\"create\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"executions.create\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            createExecution({\n              workspaceId: path.workspaceId,\n              payload,\n              createdByAccountId: runtimeLocalWorkspace.installation.accountId,\n            })\n          ),\n        ),\n      )\n      .handle(\"get\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"executions.get\", path.workspaceId).pipe(\n          Effect.zipRight(\n            getExecution({\n              workspaceId: path.workspaceId,\n              executionId: path.executionId,\n            }),\n          ),\n        ),\n      )\n      .handle(\"resume\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"executions.resume\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            resumeExecution({\n              workspaceId: path.workspaceId,\n              executionId: path.executionId,\n              payload,\n              resumedByAccountId: runtimeLocalWorkspace.installation.accountId,\n            })\n          ),\n        ),\n      ),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/http.ts",
    "content": "import { HttpApiBuilder } from \"@effect/platform\";\nimport * as Layer from \"effect/Layer\";\n\nimport { ControlPlaneApi } from \"./api\";\nimport { ControlPlaneExecutionsLive } from \"./executions/http\";\nimport { ControlPlaneLocalLive } from \"./local/http\";\nimport { ControlPlaneOAuthLive } from \"./oauth/http\";\nimport { ControlPlanePoliciesLive } from \"./policies/http\";\nimport { ControlPlaneSourcesLive } from \"./sources/http\";\n\nexport const ControlPlaneApiLive = HttpApiBuilder.api(ControlPlaneApi).pipe(\n  Layer.provide(ControlPlaneLocalLive),\n  Layer.provide(ControlPlaneOAuthLive),\n  Layer.provide(ControlPlaneSourcesLive),\n  Layer.provide(ControlPlanePoliciesLive),\n  Layer.provide(ControlPlaneExecutionsLive),\n);\n\nexport type ControlPlaneApiRuntimeContext = Layer.Layer.Context<typeof ControlPlaneApiLive>;\n\nexport type BuiltControlPlaneApiLayer = Layer.Layer<\n  Layer.Layer.Success<typeof ControlPlaneApiLive>,\n  Layer.Layer.Error<typeof ControlPlaneApiLive>,\n  never\n>;\n\nexport const createControlPlaneApiLayer = <ERuntime>(\n  runtimeLayer: Layer.Layer<ControlPlaneApiRuntimeContext, ERuntime, never>,\n) =>\n  ControlPlaneApiLive.pipe(\n    Layer.provide(runtimeLayer),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/index.ts",
    "content": "export {\n  ControlPlaneApi,\n  controlPlaneOpenApiSpec,\n} from \"./api\";\n\nexport type { LocalInstallation } from \"#schema\";\n\nexport {\n  ControlPlaneBadRequestError,\n  ControlPlaneForbiddenError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n  ControlPlaneUnauthorizedError,\n} from \"./errors\";\n\nexport {\n  ControlPlaneApiLive,\n  type ControlPlaneApiRuntimeContext,\n  type BuiltControlPlaneApiLayer,\n  createControlPlaneApiLayer,\n} from \"./http\";\n\nexport {\n  CreateExecutionPayloadSchema,\n  ResumeExecutionPayloadSchema,\n  type CreateExecutionPayload,\n  type ResumeExecutionPayload,\n} from \"./executions/api\";\n\nexport {\n  LocalApi,\n  type SecretProvider,\n  type InstanceConfig,\n  type SecretListItem,\n  type CreateSecretPayload,\n  type CreateSecretResult,\n  type UpdateSecretPayload,\n  type UpdateSecretResult,\n  type DeleteSecretResult,\n} from \"./local/api\";\n\nexport {\n  OAuthApi,\n  StartSourceOAuthPayloadSchema,\n  StartSourceOAuthResultSchema,\n  CompleteSourceOAuthResultSchema,\n  type StartSourceOAuthPayload,\n  type StartSourceOAuthResult,\n  type CompleteSourceOAuthResult,\n} from \"./oauth/api\";\n\nexport {\n  ConnectSourceBatchPayloadSchema,\n  ConnectSourceBatchResultSchema,\n  ConnectSourcePayloadSchema,\n  ConnectSourceResultSchema,\n  CreateWorkspaceOauthClientPayloadSchema,\n  CreateSourcePayloadSchema,\n  DiscoverSourcePayloadSchema,\n  UpdateSourcePayloadSchema,\n  type ConnectSourceBatchPayload,\n  type ConnectSourceBatchResult,\n  type ConnectSourcePayload,\n  type ConnectSourceResult,\n  type CreateWorkspaceOauthClientPayload,\n  type CreateSourcePayload,\n  type DiscoverSourcePayload,\n  type UpdateSourcePayload,\n} from \"./sources/api\";\n\nexport {\n  CreatePolicyPayloadSchema,\n  UpdatePolicyPayloadSchema,\n  type CreatePolicyPayload,\n  type UpdatePolicyPayload,\n} from \"./policies/api\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/local/api.ts",
    "content": "import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from \"@effect/platform\";\nimport { LocalInstallationSchema, SecretMaterialPurposeSchema } from \"#schema\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n} from \"../errors\";\n\nexport const SecretProviderSchema = Schema.Struct({\n  id: Schema.String,\n  name: Schema.String,\n  canStore: Schema.Boolean,\n});\n\nexport const InstanceConfigSchema = Schema.Struct({\n  platform: Schema.String,\n  secretProviders: Schema.Array(SecretProviderSchema),\n  defaultSecretStoreProvider: Schema.String,\n});\n\nexport type SecretProvider = typeof SecretProviderSchema.Type;\nexport type InstanceConfig = typeof InstanceConfigSchema.Type;\n\n// -- Secrets CRUD schemas ---------------------------------------------------\n\nexport const SecretLinkedSourceSchema = Schema.Struct({\n  sourceId: Schema.String,\n  sourceName: Schema.String,\n});\n\nexport type SecretLinkedSource = typeof SecretLinkedSourceSchema.Type;\n\nexport const SecretListItemSchema = Schema.Struct({\n  id: Schema.String,\n  providerId: Schema.String,\n  name: Schema.NullOr(Schema.String),\n  purpose: Schema.String,\n  createdAt: Schema.Number,\n  updatedAt: Schema.Number,\n  linkedSources: Schema.Array(SecretLinkedSourceSchema),\n});\n\nexport type SecretListItem = typeof SecretListItemSchema.Type;\n\nexport const CreateSecretPayloadSchema = Schema.Struct({\n  name: Schema.String,\n  value: Schema.String,\n  purpose: Schema.optional(SecretMaterialPurposeSchema),\n  providerId: Schema.optional(Schema.String),\n});\n\nexport type CreateSecretPayload = typeof CreateSecretPayloadSchema.Type;\n\nexport const CreateSecretResultSchema = Schema.Struct({\n  id: Schema.String,\n  name: Schema.NullOr(Schema.String),\n  providerId: Schema.String,\n  purpose: Schema.String,\n  createdAt: Schema.Number,\n  updatedAt: Schema.Number,\n});\n\nexport type CreateSecretResult = typeof CreateSecretResultSchema.Type;\n\nexport const UpdateSecretPayloadSchema = Schema.Struct({\n  name: Schema.optional(Schema.String),\n  value: Schema.optional(Schema.String),\n});\n\nexport type UpdateSecretPayload = typeof UpdateSecretPayloadSchema.Type;\n\nexport const UpdateSecretResultSchema = Schema.Struct({\n  id: Schema.String,\n  providerId: Schema.String,\n  name: Schema.NullOr(Schema.String),\n  purpose: Schema.String,\n  createdAt: Schema.Number,\n  updatedAt: Schema.Number,\n});\n\nexport type UpdateSecretResult = typeof UpdateSecretResultSchema.Type;\n\nexport const DeleteSecretResultSchema = Schema.Struct({\n  removed: Schema.Boolean,\n});\n\nexport type DeleteSecretResult = typeof DeleteSecretResultSchema.Type;\n\n// -- API group --------------------------------------------------------------\n\nexport class LocalApi extends HttpApiGroup.make(\"local\")\n  .add(\n    HttpApiEndpoint.get(\"installation\")`/local/installation`\n      .addSuccess(LocalInstallationSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"config\")`/local/config`\n      .addSuccess(InstanceConfigSchema),\n  )\n  .add(\n    HttpApiEndpoint.get(\"listSecrets\")`/local/secrets`\n      .addSuccess(Schema.Array(SecretListItemSchema))\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"createSecret\")`/local/secrets`\n      .setPayload(CreateSecretPayloadSchema)\n      .addSuccess(CreateSecretResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.patch(\"updateSecret\")`/local/secrets/${HttpApiSchema.param(\"secretId\", Schema.String)}`\n      .setPayload(UpdateSecretPayloadSchema)\n      .addSuccess(UpdateSecretResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.del(\"deleteSecret\")`/local/secrets/${HttpApiSchema.param(\"secretId\", Schema.String)}`\n      .addSuccess(DeleteSecretResultSchema)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .prefix(\"/v1\") {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/local/http.ts",
    "content": "import {\n  HttpApiBuilder,\n} from \"@effect/platform\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\n\nimport { SecretMaterialIdSchema } from \"#schema\";\nimport {\n  getLocalInstallation,\n} from \"../../runtime/local/operations\";\nimport { requireRuntimeLocalWorkspace } from \"../../runtime/local/runtime-context\";\nimport {\n  createDefaultSecretMaterialDeleter,\n  createDefaultSecretMaterialStorer,\n  createDefaultSecretMaterialUpdater,\n  ENV_SECRET_PROVIDER_ID,\n  KEYCHAIN_SECRET_PROVIDER_ID,\n  LOCAL_SECRET_PROVIDER_ID,\n  parseSecretStoreProviderId,\n  resolveDefaultSecretStoreProviderId,\n} from \"../../runtime/local/secret-material-providers\";\nimport { RuntimeSourceStoreService } from \"../../runtime/sources/source-store\";\nimport { ControlPlaneStore } from \"../../runtime/store\";\nimport type {\n  CreateSecretResult,\n  InstanceConfig,\n  SecretProvider,\n  UpdateSecretResult,\n} from \"./api\";\n\nimport { ControlPlaneApi } from \"../api\";\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n} from \"../errors\";\n\nconst SECRET_STORE_PROVIDER_ENV = \"EXECUTOR_SECRET_STORE_PROVIDER\";\n\nconst getInstanceConfig = (): Effect.Effect<InstanceConfig> => {\n  const explicitDefaultStoreProvider =\n    parseSecretStoreProviderId(process.env[SECRET_STORE_PROVIDER_ENV]);\n  const providers: SecretProvider[] = [\n    {\n      id: LOCAL_SECRET_PROVIDER_ID,\n      name: \"Local store\",\n      canStore: true,\n    },\n  ];\n\n  if (process.platform === \"darwin\" || process.platform === \"linux\") {\n    providers.push({\n      id: KEYCHAIN_SECRET_PROVIDER_ID,\n      name: process.platform === \"darwin\" ? \"macOS Keychain\" : \"Desktop Keyring\",\n      canStore:\n        process.platform === \"darwin\"\n        || explicitDefaultStoreProvider === KEYCHAIN_SECRET_PROVIDER_ID,\n    });\n  }\n\n  providers.push({\n    id: ENV_SECRET_PROVIDER_ID,\n    name: \"Environment variable\",\n    canStore: false,\n  });\n\n  return resolveDefaultSecretStoreProviderId({\n    storeProviderId: explicitDefaultStoreProvider ?? undefined,\n  }).pipe(\n    Effect.map((resolvedDefaultStoreProvider) => ({\n      platform: process.platform,\n      secretProviders: providers,\n      defaultSecretStoreProvider: resolvedDefaultStoreProvider,\n    })),\n  );\n};\n\nconst storageError = (message: string) =>\n  new ControlPlaneStorageError({\n    operation: \"secrets\",\n    message,\n    details: message,\n  });\n\nexport const ControlPlaneLocalLive = HttpApiBuilder.group(\n  ControlPlaneApi,\n  \"local\",\n  (handlers) =>\n    handlers\n      .handle(\"installation\", () =>\n        getLocalInstallation(),\n      )\n      .handle(\"config\", () =>\n        getInstanceConfig(),\n      )\n        .handle(\"listSecrets\", () =>\n          Effect.gen(function* () {\n            const store = yield* ControlPlaneStore;\n            const sourceStore = yield* RuntimeSourceStoreService;\n            const runtimeLocalWorkspace = yield* requireRuntimeLocalWorkspace().pipe(\n              Effect.mapError(() => storageError(\"Failed resolving local workspace.\")),\n            );\n            const rows = yield* store.secretMaterials.listAll().pipe(\n              Effect.mapError(() => storageError(\"Failed listing secrets.\")),\n            );\n            const linkedSourcesMap = yield* sourceStore.listLinkedSecretSourcesInWorkspace(\n              runtimeLocalWorkspace.installation.workspaceId,\n              {\n                actorAccountId: runtimeLocalWorkspace.installation.accountId,\n              },\n            ).pipe(\n              Effect.mapError(() => storageError(\"Failed loading linked sources.\")),\n            );\n            return rows.map((row) => ({\n              ...row,\n              linkedSources: linkedSourcesMap.get(row.id) ?? [],\n            }));\n          }),\n      )\n      .handle(\"createSecret\", ({ payload }) =>\n        Effect.gen(function* () {\n          const name = payload.name.trim();\n          const value = payload.value;\n          const purpose = payload.purpose ?? \"auth_material\";\n          const requestedProviderId = payload.providerId === undefined\n            ? null\n            : parseSecretStoreProviderId(payload.providerId);\n\n          if (name.length === 0) {\n            return yield* new ControlPlaneBadRequestError({\n                operation: \"secrets.create\",\n                message: \"Secret name is required.\",\n                details: \"Secret name is required.\",\n              });\n          }\n          if (payload.providerId !== undefined && requestedProviderId === null) {\n            return yield* new ControlPlaneBadRequestError({\n                operation: \"secrets.create\",\n                message: `Unsupported secret provider: ${payload.providerId}`,\n                details: `Unsupported secret provider: ${payload.providerId}`,\n              });\n          }\n\n          const store = yield* ControlPlaneStore;\n          const storeSecretMaterial = createDefaultSecretMaterialStorer({\n            rows: store,\n            ...(requestedProviderId ? { storeProviderId: requestedProviderId } : {}),\n          });\n          const ref = yield* storeSecretMaterial({\n            name,\n            purpose,\n            value,\n          }).pipe(\n            Effect.mapError((cause) => storageError(\n              cause instanceof Error ? cause.message : \"Failed creating secret.\",\n            )),\n          );\n          const secretId = SecretMaterialIdSchema.make(ref.handle);\n          const created = yield* store.secretMaterials.getById(secretId).pipe(\n            Effect.mapError(() => storageError(\"Failed loading created secret.\")),\n          );\n\n          if (Option.isNone(created)) {\n            return yield* storageError(`Created secret not found: ${ref.handle}`);\n          }\n\n          return {\n            id: created.value.id,\n            name: created.value.name,\n            providerId: created.value.providerId,\n            purpose: created.value.purpose,\n            createdAt: created.value.createdAt,\n            updatedAt: created.value.updatedAt,\n          } satisfies CreateSecretResult;\n        }),\n      )\n      .handle(\"updateSecret\", ({ path, payload }) =>\n        Effect.gen(function* () {\n          const secretId = SecretMaterialIdSchema.make(path.secretId);\n          const store = yield* ControlPlaneStore;\n\n          const existing = yield* store.secretMaterials.getById(secretId).pipe(\n            Effect.mapError(() => storageError(\"Failed looking up secret.\")),\n          );\n\n          if (Option.isNone(existing)) {\n            return yield* new ControlPlaneNotFoundError({\n                operation: \"secrets.update\",\n                message: `Secret not found: ${path.secretId}`,\n                details: `Secret not found: ${path.secretId}`,\n              });\n          }\n\n          const update: { name?: string | null; value?: string } = {};\n          if (payload.name !== undefined) update.name = payload.name.trim() || null;\n          if (payload.value !== undefined) update.value = payload.value;\n\n          const updateSecretMaterial = createDefaultSecretMaterialUpdater({\n            rows: store,\n          });\n          const updated = yield* updateSecretMaterial({\n            ref: {\n              providerId: existing.value.providerId,\n              handle: existing.value.id,\n            },\n            ...update,\n          }).pipe(\n            Effect.mapError(() => storageError(\"Failed updating secret.\")),\n          );\n\n          return {\n            id: updated.id,\n            providerId: updated.providerId,\n            name: updated.name,\n            purpose: updated.purpose,\n            createdAt: updated.createdAt,\n            updatedAt: updated.updatedAt,\n          } satisfies UpdateSecretResult;\n        }),\n      )\n      .handle(\"deleteSecret\", ({ path }) =>\n        Effect.gen(function* () {\n          const secretId = SecretMaterialIdSchema.make(path.secretId);\n          const store = yield* ControlPlaneStore;\n\n          const existing = yield* store.secretMaterials.getById(secretId).pipe(\n            Effect.mapError(() => storageError(\"Failed looking up secret.\")),\n          );\n\n          if (Option.isNone(existing)) {\n            return yield* new ControlPlaneNotFoundError({\n                operation: \"secrets.delete\",\n                message: `Secret not found: ${path.secretId}`,\n                details: `Secret not found: ${path.secretId}`,\n              });\n          }\n\n          const deleteSecretMaterial = createDefaultSecretMaterialDeleter({\n            rows: store,\n          });\n          const removed = yield* deleteSecretMaterial({\n            providerId: existing.value.providerId,\n            handle: existing.value.id,\n          }).pipe(\n            Effect.mapError(() => storageError(\"Failed removing secret.\")),\n          );\n\n          if (!removed) {\n            return yield* storageError(`Failed removing secret: ${path.secretId}`);\n          }\n\n          return { removed: true };\n        }),\n      ),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/local-context.ts",
    "content": "import type { WorkspaceId } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  RuntimeLocalWorkspaceMismatchError,\n} from \"../runtime/local/errors\";\nimport { requireRuntimeLocalWorkspace } from \"../runtime/local/runtime-context\";\nimport { ControlPlaneForbiddenError } from \"./errors\";\n\nexport const resolveRequestedLocalWorkspace = (\n  operation: string,\n  workspaceId: WorkspaceId,\n) =>\n  requireRuntimeLocalWorkspace(workspaceId).pipe(\n    Effect.mapError((cause) =>\n      new ControlPlaneForbiddenError({\n        operation,\n        message: \"Requested workspace is not the active local workspace\",\n        details:\n          cause instanceof RuntimeLocalWorkspaceMismatchError\n            ? `requestedWorkspaceId=${cause.requestedWorkspaceId} activeWorkspaceId=${cause.activeWorkspaceId}`\n            : \"Runtime local workspace is unavailable\",\n      })\n    ),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/oauth/api.ts",
    "content": "import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from \"@effect/platform\";\nimport {\n  SecretRefSchema,\n  SourceAuthSessionIdSchema,\n  SourceTransportSchema,\n  StringMapSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneForbiddenError,\n  ControlPlaneStorageError,\n  ControlPlaneUnauthorizedError,\n} from \"../errors\";\nimport { TrimmedNonEmptyStringSchema } from \"../string-schemas\";\n\nconst workspaceIdParam = HttpApiSchema.param(\"workspaceId\", WorkspaceIdSchema);\n\nconst HtmlSchema = HttpApiSchema.Text({\n  contentType: \"text/html\",\n});\n\nexport const StartSourceOAuthPayloadSchema = Schema.Struct({\n  provider: Schema.Literal(\"mcp\"),\n  name: Schema.optional(Schema.NullOr(Schema.String)),\n  endpoint: TrimmedNonEmptyStringSchema,\n  transport: Schema.optional(SourceTransportSchema),\n  queryParams: Schema.optional(Schema.NullOr(StringMapSchema)),\n  headers: Schema.optional(Schema.NullOr(StringMapSchema)),\n});\n\nexport type StartSourceOAuthPayload = typeof StartSourceOAuthPayloadSchema.Type;\n\nexport const StartSourceOAuthResultSchema = Schema.Struct({\n  sessionId: SourceAuthSessionIdSchema,\n  authorizationUrl: Schema.String,\n});\n\nexport type StartSourceOAuthResult = typeof StartSourceOAuthResultSchema.Type;\n\nexport const SourceOAuthAuthSchema = Schema.Struct({\n  kind: Schema.Literal(\"oauth2\"),\n  headerName: Schema.String,\n  prefix: Schema.String,\n  accessToken: SecretRefSchema,\n  refreshToken: Schema.NullOr(SecretRefSchema),\n});\n\nexport const CompleteSourceOAuthResultSchema = Schema.Struct({\n  sessionId: SourceAuthSessionIdSchema,\n  auth: SourceOAuthAuthSchema,\n});\n\nexport type CompleteSourceOAuthResult = typeof CompleteSourceOAuthResultSchema.Type;\n\nexport const SourceOAuthPopupSuccessResultSchema = Schema.Struct({\n  type: Schema.Literal(\"executor:oauth-result\"),\n  ok: Schema.Literal(true),\n  sessionId: SourceAuthSessionIdSchema,\n  auth: SourceOAuthAuthSchema,\n});\n\nexport const SourceOAuthPopupFailureResultSchema = Schema.Struct({\n  type: Schema.Literal(\"executor:oauth-result\"),\n  ok: Schema.Literal(false),\n  sessionId: Schema.Null,\n  error: Schema.String,\n});\n\nexport const SourceOAuthPopupResultSchema = Schema.Union(\n  SourceOAuthPopupSuccessResultSchema,\n  SourceOAuthPopupFailureResultSchema,\n);\n\nexport type SourceOAuthPopupResult = typeof SourceOAuthPopupResultSchema.Type;\n\nconst OAuthCallbackUrlParamsSchema = Schema.Struct({\n  state: Schema.String,\n  code: Schema.optional(Schema.String),\n  error: Schema.optional(Schema.String),\n  error_description: Schema.optional(Schema.String),\n});\n\nexport class OAuthApi extends HttpApiGroup.make(\"oauth\")\n  .add(\n    HttpApiEndpoint.post(\"startSourceAuth\")`/workspaces/${workspaceIdParam}/oauth/source-auth/start`\n      .setPayload(StartSourceOAuthPayloadSchema)\n      .addSuccess(StartSourceOAuthResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"sourceAuthCallback\")`/oauth/source-auth/callback`\n      .setUrlParams(OAuthCallbackUrlParamsSchema)\n      .addSuccess(HtmlSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneStorageError),\n  )\n  .prefix(\"/v1\") {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/oauth/http.ts",
    "content": "import {\n  HttpApiBuilder,\n  HttpServerRequest,\n  HttpServerResponse,\n} from \"@effect/platform\";\nimport type { WorkspaceId } from \"#schema\";\nimport * as Cause from \"effect/Cause\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { RuntimeSourceAuthServiceTag } from \"../../runtime/sources/source-auth-service\";\nimport { ControlPlaneApi } from \"../api\";\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneStorageError,\n} from \"../errors\";\nimport { resolveRequestedLocalWorkspace } from \"../local-context\";\nimport {\n  SourceOAuthPopupResultSchema,\n  type SourceOAuthPopupResult,\n} from \"./api\";\n\nconst OAUTH_RESULT_STORAGE_KEY_PREFIX = \"executor:oauth-result:\";\n\nconst escapeHtml = (value: string): string =>\n  value\n    .replaceAll(\"&\", \"&amp;\")\n    .replaceAll(\"<\", \"&lt;\")\n    .replaceAll(\">\", \"&gt;\")\n    .replaceAll('\"', \"&quot;\")\n    .replaceAll(\"'\", \"&#39;\");\n\nconst serializeValueForScript = (value: unknown): string =>\n  JSON.stringify(value)\n    .replaceAll(\"<\", \"\\\\u003c\")\n    .replaceAll(\">\", \"\\\\u003e\")\n    .replaceAll(\"&\", \"\\\\u0026\");\n\nconst encodeSourceOAuthPopupResultJson = Schema.encodeSync(\n  Schema.parseJson(SourceOAuthPopupResultSchema),\n);\n\nconst serializeJsonLiteralForScript = (value: string): string =>\n  value\n    .replaceAll(\"<\", \"\\\\u003c\")\n    .replaceAll(\">\", \"\\\\u003e\")\n    .replaceAll(\"&\", \"\\\\u0026\");\n\nconst htmlResponse = (html: string, status = 200) =>\n  HttpServerResponse.html(html).pipe(\n    HttpServerResponse.setStatus(status),\n  );\n\nconst readHeader = (headers: unknown, name: string): string | null => {\n  if (headers instanceof Headers) {\n    return headers.get(name);\n  }\n\n  if (headers && typeof headers === \"object\") {\n    const record = headers as Record<string, unknown>;\n    const direct = record[name];\n    if (typeof direct === \"string\" && direct.length > 0) {\n      return direct;\n    }\n\n    const lower = record[name.toLowerCase()];\n    if (typeof lower === \"string\" && lower.length > 0) {\n      return lower;\n    }\n  }\n\n  return null;\n};\n\nconst resolveRequestOrigin = (request: { url: string; headers: unknown }): string | null => {\n  try {\n    return new URL(request.url).origin;\n  } catch {\n    const forwardedHost = readHeader(request.headers, \"x-forwarded-host\");\n    const host = forwardedHost ?? readHeader(request.headers, \"host\");\n    if (!host) {\n      return null;\n    }\n\n    const forwardedProto = readHeader(request.headers, \"x-forwarded-proto\");\n    const protocol = forwardedProto && forwardedProto.length > 0 ? forwardedProto : \"http\";\n    return `${protocol}://${host}`;\n  }\n};\n\nconst toStartSourceOAuthError = (input: {\n  workspaceId: WorkspaceId;\n  provider: string;\n  endpoint: string;\n  cause: Cause.Cause<unknown>;\n}) => {\n  const pretty = Cause.pretty(input.cause);\n  console.error(\"oauth.start_source_auth failed\", {\n    workspaceId: input.workspaceId,\n    provider: input.provider,\n    endpoint: input.endpoint,\n    pretty,\n  });\n\n  if (pretty.includes(\"Invalid URL\") || pretty.includes(\"required\")) {\n    return new ControlPlaneBadRequestError({\n      operation: \"oauth.start_source_auth\",\n      message: pretty,\n      details: pretty,\n    });\n  }\n\n  return new ControlPlaneStorageError({\n    operation: \"oauth.start_source_auth\",\n    message: pretty,\n    details: pretty,\n  });\n};\n\nconst sourceOAuthPopupResultDocument = (input: {\n  title: string;\n  message: string;\n  status: \"connected\" | \"failed\";\n  sessionId: string;\n  payload: SourceOAuthPopupResult;\n}) => `<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <title>${escapeHtml(input.title)}</title>\n    <style>\n      :root {\n        --bg: #fafaf9;\n        --surface: #ffffff;\n        --text: #1c1917;\n        --text-secondary: #78716c;\n        --border: #e7e5e4;\n        --green: #16a34a;\n        --green-light: #f0fdf4;\n        --green-border: #bbf7d0;\n        --red: #dc2626;\n        --red-light: #fef2f2;\n        --red-border: #fecaca;\n      }\n\n      * { box-sizing: border-box; margin: 0; padding: 0; }\n\n      body {\n        min-height: 100vh;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        background: var(--bg);\n        color: var(--text);\n        font-family: system-ui, -apple-system, sans-serif;\n        padding: 24px;\n      }\n\n      .card {\n        width: 100%;\n        max-width: 420px;\n        background: var(--surface);\n        border: 1px solid var(--border);\n        border-radius: 16px;\n        padding: 28px;\n        text-align: center;\n      }\n\n      .status {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        padding: 6px 12px;\n        border-radius: 999px;\n        font-size: 12px;\n        font-weight: 600;\n        margin-bottom: 14px;\n      }\n\n      .status[data-status='connected'] {\n        background: var(--green-light);\n        border: 1px solid var(--green-border);\n        color: var(--green);\n      }\n\n      .status[data-status='failed'] {\n        background: var(--red-light);\n        border: 1px solid var(--red-border);\n        color: var(--red);\n      }\n\n      h1 {\n        font-size: 22px;\n        line-height: 1.2;\n        margin-bottom: 10px;\n      }\n\n      p {\n        color: var(--text-secondary);\n        font-size: 14px;\n        line-height: 1.6;\n      }\n    </style>\n  </head>\n  <body>\n    <main class=\"card\">\n      <div class=\"status\" data-status=\"${escapeHtml(input.status)}\">${escapeHtml(input.status)}</div>\n      <h1>${escapeHtml(input.title)}</h1>\n      <p>${escapeHtml(input.message)}</p>\n    </main>\n    <script>\n      (() => {\n        const payload = ${serializeJsonLiteralForScript(encodeSourceOAuthPopupResultJson(input.payload))};\n        const storageKey = ${serializeValueForScript(`${OAUTH_RESULT_STORAGE_KEY_PREFIX}${input.sessionId}`)};\n        try {\n          window.localStorage.setItem(storageKey, JSON.stringify(payload));\n        } catch {}\n        try {\n          if (window.opener) {\n            window.opener.postMessage(payload, window.location.origin);\n          }\n        } finally {\n          window.setTimeout(() => window.close(), 120);\n        }\n      })();\n    </script>\n  </body>\n</html>`;\n\nexport const ControlPlaneOAuthLive = HttpApiBuilder.group(\n  ControlPlaneApi,\n  \"oauth\",\n  (handlers) =>\n    handlers\n      .handle(\"startSourceAuth\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"oauth.start_source_auth\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            Effect.gen(function* () {\n              const request = yield* HttpServerRequest.HttpServerRequest;\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              return yield* sourceAuthService.startSourceOAuthSession({\n                workspaceId: path.workspaceId,\n                actorAccountId: runtimeLocalWorkspace.installation.accountId,\n                baseUrl: resolveRequestOrigin(request),\n                displayName: payload.name,\n                provider: {\n                  kind: payload.provider,\n                  endpoint: payload.endpoint,\n                  transport: payload.transport,\n                  queryParams: payload.queryParams,\n                  headers: payload.headers,\n                },\n              });\n            }).pipe(\n              Effect.catchAllCause((cause) =>\n                Effect.fail(\n                  toStartSourceOAuthError({\n                    workspaceId: path.workspaceId,\n                    provider: payload.provider,\n                    endpoint: payload.endpoint,\n                    cause,\n                  }),\n                ),\n              ),\n            )\n          ),\n        ),\n      )\n      .handle(\"sourceAuthCallback\", ({ urlParams }) =>\n        Effect.gen(function* () {\n          const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n          const completed = yield* Effect.either(\n            sourceAuthService.completeSourceOAuthSession({\n              state: urlParams.state,\n              code: urlParams.code,\n              error: urlParams.error,\n              errorDescription: urlParams.error_description,\n            }),\n          );\n\n          if (Either.isRight(completed)) {\n            return htmlResponse(\n              sourceOAuthPopupResultDocument({\n                title: \"OAuth connected\",\n                message: \"OAuth credentials are ready. Return to the source form to finish saving.\",\n                status: \"connected\",\n                sessionId: completed.right.sessionId,\n                payload: {\n                  type: \"executor:oauth-result\",\n                  ok: true,\n                  sessionId: completed.right.sessionId,\n                  auth: completed.right.auth,\n                },\n              }),\n            );\n          }\n\n          const message = completed.left instanceof Error\n            ? completed.left.message\n            : \"Failed completing OAuth\";\n\n          return htmlResponse(\n            sourceOAuthPopupResultDocument({\n              title: \"OAuth failed\",\n              message,\n              status: \"failed\",\n              sessionId: \"failed\",\n              payload: {\n                type: \"executor:oauth-result\",\n                ok: false,\n                sessionId: null,\n                error: message,\n              },\n            }),\n            500,\n          );\n        }),\n      ),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/payload-schemas.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport { throws } from \"@effect/vitest/utils\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  CreateExecutionPayloadSchema,\n} from \"./executions/api\";\nimport { CreatePolicyPayloadSchema } from \"./policies/api\";\nimport {\n  ConnectSourcePayloadSchema,\n  CreateSourcePayloadSchema,\n  UpdateSourcePayloadSchema,\n} from \"./sources/api\";\n\ndescribe(\"control-plane payload schemas\", () => {\n  it(\"normalizes trimmed strings at decode time\", () => {\n    expect(\n      Schema.decodeUnknownSync(CreateSourcePayloadSchema)({\n        name: \"  Github  \",\n        kind: \"openapi\",\n        endpoint: \"  https://api.github.com  \",\n      }),\n    ).toEqual({\n      name: \"Github\",\n      kind: \"openapi\",\n      endpoint: \"https://api.github.com\",\n    });\n\n    expect(\n      Schema.decodeUnknownSync(CreateExecutionPayloadSchema)({\n        code: \"  console.log('ok')  \",\n      }),\n    ).toEqual({\n      code: \"console.log('ok')\",\n    });\n\n    expect(\n      Schema.decodeUnknownSync(ConnectSourcePayloadSchema)({\n        kind: \"openapi\",\n        endpoint: \"  https://api.github.com  \",\n        specUrl: \"  https://example.com/openapi.json  \",\n      }),\n    ).toEqual({\n        kind: \"openapi\",\n        endpoint: \"https://api.github.com\",\n        specUrl: \"https://example.com/openapi.json\",\n      });\n\n    expect(\n      Schema.decodeUnknownSync(ConnectSourcePayloadSchema)({\n        kind: \"google_discovery\",\n        service: \"  sheets  \",\n        version: \"  v4  \",\n        discoveryUrl: \"  https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest  \",\n        oauthClient: {\n          clientId: \"  google-client  \",\n          clientSecret: \"  google-secret  \",\n        },\n      }),\n    ).toEqual({\n      kind: \"google_discovery\",\n      service: \"sheets\",\n      version: \"v4\",\n      discoveryUrl: \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n      oauthClient: {\n        clientId: \"google-client\",\n        clientSecret: \"google-secret\",\n      },\n    });\n\n    expect(\n      Schema.decodeUnknownSync(CreatePolicyPayloadSchema)({\n        resourcePattern: \"  source.github.*  \",\n      }),\n    ).toEqual({\n        resourcePattern: \"source.github.*\",\n    });\n  });\n\n  it(\"rejects blank strings for normalized string fields\", () => {\n    throws(() =>\n      Schema.decodeUnknownSync(UpdateSourcePayloadSchema)({\n        endpoint: \"   \",\n      })\n    );\n\n    throws(() =>\n      Schema.decodeUnknownSync(ConnectSourcePayloadSchema)({\n        kind: \"graphql\",\n        endpoint: \"   \",\n      })\n    );\n\n    throws(() =>\n      Schema.decodeUnknownSync(CreatePolicyPayloadSchema)({\n        resourcePattern: \"   \",\n      })\n    );\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/policies/api.ts",
    "content": "import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from \"@effect/platform\";\nimport {\n  LocalWorkspacePolicyApprovalModeSchema,\n  LocalWorkspacePolicyEffectSchema,\n  LocalWorkspacePolicySchema,\n  PolicyIdSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneForbiddenError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n  ControlPlaneUnauthorizedError,\n} from \"../errors\";\nimport { OptionalTrimmedNonEmptyStringSchema } from \"../string-schemas\";\n\nconst LocalWorkspacePolicyPayloadSchema = Schema.Struct({\n  resourcePattern: OptionalTrimmedNonEmptyStringSchema,\n  effect: Schema.optional(LocalWorkspacePolicyEffectSchema),\n  approvalMode: Schema.optional(LocalWorkspacePolicyApprovalModeSchema),\n  priority: Schema.optional(Schema.Number),\n  enabled: Schema.optional(Schema.Boolean),\n});\n\nexport const CreatePolicyPayloadSchema = LocalWorkspacePolicyPayloadSchema;\n\nexport type CreatePolicyPayload = typeof CreatePolicyPayloadSchema.Type;\n\nexport const UpdatePolicyPayloadSchema = LocalWorkspacePolicyPayloadSchema;\n\nexport type UpdatePolicyPayload = typeof UpdatePolicyPayloadSchema.Type;\n\nconst workspaceIdParam = HttpApiSchema.param(\"workspaceId\", WorkspaceIdSchema);\nconst policyIdParam = HttpApiSchema.param(\"policyId\", PolicyIdSchema);\n\nexport class PoliciesApi extends HttpApiGroup.make(\"policies\")\n  .add(\n    HttpApiEndpoint.get(\"list\")`/workspaces/${workspaceIdParam}/policies`\n      .addSuccess(Schema.Array(LocalWorkspacePolicySchema))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"create\")`/workspaces/${workspaceIdParam}/policies`\n      .setPayload(CreatePolicyPayloadSchema)\n      .addSuccess(LocalWorkspacePolicySchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"get\")`/workspaces/${workspaceIdParam}/policies/${policyIdParam}`\n      .addSuccess(LocalWorkspacePolicySchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.patch(\"update\")`/workspaces/${workspaceIdParam}/policies/${policyIdParam}`\n      .setPayload(UpdatePolicyPayloadSchema)\n      .addSuccess(LocalWorkspacePolicySchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.del(\"remove\")`/workspaces/${workspaceIdParam}/policies/${policyIdParam}`\n      .addSuccess(Schema.Struct({ removed: Schema.Boolean }))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .prefix(\"/v1\") {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/policies/http.ts",
    "content": "import { HttpApiBuilder } from \"@effect/platform\";\nimport * as Effect from \"effect/Effect\";\nimport {\n  createPolicy,\n  getPolicy,\n  listPolicies,\n  removePolicy,\n  updatePolicy,\n} from \"../../runtime/policy/policies-operations\";\n\nimport { ControlPlaneApi } from \"../api\";\nimport { resolveRequestedLocalWorkspace } from \"../local-context\";\n\nexport const ControlPlanePoliciesLive = HttpApiBuilder.group(\n  ControlPlaneApi,\n  \"policies\",\n  (handlers) =>\n    handlers\n      .handle(\"list\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"policies.list\", path.workspaceId).pipe(\n          Effect.zipRight(\n            listPolicies(path.workspaceId),\n          ),\n        ),\n      )\n      .handle(\"create\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"policies.create\", path.workspaceId).pipe(\n          Effect.zipRight(\n            createPolicy({ workspaceId: path.workspaceId, payload }),\n          ),\n        ),\n      )\n      .handle(\"get\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"policies.get\", path.workspaceId).pipe(\n          Effect.zipRight(\n            getPolicy({\n              workspaceId: path.workspaceId,\n              policyId: path.policyId,\n            }),\n          ),\n        ),\n      )\n      .handle(\"update\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"policies.update\", path.workspaceId).pipe(\n          Effect.zipRight(\n            updatePolicy({\n              workspaceId: path.workspaceId,\n              policyId: path.policyId,\n              payload,\n            }),\n          ),\n        ),\n      )\n      .handle(\"remove\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"policies.remove\", path.workspaceId).pipe(\n          Effect.zipRight(\n            removePolicy({\n              workspaceId: path.workspaceId,\n              policyId: path.policyId,\n            }),\n          ),\n        ),\n      ),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/sources/api.ts",
    "content": "import { HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from \"@effect/platform\";\nimport {\n  SourceOauthClientInputSchema,\n  ExecutionInteractionIdSchema,\n  JsonObjectSchema,\n  ProviderAuthGrantIdSchema,\n  SourceAuthSchema,\n  SourceAuthSessionIdSchema,\n  SourceDiscoveryResultSchema,\n  SourceIdSchema,\n  SourceInspectionDiscoverPayloadSchema,\n  SourceInspectionDiscoverResultSchema,\n  SourceInspectionSchema,\n  SourceInspectionToolDetailSchema,\n  SourceImportAuthPolicySchema,\n  SourceKindSchema,\n  SourceProbeAuthSchema,\n  SourceSchema,\n  SourceStatusSchema,\n  WorkspaceOauthClientIdSchema,\n  WorkspaceOauthClientSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneForbiddenError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n  ControlPlaneUnauthorizedError,\n} from \"../errors\";\nimport {\n  OptionalTrimmedNonEmptyStringSchema,\n  TrimmedNonEmptyStringSchema,\n} from \"../string-schemas\";\nimport {\n  ConnectSourcePayloadSchema,\n  type ConnectSourcePayload,\n} from \"../../runtime/sources/source-adapters\";\n\nconst createSourcePayloadRequiredSchema = Schema.Struct({\n  name: TrimmedNonEmptyStringSchema,\n  kind: SourceKindSchema,\n  endpoint: TrimmedNonEmptyStringSchema,\n});\n\nconst createSourcePayloadOptionalSchema = Schema.Struct({\n  status: Schema.optional(SourceStatusSchema),\n  enabled: Schema.optional(Schema.Boolean),\n  namespace: Schema.optional(Schema.NullOr(Schema.String)),\n  binding: Schema.optional(JsonObjectSchema),\n  importAuthPolicy: Schema.optional(SourceImportAuthPolicySchema),\n  importAuth: Schema.optional(SourceAuthSchema),\n  auth: Schema.optional(SourceAuthSchema),\n  sourceHash: Schema.optional(Schema.NullOr(Schema.String)),\n  lastError: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nexport const CreateSourcePayloadSchema = Schema.extend(\n  createSourcePayloadRequiredSchema,\n  createSourcePayloadOptionalSchema,\n);\n\nexport type CreateSourcePayload = typeof CreateSourcePayloadSchema.Type;\nexport type CreateWorkspaceOauthClientPayload =\n  typeof CreateWorkspaceOauthClientPayloadSchema.Type;\n\nexport const UpdateSourcePayloadSchema = Schema.Struct({\n  name: OptionalTrimmedNonEmptyStringSchema,\n  endpoint: OptionalTrimmedNonEmptyStringSchema,\n  status: Schema.optional(SourceStatusSchema),\n  enabled: Schema.optional(Schema.Boolean),\n  namespace: Schema.optional(Schema.NullOr(Schema.String)),\n  binding: Schema.optional(JsonObjectSchema),\n  importAuthPolicy: Schema.optional(SourceImportAuthPolicySchema),\n  importAuth: Schema.optional(SourceAuthSchema),\n  auth: Schema.optional(SourceAuthSchema),\n  sourceHash: Schema.optional(Schema.NullOr(Schema.String)),\n  lastError: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nexport type UpdateSourcePayload = typeof UpdateSourcePayloadSchema.Type;\n\nconst workspaceIdParam = HttpApiSchema.param(\"workspaceId\", WorkspaceIdSchema);\nconst sourceIdParam = HttpApiSchema.param(\"sourceId\", SourceIdSchema);\nconst toolPathParam = HttpApiSchema.param(\"toolPath\", Schema.String);\n\nconst CredentialPageUrlParamsSchema = Schema.Struct({\n  interactionId: ExecutionInteractionIdSchema,\n});\n\nconst CredentialSubmitPayloadSchema = Schema.Struct({\n  action: Schema.optional(Schema.Literal(\"submit\", \"continue\", \"cancel\")),\n  token: Schema.optional(Schema.String),\n});\n\nconst CredentialOauthCompleteUrlParamsSchema = Schema.Struct({\n  state: Schema.String,\n  code: Schema.optional(Schema.String),\n  error: Schema.optional(Schema.String),\n  error_description: Schema.optional(Schema.String),\n});\n\nconst WorkspaceOauthClientQuerySchema = Schema.Struct({\n  providerKey: Schema.String,\n});\n\nconst CreateWorkspaceOauthClientPayloadSchema = Schema.Struct({\n  providerKey: Schema.String,\n  label: Schema.optional(Schema.NullOr(Schema.String)),\n  oauthClient: SourceOauthClientInputSchema,\n});\n\nconst oauthClientIdParam = HttpApiSchema.param(\"oauthClientId\", WorkspaceOauthClientIdSchema);\nconst grantIdParam = HttpApiSchema.param(\"grantId\", ProviderAuthGrantIdSchema);\n\nconst ConnectGoogleDiscoveryBatchSourceSchema = Schema.Struct({\n  service: TrimmedNonEmptyStringSchema,\n  version: TrimmedNonEmptyStringSchema,\n  discoveryUrl: Schema.optional(Schema.NullOr(TrimmedNonEmptyStringSchema)),\n  scopes: Schema.optional(Schema.Array(TrimmedNonEmptyStringSchema)),\n  name: Schema.optional(Schema.NullOr(Schema.String)),\n  namespace: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nconst ConnectSourceBatchPayloadSchema = Schema.Struct({\n  workspaceOauthClientId: WorkspaceOauthClientIdSchema,\n  sources: Schema.Array(ConnectGoogleDiscoveryBatchSourceSchema),\n});\n\nconst ConnectSourceBatchResultSchema = Schema.Struct({\n  results: Schema.Array(\n    Schema.Struct({\n      source: SourceSchema,\n      status: Schema.Literal(\"connected\", \"pending_oauth\"),\n    }),\n  ),\n  providerOauthSession: Schema.NullOr(\n    Schema.Struct({\n      sessionId: SourceAuthSessionIdSchema,\n      authorizationUrl: Schema.String,\n      sourceIds: Schema.Array(SourceIdSchema),\n    }),\n  ),\n});\n\nconst DiscoverSourcePayloadSchema = Schema.Struct({\n  url: TrimmedNonEmptyStringSchema,\n  probeAuth: Schema.optional(SourceProbeAuthSchema),\n});\n\nexport type DiscoverSourcePayload = typeof DiscoverSourcePayloadSchema.Type;\n\nconst ConnectSourceResultSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"connected\"),\n    source: SourceSchema,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"credential_required\"),\n    source: SourceSchema,\n    credentialSlot: Schema.Literal(\"runtime\", \"import\"),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"oauth_required\"),\n    source: SourceSchema,\n    sessionId: SourceAuthSessionIdSchema,\n    authorizationUrl: Schema.String,\n  }),\n);\n\nexport type ConnectSourceResult = typeof ConnectSourceResultSchema.Type;\nexport type ConnectSourceBatchPayload = typeof ConnectSourceBatchPayloadSchema.Type;\nexport type ConnectSourceBatchResult = typeof ConnectSourceBatchResultSchema.Type;\n\nexport {\n  ConnectSourcePayloadSchema,\n  ConnectSourceBatchPayloadSchema,\n  ConnectSourceBatchResultSchema,\n  ConnectSourceResultSchema,\n  CreateWorkspaceOauthClientPayloadSchema,\n  DiscoverSourcePayloadSchema,\n};\n\nexport type { ConnectSourcePayload };\n\nconst HtmlSchema = HttpApiSchema.Text({\n  contentType: \"text/html\",\n});\n\nexport class SourcesApi extends HttpApiGroup.make(\"sources\")\n  .add(\n    HttpApiEndpoint.post(\"discover\")`/sources/discover`\n      .setPayload(DiscoverSourcePayloadSchema)\n      .addSuccess(SourceDiscoveryResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"connect\")`/workspaces/${workspaceIdParam}/sources/connect`\n      .setPayload(ConnectSourcePayloadSchema)\n      .addSuccess(ConnectSourceResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"connectBatch\")`/workspaces/${workspaceIdParam}/sources/connect-batch`\n      .setPayload(ConnectSourceBatchPayloadSchema)\n      .addSuccess(ConnectSourceBatchResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"listWorkspaceOauthClients\")`/workspaces/${workspaceIdParam}/oauth-clients`\n      .setUrlParams(WorkspaceOauthClientQuerySchema)\n      .addSuccess(Schema.Array(WorkspaceOauthClientSchema))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"createWorkspaceOauthClient\")`/workspaces/${workspaceIdParam}/oauth-clients`\n      .setPayload(CreateWorkspaceOauthClientPayloadSchema)\n      .addSuccess(WorkspaceOauthClientSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.del(\"removeWorkspaceOauthClient\")`/workspaces/${workspaceIdParam}/oauth-clients/${oauthClientIdParam}`\n      .addSuccess(Schema.Struct({ removed: Schema.Boolean }))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.del(\"removeProviderAuthGrant\")`/workspaces/${workspaceIdParam}/provider-grants/${grantIdParam}`\n      .addSuccess(Schema.Struct({ removed: Schema.Boolean }))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"list\")`/workspaces/${workspaceIdParam}/sources`\n      .addSuccess(Schema.Array(SourceSchema))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"create\")`/workspaces/${workspaceIdParam}/sources`\n      .setPayload(CreateSourcePayloadSchema)\n      .addSuccess(SourceSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"get\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}`\n      .addSuccess(SourceSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.patch(\"update\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}`\n      .setPayload(UpdateSourcePayloadSchema)\n      .addSuccess(SourceSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.del(\"remove\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}`\n      .addSuccess(Schema.Struct({ removed: Schema.Boolean }))\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"credentialPage\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}/credentials`\n      .setUrlParams(CredentialPageUrlParamsSchema)\n      .addSuccess(HtmlSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"credentialSubmit\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}/credentials`\n      .setUrlParams(CredentialPageUrlParamsSchema)\n      .setPayload(CredentialSubmitPayloadSchema)\n      .addSuccess(HtmlSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"credentialComplete\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}/credentials/oauth/complete`\n      .setUrlParams(CredentialOauthCompleteUrlParamsSchema)\n      .addSuccess(HtmlSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"providerOauthComplete\")`/workspaces/${workspaceIdParam}/oauth/provider/callback`\n      .setUrlParams(CredentialOauthCompleteUrlParamsSchema)\n      .addSuccess(HtmlSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"inspection\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}/inspection`\n      .addSuccess(SourceInspectionSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.get(\"inspectionTool\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}/tools/${toolPathParam}/inspection`\n      .addSuccess(SourceInspectionToolDetailSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .add(\n    HttpApiEndpoint.post(\"inspectionDiscover\")`/workspaces/${workspaceIdParam}/sources/${sourceIdParam}/inspection/discover`\n      .setPayload(SourceInspectionDiscoverPayloadSchema)\n      .addSuccess(SourceInspectionDiscoverResultSchema)\n      .addError(ControlPlaneBadRequestError)\n      .addError(ControlPlaneUnauthorizedError)\n      .addError(ControlPlaneForbiddenError)\n      .addError(ControlPlaneNotFoundError)\n      .addError(ControlPlaneStorageError),\n  )\n  .prefix(\"/v1\") {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/sources/http.ts",
    "content": "import {\n  HttpApiBuilder,\n  HttpServerRequest,\n  HttpServerResponse,\n} from \"@effect/platform\";\nimport type { ExecutionInteraction, Source, WorkspaceId } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  createSource,\n  getSource,\n  listSources,\n  removeSource,\n  updateSource,\n} from \"../../runtime/sources/sources-operations\";\nimport {\n  discoverSourceInspectionTools,\n  getSourceInspection,\n  getSourceInspectionToolDetail,\n} from \"../../runtime/sources/source-inspection\";\nimport {\n  completeSourceCredentialSetup,\n  getSourceCredentialInteraction,\n  submitSourceCredentialInteraction,\n} from \"../../runtime/local/operations\";\nimport { discoverSource } from \"../../runtime/sources/source-discovery\";\nimport { sourceAdapterRequiresInteractiveConnect } from \"../../runtime/sources/source-adapters\";\nimport {\n  RuntimeSourceAuthServiceTag,\n  type ExecutorAddSourceInput,\n} from \"../../runtime/sources/source-auth-service\";\n\nimport {\n  ControlPlaneBadRequestError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n} from \"../errors\";\nimport { ControlPlaneApi } from \"../api\";\nimport type { ConnectSourcePayload } from \"./api\";\nimport { resolveRequestedLocalWorkspace } from \"../local-context\";\n\nconst readHeader = (headers: unknown, name: string): string | null => {\n  if (headers == null || typeof headers !== \"object\") {\n    return null;\n  }\n\n  const record = headers as Record<string, unknown>;\n  const exact = record[name];\n  if (typeof exact === \"string\" && exact.length > 0) {\n    return exact;\n  }\n\n  const lower = record[name.toLowerCase()];\n  if (typeof lower === \"string\" && lower.length > 0) {\n    return lower;\n  }\n\n  return null;\n};\n\nconst resolveRequestOrigin = (request: { url: string; headers: unknown }): string | null => {\n  try {\n    return new URL(request.url).origin;\n  } catch {\n    const forwardedHost = readHeader(request.headers, \"x-forwarded-host\");\n    const host = forwardedHost ?? readHeader(request.headers, \"host\");\n    if (!host) {\n      return null;\n    }\n\n    const forwardedProto = readHeader(request.headers, \"x-forwarded-proto\");\n    const protocol = forwardedProto && forwardedProto.length > 0 ? forwardedProto : \"http\";\n    return `${protocol}://${host}`;\n  }\n};\n\nconst toBadRequestError = (operation: string, cause: unknown) => {\n  const message = cause instanceof Error ? cause.message : String(cause);\n  return new ControlPlaneBadRequestError({\n    operation,\n    message,\n    details: message,\n  });\n};\n\nconst isInteractiveConnectPayload = (\n  payload: ConnectSourcePayload,\n): payload is Extract<ConnectSourcePayload, { kind?: \"mcp\" }> =>\n  payload.kind === undefined || sourceAdapterRequiresInteractiveConnect(payload.kind);\n\nconst escapeHtml = (value: string): string =>\n  value\n    .replaceAll(\"&\", \"&amp;\")\n    .replaceAll(\"<\", \"&lt;\")\n    .replaceAll(\">\", \"&gt;\")\n    .replaceAll('\"', \"&quot;\")\n    .replaceAll(\"'\", \"&#39;\");\n\nconst serializeJsonForScript = (value: unknown): string =>\n  JSON.stringify(value)\n    .replaceAll(\"<\", \"\\\\u003c\")\n    .replaceAll(\">\", \"\\\\u003e\")\n    .replaceAll(\"&\", \"\\\\u0026\");\n\nconst SOURCE_OAUTH_RESULT_STORAGE_KEY_PREFIX = \"executor:oauth-result:\";\n\nconst credentialPageDocument = (input: {\n  title: string;\n  eyebrow: string;\n  message: string;\n  sourceLabel: string;\n  endpoint: string;\n  interactionId: string;\n  error?: string;\n  state?: \"pending\" | \"stored\" | \"continued\" | \"cancelled\" | \"inactive\";\n}) => `<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <title>${escapeHtml(input.title)}</title>\n    <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n    <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n    <link href=\"https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,400;0,9..40,500;0,9..40,600;1,9..40,400&family=DM+Mono:wght@400;500&display=swap\" rel=\"stylesheet\" />\n    <style>\n      :root {\n        --bg: #fafaf9;\n        --surface: #ffffff;\n        --text: #1c1917;\n        --text-secondary: #78716c;\n        --text-tertiary: #a8a29e;\n        --border: #e7e5e4;\n        --accent: #1d4ed8;\n        --accent-light: #eff6ff;\n        --green: #16a34a;\n        --green-light: #f0fdf4;\n        --green-border: #bbf7d0;\n        --red: #dc2626;\n        --red-light: #fef2f2;\n        --red-border: #fecaca;\n        --amber: #d97706;\n        --amber-light: #fffbeb;\n        --amber-border: #fde68a;\n      }\n\n      * { box-sizing: border-box; margin: 0; padding: 0; }\n\n      body {\n        min-height: 100vh;\n        background: var(--bg);\n        color: var(--text);\n        font-family: 'DM Sans', system-ui, -apple-system, sans-serif;\n        display: flex;\n        justify-content: center;\n        padding: 80px 24px 48px;\n        -webkit-font-smoothing: antialiased;\n      }\n\n      .page {\n        width: 100%;\n        max-width: 540px;\n      }\n\n      /* Status pill at the very top */\n      .status-pill {\n        display: inline-flex;\n        align-items: center;\n        gap: 7px;\n        padding: 5px 14px 5px 10px;\n        border-radius: 999px;\n        font-family: 'DM Mono', monospace;\n        font-size: 12px;\n        font-weight: 500;\n        letter-spacing: 0.01em;\n        margin-bottom: 28px;\n      }\n\n      .status-pill::before {\n        content: '';\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        flex-shrink: 0;\n      }\n\n      .status-pill[data-state='pending'] {\n        background: var(--amber-light);\n        color: var(--amber);\n        border: 1px solid var(--amber-border);\n      }\n      .status-pill[data-state='pending']::before { background: var(--amber); }\n\n      .status-pill[data-state='stored'] {\n        background: var(--green-light);\n        color: var(--green);\n        border: 1px solid var(--green-border);\n      }\n      .status-pill[data-state='stored']::before { background: var(--green); }\n\n      .status-pill[data-state='continued'] {\n        background: var(--green-light);\n        color: var(--green);\n        border: 1px solid var(--green-border);\n      }\n      .status-pill[data-state='continued']::before { background: var(--green); }\n\n      .status-pill[data-state='cancelled'],\n      .status-pill[data-state='inactive'] {\n        background: #f5f5f4;\n        color: var(--text-secondary);\n        border: 1px solid var(--border);\n      }\n      .status-pill[data-state='cancelled']::before,\n      .status-pill[data-state='inactive']::before { background: var(--text-tertiary); }\n\n      /* Title area */\n      h1 {\n        font-size: 28px;\n        font-weight: 600;\n        letter-spacing: -0.025em;\n        line-height: 1.2;\n        margin-bottom: 10px;\n      }\n\n      .subtitle {\n        font-size: 15px;\n        line-height: 1.6;\n        color: var(--text-secondary);\n      }\n\n      /* Divider */\n      hr {\n        border: none;\n        height: 1px;\n        background: var(--border);\n        margin: 36px 0;\n      }\n\n      /* Source detail rows */\n      .detail {\n        display: flex;\n        flex-direction: column;\n        gap: 6px;\n        margin-bottom: 24px;\n      }\n\n      .detail-label {\n        font-size: 13px;\n        font-weight: 500;\n        color: var(--text-secondary);\n      }\n\n      .detail-value {\n        font-size: 15px;\n        line-height: 1.5;\n        word-break: break-word;\n      }\n\n      .detail-mono {\n        font-family: 'DM Mono', monospace;\n        font-size: 13px;\n        line-height: 1.5;\n        padding: 10px 14px;\n        background: #f5f5f4;\n        border: 1px solid var(--border);\n        border-radius: 8px;\n        word-break: break-all;\n        color: var(--text);\n      }\n\n      .detail-id {\n        font-family: 'DM Mono', monospace;\n        font-size: 12px;\n        color: var(--text-tertiary);\n      }\n\n      /* Result card for stored/cancelled/inactive */\n      .result-card {\n        padding: 32px;\n        border-radius: 12px;\n        text-align: center;\n      }\n\n      .result-card.success {\n        background: var(--green-light);\n        border: 1px solid var(--green-border);\n      }\n\n      .result-card.neutral {\n        background: #f5f5f4;\n        border: 1px solid var(--border);\n      }\n\n      .result-card p {\n        font-size: 15px;\n        line-height: 1.6;\n        color: var(--text-secondary);\n      }\n\n      .result-card .result-heading {\n        font-weight: 600;\n        font-size: 15px;\n        color: var(--text);\n        margin-bottom: 6px;\n      }\n\n      /* Form */\n      .alert {\n        padding: 12px 14px;\n        border-radius: 8px;\n        background: var(--red-light);\n        border: 1px solid var(--red-border);\n        color: var(--red);\n        font-size: 14px;\n        line-height: 1.5;\n        margin-bottom: 20px;\n      }\n\n      .field { margin-bottom: 20px; }\n\n      label {\n        display: block;\n        font-size: 14px;\n        font-weight: 500;\n        margin-bottom: 6px;\n      }\n\n      input[type='password'] {\n        width: 100%;\n        padding: 10px 14px;\n        background: var(--surface);\n        border: 1px solid var(--border);\n        border-radius: 8px;\n        font-family: 'DM Mono', monospace;\n        font-size: 14px;\n        color: var(--text);\n        transition: border-color 0.15s, box-shadow 0.15s;\n      }\n\n      input[type='password']::placeholder { color: var(--text-tertiary); }\n\n      input[type='password']:focus {\n        outline: none;\n        border-color: var(--accent);\n        box-shadow: 0 0 0 3px rgba(29, 78, 216, 0.1);\n      }\n\n      .hint {\n        margin-top: 8px;\n        font-size: 13px;\n        line-height: 1.5;\n        color: var(--text-tertiary);\n      }\n\n      .actions {\n        display: flex;\n        gap: 10px;\n        margin-top: 24px;\n      }\n\n      button {\n        appearance: none;\n        border: none;\n        border-radius: 8px;\n        padding: 10px 20px;\n        font-family: inherit;\n        font-size: 14px;\n        font-weight: 500;\n        cursor: pointer;\n        transition: background 0.15s;\n      }\n\n      .primary {\n        background: var(--text);\n        color: var(--surface);\n      }\n      .primary:hover { background: #292524; }\n\n      .secondary {\n        background: transparent;\n        color: var(--text-secondary);\n        border: 1px solid var(--border);\n      }\n      .secondary:hover { background: #f5f5f4; }\n\n      @media (max-width: 540px) {\n        body { padding: 48px 20px 32px; }\n        h1 { font-size: 24px; }\n      }\n    </style>\n  </head>\n  <body>\n    <main class=\"page\">\n      <div class=\"status-pill\" data-state=\"${escapeHtml(input.state ?? \"pending\")}\">${escapeHtml(input.state ?? \"pending\")}</div>\n\n      <h1>${escapeHtml(input.title)}</h1>\n      <p class=\"subtitle\">${escapeHtml(input.message)}</p>\n\n      <hr />\n\n      <div class=\"detail\">\n        <span class=\"detail-label\">Source</span>\n        <span class=\"detail-value\">${escapeHtml(input.sourceLabel)}</span>\n      </div>\n\n      <div class=\"detail\">\n        <span class=\"detail-label\">API endpoint</span>\n        <div class=\"detail-mono\">${escapeHtml(input.endpoint)}</div>\n      </div>\n\n      <div class=\"detail\">\n        <span class=\"detail-label\">Interaction</span>\n        <span class=\"detail-id\">${escapeHtml(input.interactionId)}</span>\n      </div>\n\n      <hr />\n\n      ${\n        input.error\n          ? `<p class=\"alert\">${escapeHtml(input.error)}</p>`\n          : \"\"\n      }\n      ${\n        input.state === \"stored\"\n          ? `<div class=\"result-card success\">\n              <p class=\"result-heading\">Credential stored</p>\n              <p>Executor resumed the source connection request. You can close this window.</p>\n            </div>`\n          : input.state === \"continued\"\n            ? `<div class=\"result-card success\">\n                <p class=\"result-heading\">Continuing without auth</p>\n                <p>Executor resumed the source connection without stored credentials. You can close this window.</p>\n              </div>`\n          : input.state === \"cancelled\"\n            ? `<div class=\"result-card neutral\">\n                <p class=\"result-heading\">Request cancelled</p>\n                <p>Executor was notified. You can close this window.</p>\n              </div>`\n            : input.state === \"inactive\"\n              ? `<div class=\"result-card neutral\">\n                  <p class=\"result-heading\">No longer active</p>\n                  <p>This credential request has expired. Start a new source connection flow if needed.</p>\n                </div>`\n              : `<form method=\"post\">\n            <div class=\"field\">\n              <label for=\"token\">Personal access token</label>\n              <input\n                id=\"token\"\n                name=\"token\"\n                type=\"password\"\n                autocomplete=\"off\"\n                spellcheck=\"false\"\n                placeholder=\"ghp_...\"\n              />\n              <p class=\"hint\">\n                Add a token to enable authenticated requests, or continue without auth if this API supports public access.\n              </p>\n            </div>\n            <div class=\"actions\">\n              <button class=\"primary\" type=\"submit\" name=\"action\" value=\"submit\">Connect token</button>\n              <button class=\"secondary\" type=\"submit\" name=\"action\" value=\"continue\" formnovalidate>Continue without auth</button>\n              <button class=\"secondary\" type=\"submit\" name=\"action\" value=\"cancel\" formnovalidate>Cancel</button>\n            </div>\n          </form>`\n      }\n    </main>\n  </body>\n</html>`;\n\nconst sourceOAuthPopupResultDocument = (input: {\n  title: string;\n  message: string;\n  state: \"stored\" | \"cancelled\";\n  sessionId?: string | null;\n  payload:\n    | {\n      type: \"executor:source-oauth-result\";\n      ok: true;\n        sourceId: Source[\"id\"];\n      }\n    | {\n        type: \"executor:source-oauth-result\";\n        ok: false;\n        error: string;\n      };\n}) => `<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <title>${escapeHtml(input.title)}</title>\n    <style>\n      :root {\n        --bg: #fafaf9;\n        --surface: #ffffff;\n        --text: #1c1917;\n        --text-secondary: #78716c;\n        --border: #e7e5e4;\n        --green: #16a34a;\n        --green-light: #f0fdf4;\n        --green-border: #bbf7d0;\n        --red: #dc2626;\n        --red-light: #fef2f2;\n        --red-border: #fecaca;\n      }\n\n      * { box-sizing: border-box; margin: 0; padding: 0; }\n\n      body {\n        min-height: 100vh;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        background: var(--bg);\n        color: var(--text);\n        font-family: system-ui, -apple-system, sans-serif;\n        padding: 24px;\n      }\n\n      .card {\n        width: 100%;\n        max-width: 420px;\n        background: var(--surface);\n        border: 1px solid var(--border);\n        border-radius: 16px;\n        padding: 28px;\n        text-align: center;\n      }\n\n      .status {\n        display: inline-flex;\n        align-items: center;\n        justify-content: center;\n        padding: 6px 12px;\n        border-radius: 999px;\n        font-size: 12px;\n        font-weight: 600;\n        margin-bottom: 14px;\n      }\n\n      .status[data-state='stored'] {\n        background: var(--green-light);\n        border: 1px solid var(--green-border);\n        color: var(--green);\n      }\n\n      .status[data-state='cancelled'] {\n        background: var(--red-light);\n        border: 1px solid var(--red-border);\n        color: var(--red);\n      }\n\n      h1 {\n        font-size: 22px;\n        line-height: 1.2;\n        margin-bottom: 10px;\n      }\n\n      p {\n        color: var(--text-secondary);\n        font-size: 14px;\n        line-height: 1.6;\n      }\n    </style>\n  </head>\n  <body>\n    <main class=\"card\">\n      <div class=\"status\" data-state=\"${escapeHtml(input.state)}\">${escapeHtml(input.state === \"stored\" ? \"connected\" : \"failed\")}</div>\n      <h1>${escapeHtml(input.title)}</h1>\n      <p>${escapeHtml(input.message)}</p>\n    </main>\n    <script>\n      (() => {\n        const payload = ${serializeJsonForScript(input.payload)};\n        const storageKey = ${serializeJsonForScript(\n          input.sessionId\n            ? `${SOURCE_OAUTH_RESULT_STORAGE_KEY_PREFIX}${input.sessionId}`\n            : null,\n        )};\n        try {\n          if (storageKey) {\n            window.localStorage.setItem(storageKey, JSON.stringify(payload));\n          }\n        } catch {}\n        try {\n          if (window.opener) {\n            window.opener.postMessage(payload, window.location.origin);\n          }\n        } finally {\n          window.setTimeout(() => window.close(), 120);\n        }\n      })();\n    </script>\n  </body>\n</html>`;\n\nconst htmlResponse = (html: string, status = 200) =>\n  HttpServerResponse.html(html).pipe(\n    HttpServerResponse.setStatus(status),\n  );\n\nconst credentialErrorResponse = (input: {\n  title: string;\n  message: string;\n  status: number;\n}) =>\n  htmlResponse(\n    credentialPageDocument({\n      title: input.title,\n      eyebrow: \"Executor\",\n      message: input.message,\n      sourceLabel: \"Unavailable\",\n      endpoint: \"Unavailable\",\n      interactionId: \"unavailable\",\n      state: \"inactive\",\n      error: input.message,\n    }),\n    input.status,\n  );\n\nconst credentialErrorStatus = (\n  error: ControlPlaneBadRequestError | ControlPlaneNotFoundError | ControlPlaneStorageError,\n) =>\n  error instanceof ControlPlaneNotFoundError\n    ? 404\n    : error instanceof ControlPlaneBadRequestError\n      ? 400\n      : 500;\n\nconst credentialSubmitErrorResponse = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  interactionId: ExecutionInteraction[\"id\"];\n  message: string;\n  status: number;\n}) =>\n  getSourceCredentialInteraction({\n    workspaceId: input.workspaceId,\n    sourceId: input.sourceId,\n    interactionId: input.interactionId,\n  }).pipe(\n    Effect.match({\n      onFailure: () =>\n        credentialErrorResponse({\n          title: \"Source Credential Request Failed\",\n          message: input.message,\n          status: input.status,\n        }),\n      onSuccess: (interaction) =>\n        htmlResponse(\n          credentialPageDocument({\n            title: \"Configure Source Access\",\n            eyebrow: \"Executor\",\n            message: interaction.message,\n            sourceLabel: interaction.sourceLabel,\n            endpoint: interaction.endpoint,\n            interactionId: interaction.interactionId,\n            error: input.message,\n            state: \"pending\",\n          }),\n          input.status,\n        ),\n    }),\n  );\n\nexport const ControlPlaneSourcesLive = HttpApiBuilder.group(\n  ControlPlaneApi,\n  \"sources\",\n  (handlers) =>\n    handlers\n      .handle(\"discover\", ({ payload }) =>\n        discoverSource({\n          url: payload.url,\n          probeAuth: payload.probeAuth,\n        }).pipe(\n          Effect.catchAll((cause) =>\n            Effect.fail(toBadRequestError(\"sources.discover\", cause)),\n          ),\n        ),\n      )\n      .handle(\"connect\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"sources.connect\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            Effect.gen(function* () {\n              const request = yield* HttpServerRequest.HttpServerRequest;\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              const baseUrl = resolveRequestOrigin(request);\n\n\t              if (isInteractiveConnectPayload(payload)) {\n\t                return yield* sourceAuthService.connectMcpSource({\n                  workspaceId: path.workspaceId,\n                  actorAccountId: runtimeLocalWorkspace.installation.accountId,\n                  endpoint: payload.endpoint,\n                  name: payload.name,\n                  namespace: payload.namespace,\n                  transport: payload.transport,\n                  queryParams: payload.queryParams,\n                  headers: payload.headers,\n                  command: payload.command,\n                  args: payload.args,\n                  env: payload.env,\n                  cwd: payload.cwd,\n                  baseUrl,\n                });\n              }\n\n\t              return yield* sourceAuthService.addExecutorSource(\n\t                ({\n\t                  workspaceId: path.workspaceId,\n\t                  actorAccountId: runtimeLocalWorkspace.installation.accountId,\n\t                  executionId: null,\n\t                  interactionId: null,\n\t                  ...(payload as Record<string, unknown>),\n\t                } as ExecutorAddSourceInput),\n\t                { baseUrl },\n\t              );\n            }).pipe(\n              Effect.catchAll((cause) =>\n                Effect.fail(toBadRequestError(\"sources.connect\", cause)),\n              ),\n            )\n          ),\n        ),\n      )\n      .handle(\"connectBatch\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"sources.connectBatch\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            Effect.gen(function* () {\n              const request = yield* HttpServerRequest.HttpServerRequest;\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              const baseUrl = resolveRequestOrigin(request);\n\n              return yield* sourceAuthService.connectGoogleDiscoveryBatch({\n                workspaceId: path.workspaceId,\n                actorAccountId: runtimeLocalWorkspace.installation.accountId,\n                executionId: null,\n                interactionId: null,\n                workspaceOauthClientId: payload.workspaceOauthClientId,\n                sources: payload.sources,\n                baseUrl,\n              });\n            }).pipe(\n              Effect.catchAll((cause) =>\n                Effect.fail(toBadRequestError(\"sources.connectBatch\", cause)),\n              ),\n            ),\n          ),\n        ),\n      )\n      .handle(\"listWorkspaceOauthClients\", ({ path, urlParams }) =>\n        resolveRequestedLocalWorkspace(\"sources.listWorkspaceOauthClients\", path.workspaceId).pipe(\n          Effect.flatMap(() =>\n            Effect.gen(function* () {\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              return yield* sourceAuthService.listWorkspaceOauthClients({\n                workspaceId: path.workspaceId,\n                providerKey: urlParams.providerKey,\n              });\n            }).pipe(\n              Effect.catchAll((cause) =>\n                Effect.fail(toBadRequestError(\"sources.listWorkspaceOauthClients\", cause)),\n              ),\n            ),\n          ),\n        ),\n      )\n      .handle(\"createWorkspaceOauthClient\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"sources.createWorkspaceOauthClient\", path.workspaceId).pipe(\n          Effect.flatMap(() =>\n            Effect.gen(function* () {\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              return yield* sourceAuthService.createWorkspaceOauthClient({\n                workspaceId: path.workspaceId,\n                providerKey: payload.providerKey,\n                label: payload.label,\n                oauthClient: payload.oauthClient,\n              });\n            }).pipe(\n              Effect.catchAll((cause) =>\n                Effect.fail(toBadRequestError(\"sources.createWorkspaceOauthClient\", cause)),\n              ),\n            ),\n          ),\n        ),\n      )\n      .handle(\"removeWorkspaceOauthClient\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.removeWorkspaceOauthClient\", path.workspaceId).pipe(\n          Effect.flatMap(() =>\n            Effect.gen(function* () {\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              const removed = yield* sourceAuthService.removeWorkspaceOauthClient({\n                workspaceId: path.workspaceId,\n                oauthClientId: path.oauthClientId,\n              });\n\n              return { removed };\n            }).pipe(\n              Effect.catchAll((cause) =>\n                Effect.fail(toBadRequestError(\"sources.removeWorkspaceOauthClient\", cause)),\n              ),\n            ),\n          ),\n        ),\n      )\n      .handle(\"removeProviderAuthGrant\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.removeProviderAuthGrant\", path.workspaceId).pipe(\n          Effect.flatMap(() =>\n            Effect.gen(function* () {\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              const removed = yield* sourceAuthService.removeProviderAuthGrant({\n                workspaceId: path.workspaceId,\n                grantId: path.grantId,\n              }).pipe(\n                Effect.catchAll((cause) =>\n                  Effect.fail(toBadRequestError(\"sources.removeProviderAuthGrant\", cause)),\n                ),\n              );\n\n              return { removed };\n            }),\n          ),\n        ),\n      )\n      .handle(\"list\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.list\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            listSources({\n              workspaceId: path.workspaceId,\n              accountId: runtimeLocalWorkspace.installation.accountId,\n            })\n          ),\n        ),\n      )\n      .handle(\"create\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"sources.create\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            createSource({\n              workspaceId: path.workspaceId,\n              accountId: runtimeLocalWorkspace.installation.accountId,\n              payload,\n            })\n          ),\n        ),\n      )\n      .handle(\"get\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.get\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            getSource({\n              workspaceId: path.workspaceId,\n              sourceId: path.sourceId,\n              accountId: runtimeLocalWorkspace.installation.accountId,\n            })\n          ),\n        ),\n      )\n      .handle(\"inspection\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.inspection\", path.workspaceId).pipe(\n          Effect.zipRight(\n            getSourceInspection({\n              workspaceId: path.workspaceId,\n              sourceId: path.sourceId,\n            }),\n          ),\n        ),\n      )\n      .handle(\"inspectionTool\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.inspection_tool\", path.workspaceId).pipe(\n          Effect.zipRight(\n            getSourceInspectionToolDetail({\n              workspaceId: path.workspaceId,\n              sourceId: path.sourceId,\n              toolPath: path.toolPath,\n            }),\n          ),\n        ),\n      )\n      .handle(\"inspectionDiscover\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"sources.inspection_discover\", path.workspaceId).pipe(\n          Effect.zipRight(\n            discoverSourceInspectionTools({\n              workspaceId: path.workspaceId,\n              sourceId: path.sourceId,\n              payload,\n            }),\n          ),\n        ),\n      )\n      .handle(\"update\", ({ path, payload }) =>\n        resolveRequestedLocalWorkspace(\"sources.update\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            updateSource({\n              workspaceId: path.workspaceId,\n              sourceId: path.sourceId,\n              accountId: runtimeLocalWorkspace.installation.accountId,\n              payload,\n            })\n          ),\n        ),\n      )\n      .handle(\"remove\", ({ path }) =>\n        resolveRequestedLocalWorkspace(\"sources.remove\", path.workspaceId).pipe(\n          Effect.zipRight(\n            removeSource({\n              workspaceId: path.workspaceId,\n              sourceId: path.sourceId,\n            }),\n          ),\n        ),\n      )\n      .handle(\"credentialPage\", ({ path, urlParams }) =>\n        getSourceCredentialInteraction({\n          workspaceId: path.workspaceId,\n          sourceId: path.sourceId,\n          interactionId: urlParams.interactionId,\n        }).pipe(\n          Effect.map((interaction) =>\n            htmlResponse(\n              credentialPageDocument({\n                title: \"Configure Source Access\",\n                eyebrow: \"Executor\",\n                message: interaction.message,\n                sourceLabel: interaction.sourceLabel,\n                endpoint: interaction.endpoint,\n                interactionId: interaction.interactionId,\n                state: interaction.status === \"pending\" ? \"pending\" : \"inactive\",\n              }),\n            )\n          ),\n          Effect.catchTags({\n            ControlPlaneNotFoundError: (error) =>\n              Effect.succeed(\n                credentialErrorResponse({\n                  title: \"Source Credential Request Unavailable\",\n                  message: error.message,\n                  status: credentialErrorStatus(error),\n                }),\n              ),\n            ControlPlaneStorageError: (error) =>\n              Effect.succeed(\n                credentialErrorResponse({\n                  title: \"Source Credential Request Failed\",\n                  message: error.message,\n                  status: credentialErrorStatus(error),\n                }),\n              ),\n          }),\n        ),\n      )\n      .handle(\"credentialSubmit\", ({ path, urlParams, payload }) =>\n        submitSourceCredentialInteraction({\n          workspaceId: path.workspaceId,\n          sourceId: path.sourceId,\n          interactionId: urlParams.interactionId,\n          action:\n            payload.action === \"cancel\"\n              ? \"cancel\"\n              : payload.action === \"continue\"\n                ? \"continue\"\n                : \"submit\",\n          token: payload.token,\n        }).pipe(\n          Effect.map((result) =>\n            htmlResponse(\n              credentialPageDocument({\n                title:\n                  result.kind === \"stored\"\n                    ? \"Source Credential Stored\"\n                    : result.kind === \"continued\"\n                      ? \"Source Access Updated\"\n                    : \"Source Credential Request Cancelled\",\n                eyebrow: \"Executor\",\n                message:\n                  result.kind === \"stored\"\n                    ? \"Executor stored the credential and resumed the source connection.\"\n                    : result.kind === \"continued\"\n                      ? \"Executor resumed the source connection without stored credentials.\"\n                    : \"Executor cancelled the source credential request.\",\n                sourceLabel: result.sourceLabel,\n                endpoint: result.endpoint,\n                interactionId: urlParams.interactionId,\n                state:\n                  result.kind === \"stored\"\n                    ? \"stored\"\n                    : result.kind === \"continued\"\n                      ? \"continued\"\n                      : \"cancelled\",\n              }),\n            )\n          ),\n          Effect.catchTags({\n            ControlPlaneBadRequestError: (error) =>\n              credentialSubmitErrorResponse({\n                workspaceId: path.workspaceId,\n                sourceId: path.sourceId,\n                interactionId: urlParams.interactionId,\n                message: error.message,\n                status: credentialErrorStatus(error),\n              }),\n            ControlPlaneNotFoundError: (error) =>\n              Effect.succeed(\n                credentialErrorResponse({\n                  title: \"Source Credential Request Unavailable\",\n                  message: error.message,\n                  status: credentialErrorStatus(error),\n                }),\n              ),\n            ControlPlaneStorageError: (error) =>\n              Effect.succeed(\n                credentialErrorResponse({\n                  title: \"Source Credential Request Failed\",\n                  message: error.message,\n                  status: credentialErrorStatus(error),\n                }),\n              ),\n          }),\n        ),\n      )\n      .handle(\"credentialComplete\", ({ path, urlParams }) =>\n        completeSourceCredentialSetup({\n          workspaceId: path.workspaceId,\n          sourceId: path.sourceId,\n          state: urlParams.state,\n          code: urlParams.code,\n          error: urlParams.error,\n          errorDescription: urlParams.error_description,\n        }).pipe(\n          Effect.map((completed) =>\n            htmlResponse(\n              sourceOAuthPopupResultDocument({\n                title: \"Source connected\",\n                message: `Source connected: ${completed.source.id}. You can close this window.`,\n                state: \"stored\",\n                sessionId: completed.sessionId,\n                payload: {\n                  type: \"executor:source-oauth-result\",\n                  ok: true,\n                  sourceId: completed.source.id,\n                },\n              }),\n            ),\n          ),\n          Effect.catchAll((error) =>\n            Effect.succeed(\n              htmlResponse(\n                sourceOAuthPopupResultDocument({\n                  title: \"OAuth failed\",\n                  message: error instanceof Error ? error.message : \"Failed completing OAuth\",\n                  state: \"cancelled\",\n                  payload: {\n                    type: \"executor:source-oauth-result\",\n                    ok: false,\n                    error: error instanceof Error ? error.message : \"Failed completing OAuth\",\n                  },\n                }),\n                500,\n              ),\n            ),\n          ),\n        ),\n      )\n      .handle(\"providerOauthComplete\", ({ path, urlParams }) =>\n        resolveRequestedLocalWorkspace(\"sources.providerOauthComplete\", path.workspaceId).pipe(\n          Effect.flatMap((runtimeLocalWorkspace) =>\n            Effect.gen(function* () {\n              const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n              const completed = yield* sourceAuthService.completeProviderOauthCallback({\n                workspaceId: path.workspaceId,\n                actorAccountId: runtimeLocalWorkspace.installation.accountId,\n                state: urlParams.state,\n                code: urlParams.code,\n                error: urlParams.error,\n                errorDescription: urlParams.error_description,\n              });\n              const primarySource = completed.sources[0] ?? null;\n\n              return htmlResponse(\n                sourceOAuthPopupResultDocument({\n                  title: \"Sources connected\",\n                  message: `Connected ${completed.sources.length} source${completed.sources.length === 1 ? \"\" : \"s\"}. You can close this window.`,\n                  state: \"stored\",\n                  sessionId: completed.sessionId,\n                  payload: {\n                    type: \"executor:source-oauth-result\",\n                    ok: true,\n                    sourceId: primarySource?.id ?? (\"src_oauth_complete\" as Source[\"id\"]),\n                  },\n                }),\n              );\n            }).pipe(\n              Effect.catchAll((error) =>\n                Effect.succeed(\n                  htmlResponse(\n                    sourceOAuthPopupResultDocument({\n                      title: \"OAuth failed\",\n                      message: error instanceof Error ? error.message : \"Failed completing OAuth\",\n                      state: \"cancelled\",\n                      payload: {\n                        type: \"executor:source-oauth-result\",\n                        ok: false,\n                        error: error instanceof Error ? error.message : \"Failed completing OAuth\",\n                      },\n                    }),\n                    500,\n                  ),\n                ),\n              ),\n            ),\n          ),\n          Effect.catchAll((error) =>\n            Effect.succeed(\n              htmlResponse(\n                sourceOAuthPopupResultDocument({\n                  title: \"OAuth failed\",\n                  message: error instanceof Error ? error.message : \"Failed completing OAuth\",\n                  state: \"cancelled\",\n                  payload: {\n                    type: \"executor:source-oauth-result\",\n                    ok: false,\n                    error: error instanceof Error ? error.message : \"Failed completing OAuth\",\n                  },\n                }),\n                500,\n              ),\n            ),\n          ),\n        ),\n      ),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/api/string-schemas.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nexport const TrimmedNonEmptyStringSchema = Schema.Trim.pipe(\n  Schema.nonEmptyString(),\n);\n\nexport const OptionalTrimmedNonEmptyStringSchema = Schema.optional(\n  TrimmedNonEmptyStringSchema,\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/client.ts",
    "content": "import {\n  FetchHttpClient,\n  HttpApiClient,\n} from \"@effect/platform\";\nimport * as Effect from \"effect/Effect\";\n\nimport { ControlPlaneApi } from \"./api/api\";\n\nexport const createControlPlaneClient = (input: {\n  baseUrl: string;\n  accountId?: string;\n}) =>\n  HttpApiClient.make(ControlPlaneApi, {\n    baseUrl: input.baseUrl,\n  }).pipe(Effect.provide(FetchHttpClient.layer));\n\nexport type ControlPlaneClient = Effect.Effect.Success<\n  ReturnType<typeof createControlPlaneClient>\n>;\n"
  },
  {
    "path": "packages/platform/control-plane/src/index.ts",
    "content": "export * from \"./schema/index\";\nexport * from \"./api/index\";\nexport * from \"./runtime/index\";\nexport * from \"./client\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/__fixtures__/README.md",
    "content": "# Release Workspace Fixtures\n\nThese fixtures capture real `.executor` workspace layouts from released versions so newer code can test upgrade behavior against actual on-disk state.\n\nEach fixture directory should contain:\n\n- `fixture.json`: release metadata and the expected artifact outcome\n- `.executor/executor.jsonc`: a trimmed project config with only the captured source\n- `.executor/state/workspace-state.json`: a trimmed workspace state with only the captured source\n- `.executor/artifacts/sources/...`: the real artifact JSON and any sidecar files that release wrote\n\n`src/runtime/local/source-artifacts.test.ts` auto-discovers every fixture directory here that has a `fixture.json` file. Adding a new release fixture should not require changing the test.\n\n## Capture A New Release Fixture\n\nFrom the repo root:\n\n```bash\nbun run fixture:release:capture -- \\\n  --workspace-root /path/to/workspace \\\n  --source-id google-calendar \\\n  --release-version v1.2.4-beta.1 \\\n  --artifact-expectation readable \\\n  --description \"Google Calendar workspace captured from v1.2.4-beta.1\"\n```\n\nUse `cache-miss` instead of `readable` when a future runtime should intentionally discard that artifact and resync it.\n\nThe capture command writes a new fixture directory under this folder using the pattern `<release-version>-<source-id>-workspace`.\n\n## Release Checklist\n\nOn releases where you want upgrade coverage:\n\n1. Start from a real workspace that has a fully synced source on the released version.\n2. Run `bun run fixture:release:capture -- ...` for that source.\n3. Review the fixture for secrets before committing it.\n4. Run `bun run --cwd packages/platform/control-plane test -- src/runtime/local/source-artifacts.test.ts`.\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/__fixtures__/v1.2.3-google-calendar-workspace/.executor/artifacts/sources/google-calendar/documents/doc_3c24a6731267de91.txt",
    "content": "{\n  \"ownerDomain\": \"google.com\",\n  \"servicePath\": \"calendar/v3/\",\n  \"documentationLink\": \"https://developers.google.com/workspace/calendar/firstapp\",\n  \"auth\": {\n    \"oauth2\": {\n      \"scopes\": {\n        \"https://www.googleapis.com/auth/calendar.calendarlist\": {\n          \"description\": \"See, add, and remove Google calendars you’re subscribed to\"\n        },\n        \"https://www.googleapis.com/auth/calendar.events\": {\n          \"description\": \"View and edit events on all your calendars\"\n        },\n        \"https://www.googleapis.com/auth/calendar.acls\": {\n          \"description\": \"See and change the sharing permissions of Google calendars you own\"\n        },\n        \"https://www.googleapis.com/auth/calendar.readonly\": {\n          \"description\": \"See and download any calendar you can access using your Google Calendar\"\n        },\n        \"https://www.googleapis.com/auth/calendar.events.owned\": {\n          \"description\": \"See, create, change, and delete events on Google calendars you own\"\n        },\n        \"https://www.googleapis.com/auth/calendar.events.owned.readonly\": {\n          \"description\": \"See the events on Google calendars you own\"\n        },\n        \"https://www.googleapis.com/auth/calendar.freebusy\": {\n          \"description\": \"View your availability in your calendars\"\n        },\n        \"https://www.googleapis.com/auth/calendar.events.freebusy\": {\n          \"description\": \"See the availability on Google calendars you have access to\"\n        },\n        \"https://www.googleapis.com/auth/calendar.app.created\": {\n          \"description\": \"Make secondary Google calendars, and see, create, change, and delete events on them\"\n        },\n        \"https://www.googleapis.com/auth/calendar\": {\n          \"description\": \"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\"\n        },\n        \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\": {\n          \"description\": \"See the list of Google calendars you’re subscribed to\"\n        },\n        \"https://www.googleapis.com/auth/calendar.settings.readonly\": {\n          \"description\": \"View your Calendar settings\"\n        },\n        \"https://www.googleapis.com/auth/calendar.calendars.readonly\": {\n          \"description\": \"See the title, description, default time zone, and other properties of Google calendars you have access to\"\n        },\n        \"https://www.googleapis.com/auth/calendar.events.public.readonly\": {\n          \"description\": \"See the events on public calendars\"\n        },\n        \"https://www.googleapis.com/auth/calendar.events.readonly\": {\n          \"description\": \"View events on all your calendars\"\n        },\n        \"https://www.googleapis.com/auth/calendar.acls.readonly\": {\n          \"description\": \"See the sharing permissions of Google calendars you own\"\n        },\n        \"https://www.googleapis.com/auth/calendar.calendars\": {\n          \"description\": \"See and change the properties of Google calendars you have access to, and create secondary calendars\"\n        }\n      }\n    }\n  },\n  \"rootUrl\": \"https://www.googleapis.com/\",\n  \"version\": \"v3\",\n  \"icons\": {\n    \"x16\": \"http://fonts.gstatic.com/s/i/productlogos/calendar_2020q4/v8/web-16dp/logo_calendar_2020q4_color_1x_web_16dp.png\",\n    \"x32\": \"http://fonts.gstatic.com/s/i/productlogos/calendar_2020q4/v8/web-32dp/logo_calendar_2020q4_color_1x_web_32dp.png\"\n  },\n  \"protocol\": \"rest\",\n  \"name\": \"calendar\",\n  \"kind\": \"discovery#restDescription\",\n  \"ownerName\": \"Google\",\n  \"title\": \"Calendar API\",\n  \"baseUrl\": \"https://www.googleapis.com/calendar/v3/\",\n  \"description\": \"Manipulates events and other calendar data.\",\n  \"discoveryVersion\": \"v1\",\n  \"id\": \"calendar:v3\",\n  \"resources\": {\n    \"calendars\": {\n      \"methods\": {\n        \"patch\": {\n          \"id\": \"calendar.calendars.patch\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendars\"\n          ],\n          \"path\": \"calendars/{calendarId}\",\n          \"response\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"request\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"description\": \"Updates metadata for a calendar. This method supports patch semantics.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"PATCH\"\n        },\n        \"clear\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.calendars\"\n          ],\n          \"id\": \"calendar.calendars.clear\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"httpMethod\": \"POST\",\n          \"path\": \"calendars/{calendarId}/clear\",\n          \"description\": \"Clears a primary calendar. This operation deletes all events associated with the primary calendar of an account.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ]\n        },\n        \"insert\": {\n          \"httpMethod\": \"POST\",\n          \"response\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"path\": \"calendars\",\n          \"description\": \"Creates a secondary calendar.\\nThe authenticated user for the request is made the data owner of the new calendar.\\n\\nNote: We recommend to authenticate as the intended data owner of the calendar. You can use domain-wide delegation of authority to allow applications to act on behalf of a specific user. Don't use a service account for authentication. If you use a service account for authentication, the service account is the data owner, which can lead to unexpected behavior. For example, if a service account is the data owner, data ownership cannot be transferred.\",\n          \"request\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendars\"\n          ],\n          \"id\": \"calendar.calendars.insert\"\n        },\n        \"update\": {\n          \"request\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"httpMethod\": \"PUT\",\n          \"description\": \"Updates metadata for a calendar.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendars\"\n          ],\n          \"id\": \"calendar.calendars.update\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            }\n          },\n          \"response\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"path\": \"calendars/{calendarId}\"\n        },\n        \"delete\": {\n          \"httpMethod\": \"DELETE\",\n          \"path\": \"calendars/{calendarId}\",\n          \"description\": \"Deletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendars\"\n          ],\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"id\": \"calendar.calendars.delete\"\n        },\n        \"get\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendars\",\n            \"https://www.googleapis.com/auth/calendar.calendars.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"id\": \"calendar.calendars.get\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"Calendar\"\n          },\n          \"path\": \"calendars/{calendarId}\",\n          \"description\": \"Returns metadata for a calendar.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ]\n        }\n      }\n    },\n    \"freebusy\": {\n      \"methods\": {\n        \"query\": {\n          \"request\": {\n            \"$ref\": \"FreeBusyRequest\"\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"id\": \"calendar.freebusy.query\",\n          \"httpMethod\": \"POST\",\n          \"response\": {\n            \"$ref\": \"FreeBusyResponse\"\n          },\n          \"path\": \"freeBusy\",\n          \"description\": \"Returns free/busy information for a set of calendars.\"\n        }\n      }\n    },\n    \"acl\": {\n      \"methods\": {\n        \"insert\": {\n          \"httpMethod\": \"POST\",\n          \"description\": \"Creates an access control rule.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"request\": {\n            \"$ref\": \"AclRule\"\n          },\n          \"response\": {\n            \"$ref\": \"AclRule\"\n          },\n          \"path\": \"calendars/{calendarId}/acl\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\"\n          ],\n          \"id\": \"calendar.acl.insert\",\n          \"parameters\": {\n            \"sendNotifications\": {\n              \"description\": \"Whether to send notifications about the calendar sharing change. Optional. The default is True.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          }\n        },\n        \"patch\": {\n          \"path\": \"calendars/{calendarId}/acl/{ruleId}\",\n          \"response\": {\n            \"$ref\": \"AclRule\"\n          },\n          \"id\": \"calendar.acl.patch\",\n          \"parameters\": {\n            \"ruleId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"ACL rule identifier.\",\n              \"location\": \"path\"\n            },\n            \"sendNotifications\": {\n              \"description\": \"Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\"\n          ],\n          \"description\": \"Updates an access control rule. This method supports patch semantics.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"ruleId\"\n          ],\n          \"httpMethod\": \"PATCH\",\n          \"request\": {\n            \"$ref\": \"AclRule\"\n          }\n        },\n        \"delete\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\"\n          ],\n          \"parameters\": {\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"ruleId\": {\n              \"description\": \"ACL rule identifier.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"id\": \"calendar.acl.delete\",\n          \"httpMethod\": \"DELETE\",\n          \"path\": \"calendars/{calendarId}/acl/{ruleId}\",\n          \"description\": \"Deletes an access control rule.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"ruleId\"\n          ]\n        },\n        \"list\": {\n          \"description\": \"Returns the rules in the access control list for the calendar.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"GET\",\n          \"supportsSubscription\": true,\n          \"path\": \"calendars/{calendarId}/acl\",\n          \"response\": {\n            \"$ref\": \"Acl\"\n          },\n          \"parameters\": {\n            \"pageToken\": {\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"showDeleted\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to \\\"none\\\". Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"maxResults\": {\n              \"type\": \"integer\",\n              \"description\": \"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\",\n              \"location\": \"query\",\n              \"format\": \"int32\",\n              \"minimum\": \"1\"\n            },\n            \"syncToken\": {\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All entries deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            }\n          },\n          \"id\": \"calendar.acl.list\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\",\n            \"https://www.googleapis.com/auth/calendar.acls.readonly\"\n          ]\n        },\n        \"get\": {\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"AclRule\"\n          },\n          \"path\": \"calendars/{calendarId}/acl/{ruleId}\",\n          \"description\": \"Returns an access control rule.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"ruleId\"\n          ],\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\",\n            \"https://www.googleapis.com/auth/calendar.acls.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"ruleId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"ACL rule identifier.\",\n              \"location\": \"path\"\n            }\n          },\n          \"id\": \"calendar.acl.get\"\n        },\n        \"watch\": {\n          \"path\": \"calendars/{calendarId}/acl/watch\",\n          \"response\": {\n            \"$ref\": \"Channel\"\n          },\n          \"id\": \"calendar.acl.watch\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"maxResults\": {\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"description\": \"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"integer\"\n            },\n            \"syncToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All entries deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\"\n            },\n            \"showDeleted\": {\n              \"description\": \"Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to \\\"none\\\". Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"pageToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\",\n            \"https://www.googleapis.com/auth/calendar.acls.readonly\"\n          ],\n          \"description\": \"Watch for changes to ACL resources.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"POST\",\n          \"supportsSubscription\": true,\n          \"request\": {\n            \"$ref\": \"Channel\",\n            \"parameterName\": \"resource\"\n          }\n        },\n        \"update\": {\n          \"response\": {\n            \"$ref\": \"AclRule\"\n          },\n          \"path\": \"calendars/{calendarId}/acl/{ruleId}\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\"\n          ],\n          \"parameters\": {\n            \"sendNotifications\": {\n              \"description\": \"Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"ruleId\": {\n              \"description\": \"ACL rule identifier.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"id\": \"calendar.acl.update\",\n          \"httpMethod\": \"PUT\",\n          \"description\": \"Updates an access control rule.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"ruleId\"\n          ],\n          \"request\": {\n            \"$ref\": \"AclRule\"\n          }\n        }\n      }\n    },\n    \"calendarList\": {\n      \"methods\": {\n        \"patch\": {\n          \"path\": \"users/me/calendarList/{calendarId}\",\n          \"response\": {\n            \"$ref\": \"CalendarListEntry\"\n          },\n          \"id\": \"calendar.calendarList.patch\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"colorRgbFormat\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\"\n          ],\n          \"description\": \"Updates an existing calendar on the user's calendar list. This method supports patch semantics.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"PATCH\",\n          \"request\": {\n            \"$ref\": \"CalendarListEntry\"\n          }\n        },\n        \"insert\": {\n          \"httpMethod\": \"POST\",\n          \"response\": {\n            \"$ref\": \"CalendarListEntry\"\n          },\n          \"path\": \"users/me/calendarList\",\n          \"description\": \"Inserts an existing calendar into the user's calendar list.\",\n          \"request\": {\n            \"$ref\": \"CalendarListEntry\"\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\"\n          ],\n          \"id\": \"calendar.calendarList.insert\",\n          \"parameters\": {\n            \"colorRgbFormat\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.\",\n              \"location\": \"query\"\n            }\n          }\n        },\n        \"watch\": {\n          \"description\": \"Watch for changes to CalendarList resources.\",\n          \"httpMethod\": \"POST\",\n          \"supportsSubscription\": true,\n          \"request\": {\n            \"$ref\": \"Channel\",\n            \"parameterName\": \"resource\"\n          },\n          \"path\": \"users/me/calendarList/watch\",\n          \"response\": {\n            \"$ref\": \"Channel\"\n          },\n          \"id\": \"calendar.calendarList.watch\",\n          \"parameters\": {\n            \"maxResults\": {\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"description\": \"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"integer\"\n            },\n            \"showHidden\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to show hidden entries. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"syncToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. If only read-only fields such as calendar properties or ACLs have changed, the entry won't be returned. All entries deleted and hidden since the previous list request will always be in the result set and it is not allowed to set showDeleted neither showHidden to False.\\nTo ensure client state consistency minAccessRole query parameter cannot be specified together with nextSyncToken.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\"\n            },\n            \"minAccessRole\": {\n              \"enum\": [\n                \"freeBusyReader\",\n                \"owner\",\n                \"reader\",\n                \"writer\"\n              ],\n              \"enumDescriptions\": [\n                \"The user can read free/busy information.\",\n                \"The user can read and modify events and access control lists.\",\n                \"The user can read events that are not private.\",\n                \"The user can read and modify events.\"\n              ],\n              \"type\": \"string\",\n              \"description\": \"The minimum access role for the user in the returned entries. Optional. The default is no restriction.\",\n              \"location\": \"query\"\n            },\n            \"showDeleted\": {\n              \"description\": \"Whether to include deleted calendar list entries in the result. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"pageToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ]\n        },\n        \"update\": {\n          \"path\": \"users/me/calendarList/{calendarId}\",\n          \"response\": {\n            \"$ref\": \"CalendarListEntry\"\n          },\n          \"id\": \"calendar.calendarList.update\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"colorRgbFormat\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\"\n          ],\n          \"description\": \"Updates an existing calendar on the user's calendar list.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"PUT\",\n          \"request\": {\n            \"$ref\": \"CalendarListEntry\"\n          }\n        },\n        \"delete\": {\n          \"path\": \"users/me/calendarList/{calendarId}\",\n          \"description\": \"Removes a calendar from the user's calendar list.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"DELETE\",\n          \"id\": \"calendar.calendarList.delete\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\"\n          ]\n        },\n        \"list\": {\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"CalendarList\"\n          },\n          \"supportsSubscription\": true,\n          \"path\": \"users/me/calendarList\",\n          \"description\": \"Returns the calendars on the user's calendar list.\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"parameters\": {\n            \"showHidden\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to show hidden entries. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"maxResults\": {\n              \"type\": \"integer\",\n              \"description\": \"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\",\n              \"location\": \"query\",\n              \"format\": \"int32\",\n              \"minimum\": \"1\"\n            },\n            \"minAccessRole\": {\n              \"description\": \"The minimum access role for the user in the returned entries. Optional. The default is no restriction.\",\n              \"location\": \"query\",\n              \"enum\": [\n                \"freeBusyReader\",\n                \"owner\",\n                \"reader\",\n                \"writer\"\n              ],\n              \"enumDescriptions\": [\n                \"The user can read free/busy information.\",\n                \"The user can read and modify events and access control lists.\",\n                \"The user can read events that are not private.\",\n                \"The user can read and modify events.\"\n              ],\n              \"type\": \"string\"\n            },\n            \"syncToken\": {\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. If only read-only fields such as calendar properties or ACLs have changed, the entry won't be returned. All entries deleted and hidden since the previous list request will always be in the result set and it is not allowed to set showDeleted neither showHidden to False.\\nTo ensure client state consistency minAccessRole query parameter cannot be specified together with nextSyncToken.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"pageToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\"\n            },\n            \"showDeleted\": {\n              \"description\": \"Whether to include deleted calendar list entries in the result. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            }\n          },\n          \"id\": \"calendar.calendarList.list\"\n        },\n        \"get\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"id\": \"calendar.calendarList.get\",\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"CalendarListEntry\"\n          },\n          \"path\": \"users/me/calendarList/{calendarId}\",\n          \"description\": \"Returns a calendar from the user's calendar list.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ]\n        }\n      }\n    },\n    \"channels\": {\n      \"methods\": {\n        \"stop\": {\n          \"request\": {\n            \"$ref\": \"Channel\",\n            \"parameterName\": \"resource\"\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.acls\",\n            \"https://www.googleapis.com/auth/calendar.acls.readonly\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\",\n            \"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.public.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\",\n            \"https://www.googleapis.com/auth/calendar.settings.readonly\"\n          ],\n          \"id\": \"calendar.channels.stop\",\n          \"httpMethod\": \"POST\",\n          \"path\": \"channels/stop\",\n          \"description\": \"Stop watching resources through this channel\"\n        }\n      }\n    },\n    \"colors\": {\n      \"methods\": {\n        \"get\": {\n          \"path\": \"colors\",\n          \"description\": \"Returns the color definitions for calendars and events.\",\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"Colors\"\n          },\n          \"id\": \"calendar.colors.get\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist\",\n            \"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\",\n            \"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.public.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ]\n        }\n      }\n    },\n    \"settings\": {\n      \"methods\": {\n        \"watch\": {\n          \"response\": {\n            \"$ref\": \"Channel\"\n          },\n          \"path\": \"users/me/settings/watch\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.readonly\",\n            \"https://www.googleapis.com/auth/calendar.settings.readonly\"\n          ],\n          \"id\": \"calendar.settings.watch\",\n          \"parameters\": {\n            \"syncToken\": {\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"maxResults\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\",\n              \"minimum\": \"1\",\n              \"description\": \"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\",\n              \"location\": \"query\"\n            },\n            \"pageToken\": {\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            }\n          },\n          \"httpMethod\": \"POST\",\n          \"supportsSubscription\": true,\n          \"description\": \"Watch for changes to Settings resources.\",\n          \"request\": {\n            \"$ref\": \"Channel\",\n            \"parameterName\": \"resource\"\n          }\n        },\n        \"get\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.readonly\",\n            \"https://www.googleapis.com/auth/calendar.settings.readonly\"\n          ],\n          \"id\": \"calendar.settings.get\",\n          \"parameters\": {\n            \"setting\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"The id of the user setting.\",\n              \"location\": \"path\"\n            }\n          },\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"Setting\"\n          },\n          \"path\": \"users/me/settings/{setting}\",\n          \"description\": \"Returns a single user setting.\",\n          \"parameterOrder\": [\n            \"setting\"\n          ]\n        },\n        \"list\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.readonly\",\n            \"https://www.googleapis.com/auth/calendar.settings.readonly\"\n          ],\n          \"parameters\": {\n            \"pageToken\": {\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"maxResults\": {\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"description\": \"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"integer\"\n            },\n            \"syncToken\": {\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            }\n          },\n          \"id\": \"calendar.settings.list\",\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"Settings\"\n          },\n          \"supportsSubscription\": true,\n          \"path\": \"users/me/settings\",\n          \"description\": \"Returns all user settings for the authenticated user.\"\n        }\n      }\n    },\n    \"events\": {\n      \"methods\": {\n        \"update\": {\n          \"request\": {\n            \"$ref\": \"Event\"\n          },\n          \"description\": \"Updates an event.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"eventId\"\n          ],\n          \"httpMethod\": \"PUT\",\n          \"parameters\": {\n            \"supportsAttachments\": {\n              \"description\": \"Whether API client performing operation supports event attachments. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"maxAttendees\": {\n              \"type\": \"integer\",\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\",\n              \"minimum\": \"1\",\n              \"format\": \"int32\"\n            },\n            \"alwaysIncludeEmail\": {\n              \"description\": \"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"eventId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Event identifier.\",\n              \"location\": \"path\"\n            },\n            \"sendNotifications\": {\n              \"type\": \"boolean\",\n              \"description\": \"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the event update (for example, description changes, etc.). Note that some emails might still be sent even if you set the value to false. The default is false.\",\n              \"location\": \"query\"\n            },\n            \"sendUpdates\": {\n              \"description\": \"Guests who should receive notifications about the event update (for example, title changes, etc.).\",\n              \"location\": \"query\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"all\",\n                \"externalOnly\",\n                \"none\"\n              ],\n              \"enumDescriptions\": [\n                \"Notifications are sent to all guests.\",\n                \"Notifications are sent to non-Google Calendar guests only.\",\n                \"No notifications are sent. For calendar migration tasks, consider using the Events.import method instead.\"\n              ]\n            },\n            \"conferenceDataVersion\": {\n              \"format\": \"int32\",\n              \"minimum\": \"0\",\n              \"description\": \"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\",\n              \"location\": \"query\",\n              \"type\": \"integer\",\n              \"maximum\": \"1\"\n            }\n          },\n          \"id\": \"calendar.events.update\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"path\": \"calendars/{calendarId}/events/{eventId}\",\n          \"response\": {\n            \"$ref\": \"Event\"\n          }\n        },\n        \"watch\": {\n          \"request\": {\n            \"$ref\": \"Channel\",\n            \"parameterName\": \"resource\"\n          },\n          \"description\": \"Watch for changes to Events resources.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"POST\",\n          \"supportsSubscription\": true,\n          \"id\": \"calendar.events.watch\",\n          \"parameters\": {\n            \"iCalUID\": {\n              \"type\": \"string\",\n              \"description\": \"Specifies an event ID in the iCalendar format to be provided in the response. Optional. Use this if you want to search for an event by its iCalendar ID.\",\n              \"location\": \"query\"\n            },\n            \"updatedMin\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showDeleted. Optional. The default is not to filter by last modification time.\",\n              \"location\": \"query\"\n            },\n            \"showDeleted\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include deleted events (with status equals \\\"cancelled\\\") in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if showDeleted and singleEvents are both False. If showDeleted and singleEvents are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"eventTypes\": {\n              \"description\": \"Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types.\",\n              \"repeated\": true,\n              \"location\": \"query\",\n              \"enum\": [\n                \"birthday\",\n                \"default\",\n                \"focusTime\",\n                \"fromGmail\",\n                \"outOfOffice\",\n                \"workingLocation\"\n              ],\n              \"enumDescriptions\": [\n                \"Special all-day events with an annual recurrence.\",\n                \"Regular events.\",\n                \"Focus time events.\",\n                \"Events from Gmail.\",\n                \"Out of office events.\",\n                \"Working location events.\"\n              ],\n              \"type\": \"string\"\n            },\n            \"timeZone\": {\n              \"description\": \"Time zone used in the response. Optional. The default is the time zone of the calendar.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"singleEvents\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"timeMax\": {\n              \"description\": \"Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMin is set, timeMax must be greater than timeMin.\",\n              \"location\": \"query\",\n              \"format\": \"date-time\",\n              \"type\": \"string\"\n            },\n            \"pageToken\": {\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"q\": {\n              \"type\": \"string\",\n              \"description\": \"Free text search terms to find events that match these terms in the following fields:\\n\\n- summary \\n- description \\n- location \\n- attendee's displayName \\n- attendee's email \\n- organizer's displayName \\n- organizer's email \\n- workingLocationProperties.officeLocation.buildingId \\n- workingLocationProperties.officeLocation.deskId \\n- workingLocationProperties.officeLocation.label \\n- workingLocationProperties.customLocation.label \\nThese search terms also match predefined keywords against all display title translations of working location, out-of-office, and focus-time events. For example, searching for \\\"Office\\\" or \\\"Bureau\\\" returns working location events of type officeLocation, whereas searching for \\\"Out of office\\\" or \\\"Abwesend\\\" returns out-of-office events. Optional.\",\n              \"location\": \"query\"\n            },\n            \"timeMin\": {\n              \"format\": \"date-time\",\n              \"type\": \"string\",\n              \"description\": \"Lower bound (exclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax.\",\n              \"location\": \"query\"\n            },\n            \"orderBy\": {\n              \"enum\": [\n                \"startTime\",\n                \"updated\"\n              ],\n              \"enumDescriptions\": [\n                \"Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter singleEvents is True)\",\n                \"Order by last modification time (ascending).\"\n              ],\n              \"type\": \"string\",\n              \"description\": \"The order of the events returned in the result. Optional. The default is an unspecified, stable order.\",\n              \"location\": \"query\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"sharedExtendedProperty\": {\n              \"description\": \"Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.\",\n              \"repeated\": true,\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"maxAttendees\": {\n              \"type\": \"integer\",\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\"\n            },\n            \"showHiddenInvitations\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include hidden invitations in the result. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"privateExtendedProperty\": {\n              \"type\": \"string\",\n              \"description\": \"Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.\",\n              \"repeated\": true,\n              \"location\": \"query\"\n            },\n            \"syncToken\": {\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All events deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nThere are several query parameters that cannot be specified together with nextSyncToken to ensure consistency of the client state.\\n\\nThese are: \\n- iCalUID \\n- orderBy \\n- privateExtendedProperty \\n- q \\n- sharedExtendedProperty \\n- timeMin \\n- timeMax \\n- updatedMin All other query parameters should be the same as for the initial synchronization to avoid undefined behavior. If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"alwaysIncludeEmail\": {\n              \"description\": \"Deprecated and ignored.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"maxResults\": {\n              \"type\": \"integer\",\n              \"default\": \"250\",\n              \"format\": \"int32\",\n              \"minimum\": \"1\",\n              \"description\": \"Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\",\n            \"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.public.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"path\": \"calendars/{calendarId}/events/watch\",\n          \"response\": {\n            \"$ref\": \"Channel\"\n          }\n        },\n        \"get\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\",\n            \"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.public.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"id\": \"calendar.events.get\",\n          \"parameters\": {\n            \"alwaysIncludeEmail\": {\n              \"description\": \"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"eventId\": {\n              \"description\": \"Event identifier.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"maxAttendees\": {\n              \"type\": \"integer\",\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\",\n              \"minimum\": \"1\",\n              \"format\": \"int32\"\n            },\n            \"timeZone\": {\n              \"description\": \"Time zone used in the response. Optional. The default is the time zone of the calendar.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            }\n          },\n          \"httpMethod\": \"GET\",\n          \"response\": {\n            \"$ref\": \"Event\"\n          },\n          \"path\": \"calendars/{calendarId}/events/{eventId}\",\n          \"description\": \"Returns an event based on its Google Calendar ID. To retrieve an event using its iCalendar ID, call the events.list method using the iCalUID parameter.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"eventId\"\n          ]\n        },\n        \"delete\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"eventId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Event identifier.\",\n              \"location\": \"path\"\n            },\n            \"sendNotifications\": {\n              \"type\": \"boolean\",\n              \"description\": \"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the deletion of the event. Note that some emails might still be sent even if you set the value to false. The default is false.\",\n              \"location\": \"query\"\n            },\n            \"sendUpdates\": {\n              \"description\": \"Guests who should receive notifications about the deletion of the event.\",\n              \"location\": \"query\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"all\",\n                \"externalOnly\",\n                \"none\"\n              ],\n              \"enumDescriptions\": [\n                \"Notifications are sent to all guests.\",\n                \"Notifications are sent to non-Google Calendar guests only.\",\n                \"No notifications are sent. For calendar migration tasks, consider using the Events.import method instead.\"\n              ]\n            }\n          },\n          \"id\": \"calendar.events.delete\",\n          \"httpMethod\": \"DELETE\",\n          \"path\": \"calendars/{calendarId}/events/{eventId}\",\n          \"description\": \"Deletes an event.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"eventId\"\n          ]\n        },\n        \"instances\": {\n          \"response\": {\n            \"$ref\": \"Events\"\n          },\n          \"path\": \"calendars/{calendarId}/events/{eventId}/instances\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\",\n            \"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.public.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"parameters\": {\n            \"originalStart\": {\n              \"type\": \"string\",\n              \"description\": \"The original start time of the instance in the result. Optional.\",\n              \"location\": \"query\"\n            },\n            \"timeMax\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset.\",\n              \"location\": \"query\"\n            },\n            \"alwaysIncludeEmail\": {\n              \"description\": \"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"maxResults\": {\n              \"description\": \"Maximum number of events returned on one result page. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\",\n              \"location\": \"query\",\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"type\": \"integer\"\n            },\n            \"maxAttendees\": {\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\",\n              \"type\": \"integer\"\n            },\n            \"timeZone\": {\n              \"description\": \"Time zone used in the response. Optional. The default is the time zone of the calendar.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"eventId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Recurring event identifier.\",\n              \"location\": \"path\"\n            },\n            \"pageToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\"\n            },\n            \"showDeleted\": {\n              \"description\": \"Whether to include deleted events (with status equals \\\"cancelled\\\") in the result. Cancelled instances of recurring events will still be included if singleEvents is False. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"timeMin\": {\n              \"description\": \"Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset.\",\n              \"location\": \"query\",\n              \"format\": \"date-time\",\n              \"type\": \"string\"\n            }\n          },\n          \"id\": \"calendar.events.instances\",\n          \"httpMethod\": \"GET\",\n          \"supportsSubscription\": true,\n          \"description\": \"Returns instances of the specified recurring event.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"eventId\"\n          ]\n        },\n        \"list\": {\n          \"id\": \"calendar.events.list\",\n          \"parameters\": {\n            \"timeMax\": {\n              \"description\": \"Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMin is set, timeMax must be greater than timeMin.\",\n              \"location\": \"query\",\n              \"format\": \"date-time\",\n              \"type\": \"string\"\n            },\n            \"timeZone\": {\n              \"description\": \"Time zone used in the response. Optional. The default is the time zone of the calendar.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"singleEvents\": {\n              \"description\": \"Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"eventTypes\": {\n              \"enum\": [\n                \"birthday\",\n                \"default\",\n                \"focusTime\",\n                \"fromGmail\",\n                \"outOfOffice\",\n                \"workingLocation\"\n              ],\n              \"enumDescriptions\": [\n                \"Special all-day events with an annual recurrence.\",\n                \"Regular events.\",\n                \"Focus time events.\",\n                \"Events from Gmail.\",\n                \"Out of office events.\",\n                \"Working location events.\"\n              ],\n              \"type\": \"string\",\n              \"description\": \"Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types.\",\n              \"repeated\": true,\n              \"location\": \"query\"\n            },\n            \"iCalUID\": {\n              \"description\": \"Specifies an event ID in the iCalendar format to be provided in the response. Optional. Use this if you want to search for an event by its iCalendar ID.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"updatedMin\": {\n              \"description\": \"Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showDeleted. Optional. The default is not to filter by last modification time.\",\n              \"location\": \"query\",\n              \"format\": \"date-time\",\n              \"type\": \"string\"\n            },\n            \"showDeleted\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include deleted events (with status equals \\\"cancelled\\\") in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if showDeleted and singleEvents are both False. If showDeleted and singleEvents are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"privateExtendedProperty\": {\n              \"type\": \"string\",\n              \"description\": \"Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.\",\n              \"repeated\": true,\n              \"location\": \"query\"\n            },\n            \"syncToken\": {\n              \"description\": \"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All events deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nThere are several query parameters that cannot be specified together with nextSyncToken to ensure consistency of the client state.\\n\\nThese are: \\n- iCalUID \\n- orderBy \\n- privateExtendedProperty \\n- q \\n- sharedExtendedProperty \\n- timeMin \\n- timeMax \\n- updatedMin All other query parameters should be the same as for the initial synchronization to avoid undefined behavior. If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\",\n              \"location\": \"query\",\n              \"type\": \"string\"\n            },\n            \"alwaysIncludeEmail\": {\n              \"type\": \"boolean\",\n              \"description\": \"Deprecated and ignored.\",\n              \"location\": \"query\"\n            },\n            \"maxResults\": {\n              \"description\": \"Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\",\n              \"location\": \"query\",\n              \"minimum\": \"1\",\n              \"default\": \"250\",\n              \"format\": \"int32\",\n              \"type\": \"integer\"\n            },\n            \"sharedExtendedProperty\": {\n              \"type\": \"string\",\n              \"description\": \"Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.\",\n              \"repeated\": true,\n              \"location\": \"query\"\n            },\n            \"maxAttendees\": {\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\",\n              \"minimum\": \"1\",\n              \"format\": \"int32\",\n              \"type\": \"integer\"\n            },\n            \"showHiddenInvitations\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include hidden invitations in the result. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"orderBy\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"startTime\",\n                \"updated\"\n              ],\n              \"enumDescriptions\": [\n                \"Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter singleEvents is True)\",\n                \"Order by last modification time (ascending).\"\n              ],\n              \"description\": \"The order of the events returned in the result. Optional. The default is an unspecified, stable order.\",\n              \"location\": \"query\"\n            },\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"pageToken\": {\n              \"type\": \"string\",\n              \"description\": \"Token specifying which result page to return. Optional.\",\n              \"location\": \"query\"\n            },\n            \"q\": {\n              \"type\": \"string\",\n              \"description\": \"Free text search terms to find events that match these terms in the following fields:\\n\\n- summary \\n- description \\n- location \\n- attendee's displayName \\n- attendee's email \\n- organizer's displayName \\n- organizer's email \\n- workingLocationProperties.officeLocation.buildingId \\n- workingLocationProperties.officeLocation.deskId \\n- workingLocationProperties.officeLocation.label \\n- workingLocationProperties.customLocation.label \\nThese search terms also match predefined keywords against all display title translations of working location, out-of-office, and focus-time events. For example, searching for \\\"Office\\\" or \\\"Bureau\\\" returns working location events of type officeLocation, whereas searching for \\\"Out of office\\\" or \\\"Abwesend\\\" returns out-of-office events. Optional.\",\n              \"location\": \"query\"\n            },\n            \"timeMin\": {\n              \"type\": \"string\",\n              \"format\": \"date-time\",\n              \"description\": \"Lower bound (exclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.freebusy\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\",\n            \"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.public.readonly\",\n            \"https://www.googleapis.com/auth/calendar.events.readonly\",\n            \"https://www.googleapis.com/auth/calendar.readonly\"\n          ],\n          \"path\": \"calendars/{calendarId}/events\",\n          \"response\": {\n            \"$ref\": \"Events\"\n          },\n          \"description\": \"Returns events on the specified calendar.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"GET\",\n          \"supportsSubscription\": true\n        },\n        \"patch\": {\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"parameters\": {\n            \"sendNotifications\": {\n              \"description\": \"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the event update (for example, description changes, etc.). Note that some emails might still be sent even if you set the value to false. The default is false.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"sendUpdates\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"all\",\n                \"externalOnly\",\n                \"none\"\n              ],\n              \"enumDescriptions\": [\n                \"Notifications are sent to all guests.\",\n                \"Notifications are sent to non-Google Calendar guests only.\",\n                \"No notifications are sent. For calendar migration tasks, consider using the Events.import method instead.\"\n              ],\n              \"description\": \"Guests who should receive notifications about the event update (for example, title changes, etc.).\",\n              \"location\": \"query\"\n            },\n            \"alwaysIncludeEmail\": {\n              \"type\": \"boolean\",\n              \"description\": \"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\",\n              \"location\": \"query\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"eventId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Event identifier.\",\n              \"location\": \"path\"\n            },\n            \"conferenceDataVersion\": {\n              \"type\": \"integer\",\n              \"maximum\": \"1\",\n              \"description\": \"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\",\n              \"location\": \"query\",\n              \"format\": \"int32\",\n              \"minimum\": \"0\"\n            },\n            \"supportsAttachments\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether API client performing operation supports event attachments. Optional. The default is False.\",\n              \"location\": \"query\"\n            },\n            \"maxAttendees\": {\n              \"type\": \"integer\",\n              \"format\": \"int32\",\n              \"minimum\": \"1\",\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\"\n            }\n          },\n          \"id\": \"calendar.events.patch\",\n          \"response\": {\n            \"$ref\": \"Event\"\n          },\n          \"path\": \"calendars/{calendarId}/events/{eventId}\",\n          \"request\": {\n            \"$ref\": \"Event\"\n          },\n          \"httpMethod\": \"PATCH\",\n          \"description\": \"Updates an event. This method supports patch semantics.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"eventId\"\n          ]\n        },\n        \"insert\": {\n          \"request\": {\n            \"$ref\": \"Event\"\n          },\n          \"httpMethod\": \"POST\",\n          \"description\": \"Creates an event.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"id\": \"calendar.events.insert\",\n          \"parameters\": {\n            \"maxAttendees\": {\n              \"description\": \"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\",\n              \"location\": \"query\",\n              \"format\": \"int32\",\n              \"minimum\": \"1\",\n              \"type\": \"integer\"\n            },\n            \"supportsAttachments\": {\n              \"description\": \"Whether API client performing operation supports event attachments. Optional. The default is False.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"conferenceDataVersion\": {\n              \"description\": \"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\",\n              \"location\": \"query\",\n              \"minimum\": \"0\",\n              \"format\": \"int32\",\n              \"type\": \"integer\",\n              \"maximum\": \"1\"\n            },\n            \"calendarId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\"\n            },\n            \"sendNotifications\": {\n              \"type\": \"boolean\",\n              \"description\": \"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the creation of the new event. Note that some emails might still be sent even if you set the value to false. The default is false.\",\n              \"location\": \"query\"\n            },\n            \"sendUpdates\": {\n              \"description\": \"Whether to send notifications about the creation of the new event. Note that some emails might still be sent. The default is false.\",\n              \"location\": \"query\",\n              \"enum\": [\n                \"all\",\n                \"externalOnly\",\n                \"none\"\n              ],\n              \"enumDescriptions\": [\n                \"Notifications are sent to all guests.\",\n                \"Notifications are sent to non-Google Calendar guests only.\",\n                \"No notifications are sent. Warning: Using the value none can have significant adverse effects, including events not syncing to external calendars or events being lost altogether for some users. For calendar migration tasks, consider using the events.import method instead.\"\n              ],\n              \"type\": \"string\"\n            }\n          },\n          \"response\": {\n            \"$ref\": \"Event\"\n          },\n          \"path\": \"calendars/{calendarId}/events\"\n        },\n        \"move\": {\n          \"id\": \"calendar.events.move\",\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier of the source calendar where the event currently is on.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"eventId\": {\n              \"type\": \"string\",\n              \"required\": true,\n              \"description\": \"Event identifier.\",\n              \"location\": \"path\"\n            },\n            \"destination\": {\n              \"description\": \"Calendar identifier of the target calendar where the event is to be moved to.\",\n              \"location\": \"query\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"sendNotifications\": {\n              \"description\": \"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the change of the event's organizer. Note that some emails might still be sent even if you set the value to false. The default is false.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"sendUpdates\": {\n              \"enum\": [\n                \"all\",\n                \"externalOnly\",\n                \"none\"\n              ],\n              \"enumDescriptions\": [\n                \"Notifications are sent to all guests.\",\n                \"Notifications are sent to non-Google Calendar guests only.\",\n                \"No notifications are sent. For calendar migration tasks, consider using the Events.import method instead.\"\n              ],\n              \"type\": \"string\",\n              \"description\": \"Guests who should receive notifications about the change of the event's organizer.\",\n              \"location\": \"query\"\n            }\n          },\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"path\": \"calendars/{calendarId}/events/{eventId}/move\",\n          \"description\": \"Moves an event to another calendar, i.e. changes an event's organizer. Note that only default events can be moved; birthday, focusTime, fromGmail, outOfOffice and workingLocation events cannot be moved.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"eventId\",\n            \"destination\"\n          ],\n          \"httpMethod\": \"POST\",\n          \"response\": {\n            \"$ref\": \"Event\"\n          }\n        },\n        \"import\": {\n          \"parameters\": {\n            \"conferenceDataVersion\": {\n              \"description\": \"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\",\n              \"location\": \"query\",\n              \"minimum\": \"0\",\n              \"format\": \"int32\",\n              \"type\": \"integer\",\n              \"maximum\": \"1\"\n            },\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"supportsAttachments\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether API client performing operation supports event attachments. Optional. The default is False.\",\n              \"location\": \"query\"\n            }\n          },\n          \"id\": \"calendar.events.import\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"path\": \"calendars/{calendarId}/events/import\",\n          \"response\": {\n            \"$ref\": \"Event\"\n          },\n          \"request\": {\n            \"$ref\": \"Event\"\n          },\n          \"description\": \"Imports an event. This operation is used to add a private copy of an existing event to a calendar. Only events with an eventType of default may be imported.\\nDeprecated behavior: If a non-default event is imported, its type will be changed to default and any event-type-specific properties it may have will be dropped.\",\n          \"parameterOrder\": [\n            \"calendarId\"\n          ],\n          \"httpMethod\": \"POST\"\n        },\n        \"quickAdd\": {\n          \"parameters\": {\n            \"calendarId\": {\n              \"description\": \"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"sendNotifications\": {\n              \"description\": \"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the creation of the event. Note that some emails might still be sent even if you set the value to false. The default is false.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"sendUpdates\": {\n              \"description\": \"Guests who should receive notifications about the creation of the new event.\",\n              \"location\": \"query\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"all\",\n                \"externalOnly\",\n                \"none\"\n              ],\n              \"enumDescriptions\": [\n                \"Notifications are sent to all guests.\",\n                \"Notifications are sent to non-Google Calendar guests only.\",\n                \"No notifications are sent. For calendar migration tasks, consider using the Events.import method instead.\"\n              ]\n            },\n            \"text\": {\n              \"description\": \"The text describing the event to be created.\",\n              \"location\": \"query\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          },\n          \"id\": \"calendar.events.quickAdd\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/calendar\",\n            \"https://www.googleapis.com/auth/calendar.app.created\",\n            \"https://www.googleapis.com/auth/calendar.events\",\n            \"https://www.googleapis.com/auth/calendar.events.owned\"\n          ],\n          \"path\": \"calendars/{calendarId}/events/quickAdd\",\n          \"description\": \"Creates an event based on a simple text string.\",\n          \"parameterOrder\": [\n            \"calendarId\",\n            \"text\"\n          ],\n          \"httpMethod\": \"POST\",\n          \"response\": {\n            \"$ref\": \"Event\"\n          }\n        }\n      }\n    }\n  },\n  \"parameters\": {\n    \"alt\": {\n      \"type\": \"string\",\n      \"enum\": [\n        \"json\"\n      ],\n      \"enumDescriptions\": [\n        \"Responses with Content-Type of application/json\"\n      ],\n      \"default\": \"json\",\n      \"description\": \"Data format for the response.\",\n      \"location\": \"query\"\n    },\n    \"fields\": {\n      \"description\": \"Selector specifying which fields to include in a partial response.\",\n      \"location\": \"query\",\n      \"type\": \"string\"\n    },\n    \"oauth_token\": {\n      \"description\": \"OAuth 2.0 token for the current user.\",\n      \"location\": \"query\",\n      \"type\": \"string\"\n    },\n    \"prettyPrint\": {\n      \"description\": \"Returns response with indentations and line breaks.\",\n      \"location\": \"query\",\n      \"default\": \"true\",\n      \"type\": \"boolean\"\n    },\n    \"userIp\": {\n      \"type\": \"string\",\n      \"description\": \"Deprecated. Please use quotaUser instead.\",\n      \"location\": \"query\"\n    },\n    \"key\": {\n      \"type\": \"string\",\n      \"description\": \"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.\",\n      \"location\": \"query\"\n    },\n    \"quotaUser\": {\n      \"description\": \"An opaque string that represents a user for quota purposes. Must not exceed 40 characters.\",\n      \"location\": \"query\",\n      \"type\": \"string\"\n    }\n  },\n  \"basePath\": \"/calendar/v3/\",\n  \"batchPath\": \"batch/calendar/v3\",\n  \"revision\": \"20260309\",\n  \"schemas\": {\n    \"Events\": {\n      \"type\": \"object\",\n      \"id\": \"Events\",\n      \"properties\": {\n        \"accessRole\": {\n          \"type\": \"string\",\n          \"description\": \"The user's access role for this calendar. Read-only. Possible values are:  \\n- \\\"none\\\" - The user has no access. \\n- \\\"freeBusyReader\\\" - The user has read access to free/busy information. \\n- \\\"reader\\\" - The user has read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - The user has read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \\n- \\\"owner\\\" - The user has manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to see and modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\"\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the collection.\"\n        },\n        \"kind\": {\n          \"description\": \"Type of the collection (\\\"calendar#events\\\").\",\n          \"type\": \"string\",\n          \"default\": \"calendar#events\"\n        },\n        \"summary\": {\n          \"type\": \"string\",\n          \"description\": \"Title of the calendar. Read-only.\"\n        },\n        \"items\": {\n          \"items\": {\n            \"$ref\": \"Event\"\n          },\n          \"description\": \"List of events on the calendar.\",\n          \"type\": \"array\"\n        },\n        \"nextSyncToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"Description of the calendar. Read-only.\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"description\": \"The time zone of the calendar. Read-only.\"\n        },\n        \"nextPageToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"\n        },\n        \"updated\": {\n          \"description\": \"Last modification time of the calendar (as a RFC3339 timestamp). Read-only.\",\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"defaultReminders\": {\n          \"type\": \"array\",\n          \"description\": \"The default reminders on the calendar for the authenticated user. These reminders apply to all events on this calendar that do not explicitly override them (i.e. do not have reminders.useDefault set to True).\",\n          \"items\": {\n            \"$ref\": \"EventReminder\"\n          }\n        }\n      }\n    },\n    \"ConferenceParameters\": {\n      \"id\": \"ConferenceParameters\",\n      \"properties\": {\n        \"addOnParameters\": {\n          \"$ref\": \"ConferenceParametersAddOnParameters\",\n          \"description\": \"Additional add-on specific data.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"Event\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"created\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Creation time of the event (as a RFC3339 timestamp). Read-only.\"\n        },\n        \"endTimeUnspecified\": {\n          \"description\": \"Whether the end time is actually unspecified. An end time is still provided for compatibility reasons, even if this attribute is set to True. The default is False.\",\n          \"type\": \"boolean\",\n          \"default\": \"false\"\n        },\n        \"birthdayProperties\": {\n          \"description\": \"Birthday or special event data. Used if eventType is \\\"birthday\\\". Immutable.\",\n          \"$ref\": \"EventBirthdayProperties\"\n        },\n        \"extendedProperties\": {\n          \"description\": \"Extended properties of the event.\",\n          \"properties\": {\n            \"private\": {\n              \"type\": \"object\",\n              \"additionalProperties\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the private property and the corresponding value.\"\n              },\n              \"description\": \"Properties that are private to the copy of the event that appears on this calendar.\"\n            },\n            \"shared\": {\n              \"type\": \"object\",\n              \"additionalProperties\": {\n                \"type\": \"string\",\n                \"description\": \"The name of the shared property and the corresponding value.\"\n              },\n              \"description\": \"Properties that are shared between copies of the event on other attendees' calendars.\"\n            }\n          },\n          \"type\": \"object\"\n        },\n        \"source\": {\n          \"type\": \"object\",\n          \"description\": \"Source from which the event was created. For example, a web page, an email message or any document identifiable by an URL with HTTP or HTTPS scheme. Can only be seen or modified by the creator of the event.\",\n          \"properties\": {\n            \"url\": {\n              \"type\": \"string\",\n              \"description\": \"URL of the source pointing to a resource. The URL scheme must be HTTP or HTTPS.\"\n            },\n            \"title\": {\n              \"type\": \"string\",\n              \"description\": \"Title of the source; for example a title of a web page or an email subject.\"\n            }\n          }\n        },\n        \"reminders\": {\n          \"type\": \"object\",\n          \"description\": \"Information about the event's reminders for the authenticated user. Note that changing reminders does not also change the updated property of the enclosing event.\",\n          \"properties\": {\n            \"overrides\": {\n              \"type\": \"array\",\n              \"description\": \"If the event doesn't use the default reminders, this lists the reminders specific to the event, or, if not set, indicates that no reminders are set for this event. The maximum number of override reminders is 5.\",\n              \"items\": {\n                \"$ref\": \"EventReminder\"\n              }\n            },\n            \"useDefault\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether the default reminders of the calendar apply to the event.\"\n            }\n          }\n        },\n        \"visibility\": {\n          \"type\": \"string\",\n          \"default\": \"default\",\n          \"description\": \"Visibility of the event. Optional. Possible values are:  \\n- \\\"default\\\" - Uses the default visibility for events on the calendar. This is the default value. \\n- \\\"public\\\" - The event is public and event details are visible to all readers of the calendar. \\n- \\\"private\\\" - The event is private and only event attendees may view event details. \\n- \\\"confidential\\\" - The event is private. This value is provided for compatibility reasons.\"\n        },\n        \"originalStartTime\": {\n          \"$ref\": \"EventDateTime\",\n          \"description\": \"For an instance of a recurring event, this is the time at which this event would start according to the recurrence data in the recurring event identified by recurringEventId. It uniquely identifies the instance within the recurring event series even if the instance was moved to a different time. Immutable.\"\n        },\n        \"outOfOfficeProperties\": {\n          \"description\": \"Out of office event data. Used if eventType is outOfOffice.\",\n          \"$ref\": \"EventOutOfOfficeProperties\"\n        },\n        \"hangoutLink\": {\n          \"type\": \"string\",\n          \"description\": \"An absolute link to the Google Hangout associated with this event. Read-only.\"\n        },\n        \"recurringEventId\": {\n          \"type\": \"string\",\n          \"description\": \"For an instance of a recurring event, this is the id of the recurring event to which this instance belongs. Immutable.\"\n        },\n        \"attendeesOmitted\": {\n          \"type\": \"boolean\",\n          \"default\": \"false\",\n          \"description\": \"Whether attendees may have been omitted from the event's representation. When retrieving an event, this may be due to a restriction specified by the maxAttendee query parameter. When updating an event, this can be used to only update the participant's response. Optional. The default is False.\"\n        },\n        \"attachments\": {\n          \"description\": \"File attachments for the event.\\nIn order to modify attachments the supportsAttachments request parameter should be set to true.\\nThere can be at most 25 attachments per event,\",\n          \"items\": {\n            \"$ref\": \"EventAttachment\"\n          },\n          \"type\": \"array\"\n        },\n        \"guestsCanInviteOthers\": {\n          \"description\": \"Whether attendees other than the organizer can invite others to the event. Optional. The default is True.\",\n          \"default\": \"true\",\n          \"type\": \"boolean\"\n        },\n        \"privateCopy\": {\n          \"description\": \"If set to True, Event propagation is disabled. Note that it is not the same thing as Private event properties. Optional. Immutable. The default is False.\",\n          \"type\": \"boolean\",\n          \"default\": \"false\"\n        },\n        \"htmlLink\": {\n          \"type\": \"string\",\n          \"description\": \"An absolute link to this event in the Google Calendar Web UI. Read-only.\"\n        },\n        \"summary\": {\n          \"type\": \"string\",\n          \"description\": \"Title of the event.\"\n        },\n        \"end\": {\n          \"description\": \"The (exclusive) end time of the event. For a recurring event, this is the end time of the first instance.\",\n          \"annotations\": {\n            \"required\": [\n              \"calendar.events.import\",\n              \"calendar.events.insert\",\n              \"calendar.events.update\"\n            ]\n          },\n          \"$ref\": \"EventDateTime\"\n        },\n        \"start\": {\n          \"$ref\": \"EventDateTime\",\n          \"description\": \"The (inclusive) start time of the event. For a recurring event, this is the start time of the first instance.\",\n          \"annotations\": {\n            \"required\": [\n              \"calendar.events.import\",\n              \"calendar.events.insert\",\n              \"calendar.events.update\"\n            ]\n          }\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"default\": \"calendar#event\",\n          \"description\": \"Type of the resource (\\\"calendar#event\\\").\"\n        },\n        \"locked\": {\n          \"description\": \"Whether this is a locked event copy where no changes can be made to the main event fields \\\"summary\\\", \\\"description\\\", \\\"location\\\", \\\"start\\\", \\\"end\\\" or \\\"recurrence\\\". The default is False. Read-Only.\",\n          \"default\": \"false\",\n          \"type\": \"boolean\"\n        },\n        \"status\": {\n          \"type\": \"string\",\n          \"description\": \"Status of the event. Optional. Possible values are:  \\n- \\\"confirmed\\\" - The event is confirmed. This is the default status. \\n- \\\"tentative\\\" - The event is tentatively confirmed. \\n- \\\"cancelled\\\" - The event is cancelled (deleted). The list method returns cancelled events only on incremental sync (when syncToken or updatedMin are specified) or if the showDeleted flag is set to true. The get method always returns them.\\nA cancelled status represents two different states depending on the event type:  \\n- Cancelled exceptions of an uncancelled recurring event indicate that this instance should no longer be presented to the user. Clients should store these events for the lifetime of the parent recurring event.\\nCancelled exceptions are only guaranteed to have values for the id, recurringEventId and originalStartTime fields populated. The other fields might be empty.  \\n- All other cancelled events represent deleted events. Clients should remove their locally synced copies. Such cancelled events will eventually disappear, so do not rely on them being available indefinitely.\\nDeleted events are only guaranteed to have the id field populated.   On the organizer's calendar, cancelled events continue to expose event details (summary, location, etc.) so that they can be restored (undeleted). Similarly, the events to which the user was invited and that they manually removed continue to provide details. However, incremental sync requests with showDeleted set to false will not return these details.\\nIf an event changes its organizer (for example via the move operation) and the original organizer is not on the attendee list, it will leave behind a cancelled event where only the id field is guaranteed to be populated.\"\n        },\n        \"attendees\": {\n          \"items\": {\n            \"$ref\": \"EventAttendee\"\n          },\n          \"description\": \"The attendees of the event. See the Events with attendees guide for more information on scheduling events with other calendar users. Service accounts need to use domain-wide delegation of authority to populate the attendee list.\",\n          \"type\": \"array\"\n        },\n        \"colorId\": {\n          \"type\": \"string\",\n          \"description\": \"The color of the event. This is an ID referring to an entry in the event section of the colors definition (see the  colors endpoint). Optional.\"\n        },\n        \"sequence\": {\n          \"description\": \"Sequence number as per iCalendar.\",\n          \"format\": \"int32\",\n          \"type\": \"integer\"\n        },\n        \"focusTimeProperties\": {\n          \"description\": \"Focus Time event data. Used if eventType is focusTime.\",\n          \"$ref\": \"EventFocusTimeProperties\"\n        },\n        \"gadget\": {\n          \"type\": \"object\",\n          \"description\": \"A gadget that extends this event. Gadgets are deprecated; this structure is instead only used for returning birthday calendar metadata.\",\n          \"properties\": {\n            \"title\": {\n              \"type\": \"string\",\n              \"description\": \"The gadget's title. Deprecated.\"\n            },\n            \"type\": {\n              \"type\": \"string\",\n              \"description\": \"The gadget's type. Deprecated.\"\n            },\n            \"display\": {\n              \"type\": \"string\",\n              \"description\": \"The gadget's display mode. Deprecated. Possible values are:  \\n- \\\"icon\\\" - The gadget displays next to the event's title in the calendar view. \\n- \\\"chip\\\" - The gadget displays when the event is clicked.\"\n            },\n            \"iconLink\": {\n              \"type\": \"string\",\n              \"description\": \"The gadget's icon URL. The URL scheme must be HTTPS. Deprecated.\"\n            },\n            \"preferences\": {\n              \"type\": \"object\",\n              \"additionalProperties\": {\n                \"type\": \"string\",\n                \"description\": \"The preference name and corresponding value.\"\n              },\n              \"description\": \"Preferences.\"\n            },\n            \"link\": {\n              \"type\": \"string\",\n              \"description\": \"The gadget's URL. The URL scheme must be HTTPS. Deprecated.\"\n            },\n            \"height\": {\n              \"description\": \"The gadget's height in pixels. The height must be an integer greater than 0. Optional. Deprecated.\",\n              \"format\": \"int32\",\n              \"type\": \"integer\"\n            },\n            \"width\": {\n              \"description\": \"The gadget's width in pixels. The width must be an integer greater than 0. Optional. Deprecated.\",\n              \"format\": \"int32\",\n              \"type\": \"integer\"\n            }\n          }\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Opaque identifier of the event. When creating new single or recurring events, you can specify their IDs. Provided IDs must follow these rules:  \\n- characters allowed in the ID are those used in base32hex encoding, i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938 \\n- the length of the ID must be between 5 and 1024 characters \\n- the ID must be unique per calendar  Due to the globally distributed nature of the system, we cannot guarantee that ID collisions will be detected at event creation time. To minimize the risk of collisions we recommend using an established UUID algorithm such as one described in RFC4122.\\nIf you do not specify an ID, it will be automatically generated by the server.\\nNote that the icalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same icalUIDs.\"\n        },\n        \"eventType\": {\n          \"description\": \"Specific type of the event. This cannot be modified after the event is created. Possible values are:  \\n- \\\"birthday\\\" - A special all-day event with an annual recurrence. \\n- \\\"default\\\" - A regular event or not further specified. \\n- \\\"focusTime\\\" - A focus-time event. \\n- \\\"fromGmail\\\" - An event from Gmail. This type of event cannot be created. \\n- \\\"outOfOffice\\\" - An out-of-office event. \\n- \\\"workingLocation\\\" - A working location event.\",\n          \"type\": \"string\",\n          \"default\": \"default\"\n        },\n        \"organizer\": {\n          \"description\": \"The organizer of the event. If the organizer is also an attendee, this is indicated with a separate entry in attendees with the organizer field set to True. To change the organizer, use the move operation. Read-only, except when importing an event.\",\n          \"properties\": {\n            \"self\": {\n              \"type\": \"boolean\",\n              \"default\": \"false\",\n              \"description\": \"Whether the organizer corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.\"\n            },\n            \"displayName\": {\n              \"type\": \"string\",\n              \"description\": \"The organizer's name, if available.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"description\": \"The organizer's email address, if available. It must be a valid email address as per RFC5322.\"\n            },\n            \"id\": {\n              \"type\": \"string\",\n              \"description\": \"The organizer's Profile ID, if available.\"\n            }\n          },\n          \"type\": \"object\"\n        },\n        \"recurrence\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"List of RRULE, EXRULE, RDATE and EXDATE lines for a recurring event, as specified in RFC5545. Note that DTSTART and DTEND lines are not allowed in this field; event start and end times are specified in the start and end fields. This field is omitted for single events or instances of recurring events.\"\n        },\n        \"guestsCanModify\": {\n          \"description\": \"Whether attendees other than the organizer can modify the event. Optional. The default is False.\",\n          \"default\": \"false\",\n          \"type\": \"boolean\"\n        },\n        \"creator\": {\n          \"type\": \"object\",\n          \"description\": \"The creator of the event. Read-only.\",\n          \"properties\": {\n            \"displayName\": {\n              \"type\": \"string\",\n              \"description\": \"The creator's name, if available.\"\n            },\n            \"email\": {\n              \"type\": \"string\",\n              \"description\": \"The creator's email address, if available.\"\n            },\n            \"id\": {\n              \"type\": \"string\",\n              \"description\": \"The creator's Profile ID, if available.\"\n            },\n            \"self\": {\n              \"description\": \"Whether the creator corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.\",\n              \"type\": \"boolean\",\n              \"default\": \"false\"\n            }\n          }\n        },\n        \"guestsCanSeeOtherGuests\": {\n          \"type\": \"boolean\",\n          \"default\": \"true\",\n          \"description\": \"Whether attendees other than the organizer can see who the event's attendees are. Optional. The default is True.\"\n        },\n        \"updated\": {\n          \"format\": \"date-time\",\n          \"type\": \"string\",\n          \"description\": \"Last modification time of the main event data (as a RFC3339 timestamp). Updating event reminders will not cause this to change. Read-only.\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"Description of the event. Can contain HTML. Optional.\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Geographic location of the event as free-form text. Optional.\"\n        },\n        \"anyoneCanAddSelf\": {\n          \"description\": \"Whether anyone can invite themselves to the event (deprecated). Optional. The default is False.\",\n          \"type\": \"boolean\",\n          \"default\": \"false\"\n        },\n        \"conferenceData\": {\n          \"$ref\": \"ConferenceData\",\n          \"description\": \"The conference-related information, such as details of a Google Meet conference. To create new conference details use the createRequest field. To persist your changes, remember to set the conferenceDataVersion request parameter to 1 for all event modification requests. Warning: Reusing Google Meet conference data across different events can cause access issues and expose meeting details to unintended users. To help ensure meeting privacy, always generate a unique conference for each event by using the createRequest field.\"\n        },\n        \"iCalUID\": {\n          \"type\": \"string\",\n          \"description\": \"Event unique identifier as defined in RFC5545. It is used to uniquely identify events accross calendaring systems and must be supplied when importing events via the import method.\\nNote that the iCalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same iCalUIDs. To retrieve an event using its iCalUID, call the events.list method using the iCalUID parameter. To retrieve an event using its id, call the events.get method.\",\n          \"annotations\": {\n            \"required\": [\n              \"calendar.events.import\"\n            ]\n          }\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the resource.\"\n        },\n        \"transparency\": {\n          \"description\": \"Whether the event blocks time on the calendar. Optional. Possible values are:  \\n- \\\"opaque\\\" - Default value. The event does block time on the calendar. This is equivalent to setting Show me as to Busy in the Calendar UI. \\n- \\\"transparent\\\" - The event does not block time on the calendar. This is equivalent to setting Show me as to Available in the Calendar UI.\",\n          \"default\": \"opaque\",\n          \"type\": \"string\"\n        },\n        \"workingLocationProperties\": {\n          \"$ref\": \"EventWorkingLocationProperties\",\n          \"description\": \"Working location event data.\"\n        }\n      },\n      \"id\": \"Event\"\n    },\n    \"Colors\": {\n      \"id\": \"Colors\",\n      \"properties\": {\n        \"calendar\": {\n          \"description\": \"A global palette of calendar colors, mapping from the color ID to its definition. A calendarListEntry resource refers to one of these color IDs in its colorId field. Read-only.\",\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"description\": \"A calendar color definition.\",\n            \"$ref\": \"ColorDefinition\"\n          }\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"default\": \"calendar#colors\",\n          \"description\": \"Type of the resource (\\\"calendar#colors\\\").\"\n        },\n        \"event\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"description\": \"An event color definition.\",\n            \"$ref\": \"ColorDefinition\"\n          },\n          \"description\": \"A global palette of event colors, mapping from the color ID to its definition. An event resource may refer to one of these color IDs in its colorId field. Read-only.\"\n        },\n        \"updated\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Last modification time of the color palette (as a RFC3339 timestamp). Read-only.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"FreeBusyRequestItem\": {\n      \"type\": \"object\",\n      \"id\": \"FreeBusyRequestItem\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The identifier of a calendar or a group.\"\n        }\n      }\n    },\n    \"EventFocusTimeProperties\": {\n      \"properties\": {\n        \"autoDeclineMode\": {\n          \"type\": \"string\",\n          \"description\": \"Whether to decline meeting invitations which overlap Focus Time events. Valid values are declineNone, meaning that no meeting invitations are declined; declineAllConflictingInvitations, meaning that all conflicting meeting invitations that conflict with the event are declined; and declineOnlyNewConflictingInvitations, meaning that only new conflicting meeting invitations which arrive while the Focus Time event is present are to be declined.\"\n        },\n        \"chatStatus\": {\n          \"type\": \"string\",\n          \"description\": \"The status to mark the user in Chat and related products. This can be available or doNotDisturb.\"\n        },\n        \"declineMessage\": {\n          \"type\": \"string\",\n          \"description\": \"Response message to set if an existing event or new invitation is automatically declined by Calendar.\"\n        }\n      },\n      \"id\": \"EventFocusTimeProperties\",\n      \"type\": \"object\"\n    },\n    \"ConferenceData\": {\n      \"type\": \"object\",\n      \"id\": \"ConferenceData\",\n      \"properties\": {\n        \"createRequest\": {\n          \"$ref\": \"CreateConferenceRequest\",\n          \"description\": \"A request to generate a new conference and attach it to the event. The data is generated asynchronously. To see whether the data is present check the status field.\\nEither conferenceSolution and at least one entryPoint, or createRequest is required.\"\n        },\n        \"conferenceSolution\": {\n          \"$ref\": \"ConferenceSolution\",\n          \"description\": \"The conference solution, such as Google Meet.\\nUnset for a conference with a failed create request.\\nEither conferenceSolution and at least one entryPoint, or createRequest is required.\"\n        },\n        \"parameters\": {\n          \"$ref\": \"ConferenceParameters\",\n          \"description\": \"Additional properties related to a conference. An example would be a solution-specific setting for enabling video streaming.\"\n        },\n        \"notes\": {\n          \"type\": \"string\",\n          \"description\": \"Additional notes (such as instructions from the domain administrator, legal notices) to display to the user. Can contain HTML. The maximum length is 2048 characters. Optional.\"\n        },\n        \"signature\": {\n          \"type\": \"string\",\n          \"description\": \"The signature of the conference data.\\nGenerated on server side.\\nUnset for a conference with a failed create request.\\nOptional for a conference with a pending create request.\"\n        },\n        \"conferenceId\": {\n          \"type\": \"string\",\n          \"description\": \"The ID of the conference.\\nCan be used by developers to keep track of conferences, should not be displayed to users.\\nThe ID value is formed differently for each conference solution type:  \\n- eventHangout: ID is not set. (This conference type is deprecated.)\\n- eventNamedHangout: ID is the name of the Hangout. (This conference type is deprecated.)\\n- hangoutsMeet: ID is the 10-letter meeting code, for example aaa-bbbb-ccc.\\n- addOn: ID is defined by the third-party provider.  Optional.\"\n        },\n        \"entryPoints\": {\n          \"description\": \"Information about individual conference entry points, such as URLs or phone numbers.\\nAll of them must belong to the same conference.\\nEither conferenceSolution and at least one entryPoint, or createRequest is required.\",\n          \"items\": {\n            \"$ref\": \"EntryPoint\"\n          },\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"FreeBusyGroup\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"errors\": {\n          \"type\": \"array\",\n          \"description\": \"Optional error(s) (if computation for the group failed).\",\n          \"items\": {\n            \"$ref\": \"Error\"\n          }\n        },\n        \"calendars\": {\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"List of calendars' identifiers within a group.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"FreeBusyGroup\"\n    },\n    \"ConferenceParametersAddOnParameters\": {\n      \"id\": \"ConferenceParametersAddOnParameters\",\n      \"properties\": {\n        \"parameters\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"Error\": {\n      \"id\": \"Error\",\n      \"properties\": {\n        \"domain\": {\n          \"type\": \"string\",\n          \"description\": \"Domain, or broad category, of the error.\"\n        },\n        \"reason\": {\n          \"type\": \"string\",\n          \"description\": \"Specific reason for the error. Some of the possible values are:  \\n- \\\"groupTooBig\\\" - The group of users requested is too large for a single query. \\n- \\\"tooManyCalendarsRequested\\\" - The number of calendars requested is too large for a single query. \\n- \\\"notFound\\\" - The requested resource was not found. \\n- \\\"internalError\\\" - The API service has encountered an internal error.  Additional error types may be added in the future, so clients should gracefully handle additional error statuses not included in this list.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"EventAttachment\": {\n      \"id\": \"EventAttachment\",\n      \"properties\": {\n        \"fileId\": {\n          \"type\": \"string\",\n          \"description\": \"ID of the attached file. Read-only.\\nFor Google Drive files, this is the ID of the corresponding Files resource entry in the Drive API.\"\n        },\n        \"fileUrl\": {\n          \"type\": \"string\",\n          \"description\": \"URL link to the attachment.\\nFor adding Google Drive file attachments use the same format as in alternateLink property of the Files resource in the Drive API.\\nRequired when adding an attachment.\"\n        },\n        \"iconLink\": {\n          \"type\": \"string\",\n          \"description\": \"URL link to the attachment's icon. This field can only be modified for custom third-party attachments.\"\n        },\n        \"title\": {\n          \"type\": \"string\",\n          \"description\": \"Attachment title.\"\n        },\n        \"mimeType\": {\n          \"type\": \"string\",\n          \"description\": \"Internet media type (MIME type) of the attachment.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"EventOutOfOfficeProperties\": {\n      \"type\": \"object\",\n      \"id\": \"EventOutOfOfficeProperties\",\n      \"properties\": {\n        \"autoDeclineMode\": {\n          \"type\": \"string\",\n          \"description\": \"Whether to decline meeting invitations which overlap Out of office events. Valid values are declineNone, meaning that no meeting invitations are declined; declineAllConflictingInvitations, meaning that all conflicting meeting invitations that conflict with the event are declined; and declineOnlyNewConflictingInvitations, meaning that only new conflicting meeting invitations which arrive while the Out of office event is present are to be declined.\"\n        },\n        \"declineMessage\": {\n          \"type\": \"string\",\n          \"description\": \"Response message to set if an existing event or new invitation is automatically declined by Calendar.\"\n        }\n      }\n    },\n    \"EventLabel\": {\n      \"id\": \"EventLabel\",\n      \"type\": \"object\"\n    },\n    \"Channel\": {\n      \"properties\": {\n        \"resourceId\": {\n          \"type\": \"string\",\n          \"description\": \"An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.\"\n        },\n        \"params\": {\n          \"description\": \"Additional parameters controlling delivery channel behavior. Optional.\",\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\",\n            \"description\": \"Declares a new parameter by name.\"\n          }\n        },\n        \"resourceUri\": {\n          \"type\": \"string\",\n          \"description\": \"A version-specific identifier for the watched resource.\"\n        },\n        \"token\": {\n          \"type\": \"string\",\n          \"description\": \"An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.\"\n        },\n        \"payload\": {\n          \"type\": \"boolean\",\n          \"description\": \"A Boolean value to indicate whether payload is wanted. Optional.\"\n        },\n        \"address\": {\n          \"type\": \"string\",\n          \"description\": \"The address where notifications are delivered for this channel.\"\n        },\n        \"expiration\": {\n          \"description\": \"Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.\",\n          \"type\": \"string\",\n          \"format\": \"int64\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"default\": \"api#channel\",\n          \"description\": \"Identifies this as a notification channel used to watch for changes to a resource, which is \\\"api#channel\\\".\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"A UUID or similar unique string that identifies this channel.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of delivery mechanism used for this channel. Valid values are \\\"web_hook\\\" (or \\\"webhook\\\"). Both values refer to a channel where Http requests are used to deliver messages.\"\n        }\n      },\n      \"id\": \"Channel\",\n      \"type\": \"object\"\n    },\n    \"ConferenceProperties\": {\n      \"properties\": {\n        \"allowedConferenceSolutionTypes\": {\n          \"type\": \"array\",\n          \"description\": \"The types of conference solutions that are supported for this calendar.\\nThe possible values are:  \\n- \\\"eventHangout\\\" \\n- \\\"eventNamedHangout\\\" \\n- \\\"hangoutsMeet\\\"  Optional.\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      },\n      \"id\": \"ConferenceProperties\",\n      \"type\": \"object\"\n    },\n    \"CreateConferenceRequest\": {\n      \"id\": \"CreateConferenceRequest\",\n      \"properties\": {\n        \"status\": {\n          \"$ref\": \"ConferenceRequestStatus\",\n          \"description\": \"The status of the conference create request.\"\n        },\n        \"conferenceSolutionKey\": {\n          \"description\": \"The conference solution, such as Hangouts or Google Meet.\",\n          \"$ref\": \"ConferenceSolutionKey\"\n        },\n        \"requestId\": {\n          \"type\": \"string\",\n          \"description\": \"The client-generated unique ID for this request.\\nClients should regenerate this ID for every new request. If an ID provided is the same as for the previous request, the request is ignored.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"EventAttendee\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"optional\": {\n          \"default\": \"false\",\n          \"type\": \"boolean\",\n          \"description\": \"Whether this is an optional attendee. Optional. The default is False.\"\n        },\n        \"additionalGuests\": {\n          \"type\": \"integer\",\n          \"default\": \"0\",\n          \"format\": \"int32\",\n          \"description\": \"Number of additional guests. Optional. The default is 0.\"\n        },\n        \"comment\": {\n          \"type\": \"string\",\n          \"description\": \"The attendee's response comment. Optional.\"\n        },\n        \"organizer\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether the attendee is the organizer of the event. Read-only. The default is False.\"\n        },\n        \"responseStatus\": {\n          \"type\": \"string\",\n          \"description\": \"The attendee's response status. Possible values are:  \\n- \\\"needsAction\\\" - The attendee has not responded to the invitation (recommended for new events). \\n- \\\"declined\\\" - The attendee has declined the invitation. \\n- \\\"tentative\\\" - The attendee has tentatively accepted the invitation. \\n- \\\"accepted\\\" - The attendee has accepted the invitation.  Warning: If you add an event using the values declined, tentative, or accepted, attendees with the \\\"Add invitations to my calendar\\\" setting set to \\\"When I respond to invitation in email\\\" or \\\"Only if the sender is known\\\" might have their response reset to needsAction and won't see an event in their calendar unless they change their response in the event invitation email. Furthermore, if more than 200 guests are invited to the event, response status is not propagated to the guests.\"\n        },\n        \"displayName\": {\n          \"type\": \"string\",\n          \"description\": \"The attendee's name, if available. Optional.\"\n        },\n        \"email\": {\n          \"type\": \"string\",\n          \"description\": \"The attendee's email address, if available. This field must be present when adding an attendee. It must be a valid email address as per RFC5322.\\nRequired when adding an attendee.\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The attendee's Profile ID, if available.\"\n        },\n        \"self\": {\n          \"description\": \"Whether this entry represents the calendar on which this copy of the event appears. Read-only. The default is False.\",\n          \"default\": \"false\",\n          \"type\": \"boolean\"\n        },\n        \"resource\": {\n          \"description\": \"Whether the attendee is a resource. Can only be set when the attendee is added to the event for the first time. Subsequent modifications are ignored. Optional. The default is False.\",\n          \"type\": \"boolean\",\n          \"default\": \"false\"\n        }\n      },\n      \"id\": \"EventAttendee\"\n    },\n    \"AclRule\": {\n      \"id\": \"AclRule\",\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Identifier of the Access Control List (ACL) rule. See Sharing calendars.\"\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the resource.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"default\": \"calendar#aclRule\",\n          \"description\": \"Type of the resource (\\\"calendar#aclRule\\\").\"\n        },\n        \"role\": {\n          \"description\": \"The role assigned to the scope. Possible values are:  \\n- \\\"none\\\" - Provides no access. \\n- \\\"freeBusyReader\\\" - Provides read access to free/busy information. \\n- \\\"reader\\\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. Provides read access to the calendar's ACLs. \\n- \\\"owner\\\" - Provides manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\",\n          \"annotations\": {\n            \"required\": [\n              \"calendar.acl.insert\"\n            ]\n          },\n          \"type\": \"string\"\n        },\n        \"scope\": {\n          \"type\": \"object\",\n          \"description\": \"The extent to which calendar access is granted by this ACL rule.\",\n          \"properties\": {\n            \"type\": {\n              \"type\": \"string\",\n              \"description\": \"The type of the scope. Possible values are:  \\n- \\\"default\\\" - The public scope. This is the default value. \\n- \\\"user\\\" - Limits the scope to a single user. \\n- \\\"group\\\" - Limits the scope to a group. \\n- \\\"domain\\\" - Limits the scope to a domain.  Note: The permissions granted to the \\\"default\\\", or public, scope apply to any user, authenticated or not.\",\n              \"annotations\": {\n                \"required\": [\n                  \"calendar.acl.insert\",\n                  \"calendar.acl.update\"\n                ]\n              }\n            },\n            \"value\": {\n              \"type\": \"string\",\n              \"description\": \"The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type \\\"default\\\".\"\n            }\n          },\n          \"annotations\": {\n            \"required\": [\n              \"calendar.acl.insert\",\n              \"calendar.acl.update\"\n            ]\n          }\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"ConferenceSolutionKey\": {\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The conference solution type.\\nIf a client encounters an unfamiliar or empty type, it should still be able to display the entry points. However, it should disallow modifications.\\nThe possible values are:  \\n- \\\"eventHangout\\\" for Hangouts for consumers (deprecated; existing events may show this conference solution type but new conferences cannot be created)\\n- \\\"eventNamedHangout\\\" for classic Hangouts for Google Workspace users (deprecated; existing events may show this conference solution type but new conferences cannot be created)\\n- \\\"hangoutsMeet\\\" for Google Meet (http://meet.google.com)\\n- \\\"addOn\\\" for 3P conference providers\"\n        }\n      },\n      \"id\": \"ConferenceSolutionKey\",\n      \"type\": \"object\"\n    },\n    \"Calendar\": {\n      \"id\": \"Calendar\",\n      \"properties\": {\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"Description of the calendar. Optional.\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Geographic location of the calendar as free-form text. Optional.\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"description\": \"The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. \\\"Europe/Zurich\\\".) Optional.\"\n        },\n        \"dataOwner\": {\n          \"type\": \"string\",\n          \"description\": \"The email of the owner of the calendar. Set only for secondary calendars. Read-only.\"\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the resource.\"\n        },\n        \"kind\": {\n          \"description\": \"Type of the resource (\\\"calendar#calendar\\\").\",\n          \"default\": \"calendar#calendar\",\n          \"type\": \"string\"\n        },\n        \"autoAcceptInvitations\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether this calendar automatically accepts invitations. Only valid for resource calendars.\"\n        },\n        \"summary\": {\n          \"description\": \"Title of the calendar.\",\n          \"annotations\": {\n            \"required\": [\n              \"calendar.calendars.insert\"\n            ]\n          },\n          \"type\": \"string\"\n        },\n        \"conferenceProperties\": {\n          \"description\": \"Conferencing properties for this calendar, for example what types of conferences are allowed.\",\n          \"$ref\": \"ConferenceProperties\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Identifier of the calendar. To retrieve IDs call the calendarList.list() method.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"EntryPoint\": {\n      \"id\": \"EntryPoint\",\n      \"properties\": {\n        \"uri\": {\n          \"type\": \"string\",\n          \"description\": \"The URI of the entry point. The maximum length is 1300 characters.\\nFormat:  \\n- for video, http: or https: schema is required.\\n- for phone, tel: schema is required. The URI should include the entire dial sequence (e.g., tel:+12345678900,,,123456789;1234).\\n- for sip, sip: schema is required, e.g., sip:12345678@myprovider.com.\\n- for more, http: or https: schema is required.\"\n        },\n        \"pin\": {\n          \"type\": \"string\",\n          \"description\": \"The PIN to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"\n        },\n        \"password\": {\n          \"type\": \"string\",\n          \"description\": \"The password to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"\n        },\n        \"regionCode\": {\n          \"type\": \"string\",\n          \"description\": \"The CLDR/ISO 3166 region code for the country associated with this phone access. Example: \\\"SE\\\" for Sweden.\\nCalendar backend will populate this field only for EntryPointType.PHONE.\"\n        },\n        \"meetingCode\": {\n          \"type\": \"string\",\n          \"description\": \"The meeting code to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"\n        },\n        \"entryPointFeatures\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Features of the entry point, such as being toll or toll-free. One entry point can have multiple features. However, toll and toll-free cannot be both set on the same entry point.\"\n        },\n        \"passcode\": {\n          \"type\": \"string\",\n          \"description\": \"The passcode to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\"\n        },\n        \"accessCode\": {\n          \"type\": \"string\",\n          \"description\": \"The access code to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"\n        },\n        \"entryPointType\": {\n          \"type\": \"string\",\n          \"description\": \"The type of the conference entry point.\\nPossible values are:  \\n- \\\"video\\\" - joining a conference over HTTP. A conference can have zero or one video entry point.\\n- \\\"phone\\\" - joining a conference by dialing a phone number. A conference can have zero or more phone entry points.\\n- \\\"sip\\\" - joining a conference over SIP. A conference can have zero or one sip entry point.\\n- \\\"more\\\" - further conference joining instructions, for example additional phone numbers. A conference can have zero or one more entry point. A conference with only a more entry point is not a valid conference.\"\n        },\n        \"label\": {\n          \"type\": \"string\",\n          \"description\": \"The label for the URI. Visible to end users. Not localized. The maximum length is 512 characters.\\nExamples:  \\n- for video: meet.google.com/aaa-bbbb-ccc\\n- for phone: +1 123 268 2601\\n- for sip: 12345678@altostrat.com\\n- for more: should not be filled  \\nOptional.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"EventBirthdayProperties\": {\n      \"id\": \"EventBirthdayProperties\",\n      \"properties\": {\n        \"contact\": {\n          \"type\": \"string\",\n          \"description\": \"Resource name of the contact this birthday event is linked to. This can be used to fetch contact details from People API. Format: \\\"people/c12345\\\". Read-only.\"\n        },\n        \"type\": {\n          \"default\": \"birthday\",\n          \"type\": \"string\",\n          \"description\": \"Type of birthday or special event. Possible values are:  \\n- \\\"anniversary\\\" - An anniversary other than birthday. Always has a contact. \\n- \\\"birthday\\\" - A birthday event. This is the default value. \\n- \\\"custom\\\" - A special date whose label is further specified in the customTypeName field. Always has a contact. \\n- \\\"other\\\" - A special date which does not fall into the other categories, and does not have a custom label. Always has a contact. \\n- \\\"self\\\" - Calendar owner's own birthday. Cannot have a contact.  The Calendar API only supports creating events with the type \\\"birthday\\\". The type cannot be changed after the event is created.\"\n        },\n        \"customTypeName\": {\n          \"type\": \"string\",\n          \"description\": \"Custom type label specified for this event. This is populated if birthdayProperties.type is set to \\\"custom\\\". Read-only.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"EventDateTime\": {\n      \"type\": \"object\",\n      \"id\": \"EventDateTime\",\n      \"properties\": {\n        \"dateTime\": {\n          \"description\": \"The time, as a combined date-time value (formatted according to RFC3339). A time zone offset is required unless a time zone is explicitly specified in timeZone.\",\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"date\": {\n          \"description\": \"The date, in the format \\\"yyyy-mm-dd\\\", if this is an all-day event.\",\n          \"type\": \"string\",\n          \"format\": \"date\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"description\": \"The time zone in which the time is specified. (Formatted as an IANA Time Zone Database name, e.g. \\\"Europe/Zurich\\\".) For recurring events this field is required and specifies the time zone in which the recurrence is expanded. For single events this field is optional and indicates a custom time zone for the event start/end.\"\n        }\n      }\n    },\n    \"CalendarList\": {\n      \"properties\": {\n        \"nextPageToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the collection.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"default\": \"calendar#calendarList\",\n          \"description\": \"Type of the collection (\\\"calendar#calendarList\\\").\"\n        },\n        \"items\": {\n          \"description\": \"Calendars that are present on the user's calendar list.\",\n          \"items\": {\n            \"$ref\": \"CalendarListEntry\"\n          },\n          \"type\": \"array\"\n        },\n        \"nextSyncToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"\n        }\n      },\n      \"id\": \"CalendarList\",\n      \"type\": \"object\"\n    },\n    \"Setting\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"description\": \"Value of the user setting. The format of the value depends on the ID of the setting. It must always be a UTF-8 string of length up to 1024 characters.\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The id of the user setting.\"\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the resource.\"\n        },\n        \"kind\": {\n          \"description\": \"Type of the resource (\\\"calendar#setting\\\").\",\n          \"type\": \"string\",\n          \"default\": \"calendar#setting\"\n        }\n      },\n      \"id\": \"Setting\",\n      \"type\": \"object\"\n    },\n    \"CalendarNotification\": {\n      \"type\": \"object\",\n      \"id\": \"CalendarNotification\",\n      \"properties\": {\n        \"method\": {\n          \"type\": \"string\",\n          \"description\": \"The method used to deliver the notification. The possible value is:  \\n- \\\"email\\\" - Notifications are sent via email.  \\nRequired when adding a notification.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of notification. Possible values are:  \\n- \\\"eventCreation\\\" - Notification sent when a new event is put on the calendar. \\n- \\\"eventChange\\\" - Notification sent when an event is changed. \\n- \\\"eventCancellation\\\" - Notification sent when an event is cancelled. \\n- \\\"eventResponse\\\" - Notification sent when an attendee responds to the event invitation. \\n- \\\"agenda\\\" - An agenda with the events of the day (sent out in the morning).  \\nRequired when adding a notification.\"\n        }\n      }\n    },\n    \"Acl\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the collection.\"\n        },\n        \"kind\": {\n          \"description\": \"Type of the collection (\\\"calendar#acl\\\").\",\n          \"type\": \"string\",\n          \"default\": \"calendar#acl\"\n        },\n        \"nextPageToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"\n        },\n        \"items\": {\n          \"description\": \"List of rules on the access control list.\",\n          \"items\": {\n            \"$ref\": \"AclRule\"\n          },\n          \"type\": \"array\"\n        },\n        \"nextSyncToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"\n        }\n      },\n      \"id\": \"Acl\"\n    },\n    \"ConferenceRequestStatus\": {\n      \"properties\": {\n        \"statusCode\": {\n          \"type\": \"string\",\n          \"description\": \"The current status of the conference create request. Read-only.\\nThe possible values are:  \\n- \\\"pending\\\": the conference create request is still being processed.\\n- \\\"success\\\": the conference create request succeeded, the entry points are populated.\\n- \\\"failure\\\": the conference create request failed, there are no entry points.\"\n        }\n      },\n      \"id\": \"ConferenceRequestStatus\",\n      \"type\": \"object\"\n    },\n    \"EventWorkingLocationProperties\": {\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Type of the working location. Possible values are:  \\n- \\\"homeOffice\\\" - The user is working at home. \\n- \\\"officeLocation\\\" - The user is working from an office. \\n- \\\"customLocation\\\" - The user is working from a custom location.  Any details are specified in a sub-field of the specified name, but this field may be missing if empty. Any other fields are ignored.\\nRequired when adding working location properties.\"\n        },\n        \"homeOffice\": {\n          \"type\": \"any\",\n          \"description\": \"If present, specifies that the user is working at home.\"\n        },\n        \"customLocation\": {\n          \"description\": \"If present, specifies that the user is working from a custom location.\",\n          \"properties\": {\n            \"label\": {\n              \"type\": \"string\",\n              \"description\": \"An optional extra label for additional information.\"\n            }\n          },\n          \"type\": \"object\"\n        },\n        \"officeLocation\": {\n          \"type\": \"object\",\n          \"description\": \"If present, specifies that the user is working from an office.\",\n          \"properties\": {\n            \"deskId\": {\n              \"type\": \"string\",\n              \"description\": \"An optional desk identifier.\"\n            },\n            \"floorId\": {\n              \"type\": \"string\",\n              \"description\": \"An optional floor identifier.\"\n            },\n            \"floorSectionId\": {\n              \"type\": \"string\",\n              \"description\": \"An optional floor section identifier.\"\n            },\n            \"label\": {\n              \"type\": \"string\",\n              \"description\": \"The office name that's displayed in Calendar Web and Mobile clients. We recommend you reference a building name in the organization's Resources database.\"\n            },\n            \"buildingId\": {\n              \"type\": \"string\",\n              \"description\": \"An optional building identifier. This should reference a building ID in the organization's Resources database.\"\n            }\n          }\n        }\n      },\n      \"id\": \"EventWorkingLocationProperties\",\n      \"type\": \"object\"\n    },\n    \"EventReminder\": {\n      \"properties\": {\n        \"method\": {\n          \"type\": \"string\",\n          \"description\": \"The method used by this reminder. Possible values are:  \\n- \\\"email\\\" - Reminders are sent via email. \\n- \\\"popup\\\" - Reminders are sent via a UI popup.  \\nRequired when adding a reminder.\"\n        },\n        \"minutes\": {\n          \"description\": \"Number of minutes before the start of the event when the reminder should trigger. Valid values are between 0 and 40320 (4 weeks in minutes).\\nRequired when adding a reminder.\",\n          \"format\": \"int32\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"EventReminder\",\n      \"type\": \"object\"\n    },\n    \"FreeBusyCalendar\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"busy\": {\n          \"items\": {\n            \"$ref\": \"TimePeriod\"\n          },\n          \"description\": \"List of time ranges during which this calendar should be regarded as busy.\",\n          \"type\": \"array\"\n        },\n        \"errors\": {\n          \"description\": \"Optional error(s) (if computation for the calendar failed).\",\n          \"items\": {\n            \"$ref\": \"Error\"\n          },\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"FreeBusyCalendar\"\n    },\n    \"ConferenceSolution\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"iconUri\": {\n          \"type\": \"string\",\n          \"description\": \"The user-visible icon for this solution.\"\n        },\n        \"key\": {\n          \"$ref\": \"ConferenceSolutionKey\",\n          \"description\": \"The key which can uniquely identify the conference solution for this event.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The user-visible name of this solution. Not localized.\"\n        }\n      },\n      \"id\": \"ConferenceSolution\"\n    },\n    \"FreeBusyResponse\": {\n      \"id\": \"FreeBusyResponse\",\n      \"properties\": {\n        \"kind\": {\n          \"description\": \"Type of the resource (\\\"calendar#freeBusy\\\").\",\n          \"type\": \"string\",\n          \"default\": \"calendar#freeBusy\"\n        },\n        \"timeMin\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"The start of the interval.\"\n        },\n        \"timeMax\": {\n          \"description\": \"The end of the interval.\",\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"calendars\": {\n          \"description\": \"List of free/busy information for calendars.\",\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"description\": \"Free/busy expansions for a single calendar.\",\n            \"$ref\": \"FreeBusyCalendar\"\n          }\n        },\n        \"groups\": {\n          \"description\": \"Expansion of groups.\",\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"FreeBusyGroup\",\n            \"description\": \"List of calendars that are members of this group.\"\n          }\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"LabelProperties\": {\n      \"type\": \"object\",\n      \"id\": \"LabelProperties\"\n    },\n    \"TimePeriod\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"end\": {\n          \"description\": \"The (exclusive) end of the time period.\",\n          \"type\": \"string\",\n          \"format\": \"date-time\"\n        },\n        \"start\": {\n          \"description\": \"The (inclusive) start of the time period.\",\n          \"format\": \"date-time\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"TimePeriod\"\n    },\n    \"FreeBusyRequest\": {\n      \"id\": \"FreeBusyRequest\",\n      \"properties\": {\n        \"calendarExpansionMax\": {\n          \"format\": \"int32\",\n          \"type\": \"integer\",\n          \"description\": \"Maximal number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50.\"\n        },\n        \"timeMin\": {\n          \"description\": \"The start of the interval for the query formatted as per RFC3339.\",\n          \"format\": \"date-time\",\n          \"type\": \"string\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"default\": \"UTC\",\n          \"description\": \"Time zone used in the response. Optional. The default is UTC.\"\n        },\n        \"timeMax\": {\n          \"format\": \"date-time\",\n          \"type\": \"string\",\n          \"description\": \"The end of the interval for the query formatted as per RFC3339.\"\n        },\n        \"groupExpansionMax\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Maximal number of calendar identifiers to be provided for a single group. Optional. An error is returned for a group with more members than this value. Maximum value is 100.\"\n        },\n        \"items\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"FreeBusyRequestItem\"\n          },\n          \"description\": \"List of calendars and/or groups to query.\"\n        }\n      },\n      \"type\": \"object\"\n    },\n    \"Settings\": {\n      \"type\": \"object\",\n      \"id\": \"Settings\",\n      \"properties\": {\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"Etag of the collection.\"\n        },\n        \"kind\": {\n          \"description\": \"Type of the collection (\\\"calendar#settings\\\").\",\n          \"type\": \"string\",\n          \"default\": \"calendar#settings\"\n        },\n        \"nextPageToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"\n        },\n        \"items\": {\n          \"items\": {\n            \"$ref\": \"Setting\"\n          },\n          \"description\": \"List of user settings.\",\n          \"type\": \"array\"\n        },\n        \"nextSyncToken\": {\n          \"type\": \"string\",\n          \"description\": \"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"\n        }\n      }\n    },\n    \"ColorDefinition\": {\n      \"properties\": {\n        \"background\": {\n          \"type\": \"string\",\n          \"description\": \"The background color associated with this color definition.\"\n        },\n        \"foreground\": {\n          \"type\": \"string\",\n          \"description\": \"The foreground color that can be used to write on top of a background with 'background' color.\"\n        }\n      },\n      \"id\": \"ColorDefinition\",\n      \"type\": \"object\"\n    },\n    \"CalendarListEntry\": {\n      \"properties\": {\n        \"notificationSettings\": {\n          \"description\": \"The notifications that the authenticated user is receiving for this calendar.\",\n          \"properties\": {\n            \"notifications\": {\n              \"items\": {\n                \"$ref\": \"CalendarNotification\"\n              },\n              \"description\": \"The list of notifications set for this calendar.\",\n              \"type\": \"array\"\n            }\n          },\n          \"type\": \"object\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"Description of the calendar. Optional. Read-only.\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Geographic location of the calendar as free-form text. Optional. Read-only.\"\n        },\n        \"conferenceProperties\": {\n          \"description\": \"Conferencing properties for this calendar, for example what types of conferences are allowed.\",\n          \"$ref\": \"ConferenceProperties\"\n        },\n        \"id\": {\n          \"description\": \"Identifier of the calendar.\",\n          \"annotations\": {\n            \"required\": [\n              \"calendar.calendarList.insert\"\n            ]\n          },\n          \"type\": \"string\"\n        },\n        \"summaryOverride\": {\n          \"type\": \"string\",\n          \"description\": \"The summary that the authenticated user has set for this calendar. Optional.\"\n        },\n        \"deleted\": {\n          \"type\": \"boolean\",\n          \"default\": \"false\",\n          \"description\": \"Whether this calendar list entry has been deleted from the calendar list. Read-only. Optional. The default is False.\"\n        },\n        \"colorId\": {\n          \"type\": \"string\",\n          \"description\": \"The color of the calendar. This is an ID referring to an entry in the calendar section of the colors definition (see the colors endpoint). This property is superseded by the backgroundColor and foregroundColor properties and can be ignored when using these properties. Optional.\"\n        },\n        \"backgroundColor\": {\n          \"type\": \"string\",\n          \"description\": \"The main color of the calendar in the hexadecimal format \\\"#0088aa\\\". This property supersedes the index-based colorId property. To set or change this property, you need to specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\"\n        },\n        \"dataOwner\": {\n          \"type\": \"string\",\n          \"description\": \"The email of the owner of the calendar. Set only for secondary calendars. Read-only.\"\n        },\n        \"defaultReminders\": {\n          \"type\": \"array\",\n          \"description\": \"The default reminders that the authenticated user has for this calendar.\",\n          \"items\": {\n            \"$ref\": \"EventReminder\"\n          }\n        },\n        \"hidden\": {\n          \"default\": \"false\",\n          \"type\": \"boolean\",\n          \"description\": \"Whether the calendar has been hidden from the list. Optional. The attribute is only returned when the calendar is hidden, in which case the value is true.\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"description\": \"The time zone of the calendar. Optional. Read-only.\"\n        },\n        \"selected\": {\n          \"description\": \"Whether the calendar content shows up in the calendar UI. Optional. The default is False.\",\n          \"default\": \"false\",\n          \"type\": \"boolean\"\n        },\n        \"foregroundColor\": {\n          \"type\": \"string\",\n          \"description\": \"The foreground color of the calendar in the hexadecimal format \\\"#ffffff\\\". This property supersedes the index-based colorId property. To set or change this property, you need to specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\"\n        },\n        \"primary\": {\n          \"description\": \"Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.\",\n          \"default\": \"false\",\n          \"type\": \"boolean\"\n        },\n        \"summary\": {\n          \"type\": \"string\",\n          \"description\": \"Title of the calendar. Read-only.\"\n        },\n        \"accessRole\": {\n          \"type\": \"string\",\n          \"description\": \"The effective access role that the authenticated user has on the calendar. Read-only. Possible values are:  \\n- \\\"freeBusyReader\\\" - Provides read access to free/busy information. \\n- \\\"reader\\\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \\n- \\\"owner\\\" - Provides manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to see and modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\"\n        },\n        \"etag\": {\n          \"type\": \"string\",\n          \"description\": \"ETag of the resource.\"\n        },\n        \"kind\": {\n          \"description\": \"Type of the resource (\\\"calendar#calendarListEntry\\\").\",\n          \"type\": \"string\",\n          \"default\": \"calendar#calendarListEntry\"\n        },\n        \"autoAcceptInvitations\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether this calendar automatically accepts invitations. Only valid for resource calendars. Read-only.\"\n        }\n      },\n      \"id\": \"CalendarListEntry\",\n      \"type\": \"object\"\n    }\n  }\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/__fixtures__/v1.2.3-google-calendar-workspace/.executor/artifacts/sources/google-calendar.json",
    "content": "{\"version\":3,\"sourceId\":\"google-calendar\",\"catalogId\":\"src_catalog_47bc8093e1ab5275e2821c8a\",\"generatedAt\":1773634395644,\"revision\":{\"id\":\"src_catalog_rev_b3afb0aa030f57d180a33e1b\",\"catalogId\":\"src_catalog_47bc8093e1ab5275e2821c8a\",\"revisionNumber\":1,\"sourceConfigJson\":\"{\\\"kind\\\":\\\"google_discovery\\\",\\\"service\\\":\\\"calendar\\\",\\\"version\\\":\\\"v3\\\",\\\"discoveryUrl\\\":\\\"https://calendar-json.googleapis.com/$discovery/rest?version=v3\\\",\\\"defaultHeaders\\\":null,\\\"scopes\\\":[]}\",\"importMetadataJson\":\"{\\\"sourceKind\\\":\\\"google-discovery\\\",\\\"adapterKey\\\":\\\"google_discovery\\\",\\\"importerVersion\\\":\\\"ir.v1.snapshot_builder\\\",\\\"importedAt\\\":\\\"2026-03-16T04:13:15.635Z\\\",\\\"sourceConfigHash\\\":\\\"d634511e93d27ed7\\\"}\",\"importMetadataHash\":\"5f2f714ffa30740db7af4979c85037f712dc2df7954c6773197499824385fb60\",\"snapshotHash\":\"942a4a689a375de5adb349e9c41babb3eb44ef838d3e5ba335a1968e454be943\",\"createdAt\":1773634384004,\"updatedAt\":1773634395147},\"snapshot\":{\"version\":\"ir.v1.snapshot\",\"import\":{\"sourceKind\":\"google-discovery\",\"adapterKey\":\"google_discovery\",\"importerVersion\":\"ir.v1.snapshot_builder\",\"importedAt\":\"2026-03-16T04:13:15.635Z\",\"sourceConfigHash\":\"d634511e93d27ed7\"},\"catalog\":{\"version\":\"ir.v1\",\"documents\":{\"doc_3c24a6731267de91\":{\"id\":\"doc_3c24a6731267de91\",\"kind\":\"google-discovery\",\"title\":\"Google Calendar\",\"fetchedAt\":\"2026-03-16T04:13:15.558Z\",\"rawRef\":\"https://calendar-json.googleapis.com/$discovery/rest?version=v3\",\"entryUri\":\"https://calendar-json.googleapis.com/$discovery/rest?version=v3\"}},\"resources\":{\"res_3088a953c6f2a8aa\":{\"id\":\"res_3088a953c6f2a8aa\",\"documentId\":\"doc_3c24a6731267de91\",\"canonicalUri\":\"https://calendar-json.googleapis.com/$discovery/rest?version=v3\",\"baseUri\":\"https://calendar-json.googleapis.com/$discovery/rest?version=v3\",\"anchors\":{},\"dynamicAnchors\":{},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#\"}]}},\"scopes\":{\"scope_service_3088a953c6f2a8aa\":{\"id\":\"scope_service_3088a953c6f2a8aa\",\"kind\":\"service\",\"name\":\"Google Calendar\",\"namespace\":\"google.calendar\",\"docs\":{\"summary\":\"Google Calendar\"},\"defaults\":{\"servers\":[{\"url\":\"https://www.googleapis.com/calendar/v3/\"}]},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/service\"}]}},\"symbols\":{\"security_6c8d27b28090ce3e\":{\"id\":\"security_6c8d27b28090ce3e\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.acls\":\"See and change the sharing permissions of Google calendars you own\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"shape_e85dfd870db3f887\":{\"id\":\"shape_e85dfd870db3f887\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/parameter/path/calendarId\"}]},\"param_444fe2702ad04f9a\":{\"id\":\"param_444fe2702ad04f9a\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/parameter/path/calendarId\"}]},\"param_19c73bb23f885a89\":{\"id\":\"param_19c73bb23f885a89\",\"kind\":\"parameter\",\"name\":\"ruleId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"ACL rule identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/parameter/path/ruleId\"}]},\"response_471db4ec66f0f0fb\":{\"id\":\"response_471db4ec66f0f0fb\",\"kind\":\"response\",\"docs\":{\"description\":\"Deletes an access control rule.\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/response\"}]},\"security_d7a46b25955cd4a8\":{\"id\":\"security_d7a46b25955cd4a8\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.acls\":\"See and change the sharing permissions of Google calendars you own\",\"https://www.googleapis.com/auth/calendar.acls.readonly\":\"See the sharing permissions of Google calendars you own\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_865494764597f7b6\":{\"id\":\"param_865494764597f7b6\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/parameter/path/calendarId\"}]},\"param_0fe8805e1b945ba1\":{\"id\":\"param_0fe8805e1b945ba1\",\"kind\":\"parameter\",\"name\":\"ruleId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"ACL rule identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/parameter/path/ruleId\"}]},\"shape_491e1b61d6f855c8\":{\"id\":\"shape_491e1b61d6f855c8\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#aclRule\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#aclRule\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/response/properties/kind\"}]},\"shape_0085987af68f89f4\":{\"id\":\"shape_0085987af68f89f4\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The extent to which calendar access is granted by this ACL rule.\"},\"node\":{\"type\":\"object\",\"fields\":{\"type\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The type of the scope. Possible values are:  \\n- \\\"default\\\" - The public scope. This is the default value. \\n- \\\"user\\\" - Limits the scope to a single user. \\n- \\\"group\\\" - Limits the scope to a group. \\n- \\\"domain\\\" - Limits the scope to a domain.  Note: The permissions granted to the \\\"default\\\", or public, scope apply to any user, authenticated or not.\"}},\"value\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type \\\"default\\\".\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/response/properties/scope\"}]},\"shape_c25db95637e2cf7c\":{\"id\":\"shape_c25db95637e2cf7c\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Identifier of the Access Control List (ACL) rule. See Sharing calendars.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"kind\":{\"shapeId\":\"shape_491e1b61d6f855c8\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#aclRule\\\").\"}},\"role\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The role assigned to the scope. Possible values are:  \\n- \\\"none\\\" - Provides no access. \\n- \\\"freeBusyReader\\\" - Provides read access to free/busy information. \\n- \\\"reader\\\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. Provides read access to the calendar's ACLs. \\n- \\\"owner\\\" - Provides manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\"}},\"scope\":{\"shapeId\":\"shape_0085987af68f89f4\",\"docs\":{\"description\":\"The extent to which calendar access is granted by this ACL rule.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/response\"}]},\"response_4d903baef2f6e4ff\":{\"id\":\"response_4d903baef2f6e4ff\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns an access control rule.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/response\"}]},\"shape_de499173b645249e\":{\"id\":\"shape_de499173b645249e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Whether to send notifications about the calendar sharing change. Optional. The default is True.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"boolean\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/parameter/query/sendNotifications\"}]},\"param_9ed2f2c993628f54\":{\"id\":\"param_9ed2f2c993628f54\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to send notifications about the calendar sharing change. Optional. The default is True.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/parameter/query/sendNotifications\"}]},\"param_3ee0dffb803d98e5\":{\"id\":\"param_3ee0dffb803d98e5\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/parameter/path/calendarId\"}]},\"request_body_2c7783d069126a63\":{\"id\":\"request_body_2c7783d069126a63\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/requestBody\"}]},\"response_2c7783d069126a63\":{\"id\":\"response_2c7783d069126a63\",\"kind\":\"response\",\"docs\":{\"description\":\"Creates an access control rule.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/response\"}]},\"security_2ee450a156c24b8b\":{\"id\":\"security_2ee450a156c24b8b\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.acls\":\"See and change the sharing permissions of Google calendars you own\",\"https://www.googleapis.com/auth/calendar.acls.readonly\":\"See the sharing permissions of Google calendars you own\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_5d695eba168f1738\":{\"id\":\"param_5d695eba168f1738\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/parameter/query/pageToken\"}]},\"param_a442b1333d2bd96f\":{\"id\":\"param_a442b1333d2bd96f\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to \\\"none\\\". Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/parameter/query/showDeleted\"}]},\"param_37b50056b425b1fd\":{\"id\":\"param_37b50056b425b1fd\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/parameter/path/calendarId\"}]},\"shape_f7389b9d7df65e12\":{\"id\":\"shape_f7389b9d7df65e12\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"integer\",\"format\":\"int32\",\"constraints\":{\"format\":\"int32\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/parameter/query/maxResults\"}]},\"param_eb3f00c3868930dd\":{\"id\":\"param_eb3f00c3868930dd\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/parameter/query/maxResults\"}]},\"param_bd79e3db605465e6\":{\"id\":\"param_bd79e3db605465e6\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All entries deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/parameter/query/syncToken\"}]},\"shape_a6e78b8d31585408\":{\"id\":\"shape_a6e78b8d31585408\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#acl\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#acl\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/response/properties/kind\"}]},\"shape_74ff335811251233\":{\"id\":\"shape_74ff335811251233\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_c25db95637e2cf7c\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/response/properties/items/items\"}]},\"shape_805a7242d4b9bf8e\":{\"id\":\"shape_805a7242d4b9bf8e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"List of rules on the access control list.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_74ff335811251233\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/response/properties/items\"}]},\"shape_a9645933a3b322f0\":{\"id\":\"shape_a9645933a3b322f0\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the collection.\"}},\"kind\":{\"shapeId\":\"shape_a6e78b8d31585408\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#acl\\\").\"}},\"nextPageToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"}},\"items\":{\"shapeId\":\"shape_805a7242d4b9bf8e\",\"docs\":{\"description\":\"List of rules on the access control list.\"}},\"nextSyncToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/response\"}]},\"response_ff70a66f04000bd1\":{\"id\":\"response_ff70a66f04000bd1\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns the rules in the access control list for the calendar.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_a9645933a3b322f0\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/response\"}]},\"param_8b0ec8f9d2b133b4\":{\"id\":\"param_8b0ec8f9d2b133b4\",\"kind\":\"parameter\",\"name\":\"ruleId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"ACL rule identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/parameter/path/ruleId\"}]},\"param_ff7287c81138b78a\":{\"id\":\"param_ff7287c81138b78a\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/parameter/query/sendNotifications\"}]},\"param_709b382d2b74c13c\":{\"id\":\"param_709b382d2b74c13c\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/parameter/path/calendarId\"}]},\"request_body_3e1a7bc02964b694\":{\"id\":\"request_body_3e1a7bc02964b694\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/requestBody\"}]},\"response_3e1a7bc02964b694\":{\"id\":\"response_3e1a7bc02964b694\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates an access control rule. This method supports patch semantics.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/response\"}]},\"param_689ff163a3f82a6b\":{\"id\":\"param_689ff163a3f82a6b\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/parameter/query/sendNotifications\"}]},\"param_591f9de8536c5abf\":{\"id\":\"param_591f9de8536c5abf\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/parameter/path/calendarId\"}]},\"param_683668fc1b4fc9b3\":{\"id\":\"param_683668fc1b4fc9b3\",\"kind\":\"parameter\",\"name\":\"ruleId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"ACL rule identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/parameter/path/ruleId\"}]},\"request_body_b8a0c727756a936c\":{\"id\":\"request_body_b8a0c727756a936c\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/requestBody\"}]},\"response_b8a0c727756a936c\":{\"id\":\"response_b8a0c727756a936c\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates an access control rule.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c25db95637e2cf7c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/response\"}]},\"param_049f4a76e106758d\":{\"id\":\"param_049f4a76e106758d\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/parameter/path/calendarId\"}]},\"param_312132807a36e3e0\":{\"id\":\"param_312132807a36e3e0\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/parameter/query/maxResults\"}]},\"param_713f047a3bf27dc3\":{\"id\":\"param_713f047a3bf27dc3\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All entries deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/parameter/query/syncToken\"}]},\"param_ce58aff032fecab2\":{\"id\":\"param_ce58aff032fecab2\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted ACLs in the result. Deleted ACLs are represented by role equal to \\\"none\\\". Deleted ACLs will always be included if syncToken is provided. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/parameter/query/showDeleted\"}]},\"param_273f58b38f4f4f15\":{\"id\":\"param_273f58b38f4f4f15\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/parameter/query/pageToken\"}]},\"shape_c444f5c5794d335d\":{\"id\":\"shape_c444f5c5794d335d\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Additional parameters controlling delivery channel behavior. Optional.\"},\"node\":{\"type\":\"object\",\"fields\":{},\"additionalProperties\":\"shape_e85dfd870db3f887\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/requestBody/properties/params\"}]},\"shape_55e6841633c4c956\":{\"id\":\"shape_55e6841633c4c956\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"format\":\"int64\",\"constraints\":{\"format\":\"int64\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/requestBody/properties/expiration\"}]},\"shape_455ef5ae540149d3\":{\"id\":\"shape_455ef5ae540149d3\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Identifies this as a notification channel used to watch for changes to a resource, which is \\\"api#channel\\\".\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"api#channel\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/requestBody/properties/kind\"}]},\"shape_9706af66da9de736\":{\"id\":\"shape_9706af66da9de736\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"resourceId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An opaque ID that identifies the resource being watched on this channel. Stable across different API versions.\"}},\"params\":{\"shapeId\":\"shape_c444f5c5794d335d\",\"docs\":{\"description\":\"Additional parameters controlling delivery channel behavior. Optional.\"}},\"resourceUri\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"A version-specific identifier for the watched resource.\"}},\"token\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An arbitrary string delivered to the target address with each notification delivered over this channel. Optional.\"}},\"payload\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"A Boolean value to indicate whether payload is wanted. Optional.\"}},\"address\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The address where notifications are delivered for this channel.\"}},\"expiration\":{\"shapeId\":\"shape_55e6841633c4c956\",\"docs\":{\"description\":\"Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.\"}},\"kind\":{\"shapeId\":\"shape_455ef5ae540149d3\",\"docs\":{\"description\":\"Identifies this as a notification channel used to watch for changes to a resource, which is \\\"api#channel\\\".\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"A UUID or similar unique string that identifies this channel.\"}},\"type\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The type of delivery mechanism used for this channel. Valid values are \\\"web_hook\\\" (or \\\"webhook\\\"). Both values refer to a channel where Http requests are used to deliver messages.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/requestBody\"}]},\"request_body_f6c2dfea21888d6f\":{\"id\":\"request_body_f6c2dfea21888d6f\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/requestBody\"}]},\"response_f6c2dfea21888d6f\":{\"id\":\"response_f6c2dfea21888d6f\",\"kind\":\"response\",\"docs\":{\"description\":\"Watch for changes to ACL resources.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/response\"}]},\"security_2fee943152021660\":{\"id\":\"security_2fee943152021660\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.calendarlist\":\"See, add, and remove Google calendars you’re subscribed to\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_9e7de972616d958c\":{\"id\":\"param_9e7de972616d958c\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.delete/parameter/path/calendarId\"}]},\"response_9e9231e118b48dbf\":{\"id\":\"response_9e9231e118b48dbf\",\"kind\":\"response\",\"docs\":{\"description\":\"Removes a calendar from the user's calendar list.\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.delete/response\"}]},\"security_79a5890d3e23d8ee\":{\"id\":\"security_79a5890d3e23d8ee\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.calendarlist\":\"See, add, and remove Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\":\"See the list of Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_19da6fd236794ac9\":{\"id\":\"param_19da6fd236794ac9\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/parameter/path/calendarId\"}]},\"shape_a28df06edf348902\":{\"id\":\"shape_a28df06edf348902\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"method\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The method used to deliver the notification. The possible value is:  \\n- \\\"email\\\" - Notifications are sent via email.  \\nRequired when adding a notification.\"}},\"type\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The type of notification. Possible values are:  \\n- \\\"eventCreation\\\" - Notification sent when a new event is put on the calendar. \\n- \\\"eventChange\\\" - Notification sent when an event is changed. \\n- \\\"eventCancellation\\\" - Notification sent when an event is cancelled. \\n- \\\"eventResponse\\\" - Notification sent when an attendee responds to the event invitation. \\n- \\\"agenda\\\" - An agenda with the events of the day (sent out in the morning).  \\nRequired when adding a notification.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/CalendarNotification\"}]},\"shape_a6ccc5e48fd2ef28\":{\"id\":\"shape_a6ccc5e48fd2ef28\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_a28df06edf348902\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/notificationSettings/properties/notifications/items\"}]},\"shape_7929ab7140486661\":{\"id\":\"shape_7929ab7140486661\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The list of notifications set for this calendar.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_a6ccc5e48fd2ef28\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/notificationSettings/properties/notifications\"}]},\"shape_421bd3c91afcc239\":{\"id\":\"shape_421bd3c91afcc239\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The notifications that the authenticated user is receiving for this calendar.\"},\"node\":{\"type\":\"object\",\"fields\":{\"notifications\":{\"shapeId\":\"shape_7929ab7140486661\",\"docs\":{\"description\":\"The list of notifications set for this calendar.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/notificationSettings\"}]},\"shape_4031ddb626d2d5df\":{\"id\":\"shape_4031ddb626d2d5df\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The types of conference solutions that are supported for this calendar.\\nThe possible values are:  \\n- \\\"eventHangout\\\" \\n- \\\"eventNamedHangout\\\" \\n- \\\"hangoutsMeet\\\"  Optional.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_e85dfd870db3f887\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceProperties/properties/allowedConferenceSolutionTypes\"}]},\"shape_b9e2f994b14949ee\":{\"id\":\"shape_b9e2f994b14949ee\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"allowedConferenceSolutionTypes\":{\"shapeId\":\"shape_4031ddb626d2d5df\",\"docs\":{\"description\":\"The types of conference solutions that are supported for this calendar.\\nThe possible values are:  \\n- \\\"eventHangout\\\" \\n- \\\"eventNamedHangout\\\" \\n- \\\"hangoutsMeet\\\"  Optional.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceProperties\"}]},\"shape_ca92c801ce364b11\":{\"id\":\"shape_ca92c801ce364b11\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_b9e2f994b14949ee\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/conferenceProperties\"}]},\"shape_0d16da1c025c18d3\":{\"id\":\"shape_0d16da1c025c18d3\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Whether this calendar list entry has been deleted from the calendar list. Read-only. Optional. The default is False.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"boolean\",\"constraints\":{\"default\":\"false\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/deleted\"}]},\"shape_1838f8f3d7489e6a\":{\"id\":\"shape_1838f8f3d7489e6a\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"method\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The method used by this reminder. Possible values are:  \\n- \\\"email\\\" - Reminders are sent via email. \\n- \\\"popup\\\" - Reminders are sent via a UI popup.  \\nRequired when adding a reminder.\"}},\"minutes\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"Number of minutes before the start of the event when the reminder should trigger. Valid values are between 0 and 40320 (4 weeks in minutes).\\nRequired when adding a reminder.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventReminder\"}]},\"shape_5960ca320916fdbe\":{\"id\":\"shape_5960ca320916fdbe\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_1838f8f3d7489e6a\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/defaultReminders/items\"}]},\"shape_2c5c185803da3aee\":{\"id\":\"shape_2c5c185803da3aee\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The default reminders that the authenticated user has for this calendar.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_5960ca320916fdbe\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/defaultReminders\"}]},\"shape_b637e435194e7c12\":{\"id\":\"shape_b637e435194e7c12\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#calendarListEntry\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#calendarListEntry\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response/properties/kind\"}]},\"shape_b8e63d842532efe2\":{\"id\":\"shape_b8e63d842532efe2\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"notificationSettings\":{\"shapeId\":\"shape_421bd3c91afcc239\",\"docs\":{\"description\":\"The notifications that the authenticated user is receiving for this calendar.\"}},\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the calendar. Optional. Read-only.\"}},\"location\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Geographic location of the calendar as free-form text. Optional. Read-only.\"}},\"conferenceProperties\":{\"shapeId\":\"shape_ca92c801ce364b11\"},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Identifier of the calendar.\"}},\"summaryOverride\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The summary that the authenticated user has set for this calendar. Optional.\"}},\"deleted\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether this calendar list entry has been deleted from the calendar list. Read-only. Optional. The default is False.\"}},\"colorId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The color of the calendar. This is an ID referring to an entry in the calendar section of the colors definition (see the colors endpoint). This property is superseded by the backgroundColor and foregroundColor properties and can be ignored when using these properties. Optional.\"}},\"backgroundColor\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The main color of the calendar in the hexadecimal format \\\"#0088aa\\\". This property supersedes the index-based colorId property. To set or change this property, you need to specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\"}},\"dataOwner\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The email of the owner of the calendar. Set only for secondary calendars. Read-only.\"}},\"defaultReminders\":{\"shapeId\":\"shape_2c5c185803da3aee\",\"docs\":{\"description\":\"The default reminders that the authenticated user has for this calendar.\"}},\"hidden\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the calendar has been hidden from the list. Optional. The attribute is only returned when the calendar is hidden, in which case the value is true.\"}},\"timeZone\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The time zone of the calendar. Optional. Read-only.\"}},\"selected\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the calendar content shows up in the calendar UI. Optional. The default is False.\"}},\"foregroundColor\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The foreground color of the calendar in the hexadecimal format \\\"#ffffff\\\". This property supersedes the index-based colorId property. To set or change this property, you need to specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\"}},\"primary\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the calendar. Read-only.\"}},\"accessRole\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The effective access role that the authenticated user has on the calendar. Read-only. Possible values are:  \\n- \\\"freeBusyReader\\\" - Provides read access to free/busy information. \\n- \\\"reader\\\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \\n- \\\"owner\\\" - Provides manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to see and modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"kind\":{\"shapeId\":\"shape_b637e435194e7c12\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#calendarListEntry\\\").\"}},\"autoAcceptInvitations\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether this calendar automatically accepts invitations. Only valid for resource calendars. Read-only.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response\"}]},\"response_1cd437418aa08fe2\":{\"id\":\"response_1cd437418aa08fe2\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns a calendar from the user's calendar list.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_b8e63d842532efe2\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/response\"}]},\"security_dd267db75d9d9445\":{\"id\":\"security_dd267db75d9d9445\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.calendarlist\":\"See, add, and remove Google calendars you’re subscribed to\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_04acfd77cbca9cf2\":{\"id\":\"param_04acfd77cbca9cf2\",\"kind\":\"parameter\",\"name\":\"colorRgbFormat\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/parameter/query/colorRgbFormat\"}]},\"shape_7685d83bcd59d435\":{\"id\":\"shape_7685d83bcd59d435\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/CalendarNotification\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/notificationSettings/properties/notifications/items\"}],\"diagnosticIds\":[\"diag_fdaca57dcfdf1294\"]},\"shape_0040b9d3baa31ba3\":{\"id\":\"shape_0040b9d3baa31ba3\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The list of notifications set for this calendar.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_7685d83bcd59d435\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/notificationSettings/properties/notifications\"}]},\"shape_a900d7821e9ca435\":{\"id\":\"shape_a900d7821e9ca435\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The notifications that the authenticated user is receiving for this calendar.\"},\"node\":{\"type\":\"object\",\"fields\":{\"notifications\":{\"shapeId\":\"shape_0040b9d3baa31ba3\",\"docs\":{\"description\":\"The list of notifications set for this calendar.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/notificationSettings\"}]},\"shape_8ebbe75cc189ee84\":{\"id\":\"shape_8ebbe75cc189ee84\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/ConferenceProperties\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/conferenceProperties\"}],\"diagnosticIds\":[\"diag_b8352d2ce9332696\"]},\"shape_f5a032e784e5c459\":{\"id\":\"shape_f5a032e784e5c459\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventReminder\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/defaultReminders/items\"}],\"diagnosticIds\":[\"diag_bd128538f1700633\"]},\"shape_aa45e555ba50ffbf\":{\"id\":\"shape_aa45e555ba50ffbf\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The default reminders that the authenticated user has for this calendar.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_f5a032e784e5c459\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/defaultReminders\"}]},\"shape_2f34d892becae556\":{\"id\":\"shape_2f34d892becae556\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"notificationSettings\":{\"shapeId\":\"shape_a900d7821e9ca435\",\"docs\":{\"description\":\"The notifications that the authenticated user is receiving for this calendar.\"}},\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the calendar. Optional. Read-only.\"}},\"location\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Geographic location of the calendar as free-form text. Optional. Read-only.\"}},\"conferenceProperties\":{\"shapeId\":\"shape_8ebbe75cc189ee84\"},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Identifier of the calendar.\"}},\"summaryOverride\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The summary that the authenticated user has set for this calendar. Optional.\"}},\"deleted\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether this calendar list entry has been deleted from the calendar list. Read-only. Optional. The default is False.\"}},\"colorId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The color of the calendar. This is an ID referring to an entry in the calendar section of the colors definition (see the colors endpoint). This property is superseded by the backgroundColor and foregroundColor properties and can be ignored when using these properties. Optional.\"}},\"backgroundColor\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The main color of the calendar in the hexadecimal format \\\"#0088aa\\\". This property supersedes the index-based colorId property. To set or change this property, you need to specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\"}},\"dataOwner\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The email of the owner of the calendar. Set only for secondary calendars. Read-only.\"}},\"defaultReminders\":{\"shapeId\":\"shape_aa45e555ba50ffbf\",\"docs\":{\"description\":\"The default reminders that the authenticated user has for this calendar.\"}},\"hidden\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the calendar has been hidden from the list. Optional. The attribute is only returned when the calendar is hidden, in which case the value is true.\"}},\"timeZone\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The time zone of the calendar. Optional. Read-only.\"}},\"selected\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the calendar content shows up in the calendar UI. Optional. The default is False.\"}},\"foregroundColor\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The foreground color of the calendar in the hexadecimal format \\\"#ffffff\\\". This property supersedes the index-based colorId property. To set or change this property, you need to specify colorRgbFormat=true in the parameters of the insert, update and patch methods. Optional.\"}},\"primary\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the calendar. Read-only.\"}},\"accessRole\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The effective access role that the authenticated user has on the calendar. Read-only. Possible values are:  \\n- \\\"freeBusyReader\\\" - Provides read access to free/busy information. \\n- \\\"reader\\\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \\n- \\\"owner\\\" - Provides manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to see and modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"kind\":{\"shapeId\":\"shape_b637e435194e7c12\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#calendarListEntry\\\").\"}},\"autoAcceptInvitations\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether this calendar automatically accepts invitations. Only valid for resource calendars. Read-only.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody\"}]},\"request_body_e3a6143db2e03c18\":{\"id\":\"request_body_e3a6143db2e03c18\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_2f34d892becae556\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody\"}]},\"response_e3a6143db2e03c18\":{\"id\":\"response_e3a6143db2e03c18\",\"kind\":\"response\",\"docs\":{\"description\":\"Inserts an existing calendar into the user's calendar list.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_b8e63d842532efe2\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/response\"}]},\"security_206e609b39f51e58\":{\"id\":\"security_206e609b39f51e58\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.calendarlist\":\"See, add, and remove Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\":\"See the list of Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_ccfb54832f688ede\":{\"id\":\"param_ccfb54832f688ede\",\"kind\":\"parameter\",\"name\":\"showHidden\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to show hidden entries. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/showHidden\"}]},\"param_d556cf6121ff508e\":{\"id\":\"param_d556cf6121ff508e\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/maxResults\"}]},\"shape_acc32f91725565a2\":{\"id\":\"shape_acc32f91725565a2\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The minimum access role for the user in the returned entries. Optional. The default is no restriction.\"},\"node\":{\"type\":\"enum\",\"values\":[\"freeBusyReader\",\"owner\",\"reader\",\"writer\"]},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/minAccessRole\"}]},\"param_a4fd19e0cacc3199\":{\"id\":\"param_a4fd19e0cacc3199\",\"kind\":\"parameter\",\"name\":\"minAccessRole\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The minimum access role for the user in the returned entries. Optional. The default is no restriction.\"},\"schemaShapeId\":\"shape_acc32f91725565a2\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/minAccessRole\"}]},\"param_19f162a5faa492f4\":{\"id\":\"param_19f162a5faa492f4\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. If only read-only fields such as calendar properties or ACLs have changed, the entry won't be returned. All entries deleted and hidden since the previous list request will always be in the result set and it is not allowed to set showDeleted neither showHidden to False.\\nTo ensure client state consistency minAccessRole query parameter cannot be specified together with nextSyncToken.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/syncToken\"}]},\"param_274c47b86d463953\":{\"id\":\"param_274c47b86d463953\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/pageToken\"}]},\"param_b574b1d9c2e540bc\":{\"id\":\"param_b574b1d9c2e540bc\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted calendar list entries in the result. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/parameter/query/showDeleted\"}]},\"shape_9ba9a4a8a902e823\":{\"id\":\"shape_9ba9a4a8a902e823\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#calendarList\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#calendarList\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/response/properties/kind\"}]},\"shape_22a1a94af3f76585\":{\"id\":\"shape_22a1a94af3f76585\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_b8e63d842532efe2\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/response/properties/items/items\"}]},\"shape_7368fb6da07dd27c\":{\"id\":\"shape_7368fb6da07dd27c\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Calendars that are present on the user's calendar list.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_22a1a94af3f76585\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/response/properties/items\"}]},\"shape_873c778640cc1a5f\":{\"id\":\"shape_873c778640cc1a5f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"nextPageToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the collection.\"}},\"kind\":{\"shapeId\":\"shape_9ba9a4a8a902e823\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#calendarList\\\").\"}},\"items\":{\"shapeId\":\"shape_7368fb6da07dd27c\",\"docs\":{\"description\":\"Calendars that are present on the user's calendar list.\"}},\"nextSyncToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/response\"}]},\"response_c09378fb89eced1c\":{\"id\":\"response_c09378fb89eced1c\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns the calendars on the user's calendar list.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_873c778640cc1a5f\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/response\"}]},\"param_905935f366f3f169\":{\"id\":\"param_905935f366f3f169\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/parameter/path/calendarId\"}]},\"param_e7dd508896d09376\":{\"id\":\"param_e7dd508896d09376\",\"kind\":\"parameter\",\"name\":\"colorRgbFormat\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/parameter/query/colorRgbFormat\"}]},\"request_body_99e53c62c1052bfe\":{\"id\":\"request_body_99e53c62c1052bfe\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_2f34d892becae556\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/requestBody\"}]},\"response_99e53c62c1052bfe\":{\"id\":\"response_99e53c62c1052bfe\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates an existing calendar on the user's calendar list. This method supports patch semantics.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_b8e63d842532efe2\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/response\"}]},\"param_fc9ee8249e864763\":{\"id\":\"param_fc9ee8249e864763\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/parameter/path/calendarId\"}]},\"param_8822c12f3ffee545\":{\"id\":\"param_8822c12f3ffee545\",\"kind\":\"parameter\",\"name\":\"colorRgbFormat\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/parameter/query/colorRgbFormat\"}]},\"request_body_b5c69a9694d6070b\":{\"id\":\"request_body_b5c69a9694d6070b\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_2f34d892becae556\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/requestBody\"}]},\"response_b5c69a9694d6070b\":{\"id\":\"response_b5c69a9694d6070b\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates an existing calendar on the user's calendar list.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_b8e63d842532efe2\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/response\"}]},\"param_e0893af8e4a2cfac\":{\"id\":\"param_e0893af8e4a2cfac\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/parameter/query/maxResults\"}]},\"param_348aa18581374f6d\":{\"id\":\"param_348aa18581374f6d\",\"kind\":\"parameter\",\"name\":\"showHidden\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to show hidden entries. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/parameter/query/showHidden\"}]},\"param_53c064d546369fa0\":{\"id\":\"param_53c064d546369fa0\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. If only read-only fields such as calendar properties or ACLs have changed, the entry won't be returned. All entries deleted and hidden since the previous list request will always be in the result set and it is not allowed to set showDeleted neither showHidden to False.\\nTo ensure client state consistency minAccessRole query parameter cannot be specified together with nextSyncToken.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/parameter/query/syncToken\"}]},\"param_2f53b399a77dee36\":{\"id\":\"param_2f53b399a77dee36\",\"kind\":\"parameter\",\"name\":\"minAccessRole\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The minimum access role for the user in the returned entries. Optional. The default is no restriction.\"},\"schemaShapeId\":\"shape_acc32f91725565a2\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/parameter/query/minAccessRole\"}]},\"param_899ad5331e36e108\":{\"id\":\"param_899ad5331e36e108\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted calendar list entries in the result. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/parameter/query/showDeleted\"}]},\"param_d67670a2064f9e9b\":{\"id\":\"param_d67670a2064f9e9b\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/parameter/query/pageToken\"}]},\"request_body_c7a2eafdc5c99178\":{\"id\":\"request_body_c7a2eafdc5c99178\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/requestBody\"}]},\"response_c7a2eafdc5c99178\":{\"id\":\"response_c7a2eafdc5c99178\",\"kind\":\"response\",\"docs\":{\"description\":\"Watch for changes to CalendarList resources.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/response\"}]},\"security_f4177ef5b7fbd2dd\":{\"id\":\"security_f4177ef5b7fbd2dd\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.calendars\":\"See and change the properties of Google calendars you have access to, and create secondary calendars\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_f5bdb9e3c6d11c0c\":{\"id\":\"param_f5bdb9e3c6d11c0c\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.clear/parameter/path/calendarId\"}]},\"response_b5bf0d1134490ee8\":{\"id\":\"response_b5bf0d1134490ee8\",\"kind\":\"response\",\"docs\":{\"description\":\"Clears a primary calendar. This operation deletes all events associated with the primary calendar of an account.\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.clear/response\"}]},\"security_b9f1b81ad65a4447\":{\"id\":\"security_b9f1b81ad65a4447\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.calendars\":\"See and change the properties of Google calendars you have access to, and create secondary calendars\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_5b98cbb4acd90d7e\":{\"id\":\"param_5b98cbb4acd90d7e\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.delete/parameter/path/calendarId\"}]},\"response_0b9905c4a74c8ba4\":{\"id\":\"response_0b9905c4a74c8ba4\",\"kind\":\"response\",\"docs\":{\"description\":\"Deletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.delete/response\"}]},\"security_2b1f1156e0d7817a\":{\"id\":\"security_2b1f1156e0d7817a\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.calendars\":\"See and change the properties of Google calendars you have access to, and create secondary calendars\",\"https://www.googleapis.com/auth/calendar.calendars.readonly\":\"See the title, description, default time zone, and other properties of Google calendars you have access to\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_dfda87731f99af97\":{\"id\":\"param_dfda87731f99af97\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/parameter/path/calendarId\"}]},\"shape_a441cb44e22252cf\":{\"id\":\"shape_a441cb44e22252cf\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#calendar\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/response/properties/kind\"}]},\"shape_1bda9ee329aacd0d\":{\"id\":\"shape_1bda9ee329aacd0d\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the calendar. Optional.\"}},\"location\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Geographic location of the calendar as free-form text. Optional.\"}},\"timeZone\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. \\\"Europe/Zurich\\\".) Optional.\"}},\"dataOwner\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The email of the owner of the calendar. Set only for secondary calendars. Read-only.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"kind\":{\"shapeId\":\"shape_a441cb44e22252cf\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#calendar\\\").\"}},\"autoAcceptInvitations\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether this calendar automatically accepts invitations. Only valid for resource calendars.\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the calendar.\"}},\"conferenceProperties\":{\"shapeId\":\"shape_ca92c801ce364b11\"},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Identifier of the calendar. To retrieve IDs call the calendarList.list() method.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/response\"}]},\"response_3945632f075b1614\":{\"id\":\"response_3945632f075b1614\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns metadata for a calendar.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_1bda9ee329aacd0d\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/response\"}]},\"shape_c9afb16831761950\":{\"id\":\"shape_c9afb16831761950\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the calendar. Optional.\"}},\"location\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Geographic location of the calendar as free-form text. Optional.\"}},\"timeZone\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. \\\"Europe/Zurich\\\".) Optional.\"}},\"dataOwner\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The email of the owner of the calendar. Set only for secondary calendars. Read-only.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"kind\":{\"shapeId\":\"shape_a441cb44e22252cf\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#calendar\\\").\"}},\"autoAcceptInvitations\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether this calendar automatically accepts invitations. Only valid for resource calendars.\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the calendar.\"}},\"conferenceProperties\":{\"shapeId\":\"shape_8ebbe75cc189ee84\"},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Identifier of the calendar. To retrieve IDs call the calendarList.list() method.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/requestBody\"}]},\"request_body_2db08056adefca97\":{\"id\":\"request_body_2db08056adefca97\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c9afb16831761950\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/requestBody\"}]},\"response_2db08056adefca97\":{\"id\":\"response_2db08056adefca97\",\"kind\":\"response\",\"docs\":{\"description\":\"Creates a secondary calendar.\\nThe authenticated user for the request is made the data owner of the new calendar.\\n\\nNote: We recommend to authenticate as the intended data owner of the calendar. You can use domain-wide delegation of authority to allow applications to act on behalf of a specific user. Don't use a service account for authentication. If you use a service account for authentication, the service account is the data owner, which can lead to unexpected behavior. For example, if a service account is the data owner, data ownership cannot be transferred.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_1bda9ee329aacd0d\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/response\"}]},\"param_fc1f00874dc759fc\":{\"id\":\"param_fc1f00874dc759fc\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/parameter/path/calendarId\"}]},\"request_body_4449f8126cd6253f\":{\"id\":\"request_body_4449f8126cd6253f\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c9afb16831761950\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/requestBody\"}]},\"response_4449f8126cd6253f\":{\"id\":\"response_4449f8126cd6253f\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates metadata for a calendar. This method supports patch semantics.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_1bda9ee329aacd0d\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/response\"}]},\"param_7eca185f50976a10\":{\"id\":\"param_7eca185f50976a10\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/parameter/path/calendarId\"}]},\"request_body_896a2168ace1b3dc\":{\"id\":\"request_body_896a2168ace1b3dc\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c9afb16831761950\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/requestBody\"}]},\"response_896a2168ace1b3dc\":{\"id\":\"response_896a2168ace1b3dc\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates metadata for a calendar.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_1bda9ee329aacd0d\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/response\"}]},\"security_51453cd90777bfe0\":{\"id\":\"security_51453cd90777bfe0\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.acls\":\"See and change the sharing permissions of Google calendars you own\",\"https://www.googleapis.com/auth/calendar.acls.readonly\":\"See the sharing permissions of Google calendars you own\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.calendarlist\":\"See, add, and remove Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\":\"See the list of Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.events\":\"View and edit events on all your calendars\",\"https://www.googleapis.com/auth/calendar.events.freebusy\":\"See the availability on Google calendars you have access to\",\"https://www.googleapis.com/auth/calendar.events.owned\":\"See, create, change, and delete events on Google calendars you own\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\":\"See the events on Google calendars you own\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\":\"See the events on public calendars\",\"https://www.googleapis.com/auth/calendar.events.readonly\":\"View events on all your calendars\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\",\"https://www.googleapis.com/auth/calendar.settings.readonly\":\"View your Calendar settings\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"request_body_35929b9fe1764fc8\":{\"id\":\"request_body_35929b9fe1764fc8\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/channels.stop/requestBody\"}]},\"response_35929b9fe1764fc8\":{\"id\":\"response_35929b9fe1764fc8\",\"kind\":\"response\",\"docs\":{\"description\":\"Stop watching resources through this channel\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/channels.stop/response\"}]},\"security_1d7e9668153221b8\":{\"id\":\"security_1d7e9668153221b8\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.calendarlist\":\"See, add, and remove Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\":\"See the list of Google calendars you’re subscribed to\",\"https://www.googleapis.com/auth/calendar.events.freebusy\":\"See the availability on Google calendars you have access to\",\"https://www.googleapis.com/auth/calendar.events.owned\":\"See, create, change, and delete events on Google calendars you own\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\":\"See the events on Google calendars you own\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\":\"See the events on public calendars\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"shape_cbd0a25f7ae51a40\":{\"id\":\"shape_cbd0a25f7ae51a40\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"background\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The background color associated with this color definition.\"}},\"foreground\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The foreground color that can be used to write on top of a background with 'background' color.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ColorDefinition\"}]},\"shape_693dd2826868d02e\":{\"id\":\"shape_693dd2826868d02e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_cbd0a25f7ae51a40\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/response/properties/calendar/additionalProperties\"}]},\"shape_cff13a4bae8ff6f5\":{\"id\":\"shape_cff13a4bae8ff6f5\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"A global palette of calendar colors, mapping from the color ID to its definition. A calendarListEntry resource refers to one of these color IDs in its colorId field. Read-only.\"},\"node\":{\"type\":\"object\",\"fields\":{},\"additionalProperties\":\"shape_693dd2826868d02e\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/response/properties/calendar\"}]},\"shape_3a8b43edac4c9704\":{\"id\":\"shape_3a8b43edac4c9704\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#colors\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#colors\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/response/properties/kind\"}]},\"shape_13904d247e72e80f\":{\"id\":\"shape_13904d247e72e80f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Last modification time of the color palette (as a RFC3339 timestamp). Read-only.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"format\":\"date-time\",\"constraints\":{\"format\":\"date-time\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/response/properties/updated\"}]},\"shape_2ee0fc4a01e03c8b\":{\"id\":\"shape_2ee0fc4a01e03c8b\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"calendar\":{\"shapeId\":\"shape_cff13a4bae8ff6f5\",\"docs\":{\"description\":\"A global palette of calendar colors, mapping from the color ID to its definition. A calendarListEntry resource refers to one of these color IDs in its colorId field. Read-only.\"}},\"kind\":{\"shapeId\":\"shape_3a8b43edac4c9704\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#colors\\\").\"}},\"event\":{\"shapeId\":\"shape_cff13a4bae8ff6f5\",\"docs\":{\"description\":\"A global palette of event colors, mapping from the color ID to its definition. An event resource may refer to one of these color IDs in its colorId field. Read-only.\"}},\"updated\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"Last modification time of the color palette (as a RFC3339 timestamp). Read-only.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/response\"}]},\"response_400a9e370909fc9a\":{\"id\":\"response_400a9e370909fc9a\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns the color definitions for calendars and events.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_2ee0fc4a01e03c8b\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/response\"}]},\"security_c5960c297ea564ea\":{\"id\":\"security_c5960c297ea564ea\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.events\":\"View and edit events on all your calendars\",\"https://www.googleapis.com/auth/calendar.events.owned\":\"See, create, change, and delete events on Google calendars you own\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_ab94c0091357a70b\":{\"id\":\"param_ab94c0091357a70b\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/parameter/path/calendarId\"}]},\"param_c7508e8640df74be\":{\"id\":\"param_c7508e8640df74be\",\"kind\":\"parameter\",\"name\":\"eventId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Event identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/parameter/path/eventId\"}]},\"param_07676ae5ed9c46e3\":{\"id\":\"param_07676ae5ed9c46e3\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the deletion of the event. Note that some emails might still be sent even if you set the value to false. The default is false.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/parameter/query/sendNotifications\"}]},\"shape_2e366aa731bc8b22\":{\"id\":\"shape_2e366aa731bc8b22\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Guests who should receive notifications about the deletion of the event.\"},\"node\":{\"type\":\"enum\",\"values\":[\"all\",\"externalOnly\",\"none\"]},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/parameter/query/sendUpdates\"}]},\"param_779569f40e1975e9\":{\"id\":\"param_779569f40e1975e9\",\"kind\":\"parameter\",\"name\":\"sendUpdates\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Guests who should receive notifications about the deletion of the event.\"},\"schemaShapeId\":\"shape_2e366aa731bc8b22\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/parameter/query/sendUpdates\"}]},\"response_8b48915acd5174b9\":{\"id\":\"response_8b48915acd5174b9\",\"kind\":\"response\",\"docs\":{\"description\":\"Deletes an event.\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/response\"}]},\"security_b39e22a1c580fb61\":{\"id\":\"security_b39e22a1c580fb61\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.app.created\":\"Make secondary Google calendars, and see, create, change, and delete events on them\",\"https://www.googleapis.com/auth/calendar.events\":\"View and edit events on all your calendars\",\"https://www.googleapis.com/auth/calendar.events.freebusy\":\"See the availability on Google calendars you have access to\",\"https://www.googleapis.com/auth/calendar.events.owned\":\"See, create, change, and delete events on Google calendars you own\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\":\"See the events on Google calendars you own\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\":\"See the events on public calendars\",\"https://www.googleapis.com/auth/calendar.events.readonly\":\"View events on all your calendars\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_df57a7df6732daa5\":{\"id\":\"param_df57a7df6732daa5\",\"kind\":\"parameter\",\"name\":\"alwaysIncludeEmail\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/parameter/query/alwaysIncludeEmail\"}]},\"param_e3d8efd19fb6be72\":{\"id\":\"param_e3d8efd19fb6be72\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/parameter/path/calendarId\"}]},\"param_029e62f55c519446\":{\"id\":\"param_029e62f55c519446\",\"kind\":\"parameter\",\"name\":\"eventId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Event identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/parameter/path/eventId\"}]},\"param_bdab85831749cfe9\":{\"id\":\"param_bdab85831749cfe9\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/parameter/query/maxAttendees\"}]},\"param_23af8751757d5f46\":{\"id\":\"param_23af8751757d5f46\",\"kind\":\"parameter\",\"name\":\"timeZone\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Time zone used in the response. Optional. The default is the time zone of the calendar.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/parameter/query/timeZone\"}]},\"shape_620184de424e671e\":{\"id\":\"shape_620184de424e671e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of birthday or special event. Possible values are:  \\n- \\\"anniversary\\\" - An anniversary other than birthday. Always has a contact. \\n- \\\"birthday\\\" - A birthday event. This is the default value. \\n- \\\"custom\\\" - A special date whose label is further specified in the customTypeName field. Always has a contact. \\n- \\\"other\\\" - A special date which does not fall into the other categories, and does not have a custom label. Always has a contact. \\n- \\\"self\\\" - Calendar owner's own birthday. Cannot have a contact.  The Calendar API only supports creating events with the type \\\"birthday\\\". The type cannot be changed after the event is created.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"birthday\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventBirthdayProperties/properties/type\"}]},\"shape_a9bf2190e8ba75fb\":{\"id\":\"shape_a9bf2190e8ba75fb\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"contact\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Resource name of the contact this birthday event is linked to. This can be used to fetch contact details from People API. Format: \\\"people/c12345\\\". Read-only.\"}},\"type\":{\"shapeId\":\"shape_620184de424e671e\",\"docs\":{\"description\":\"Type of birthday or special event. Possible values are:  \\n- \\\"anniversary\\\" - An anniversary other than birthday. Always has a contact. \\n- \\\"birthday\\\" - A birthday event. This is the default value. \\n- \\\"custom\\\" - A special date whose label is further specified in the customTypeName field. Always has a contact. \\n- \\\"other\\\" - A special date which does not fall into the other categories, and does not have a custom label. Always has a contact. \\n- \\\"self\\\" - Calendar owner's own birthday. Cannot have a contact.  The Calendar API only supports creating events with the type \\\"birthday\\\". The type cannot be changed after the event is created.\"}},\"customTypeName\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Custom type label specified for this event. This is populated if birthdayProperties.type is set to \\\"custom\\\". Read-only.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventBirthdayProperties\"}]},\"shape_84bf3c5ad144c876\":{\"id\":\"shape_84bf3c5ad144c876\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_a9bf2190e8ba75fb\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/birthdayProperties\"}]},\"shape_9b302a27865f6ce2\":{\"id\":\"shape_9b302a27865f6ce2\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Extended properties of the event.\"},\"node\":{\"type\":\"object\",\"fields\":{\"private\":{\"shapeId\":\"shape_c444f5c5794d335d\",\"docs\":{\"description\":\"Properties that are private to the copy of the event that appears on this calendar.\"}},\"shared\":{\"shapeId\":\"shape_c444f5c5794d335d\",\"docs\":{\"description\":\"Properties that are shared between copies of the event on other attendees' calendars.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/extendedProperties\"}]},\"shape_125505130510722f\":{\"id\":\"shape_125505130510722f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Source from which the event was created. For example, a web page, an email message or any document identifiable by an URL with HTTP or HTTPS scheme. Can only be seen or modified by the creator of the event.\"},\"node\":{\"type\":\"object\",\"fields\":{\"url\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"URL of the source pointing to a resource. The URL scheme must be HTTP or HTTPS.\"}},\"title\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the source; for example a title of a web page or an email subject.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/source\"}]},\"shape_d39d2becdea2fd1c\":{\"id\":\"shape_d39d2becdea2fd1c\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Information about the event's reminders for the authenticated user. Note that changing reminders does not also change the updated property of the enclosing event.\"},\"node\":{\"type\":\"object\",\"fields\":{\"overrides\":{\"shapeId\":\"shape_2c5c185803da3aee\",\"docs\":{\"description\":\"If the event doesn't use the default reminders, this lists the reminders specific to the event, or, if not set, indicates that no reminders are set for this event. The maximum number of override reminders is 5.\"}},\"useDefault\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether the default reminders of the calendar apply to the event.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/reminders\"}]},\"shape_d8fc76163b037148\":{\"id\":\"shape_d8fc76163b037148\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Visibility of the event. Optional. Possible values are:  \\n- \\\"default\\\" - Uses the default visibility for events on the calendar. This is the default value. \\n- \\\"public\\\" - The event is public and event details are visible to all readers of the calendar. \\n- \\\"private\\\" - The event is private and only event attendees may view event details. \\n- \\\"confidential\\\" - The event is private. This value is provided for compatibility reasons.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"default\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/visibility\"}]},\"shape_87292c039176beec\":{\"id\":\"shape_87292c039176beec\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The date, in the format \\\"yyyy-mm-dd\\\", if this is an all-day event.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"format\":\"date\",\"constraints\":{\"format\":\"date\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventDateTime/properties/date\"}]},\"shape_a75f30fdfd8f8e76\":{\"id\":\"shape_a75f30fdfd8f8e76\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"dateTime\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The time, as a combined date-time value (formatted according to RFC3339). A time zone offset is required unless a time zone is explicitly specified in timeZone.\"}},\"date\":{\"shapeId\":\"shape_87292c039176beec\",\"docs\":{\"description\":\"The date, in the format \\\"yyyy-mm-dd\\\", if this is an all-day event.\"}},\"timeZone\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The time zone in which the time is specified. (Formatted as an IANA Time Zone Database name, e.g. \\\"Europe/Zurich\\\".) For recurring events this field is required and specifies the time zone in which the recurrence is expanded. For single events this field is optional and indicates a custom time zone for the event start/end.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventDateTime\"}]},\"shape_f5f32eac7a758f7a\":{\"id\":\"shape_f5f32eac7a758f7a\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_a75f30fdfd8f8e76\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/originalStartTime\"}]},\"shape_830514caf5146c7d\":{\"id\":\"shape_830514caf5146c7d\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"autoDeclineMode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Whether to decline meeting invitations which overlap Out of office events. Valid values are declineNone, meaning that no meeting invitations are declined; declineAllConflictingInvitations, meaning that all conflicting meeting invitations that conflict with the event are declined; and declineOnlyNewConflictingInvitations, meaning that only new conflicting meeting invitations which arrive while the Out of office event is present are to be declined.\"}},\"declineMessage\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Response message to set if an existing event or new invitation is automatically declined by Calendar.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventOutOfOfficeProperties\"}]},\"shape_74c7705b7f5ca9ff\":{\"id\":\"shape_74c7705b7f5ca9ff\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_830514caf5146c7d\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/outOfOfficeProperties\"}]},\"shape_42e94d16b01c7249\":{\"id\":\"shape_42e94d16b01c7249\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"fileId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ID of the attached file. Read-only.\\nFor Google Drive files, this is the ID of the corresponding Files resource entry in the Drive API.\"}},\"fileUrl\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"URL link to the attachment.\\nFor adding Google Drive file attachments use the same format as in alternateLink property of the Files resource in the Drive API.\\nRequired when adding an attachment.\"}},\"iconLink\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"URL link to the attachment's icon. This field can only be modified for custom third-party attachments.\"}},\"title\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Attachment title.\"}},\"mimeType\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Internet media type (MIME type) of the attachment.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventAttachment\"}]},\"shape_4414f6017d6360df\":{\"id\":\"shape_4414f6017d6360df\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_42e94d16b01c7249\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/attachments/items\"}]},\"shape_ebc18fc8054cfecc\":{\"id\":\"shape_ebc18fc8054cfecc\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"File attachments for the event.\\nIn order to modify attachments the supportsAttachments request parameter should be set to true.\\nThere can be at most 25 attachments per event,\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_4414f6017d6360df\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/attachments\"}]},\"shape_1e5932af28559b55\":{\"id\":\"shape_1e5932af28559b55\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Whether attendees other than the organizer can invite others to the event. Optional. The default is True.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"boolean\",\"constraints\":{\"default\":\"true\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/guestsCanInviteOthers\"}]},\"shape_0ef7ed9da96f0539\":{\"id\":\"shape_0ef7ed9da96f0539\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#event\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#event\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/kind\"}]},\"shape_89d8eb4afb89dfd2\":{\"id\":\"shape_89d8eb4afb89dfd2\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Number of additional guests. Optional. The default is 0.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"integer\",\"format\":\"int32\",\"constraints\":{\"format\":\"int32\",\"default\":\"0\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventAttendee/properties/additionalGuests\"}]},\"shape_96281ebc85e217a2\":{\"id\":\"shape_96281ebc85e217a2\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"optional\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether this is an optional attendee. Optional. The default is False.\"}},\"additionalGuests\":{\"shapeId\":\"shape_89d8eb4afb89dfd2\",\"docs\":{\"description\":\"Number of additional guests. Optional. The default is 0.\"}},\"comment\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The attendee's response comment. Optional.\"}},\"organizer\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether the attendee is the organizer of the event. Read-only. The default is False.\"}},\"responseStatus\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The attendee's response status. Possible values are:  \\n- \\\"needsAction\\\" - The attendee has not responded to the invitation (recommended for new events). \\n- \\\"declined\\\" - The attendee has declined the invitation. \\n- \\\"tentative\\\" - The attendee has tentatively accepted the invitation. \\n- \\\"accepted\\\" - The attendee has accepted the invitation.  Warning: If you add an event using the values declined, tentative, or accepted, attendees with the \\\"Add invitations to my calendar\\\" setting set to \\\"When I respond to invitation in email\\\" or \\\"Only if the sender is known\\\" might have their response reset to needsAction and won't see an event in their calendar unless they change their response in the event invitation email. Furthermore, if more than 200 guests are invited to the event, response status is not propagated to the guests.\"}},\"displayName\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The attendee's name, if available. Optional.\"}},\"email\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The attendee's email address, if available. This field must be present when adding an attendee. It must be a valid email address as per RFC5322.\\nRequired when adding an attendee.\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The attendee's Profile ID, if available.\"}},\"self\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether this entry represents the calendar on which this copy of the event appears. Read-only. The default is False.\"}},\"resource\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the attendee is a resource. Can only be set when the attendee is added to the event for the first time. Subsequent modifications are ignored. Optional. The default is False.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventAttendee\"}]},\"shape_61d5c52ec80f467b\":{\"id\":\"shape_61d5c52ec80f467b\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_96281ebc85e217a2\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/attendees/items\"}]},\"shape_c514d9eb992c60ae\":{\"id\":\"shape_c514d9eb992c60ae\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The attendees of the event. See the Events with attendees guide for more information on scheduling events with other calendar users. Service accounts need to use domain-wide delegation of authority to populate the attendee list.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_61d5c52ec80f467b\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/attendees\"}]},\"shape_ba0842569a7e2848\":{\"id\":\"shape_ba0842569a7e2848\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"autoDeclineMode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Whether to decline meeting invitations which overlap Focus Time events. Valid values are declineNone, meaning that no meeting invitations are declined; declineAllConflictingInvitations, meaning that all conflicting meeting invitations that conflict with the event are declined; and declineOnlyNewConflictingInvitations, meaning that only new conflicting meeting invitations which arrive while the Focus Time event is present are to be declined.\"}},\"chatStatus\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The status to mark the user in Chat and related products. This can be available or doNotDisturb.\"}},\"declineMessage\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Response message to set if an existing event or new invitation is automatically declined by Calendar.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventFocusTimeProperties\"}]},\"shape_9d7f29fba0b2e30d\":{\"id\":\"shape_9d7f29fba0b2e30d\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_ba0842569a7e2848\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/focusTimeProperties\"}]},\"shape_207be6eb82c7aa1f\":{\"id\":\"shape_207be6eb82c7aa1f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"A gadget that extends this event. Gadgets are deprecated; this structure is instead only used for returning birthday calendar metadata.\"},\"node\":{\"type\":\"object\",\"fields\":{\"title\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The gadget's title. Deprecated.\"}},\"type\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The gadget's type. Deprecated.\"}},\"display\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The gadget's display mode. Deprecated. Possible values are:  \\n- \\\"icon\\\" - The gadget displays next to the event's title in the calendar view. \\n- \\\"chip\\\" - The gadget displays when the event is clicked.\"}},\"iconLink\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The gadget's icon URL. The URL scheme must be HTTPS. Deprecated.\"}},\"preferences\":{\"shapeId\":\"shape_c444f5c5794d335d\",\"docs\":{\"description\":\"Preferences.\"}},\"link\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The gadget's URL. The URL scheme must be HTTPS. Deprecated.\"}},\"height\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"The gadget's height in pixels. The height must be an integer greater than 0. Optional. Deprecated.\"}},\"width\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"The gadget's width in pixels. The width must be an integer greater than 0. Optional. Deprecated.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/gadget\"}]},\"shape_7bc49adeeb098c02\":{\"id\":\"shape_7bc49adeeb098c02\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The organizer of the event. If the organizer is also an attendee, this is indicated with a separate entry in attendees with the organizer field set to True. To change the organizer, use the move operation. Read-only, except when importing an event.\"},\"node\":{\"type\":\"object\",\"fields\":{\"self\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the organizer corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.\"}},\"displayName\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The organizer's name, if available.\"}},\"email\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The organizer's email address, if available. It must be a valid email address as per RFC5322.\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The organizer's Profile ID, if available.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/organizer\"}]},\"shape_adbb602d92fd4b13\":{\"id\":\"shape_adbb602d92fd4b13\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The creator of the event. Read-only.\"},\"node\":{\"type\":\"object\",\"fields\":{\"displayName\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The creator's name, if available.\"}},\"email\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The creator's email address, if available.\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The creator's Profile ID, if available.\"}},\"self\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the creator corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/creator\"}]},\"shape_b608b978c5ab36b6\":{\"id\":\"shape_b608b978c5ab36b6\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"statusCode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The current status of the conference create request. Read-only.\\nThe possible values are:  \\n- \\\"pending\\\": the conference create request is still being processed.\\n- \\\"success\\\": the conference create request succeeded, the entry points are populated.\\n- \\\"failure\\\": the conference create request failed, there are no entry points.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceRequestStatus\"}]},\"shape_43bf917c9f9edcd8\":{\"id\":\"shape_43bf917c9f9edcd8\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_b608b978c5ab36b6\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/CreateConferenceRequest/properties/status\"}]},\"shape_4b5cdbf30eb91df1\":{\"id\":\"shape_4b5cdbf30eb91df1\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"type\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The conference solution type.\\nIf a client encounters an unfamiliar or empty type, it should still be able to display the entry points. However, it should disallow modifications.\\nThe possible values are:  \\n- \\\"eventHangout\\\" for Hangouts for consumers (deprecated; existing events may show this conference solution type but new conferences cannot be created)\\n- \\\"eventNamedHangout\\\" for classic Hangouts for Google Workspace users (deprecated; existing events may show this conference solution type but new conferences cannot be created)\\n- \\\"hangoutsMeet\\\" for Google Meet (http://meet.google.com)\\n- \\\"addOn\\\" for 3P conference providers\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceSolutionKey\"}]},\"shape_3ecab4b9d1e37c9e\":{\"id\":\"shape_3ecab4b9d1e37c9e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_4b5cdbf30eb91df1\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/CreateConferenceRequest/properties/conferenceSolutionKey\"}]},\"shape_137a34af6d52250b\":{\"id\":\"shape_137a34af6d52250b\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"status\":{\"shapeId\":\"shape_43bf917c9f9edcd8\"},\"conferenceSolutionKey\":{\"shapeId\":\"shape_3ecab4b9d1e37c9e\"},\"requestId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The client-generated unique ID for this request.\\nClients should regenerate this ID for every new request. If an ID provided is the same as for the previous request, the request is ignored.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/CreateConferenceRequest\"}]},\"shape_a4dfdbe729d0dbc7\":{\"id\":\"shape_a4dfdbe729d0dbc7\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_137a34af6d52250b\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceData/properties/createRequest\"}]},\"shape_2e705c118cce376f\":{\"id\":\"shape_2e705c118cce376f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"iconUri\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The user-visible icon for this solution.\"}},\"key\":{\"shapeId\":\"shape_3ecab4b9d1e37c9e\"},\"name\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The user-visible name of this solution. Not localized.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceSolution\"}]},\"shape_b4f92ab1e0f0a63c\":{\"id\":\"shape_b4f92ab1e0f0a63c\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_2e705c118cce376f\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceData/properties/conferenceSolution\"}]},\"shape_d90790fd6f1de572\":{\"id\":\"shape_d90790fd6f1de572\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"parameters\":{\"shapeId\":\"shape_c444f5c5794d335d\"}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceParametersAddOnParameters\"}]},\"shape_bc14c3b24f2ee2c8\":{\"id\":\"shape_bc14c3b24f2ee2c8\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_d90790fd6f1de572\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceParameters/properties/addOnParameters\"}]},\"shape_8b1078e9b4c56c02\":{\"id\":\"shape_8b1078e9b4c56c02\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"addOnParameters\":{\"shapeId\":\"shape_bc14c3b24f2ee2c8\"}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceParameters\"}]},\"shape_dde2a8ed0202ae99\":{\"id\":\"shape_dde2a8ed0202ae99\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_8b1078e9b4c56c02\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceData/properties/parameters\"}]},\"shape_f56f9f6af1c629ff\":{\"id\":\"shape_f56f9f6af1c629ff\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"uri\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The URI of the entry point. The maximum length is 1300 characters.\\nFormat:  \\n- for video, http: or https: schema is required.\\n- for phone, tel: schema is required. The URI should include the entire dial sequence (e.g., tel:+12345678900,,,123456789;1234).\\n- for sip, sip: schema is required, e.g., sip:12345678@myprovider.com.\\n- for more, http: or https: schema is required.\"}},\"pin\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The PIN to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"}},\"password\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The password to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"}},\"regionCode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The CLDR/ISO 3166 region code for the country associated with this phone access. Example: \\\"SE\\\" for Sweden.\\nCalendar backend will populate this field only for EntryPointType.PHONE.\"}},\"meetingCode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The meeting code to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"}},\"entryPointFeatures\":{\"shapeId\":\"shape_4031ddb626d2d5df\",\"docs\":{\"description\":\"Features of the entry point, such as being toll or toll-free. One entry point can have multiple features. However, toll and toll-free cannot be both set on the same entry point.\"}},\"passcode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The passcode to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\"}},\"accessCode\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The access code to access the conference. The maximum length is 128 characters.\\nWhen creating new conference data, populate only the subset of {meetingCode, accessCode, passcode, password, pin} fields that match the terminology that the conference provider uses. Only the populated fields should be displayed.\\nOptional.\"}},\"entryPointType\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The type of the conference entry point.\\nPossible values are:  \\n- \\\"video\\\" - joining a conference over HTTP. A conference can have zero or one video entry point.\\n- \\\"phone\\\" - joining a conference by dialing a phone number. A conference can have zero or more phone entry points.\\n- \\\"sip\\\" - joining a conference over SIP. A conference can have zero or one sip entry point.\\n- \\\"more\\\" - further conference joining instructions, for example additional phone numbers. A conference can have zero or one more entry point. A conference with only a more entry point is not a valid conference.\"}},\"label\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The label for the URI. Visible to end users. Not localized. The maximum length is 512 characters.\\nExamples:  \\n- for video: meet.google.com/aaa-bbbb-ccc\\n- for phone: +1 123 268 2601\\n- for sip: 12345678@altostrat.com\\n- for more: should not be filled  \\nOptional.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EntryPoint\"}]},\"shape_768fd579b584db60\":{\"id\":\"shape_768fd579b584db60\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_f56f9f6af1c629ff\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceData/properties/entryPoints/items\"}]},\"shape_e94a01c1ff0e5478\":{\"id\":\"shape_e94a01c1ff0e5478\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Information about individual conference entry points, such as URLs or phone numbers.\\nAll of them must belong to the same conference.\\nEither conferenceSolution and at least one entryPoint, or createRequest is required.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_768fd579b584db60\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceData/properties/entryPoints\"}]},\"shape_54cdfbc5c8e62fcb\":{\"id\":\"shape_54cdfbc5c8e62fcb\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"createRequest\":{\"shapeId\":\"shape_a4dfdbe729d0dbc7\"},\"conferenceSolution\":{\"shapeId\":\"shape_b4f92ab1e0f0a63c\"},\"parameters\":{\"shapeId\":\"shape_dde2a8ed0202ae99\"},\"notes\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Additional notes (such as instructions from the domain administrator, legal notices) to display to the user. Can contain HTML. The maximum length is 2048 characters. Optional.\"}},\"signature\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The signature of the conference data.\\nGenerated on server side.\\nUnset for a conference with a failed create request.\\nOptional for a conference with a pending create request.\"}},\"conferenceId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The ID of the conference.\\nCan be used by developers to keep track of conferences, should not be displayed to users.\\nThe ID value is formed differently for each conference solution type:  \\n- eventHangout: ID is not set. (This conference type is deprecated.)\\n- eventNamedHangout: ID is the name of the Hangout. (This conference type is deprecated.)\\n- hangoutsMeet: ID is the 10-letter meeting code, for example aaa-bbbb-ccc.\\n- addOn: ID is defined by the third-party provider.  Optional.\"}},\"entryPoints\":{\"shapeId\":\"shape_e94a01c1ff0e5478\",\"docs\":{\"description\":\"Information about individual conference entry points, such as URLs or phone numbers.\\nAll of them must belong to the same conference.\\nEither conferenceSolution and at least one entryPoint, or createRequest is required.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/ConferenceData\"}]},\"shape_96e72ce7e0e78a38\":{\"id\":\"shape_96e72ce7e0e78a38\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_54cdfbc5c8e62fcb\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/conferenceData\"}]},\"shape_953eb57c2d5440ac\":{\"id\":\"shape_953eb57c2d5440ac\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Whether the event blocks time on the calendar. Optional. Possible values are:  \\n- \\\"opaque\\\" - Default value. The event does block time on the calendar. This is equivalent to setting Show me as to Busy in the Calendar UI. \\n- \\\"transparent\\\" - The event does not block time on the calendar. This is equivalent to setting Show me as to Available in the Calendar UI.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"opaque\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/transparency\"}]},\"shape_527f29bc4db29870\":{\"id\":\"shape_527f29bc4db29870\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"If present, specifies that the user is working at home.\"},\"node\":{\"type\":\"unknown\",\"reason\":\"unsupported_schema:#/$defs/google/EventWorkingLocationProperties/properties/homeOffice\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventWorkingLocationProperties/properties/homeOffice\"}],\"native\":[{\"sourceKind\":\"google-discovery\",\"kind\":\"json_schema\",\"pointer\":\"#/$defs/google/EventWorkingLocationProperties/properties/homeOffice\",\"encoding\":\"json\",\"summary\":\"Unsupported JSON schema preserved natively\",\"value\":{\"description\":\"If present, specifies that the user is working at home.\"}}]},\"shape_6adf1ecc9c0bf4a7\":{\"id\":\"shape_6adf1ecc9c0bf4a7\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"If present, specifies that the user is working from a custom location.\"},\"node\":{\"type\":\"object\",\"fields\":{\"label\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An optional extra label for additional information.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventWorkingLocationProperties/properties/customLocation\"}]},\"shape_5745d4c381dac24b\":{\"id\":\"shape_5745d4c381dac24b\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"If present, specifies that the user is working from an office.\"},\"node\":{\"type\":\"object\",\"fields\":{\"deskId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An optional desk identifier.\"}},\"floorId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An optional floor identifier.\"}},\"floorSectionId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An optional floor section identifier.\"}},\"label\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The office name that's displayed in Calendar Web and Mobile clients. We recommend you reference a building name in the organization's Resources database.\"}},\"buildingId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An optional building identifier. This should reference a building ID in the organization's Resources database.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventWorkingLocationProperties/properties/officeLocation\"}]},\"shape_1b963881ce65b60e\":{\"id\":\"shape_1b963881ce65b60e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"type\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Type of the working location. Possible values are:  \\n- \\\"homeOffice\\\" - The user is working at home. \\n- \\\"officeLocation\\\" - The user is working from an office. \\n- \\\"customLocation\\\" - The user is working from a custom location.  Any details are specified in a sub-field of the specified name, but this field may be missing if empty. Any other fields are ignored.\\nRequired when adding working location properties.\"}},\"homeOffice\":{\"shapeId\":\"shape_527f29bc4db29870\",\"docs\":{\"description\":\"If present, specifies that the user is working at home.\"}},\"customLocation\":{\"shapeId\":\"shape_6adf1ecc9c0bf4a7\",\"docs\":{\"description\":\"If present, specifies that the user is working from a custom location.\"}},\"officeLocation\":{\"shapeId\":\"shape_5745d4c381dac24b\",\"docs\":{\"description\":\"If present, specifies that the user is working from an office.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/EventWorkingLocationProperties\"}]},\"shape_e8fc89ee94dd24aa\":{\"id\":\"shape_e8fc89ee94dd24aa\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_1b963881ce65b60e\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response/properties/workingLocationProperties\"}]},\"shape_fba92a2203a94f35\":{\"id\":\"shape_fba92a2203a94f35\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"created\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"Creation time of the event (as a RFC3339 timestamp). Read-only.\"}},\"endTimeUnspecified\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the end time is actually unspecified. An end time is still provided for compatibility reasons, even if this attribute is set to True. The default is False.\"}},\"birthdayProperties\":{\"shapeId\":\"shape_84bf3c5ad144c876\"},\"extendedProperties\":{\"shapeId\":\"shape_9b302a27865f6ce2\",\"docs\":{\"description\":\"Extended properties of the event.\"}},\"source\":{\"shapeId\":\"shape_125505130510722f\",\"docs\":{\"description\":\"Source from which the event was created. For example, a web page, an email message or any document identifiable by an URL with HTTP or HTTPS scheme. Can only be seen or modified by the creator of the event.\"}},\"reminders\":{\"shapeId\":\"shape_d39d2becdea2fd1c\",\"docs\":{\"description\":\"Information about the event's reminders for the authenticated user. Note that changing reminders does not also change the updated property of the enclosing event.\"}},\"visibility\":{\"shapeId\":\"shape_d8fc76163b037148\",\"docs\":{\"description\":\"Visibility of the event. Optional. Possible values are:  \\n- \\\"default\\\" - Uses the default visibility for events on the calendar. This is the default value. \\n- \\\"public\\\" - The event is public and event details are visible to all readers of the calendar. \\n- \\\"private\\\" - The event is private and only event attendees may view event details. \\n- \\\"confidential\\\" - The event is private. This value is provided for compatibility reasons.\"}},\"originalStartTime\":{\"shapeId\":\"shape_f5f32eac7a758f7a\"},\"outOfOfficeProperties\":{\"shapeId\":\"shape_74c7705b7f5ca9ff\"},\"hangoutLink\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An absolute link to the Google Hangout associated with this event. Read-only.\"}},\"recurringEventId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"For an instance of a recurring event, this is the id of the recurring event to which this instance belongs. Immutable.\"}},\"attendeesOmitted\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether attendees may have been omitted from the event's representation. When retrieving an event, this may be due to a restriction specified by the maxAttendee query parameter. When updating an event, this can be used to only update the participant's response. Optional. The default is False.\"}},\"attachments\":{\"shapeId\":\"shape_ebc18fc8054cfecc\",\"docs\":{\"description\":\"File attachments for the event.\\nIn order to modify attachments the supportsAttachments request parameter should be set to true.\\nThere can be at most 25 attachments per event,\"}},\"guestsCanInviteOthers\":{\"shapeId\":\"shape_1e5932af28559b55\",\"docs\":{\"description\":\"Whether attendees other than the organizer can invite others to the event. Optional. The default is True.\"}},\"privateCopy\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"If set to True, Event propagation is disabled. Note that it is not the same thing as Private event properties. Optional. Immutable. The default is False.\"}},\"htmlLink\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An absolute link to this event in the Google Calendar Web UI. Read-only.\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the event.\"}},\"end\":{\"shapeId\":\"shape_f5f32eac7a758f7a\"},\"start\":{\"shapeId\":\"shape_f5f32eac7a758f7a\"},\"kind\":{\"shapeId\":\"shape_0ef7ed9da96f0539\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#event\\\").\"}},\"locked\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether this is a locked event copy where no changes can be made to the main event fields \\\"summary\\\", \\\"description\\\", \\\"location\\\", \\\"start\\\", \\\"end\\\" or \\\"recurrence\\\". The default is False. Read-Only.\"}},\"status\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Status of the event. Optional. Possible values are:  \\n- \\\"confirmed\\\" - The event is confirmed. This is the default status. \\n- \\\"tentative\\\" - The event is tentatively confirmed. \\n- \\\"cancelled\\\" - The event is cancelled (deleted). The list method returns cancelled events only on incremental sync (when syncToken or updatedMin are specified) or if the showDeleted flag is set to true. The get method always returns them.\\nA cancelled status represents two different states depending on the event type:  \\n- Cancelled exceptions of an uncancelled recurring event indicate that this instance should no longer be presented to the user. Clients should store these events for the lifetime of the parent recurring event.\\nCancelled exceptions are only guaranteed to have values for the id, recurringEventId and originalStartTime fields populated. The other fields might be empty.  \\n- All other cancelled events represent deleted events. Clients should remove their locally synced copies. Such cancelled events will eventually disappear, so do not rely on them being available indefinitely.\\nDeleted events are only guaranteed to have the id field populated.   On the organizer's calendar, cancelled events continue to expose event details (summary, location, etc.) so that they can be restored (undeleted). Similarly, the events to which the user was invited and that they manually removed continue to provide details. However, incremental sync requests with showDeleted set to false will not return these details.\\nIf an event changes its organizer (for example via the move operation) and the original organizer is not on the attendee list, it will leave behind a cancelled event where only the id field is guaranteed to be populated.\"}},\"attendees\":{\"shapeId\":\"shape_c514d9eb992c60ae\",\"docs\":{\"description\":\"The attendees of the event. See the Events with attendees guide for more information on scheduling events with other calendar users. Service accounts need to use domain-wide delegation of authority to populate the attendee list.\"}},\"colorId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The color of the event. This is an ID referring to an entry in the event section of the colors definition (see the  colors endpoint). Optional.\"}},\"sequence\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"Sequence number as per iCalendar.\"}},\"focusTimeProperties\":{\"shapeId\":\"shape_9d7f29fba0b2e30d\"},\"gadget\":{\"shapeId\":\"shape_207be6eb82c7aa1f\",\"docs\":{\"description\":\"A gadget that extends this event. Gadgets are deprecated; this structure is instead only used for returning birthday calendar metadata.\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Opaque identifier of the event. When creating new single or recurring events, you can specify their IDs. Provided IDs must follow these rules:  \\n- characters allowed in the ID are those used in base32hex encoding, i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938 \\n- the length of the ID must be between 5 and 1024 characters \\n- the ID must be unique per calendar  Due to the globally distributed nature of the system, we cannot guarantee that ID collisions will be detected at event creation time. To minimize the risk of collisions we recommend using an established UUID algorithm such as one described in RFC4122.\\nIf you do not specify an ID, it will be automatically generated by the server.\\nNote that the icalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same icalUIDs.\"}},\"eventType\":{\"shapeId\":\"shape_d8fc76163b037148\",\"docs\":{\"description\":\"Specific type of the event. This cannot be modified after the event is created. Possible values are:  \\n- \\\"birthday\\\" - A special all-day event with an annual recurrence. \\n- \\\"default\\\" - A regular event or not further specified. \\n- \\\"focusTime\\\" - A focus-time event. \\n- \\\"fromGmail\\\" - An event from Gmail. This type of event cannot be created. \\n- \\\"outOfOffice\\\" - An out-of-office event. \\n- \\\"workingLocation\\\" - A working location event.\"}},\"organizer\":{\"shapeId\":\"shape_7bc49adeeb098c02\",\"docs\":{\"description\":\"The organizer of the event. If the organizer is also an attendee, this is indicated with a separate entry in attendees with the organizer field set to True. To change the organizer, use the move operation. Read-only, except when importing an event.\"}},\"recurrence\":{\"shapeId\":\"shape_4031ddb626d2d5df\",\"docs\":{\"description\":\"List of RRULE, EXRULE, RDATE and EXDATE lines for a recurring event, as specified in RFC5545. Note that DTSTART and DTEND lines are not allowed in this field; event start and end times are specified in the start and end fields. This field is omitted for single events or instances of recurring events.\"}},\"guestsCanModify\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether attendees other than the organizer can modify the event. Optional. The default is False.\"}},\"creator\":{\"shapeId\":\"shape_adbb602d92fd4b13\",\"docs\":{\"description\":\"The creator of the event. Read-only.\"}},\"guestsCanSeeOtherGuests\":{\"shapeId\":\"shape_1e5932af28559b55\",\"docs\":{\"description\":\"Whether attendees other than the organizer can see who the event's attendees are. Optional. The default is True.\"}},\"updated\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"Last modification time of the main event data (as a RFC3339 timestamp). Updating event reminders will not cause this to change. Read-only.\"}},\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the event. Can contain HTML. Optional.\"}},\"location\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Geographic location of the event as free-form text. Optional.\"}},\"anyoneCanAddSelf\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether anyone can invite themselves to the event (deprecated). Optional. The default is False.\"}},\"conferenceData\":{\"shapeId\":\"shape_96e72ce7e0e78a38\"},\"iCalUID\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Event unique identifier as defined in RFC5545. It is used to uniquely identify events accross calendaring systems and must be supplied when importing events via the import method.\\nNote that the iCalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same iCalUIDs. To retrieve an event using its iCalUID, call the events.list method using the iCalUID parameter. To retrieve an event using its id, call the events.get method.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"transparency\":{\"shapeId\":\"shape_953eb57c2d5440ac\",\"docs\":{\"description\":\"Whether the event blocks time on the calendar. Optional. Possible values are:  \\n- \\\"opaque\\\" - Default value. The event does block time on the calendar. This is equivalent to setting Show me as to Busy in the Calendar UI. \\n- \\\"transparent\\\" - The event does not block time on the calendar. This is equivalent to setting Show me as to Available in the Calendar UI.\"}},\"workingLocationProperties\":{\"shapeId\":\"shape_e8fc89ee94dd24aa\"}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response\"}]},\"response_5f22f8ecd98dd95a\":{\"id\":\"response_5f22f8ecd98dd95a\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns an event based on its Google Calendar ID. To retrieve an event using its iCalendar ID, call the events.list method using the iCalUID parameter.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/response\"}]},\"param_961a84fc1f772970\":{\"id\":\"param_961a84fc1f772970\",\"kind\":\"parameter\",\"name\":\"conferenceDataVersion\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/parameter/query/conferenceDataVersion\"}]},\"param_92464e145a0e7cd0\":{\"id\":\"param_92464e145a0e7cd0\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/parameter/path/calendarId\"}]},\"param_f33b132347e0c72b\":{\"id\":\"param_f33b132347e0c72b\",\"kind\":\"parameter\",\"name\":\"supportsAttachments\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether API client performing operation supports event attachments. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/parameter/query/supportsAttachments\"}]},\"shape_e53e2434a170fe98\":{\"id\":\"shape_e53e2434a170fe98\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventBirthdayProperties\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/birthdayProperties\"}],\"diagnosticIds\":[\"diag_e6f9feb7a990fc4b\"]},\"shape_9ea5f681ab39662f\":{\"id\":\"shape_9ea5f681ab39662f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Information about the event's reminders for the authenticated user. Note that changing reminders does not also change the updated property of the enclosing event.\"},\"node\":{\"type\":\"object\",\"fields\":{\"overrides\":{\"shapeId\":\"shape_aa45e555ba50ffbf\",\"docs\":{\"description\":\"If the event doesn't use the default reminders, this lists the reminders specific to the event, or, if not set, indicates that no reminders are set for this event. The maximum number of override reminders is 5.\"}},\"useDefault\":{\"shapeId\":\"shape_de499173b645249e\",\"docs\":{\"description\":\"Whether the default reminders of the calendar apply to the event.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/reminders\"}]},\"shape_63a1c24586eeb1bf\":{\"id\":\"shape_63a1c24586eeb1bf\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventDateTime\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/originalStartTime\"}],\"diagnosticIds\":[\"diag_1028ae05f892fc3c\"]},\"shape_6d1fdc9c995b3bfc\":{\"id\":\"shape_6d1fdc9c995b3bfc\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventOutOfOfficeProperties\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/outOfOfficeProperties\"}],\"diagnosticIds\":[\"diag_3c770c013e8efcab\"]},\"shape_c217cb50f473d6e8\":{\"id\":\"shape_c217cb50f473d6e8\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventAttachment\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/attachments/items\"}],\"diagnosticIds\":[\"diag_8a8955a02ca6c9da\"]},\"shape_59fe83d6887b9997\":{\"id\":\"shape_59fe83d6887b9997\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"File attachments for the event.\\nIn order to modify attachments the supportsAttachments request parameter should be set to true.\\nThere can be at most 25 attachments per event,\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_c217cb50f473d6e8\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/attachments\"}]},\"shape_5a52d993e5987dce\":{\"id\":\"shape_5a52d993e5987dce\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventAttendee\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/attendees/items\"}],\"diagnosticIds\":[\"diag_de64dc5888f9fe84\"]},\"shape_e38843ffb52ff9e8\":{\"id\":\"shape_e38843ffb52ff9e8\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The attendees of the event. See the Events with attendees guide for more information on scheduling events with other calendar users. Service accounts need to use domain-wide delegation of authority to populate the attendee list.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_5a52d993e5987dce\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/attendees\"}]},\"shape_cdb805a94a2cacb6\":{\"id\":\"shape_cdb805a94a2cacb6\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventFocusTimeProperties\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/focusTimeProperties\"}],\"diagnosticIds\":[\"diag_9b76b139c9ceddb2\"]},\"shape_729aa44fe0ab3b09\":{\"id\":\"shape_729aa44fe0ab3b09\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/ConferenceData\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/conferenceData\"}],\"diagnosticIds\":[\"diag_6999f80a94c5ea2f\"]},\"shape_3ed30949d86c7d20\":{\"id\":\"shape_3ed30949d86c7d20\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/EventWorkingLocationProperties\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/workingLocationProperties\"}],\"diagnosticIds\":[\"diag_804ecd9c4ac44e85\"]},\"shape_bd9fc2a6df55da26\":{\"id\":\"shape_bd9fc2a6df55da26\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"created\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"Creation time of the event (as a RFC3339 timestamp). Read-only.\"}},\"endTimeUnspecified\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether the end time is actually unspecified. An end time is still provided for compatibility reasons, even if this attribute is set to True. The default is False.\"}},\"birthdayProperties\":{\"shapeId\":\"shape_e53e2434a170fe98\"},\"extendedProperties\":{\"shapeId\":\"shape_9b302a27865f6ce2\",\"docs\":{\"description\":\"Extended properties of the event.\"}},\"source\":{\"shapeId\":\"shape_125505130510722f\",\"docs\":{\"description\":\"Source from which the event was created. For example, a web page, an email message or any document identifiable by an URL with HTTP or HTTPS scheme. Can only be seen or modified by the creator of the event.\"}},\"reminders\":{\"shapeId\":\"shape_9ea5f681ab39662f\",\"docs\":{\"description\":\"Information about the event's reminders for the authenticated user. Note that changing reminders does not also change the updated property of the enclosing event.\"}},\"visibility\":{\"shapeId\":\"shape_d8fc76163b037148\",\"docs\":{\"description\":\"Visibility of the event. Optional. Possible values are:  \\n- \\\"default\\\" - Uses the default visibility for events on the calendar. This is the default value. \\n- \\\"public\\\" - The event is public and event details are visible to all readers of the calendar. \\n- \\\"private\\\" - The event is private and only event attendees may view event details. \\n- \\\"confidential\\\" - The event is private. This value is provided for compatibility reasons.\"}},\"originalStartTime\":{\"shapeId\":\"shape_63a1c24586eeb1bf\"},\"outOfOfficeProperties\":{\"shapeId\":\"shape_6d1fdc9c995b3bfc\"},\"hangoutLink\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An absolute link to the Google Hangout associated with this event. Read-only.\"}},\"recurringEventId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"For an instance of a recurring event, this is the id of the recurring event to which this instance belongs. Immutable.\"}},\"attendeesOmitted\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether attendees may have been omitted from the event's representation. When retrieving an event, this may be due to a restriction specified by the maxAttendee query parameter. When updating an event, this can be used to only update the participant's response. Optional. The default is False.\"}},\"attachments\":{\"shapeId\":\"shape_59fe83d6887b9997\",\"docs\":{\"description\":\"File attachments for the event.\\nIn order to modify attachments the supportsAttachments request parameter should be set to true.\\nThere can be at most 25 attachments per event,\"}},\"guestsCanInviteOthers\":{\"shapeId\":\"shape_1e5932af28559b55\",\"docs\":{\"description\":\"Whether attendees other than the organizer can invite others to the event. Optional. The default is True.\"}},\"privateCopy\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"If set to True, Event propagation is disabled. Note that it is not the same thing as Private event properties. Optional. Immutable. The default is False.\"}},\"htmlLink\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"An absolute link to this event in the Google Calendar Web UI. Read-only.\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the event.\"}},\"end\":{\"shapeId\":\"shape_63a1c24586eeb1bf\"},\"start\":{\"shapeId\":\"shape_63a1c24586eeb1bf\"},\"kind\":{\"shapeId\":\"shape_0ef7ed9da96f0539\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#event\\\").\"}},\"locked\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether this is a locked event copy where no changes can be made to the main event fields \\\"summary\\\", \\\"description\\\", \\\"location\\\", \\\"start\\\", \\\"end\\\" or \\\"recurrence\\\". The default is False. Read-Only.\"}},\"status\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Status of the event. Optional. Possible values are:  \\n- \\\"confirmed\\\" - The event is confirmed. This is the default status. \\n- \\\"tentative\\\" - The event is tentatively confirmed. \\n- \\\"cancelled\\\" - The event is cancelled (deleted). The list method returns cancelled events only on incremental sync (when syncToken or updatedMin are specified) or if the showDeleted flag is set to true. The get method always returns them.\\nA cancelled status represents two different states depending on the event type:  \\n- Cancelled exceptions of an uncancelled recurring event indicate that this instance should no longer be presented to the user. Clients should store these events for the lifetime of the parent recurring event.\\nCancelled exceptions are only guaranteed to have values for the id, recurringEventId and originalStartTime fields populated. The other fields might be empty.  \\n- All other cancelled events represent deleted events. Clients should remove their locally synced copies. Such cancelled events will eventually disappear, so do not rely on them being available indefinitely.\\nDeleted events are only guaranteed to have the id field populated.   On the organizer's calendar, cancelled events continue to expose event details (summary, location, etc.) so that they can be restored (undeleted). Similarly, the events to which the user was invited and that they manually removed continue to provide details. However, incremental sync requests with showDeleted set to false will not return these details.\\nIf an event changes its organizer (for example via the move operation) and the original organizer is not on the attendee list, it will leave behind a cancelled event where only the id field is guaranteed to be populated.\"}},\"attendees\":{\"shapeId\":\"shape_e38843ffb52ff9e8\",\"docs\":{\"description\":\"The attendees of the event. See the Events with attendees guide for more information on scheduling events with other calendar users. Service accounts need to use domain-wide delegation of authority to populate the attendee list.\"}},\"colorId\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The color of the event. This is an ID referring to an entry in the event section of the colors definition (see the  colors endpoint). Optional.\"}},\"sequence\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"Sequence number as per iCalendar.\"}},\"focusTimeProperties\":{\"shapeId\":\"shape_cdb805a94a2cacb6\"},\"gadget\":{\"shapeId\":\"shape_207be6eb82c7aa1f\",\"docs\":{\"description\":\"A gadget that extends this event. Gadgets are deprecated; this structure is instead only used for returning birthday calendar metadata.\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Opaque identifier of the event. When creating new single or recurring events, you can specify their IDs. Provided IDs must follow these rules:  \\n- characters allowed in the ID are those used in base32hex encoding, i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938 \\n- the length of the ID must be between 5 and 1024 characters \\n- the ID must be unique per calendar  Due to the globally distributed nature of the system, we cannot guarantee that ID collisions will be detected at event creation time. To minimize the risk of collisions we recommend using an established UUID algorithm such as one described in RFC4122.\\nIf you do not specify an ID, it will be automatically generated by the server.\\nNote that the icalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same icalUIDs.\"}},\"eventType\":{\"shapeId\":\"shape_d8fc76163b037148\",\"docs\":{\"description\":\"Specific type of the event. This cannot be modified after the event is created. Possible values are:  \\n- \\\"birthday\\\" - A special all-day event with an annual recurrence. \\n- \\\"default\\\" - A regular event or not further specified. \\n- \\\"focusTime\\\" - A focus-time event. \\n- \\\"fromGmail\\\" - An event from Gmail. This type of event cannot be created. \\n- \\\"outOfOffice\\\" - An out-of-office event. \\n- \\\"workingLocation\\\" - A working location event.\"}},\"organizer\":{\"shapeId\":\"shape_7bc49adeeb098c02\",\"docs\":{\"description\":\"The organizer of the event. If the organizer is also an attendee, this is indicated with a separate entry in attendees with the organizer field set to True. To change the organizer, use the move operation. Read-only, except when importing an event.\"}},\"recurrence\":{\"shapeId\":\"shape_4031ddb626d2d5df\",\"docs\":{\"description\":\"List of RRULE, EXRULE, RDATE and EXDATE lines for a recurring event, as specified in RFC5545. Note that DTSTART and DTEND lines are not allowed in this field; event start and end times are specified in the start and end fields. This field is omitted for single events or instances of recurring events.\"}},\"guestsCanModify\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether attendees other than the organizer can modify the event. Optional. The default is False.\"}},\"creator\":{\"shapeId\":\"shape_adbb602d92fd4b13\",\"docs\":{\"description\":\"The creator of the event. Read-only.\"}},\"guestsCanSeeOtherGuests\":{\"shapeId\":\"shape_1e5932af28559b55\",\"docs\":{\"description\":\"Whether attendees other than the organizer can see who the event's attendees are. Optional. The default is True.\"}},\"updated\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"Last modification time of the main event data (as a RFC3339 timestamp). Updating event reminders will not cause this to change. Read-only.\"}},\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the event. Can contain HTML. Optional.\"}},\"location\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Geographic location of the event as free-form text. Optional.\"}},\"anyoneCanAddSelf\":{\"shapeId\":\"shape_0d16da1c025c18d3\",\"docs\":{\"description\":\"Whether anyone can invite themselves to the event (deprecated). Optional. The default is False.\"}},\"conferenceData\":{\"shapeId\":\"shape_729aa44fe0ab3b09\"},\"iCalUID\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Event unique identifier as defined in RFC5545. It is used to uniquely identify events accross calendaring systems and must be supplied when importing events via the import method.\\nNote that the iCalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same iCalUIDs. To retrieve an event using its iCalUID, call the events.list method using the iCalUID parameter. To retrieve an event using its id, call the events.get method.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"transparency\":{\"shapeId\":\"shape_953eb57c2d5440ac\",\"docs\":{\"description\":\"Whether the event blocks time on the calendar. Optional. Possible values are:  \\n- \\\"opaque\\\" - Default value. The event does block time on the calendar. This is equivalent to setting Show me as to Busy in the Calendar UI. \\n- \\\"transparent\\\" - The event does not block time on the calendar. This is equivalent to setting Show me as to Available in the Calendar UI.\"}},\"workingLocationProperties\":{\"shapeId\":\"shape_3ed30949d86c7d20\"}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody\"}]},\"request_body_5bc736601558997b\":{\"id\":\"request_body_5bc736601558997b\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_bd9fc2a6df55da26\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody\"}]},\"response_5bc736601558997b\":{\"id\":\"response_5bc736601558997b\",\"kind\":\"response\",\"docs\":{\"description\":\"Imports an event. This operation is used to add a private copy of an existing event to a calendar. Only events with an eventType of default may be imported.\\nDeprecated behavior: If a non-default event is imported, its type will be changed to default and any event-type-specific properties it may have will be dropped.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/response\"}]},\"param_035da1bb531ef9a3\":{\"id\":\"param_035da1bb531ef9a3\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/parameter/query/maxAttendees\"}]},\"param_6632f1419875fcbd\":{\"id\":\"param_6632f1419875fcbd\",\"kind\":\"parameter\",\"name\":\"supportsAttachments\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether API client performing operation supports event attachments. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/parameter/query/supportsAttachments\"}]},\"param_a72079d429c74417\":{\"id\":\"param_a72079d429c74417\",\"kind\":\"parameter\",\"name\":\"conferenceDataVersion\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/parameter/query/conferenceDataVersion\"}]},\"param_479a0c3a287d7744\":{\"id\":\"param_479a0c3a287d7744\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/parameter/path/calendarId\"}]},\"param_59244e6733ea1611\":{\"id\":\"param_59244e6733ea1611\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the creation of the new event. Note that some emails might still be sent even if you set the value to false. The default is false.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/parameter/query/sendNotifications\"}]},\"param_5357874bc978fe80\":{\"id\":\"param_5357874bc978fe80\",\"kind\":\"parameter\",\"name\":\"sendUpdates\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to send notifications about the creation of the new event. Note that some emails might still be sent. The default is false.\"},\"schemaShapeId\":\"shape_2e366aa731bc8b22\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/parameter/query/sendUpdates\"}]},\"request_body_dbad99b5fa389efc\":{\"id\":\"request_body_dbad99b5fa389efc\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_bd9fc2a6df55da26\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody\"}]},\"response_dbad99b5fa389efc\":{\"id\":\"response_dbad99b5fa389efc\",\"kind\":\"response\",\"docs\":{\"description\":\"Creates an event.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/response\"}]},\"param_66dbaa4bc12ad1a5\":{\"id\":\"param_66dbaa4bc12ad1a5\",\"kind\":\"parameter\",\"name\":\"originalStart\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The original start time of the instance in the result. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/originalStart\"}]},\"param_89e1aa16ec1b3de7\":{\"id\":\"param_89e1aa16ec1b3de7\",\"kind\":\"parameter\",\"name\":\"timeMax\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/timeMax\"}]},\"param_a890ae73cb3700c3\":{\"id\":\"param_a890ae73cb3700c3\",\"kind\":\"parameter\",\"name\":\"alwaysIncludeEmail\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/alwaysIncludeEmail\"}]},\"param_4d498314056cdfe3\":{\"id\":\"param_4d498314056cdfe3\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of events returned on one result page. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/maxResults\"}]},\"param_da7e13c9c305f9ed\":{\"id\":\"param_da7e13c9c305f9ed\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/maxAttendees\"}]},\"param_627bb5704af8cc49\":{\"id\":\"param_627bb5704af8cc49\",\"kind\":\"parameter\",\"name\":\"timeZone\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Time zone used in the response. Optional. The default is the time zone of the calendar.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/timeZone\"}]},\"param_99911e24846f8dca\":{\"id\":\"param_99911e24846f8dca\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/path/calendarId\"}]},\"param_e102125019af7b35\":{\"id\":\"param_e102125019af7b35\",\"kind\":\"parameter\",\"name\":\"eventId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Recurring event identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/path/eventId\"}]},\"param_fcdf5d0bde28f776\":{\"id\":\"param_fcdf5d0bde28f776\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/pageToken\"}]},\"param_3ea41f75bb0dc0d6\":{\"id\":\"param_3ea41f75bb0dc0d6\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted events (with status equals \\\"cancelled\\\") in the result. Cancelled instances of recurring events will still be included if singleEvents is False. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/showDeleted\"}]},\"param_34eba3783d51cbcd\":{\"id\":\"param_34eba3783d51cbcd\",\"kind\":\"parameter\",\"name\":\"timeMin\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/parameter/query/timeMin\"}]},\"shape_ce033da194001772\":{\"id\":\"shape_ce033da194001772\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#events\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#events\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/response/properties/kind\"}]},\"shape_2738305c550acd5a\":{\"id\":\"shape_2738305c550acd5a\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_fba92a2203a94f35\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/response/properties/items/items\"}]},\"shape_6cb33de5c7710244\":{\"id\":\"shape_6cb33de5c7710244\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"List of events on the calendar.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_2738305c550acd5a\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/response/properties/items\"}]},\"shape_524946cec89346f0\":{\"id\":\"shape_524946cec89346f0\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"accessRole\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The user's access role for this calendar. Read-only. Possible values are:  \\n- \\\"none\\\" - The user has no access. \\n- \\\"freeBusyReader\\\" - The user has read access to free/busy information. \\n- \\\"reader\\\" - The user has read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \\n- \\\"writer\\\" - The user has read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \\n- \\\"owner\\\" - The user has manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to see and modify access levels of other users.\\nImportant: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the collection.\"}},\"kind\":{\"shapeId\":\"shape_ce033da194001772\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#events\\\").\"}},\"summary\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Title of the calendar. Read-only.\"}},\"items\":{\"shapeId\":\"shape_6cb33de5c7710244\",\"docs\":{\"description\":\"List of events on the calendar.\"}},\"nextSyncToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"}},\"description\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Description of the calendar. Read-only.\"}},\"timeZone\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The time zone of the calendar. Read-only.\"}},\"nextPageToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"}},\"updated\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"Last modification time of the calendar (as a RFC3339 timestamp). Read-only.\"}},\"defaultReminders\":{\"shapeId\":\"shape_2c5c185803da3aee\",\"docs\":{\"description\":\"The default reminders on the calendar for the authenticated user. These reminders apply to all events on this calendar that do not explicitly override them (i.e. do not have reminders.useDefault set to True).\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/response\"}]},\"response_28ca93f313d1b5df\":{\"id\":\"response_28ca93f313d1b5df\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns instances of the specified recurring event.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_524946cec89346f0\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/response\"}]},\"param_851564caa6a1eef8\":{\"id\":\"param_851564caa6a1eef8\",\"kind\":\"parameter\",\"name\":\"timeMax\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMin is set, timeMax must be greater than timeMin.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/timeMax\"}]},\"param_6e51ccd484fb4fe8\":{\"id\":\"param_6e51ccd484fb4fe8\",\"kind\":\"parameter\",\"name\":\"timeZone\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Time zone used in the response. Optional. The default is the time zone of the calendar.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/timeZone\"}]},\"param_702e7bdb3c5e88d6\":{\"id\":\"param_702e7bdb3c5e88d6\",\"kind\":\"parameter\",\"name\":\"singleEvents\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/singleEvents\"}]},\"shape_092cb56c53f59fce\":{\"id\":\"shape_092cb56c53f59fce\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types.\"},\"node\":{\"type\":\"enum\",\"values\":[\"birthday\",\"default\",\"focusTime\",\"fromGmail\",\"outOfOffice\",\"workingLocation\"]},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/eventTypes/items\"}]},\"shape_611a93470c8a0a7e\":{\"id\":\"shape_611a93470c8a0a7e\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_092cb56c53f59fce\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/eventTypes\"}]},\"param_43361ea32cf5eb32\":{\"id\":\"param_43361ea32cf5eb32\",\"kind\":\"parameter\",\"name\":\"eventTypes\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types.\"},\"schemaShapeId\":\"shape_611a93470c8a0a7e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/eventTypes\"}]},\"param_53d62b41fae98de9\":{\"id\":\"param_53d62b41fae98de9\",\"kind\":\"parameter\",\"name\":\"iCalUID\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Specifies an event ID in the iCalendar format to be provided in the response. Optional. Use this if you want to search for an event by its iCalendar ID.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/iCalUID\"}]},\"param_39c62be47def83a1\":{\"id\":\"param_39c62be47def83a1\",\"kind\":\"parameter\",\"name\":\"updatedMin\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showDeleted. Optional. The default is not to filter by last modification time.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/updatedMin\"}]},\"param_c9679eeffff63321\":{\"id\":\"param_c9679eeffff63321\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted events (with status equals \\\"cancelled\\\") in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if showDeleted and singleEvents are both False. If showDeleted and singleEvents are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/showDeleted\"}]},\"param_c1e644e174d7e8f8\":{\"id\":\"param_c1e644e174d7e8f8\",\"kind\":\"parameter\",\"name\":\"privateExtendedProperty\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.\"},\"schemaShapeId\":\"shape_4031ddb626d2d5df\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/privateExtendedProperty\"}]},\"param_eb12017474790432\":{\"id\":\"param_eb12017474790432\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All events deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nThere are several query parameters that cannot be specified together with nextSyncToken to ensure consistency of the client state.\\n\\nThese are: \\n- iCalUID \\n- orderBy \\n- privateExtendedProperty \\n- q \\n- sharedExtendedProperty \\n- timeMin \\n- timeMax \\n- updatedMin All other query parameters should be the same as for the initial synchronization to avoid undefined behavior. If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/syncToken\"}]},\"param_c80b2d8edd9c6703\":{\"id\":\"param_c80b2d8edd9c6703\",\"kind\":\"parameter\",\"name\":\"alwaysIncludeEmail\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated and ignored.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/alwaysIncludeEmail\"}]},\"shape_6237967590aca81b\":{\"id\":\"shape_6237967590aca81b\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"integer\",\"format\":\"int32\",\"constraints\":{\"format\":\"int32\",\"default\":\"250\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/maxResults\"}]},\"param_b12c80a9b39fe3cf\":{\"id\":\"param_b12c80a9b39fe3cf\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\"},\"schemaShapeId\":\"shape_6237967590aca81b\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/maxResults\"}]},\"param_f094b1f67ef8c5af\":{\"id\":\"param_f094b1f67ef8c5af\",\"kind\":\"parameter\",\"name\":\"sharedExtendedProperty\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.\"},\"schemaShapeId\":\"shape_4031ddb626d2d5df\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/sharedExtendedProperty\"}]},\"param_42d590cc523d32f9\":{\"id\":\"param_42d590cc523d32f9\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/maxAttendees\"}]},\"param_d38dddc58ca55163\":{\"id\":\"param_d38dddc58ca55163\",\"kind\":\"parameter\",\"name\":\"showHiddenInvitations\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include hidden invitations in the result. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/showHiddenInvitations\"}]},\"shape_340ff9ac40458d2f\":{\"id\":\"shape_340ff9ac40458d2f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"The order of the events returned in the result. Optional. The default is an unspecified, stable order.\"},\"node\":{\"type\":\"enum\",\"values\":[\"startTime\",\"updated\"]},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/orderBy\"}]},\"param_67a592b58e1e78e3\":{\"id\":\"param_67a592b58e1e78e3\",\"kind\":\"parameter\",\"name\":\"orderBy\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The order of the events returned in the result. Optional. The default is an unspecified, stable order.\"},\"schemaShapeId\":\"shape_340ff9ac40458d2f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/orderBy\"}]},\"param_70109dd5984bb284\":{\"id\":\"param_70109dd5984bb284\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/path/calendarId\"}]},\"param_cc4822fb5b81fda1\":{\"id\":\"param_cc4822fb5b81fda1\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/pageToken\"}]},\"param_2bac9366fea24b65\":{\"id\":\"param_2bac9366fea24b65\",\"kind\":\"parameter\",\"name\":\"q\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Free text search terms to find events that match these terms in the following fields:\\n\\n- summary \\n- description \\n- location \\n- attendee's displayName \\n- attendee's email \\n- organizer's displayName \\n- organizer's email \\n- workingLocationProperties.officeLocation.buildingId \\n- workingLocationProperties.officeLocation.deskId \\n- workingLocationProperties.officeLocation.label \\n- workingLocationProperties.customLocation.label \\nThese search terms also match predefined keywords against all display title translations of working location, out-of-office, and focus-time events. For example, searching for \\\"Office\\\" or \\\"Bureau\\\" returns working location events of type officeLocation, whereas searching for \\\"Out of office\\\" or \\\"Abwesend\\\" returns out-of-office events. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/q\"}]},\"param_d059d5812368621b\":{\"id\":\"param_d059d5812368621b\",\"kind\":\"parameter\",\"name\":\"timeMin\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Lower bound (exclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/parameter/query/timeMin\"}]},\"response_e90691855782b8d8\":{\"id\":\"response_e90691855782b8d8\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns events on the specified calendar.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_524946cec89346f0\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/response\"}]},\"security_8d8e36595a5acd83\":{\"id\":\"security_8d8e36595a5acd83\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.events\":\"View and edit events on all your calendars\",\"https://www.googleapis.com/auth/calendar.events.owned\":\"See, create, change, and delete events on Google calendars you own\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_120afbcde7fe9d3a\":{\"id\":\"param_120afbcde7fe9d3a\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier of the source calendar where the event currently is on.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/parameter/path/calendarId\"}]},\"param_0da26325d3c2613e\":{\"id\":\"param_0da26325d3c2613e\",\"kind\":\"parameter\",\"name\":\"eventId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Event identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/parameter/path/eventId\"}]},\"param_0719b9f3c1fd07ce\":{\"id\":\"param_0719b9f3c1fd07ce\",\"kind\":\"parameter\",\"name\":\"destination\",\"location\":\"query\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier of the target calendar where the event is to be moved to.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/parameter/query/destination\"}]},\"param_dd15ae7ed0c2bb83\":{\"id\":\"param_dd15ae7ed0c2bb83\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the change of the event's organizer. Note that some emails might still be sent even if you set the value to false. The default is false.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/parameter/query/sendNotifications\"}]},\"param_15e6d27124a3c9b6\":{\"id\":\"param_15e6d27124a3c9b6\",\"kind\":\"parameter\",\"name\":\"sendUpdates\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Guests who should receive notifications about the change of the event's organizer.\"},\"schemaShapeId\":\"shape_2e366aa731bc8b22\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/parameter/query/sendUpdates\"}]},\"response_ea5e28b5220cae6c\":{\"id\":\"response_ea5e28b5220cae6c\",\"kind\":\"response\",\"docs\":{\"description\":\"Moves an event to another calendar, i.e. changes an event's organizer. Note that only default events can be moved; birthday, focusTime, fromGmail, outOfOffice and workingLocation events cannot be moved.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/response\"}]},\"param_b6a591e4f8414035\":{\"id\":\"param_b6a591e4f8414035\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the event update (for example, description changes, etc.). Note that some emails might still be sent even if you set the value to false. The default is false.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/query/sendNotifications\"}]},\"param_5981b18c5886dc7a\":{\"id\":\"param_5981b18c5886dc7a\",\"kind\":\"parameter\",\"name\":\"sendUpdates\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Guests who should receive notifications about the event update (for example, title changes, etc.).\"},\"schemaShapeId\":\"shape_2e366aa731bc8b22\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/query/sendUpdates\"}]},\"param_b6523e5adce05f6b\":{\"id\":\"param_b6523e5adce05f6b\",\"kind\":\"parameter\",\"name\":\"alwaysIncludeEmail\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/query/alwaysIncludeEmail\"}]},\"param_fcc4987592c42c53\":{\"id\":\"param_fcc4987592c42c53\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/path/calendarId\"}]},\"param_a476486cc443a3e1\":{\"id\":\"param_a476486cc443a3e1\",\"kind\":\"parameter\",\"name\":\"eventId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Event identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/path/eventId\"}]},\"param_9a945bc213edb3f3\":{\"id\":\"param_9a945bc213edb3f3\",\"kind\":\"parameter\",\"name\":\"conferenceDataVersion\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/query/conferenceDataVersion\"}]},\"param_23f7a1541c4f4f2e\":{\"id\":\"param_23f7a1541c4f4f2e\",\"kind\":\"parameter\",\"name\":\"supportsAttachments\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether API client performing operation supports event attachments. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/query/supportsAttachments\"}]},\"param_4d9f811fa5167432\":{\"id\":\"param_4d9f811fa5167432\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/parameter/query/maxAttendees\"}]},\"request_body_7b1a8bbb0bab6c38\":{\"id\":\"request_body_7b1a8bbb0bab6c38\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_bd9fc2a6df55da26\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody\"}]},\"response_7b1a8bbb0bab6c38\":{\"id\":\"response_7b1a8bbb0bab6c38\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates an event. This method supports patch semantics.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/response\"}]},\"param_eecc10d52c900e9e\":{\"id\":\"param_eecc10d52c900e9e\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/parameter/path/calendarId\"}]},\"param_43b25dd10c781757\":{\"id\":\"param_43b25dd10c781757\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the creation of the event. Note that some emails might still be sent even if you set the value to false. The default is false.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/parameter/query/sendNotifications\"}]},\"param_a1dee2df407a2d7a\":{\"id\":\"param_a1dee2df407a2d7a\",\"kind\":\"parameter\",\"name\":\"sendUpdates\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Guests who should receive notifications about the creation of the new event.\"},\"schemaShapeId\":\"shape_2e366aa731bc8b22\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/parameter/query/sendUpdates\"}]},\"param_5244a6a0ff75f939\":{\"id\":\"param_5244a6a0ff75f939\",\"kind\":\"parameter\",\"name\":\"text\",\"location\":\"query\",\"required\":true,\"docs\":{\"description\":\"The text describing the event to be created.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/parameter/query/text\"}]},\"response_910737eb065350c5\":{\"id\":\"response_910737eb065350c5\",\"kind\":\"response\",\"docs\":{\"description\":\"Creates an event based on a simple text string.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/response\"}]},\"param_0c4d811925c3f596\":{\"id\":\"param_0c4d811925c3f596\",\"kind\":\"parameter\",\"name\":\"supportsAttachments\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether API client performing operation supports event attachments. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/query/supportsAttachments\"}]},\"param_40786c3d98e2bd4c\":{\"id\":\"param_40786c3d98e2bd4c\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/query/maxAttendees\"}]},\"param_d3dbf562cd4cc592\":{\"id\":\"param_d3dbf562cd4cc592\",\"kind\":\"parameter\",\"name\":\"alwaysIncludeEmail\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated and ignored. A value will always be returned in the email field for the organizer, creator and attendees, even if no real email address is available (i.e. a generated, non-working value will be provided).\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/query/alwaysIncludeEmail\"}]},\"param_fea5b4c780b5bd58\":{\"id\":\"param_fea5b4c780b5bd58\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/path/calendarId\"}]},\"param_2feeaf973cfabdf3\":{\"id\":\"param_2feeaf973cfabdf3\",\"kind\":\"parameter\",\"name\":\"eventId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Event identifier.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/path/eventId\"}]},\"param_41d628f575abdff6\":{\"id\":\"param_41d628f575abdff6\",\"kind\":\"parameter\",\"name\":\"sendNotifications\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated. Please use sendUpdates instead.\\n\\nWhether to send notifications about the event update (for example, description changes, etc.). Note that some emails might still be sent even if you set the value to false. The default is false.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/query/sendNotifications\"}]},\"param_919a916bd117022c\":{\"id\":\"param_919a916bd117022c\",\"kind\":\"parameter\",\"name\":\"sendUpdates\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Guests who should receive notifications about the event update (for example, title changes, etc.).\"},\"schemaShapeId\":\"shape_2e366aa731bc8b22\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/query/sendUpdates\"}]},\"param_c89673fe2b895ce4\":{\"id\":\"param_c89673fe2b895ce4\",\"kind\":\"parameter\",\"name\":\"conferenceDataVersion\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Version number of conference data supported by the API client. Version 0 assumes no conference data support and ignores conference data in the event's body. Version 1 enables support for copying of ConferenceData as well as for creating new conferences using the createRequest field of conferenceData. The default is 0.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/parameter/query/conferenceDataVersion\"}]},\"request_body_16e159b8907b5434\":{\"id\":\"request_body_16e159b8907b5434\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_bd9fc2a6df55da26\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody\"}]},\"response_16e159b8907b5434\":{\"id\":\"response_16e159b8907b5434\",\"kind\":\"response\",\"docs\":{\"description\":\"Updates an event.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_fba92a2203a94f35\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/response\"}]},\"param_20e4abbc072bdf25\":{\"id\":\"param_20e4abbc072bdf25\",\"kind\":\"parameter\",\"name\":\"iCalUID\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Specifies an event ID in the iCalendar format to be provided in the response. Optional. Use this if you want to search for an event by its iCalendar ID.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/iCalUID\"}]},\"param_b14ca7b98232b887\":{\"id\":\"param_b14ca7b98232b887\",\"kind\":\"parameter\",\"name\":\"updatedMin\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Lower bound for an event's last modification time (as a RFC3339 timestamp) to filter by. When specified, entries deleted since this time will always be included regardless of showDeleted. Optional. The default is not to filter by last modification time.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/updatedMin\"}]},\"param_75fec3bd2c123866\":{\"id\":\"param_75fec3bd2c123866\",\"kind\":\"parameter\",\"name\":\"showDeleted\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include deleted events (with status equals \\\"cancelled\\\") in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if showDeleted and singleEvents are both False. If showDeleted and singleEvents are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/showDeleted\"}]},\"param_a09ca9466c5c38e1\":{\"id\":\"param_a09ca9466c5c38e1\",\"kind\":\"parameter\",\"name\":\"eventTypes\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types.\"},\"schemaShapeId\":\"shape_611a93470c8a0a7e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/eventTypes\"}]},\"param_0ebc7aaa730f0da8\":{\"id\":\"param_0ebc7aaa730f0da8\",\"kind\":\"parameter\",\"name\":\"timeZone\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Time zone used in the response. Optional. The default is the time zone of the calendar.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/timeZone\"}]},\"param_a38119650a77a4bb\":{\"id\":\"param_a38119650a77a4bb\",\"kind\":\"parameter\",\"name\":\"singleEvents\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/singleEvents\"}]},\"param_d38bcc3c0cba0d92\":{\"id\":\"param_d38bcc3c0cba0d92\",\"kind\":\"parameter\",\"name\":\"timeMax\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMin is set, timeMax must be greater than timeMin.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/timeMax\"}]},\"param_3d0630ed03ee0ba3\":{\"id\":\"param_3d0630ed03ee0ba3\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/pageToken\"}]},\"param_34ecb262b4ae4c97\":{\"id\":\"param_34ecb262b4ae4c97\",\"kind\":\"parameter\",\"name\":\"q\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Free text search terms to find events that match these terms in the following fields:\\n\\n- summary \\n- description \\n- location \\n- attendee's displayName \\n- attendee's email \\n- organizer's displayName \\n- organizer's email \\n- workingLocationProperties.officeLocation.buildingId \\n- workingLocationProperties.officeLocation.deskId \\n- workingLocationProperties.officeLocation.label \\n- workingLocationProperties.customLocation.label \\nThese search terms also match predefined keywords against all display title translations of working location, out-of-office, and focus-time events. For example, searching for \\\"Office\\\" or \\\"Bureau\\\" returns working location events of type officeLocation, whereas searching for \\\"Out of office\\\" or \\\"Abwesend\\\" returns out-of-office events. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/q\"}]},\"param_623d0c5975f8bc42\":{\"id\":\"param_623d0c5975f8bc42\",\"kind\":\"parameter\",\"name\":\"timeMin\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Lower bound (exclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax.\"},\"schemaShapeId\":\"shape_13904d247e72e80f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/timeMin\"}]},\"param_2d89c3d275125386\":{\"id\":\"param_2d89c3d275125386\",\"kind\":\"parameter\",\"name\":\"orderBy\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The order of the events returned in the result. Optional. The default is an unspecified, stable order.\"},\"schemaShapeId\":\"shape_340ff9ac40458d2f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/orderBy\"}]},\"param_07ed382122c503b0\":{\"id\":\"param_07ed382122c503b0\",\"kind\":\"parameter\",\"name\":\"calendarId\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the \\\"primary\\\" keyword.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/path/calendarId\"}]},\"param_c5f8955a1f7b7f3c\":{\"id\":\"param_c5f8955a1f7b7f3c\",\"kind\":\"parameter\",\"name\":\"sharedExtendedProperty\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.\"},\"schemaShapeId\":\"shape_4031ddb626d2d5df\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/sharedExtendedProperty\"}]},\"param_e382ce6fc6a62ee2\":{\"id\":\"param_e382ce6fc6a62ee2\",\"kind\":\"parameter\",\"name\":\"maxAttendees\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/maxAttendees\"}]},\"param_b15952abd08c1894\":{\"id\":\"param_b15952abd08c1894\",\"kind\":\"parameter\",\"name\":\"showHiddenInvitations\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Whether to include hidden invitations in the result. Optional. The default is False.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/showHiddenInvitations\"}]},\"param_25f83ab55ca4ebd0\":{\"id\":\"param_25f83ab55ca4ebd0\",\"kind\":\"parameter\",\"name\":\"privateExtendedProperty\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.\"},\"schemaShapeId\":\"shape_4031ddb626d2d5df\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/privateExtendedProperty\"}]},\"param_a1dd74a84118704a\":{\"id\":\"param_a1dd74a84118704a\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then. All events deleted since the previous list request will always be in the result set and it is not allowed to set showDeleted to False.\\nThere are several query parameters that cannot be specified together with nextSyncToken to ensure consistency of the client state.\\n\\nThese are: \\n- iCalUID \\n- orderBy \\n- privateExtendedProperty \\n- q \\n- sharedExtendedProperty \\n- timeMin \\n- timeMax \\n- updatedMin All other query parameters should be the same as for the initial synchronization to avoid undefined behavior. If the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/syncToken\"}]},\"param_bc9237d272c92374\":{\"id\":\"param_bc9237d272c92374\",\"kind\":\"parameter\",\"name\":\"alwaysIncludeEmail\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Deprecated and ignored.\"},\"schemaShapeId\":\"shape_de499173b645249e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/alwaysIncludeEmail\"}]},\"param_67e67523051ae4e6\":{\"id\":\"param_67e67523051ae4e6\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty nextPageToken field in the response. By default the value is 250 events. The page size can never be larger than 2500 events. Optional.\"},\"schemaShapeId\":\"shape_6237967590aca81b\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/parameter/query/maxResults\"}]},\"request_body_95d8195350f6fe13\":{\"id\":\"request_body_95d8195350f6fe13\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/requestBody\"}]},\"response_95d8195350f6fe13\":{\"id\":\"response_95d8195350f6fe13\",\"kind\":\"response\",\"docs\":{\"description\":\"Watch for changes to Events resources.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/response\"}]},\"security_79749795b985075a\":{\"id\":\"security_79749795b985075a\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.events.freebusy\":\"See the availability on Google calendars you have access to\",\"https://www.googleapis.com/auth/calendar.freebusy\":\"View your availability in your calendars\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"shape_0ce5b31d0734104d\":{\"id\":\"shape_0ce5b31d0734104d\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Time zone used in the response. Optional. The default is UTC.\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"UTC\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/requestBody/properties/timeZone\"}]},\"shape_3f769d3d74e25eb5\":{\"id\":\"shape_3f769d3d74e25eb5\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"unknown\",\"reason\":\"unresolved_ref:#/$defs/google/FreeBusyRequestItem\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/requestBody/properties/items/items\"}],\"diagnosticIds\":[\"diag_33f7500663f438e8\"]},\"shape_38beb8d63ef89010\":{\"id\":\"shape_38beb8d63ef89010\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"List of calendars and/or groups to query.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_3f769d3d74e25eb5\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/requestBody/properties/items\"}]},\"shape_44151f011ed05b86\":{\"id\":\"shape_44151f011ed05b86\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"calendarExpansionMax\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"Maximal number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50.\"}},\"timeMin\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The start of the interval for the query formatted as per RFC3339.\"}},\"timeZone\":{\"shapeId\":\"shape_0ce5b31d0734104d\",\"docs\":{\"description\":\"Time zone used in the response. Optional. The default is UTC.\"}},\"timeMax\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The end of the interval for the query formatted as per RFC3339.\"}},\"groupExpansionMax\":{\"shapeId\":\"shape_f7389b9d7df65e12\",\"docs\":{\"description\":\"Maximal number of calendar identifiers to be provided for a single group. Optional. An error is returned for a group with more members than this value. Maximum value is 100.\"}},\"items\":{\"shapeId\":\"shape_38beb8d63ef89010\",\"docs\":{\"description\":\"List of calendars and/or groups to query.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/requestBody\"}]},\"request_body_f532df62cd1fc08e\":{\"id\":\"request_body_f532df62cd1fc08e\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_44151f011ed05b86\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/requestBody\"}]},\"shape_6e0c44ba3e0b8ae2\":{\"id\":\"shape_6e0c44ba3e0b8ae2\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#freeBusy\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#freeBusy\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response/properties/kind\"}]},\"shape_dc1a72e510974e90\":{\"id\":\"shape_dc1a72e510974e90\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"end\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The (exclusive) end of the time period.\"}},\"start\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The (inclusive) start of the time period.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/TimePeriod\"}]},\"shape_4196e66eb1d3d963\":{\"id\":\"shape_4196e66eb1d3d963\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_dc1a72e510974e90\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/FreeBusyCalendar/properties/busy/items\"}]},\"shape_b8c5a0363dd06b5f\":{\"id\":\"shape_b8c5a0363dd06b5f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"List of time ranges during which this calendar should be regarded as busy.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_4196e66eb1d3d963\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/FreeBusyCalendar/properties/busy\"}]},\"shape_de173f5ad0c3c23b\":{\"id\":\"shape_de173f5ad0c3c23b\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"domain\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Domain, or broad category, of the error.\"}},\"reason\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Specific reason for the error. Some of the possible values are:  \\n- \\\"groupTooBig\\\" - The group of users requested is too large for a single query. \\n- \\\"tooManyCalendarsRequested\\\" - The number of calendars requested is too large for a single query. \\n- \\\"notFound\\\" - The requested resource was not found. \\n- \\\"internalError\\\" - The API service has encountered an internal error.  Additional error types may be added in the future, so clients should gracefully handle additional error statuses not included in this list.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/Error\"}]},\"shape_616807c58d011881\":{\"id\":\"shape_616807c58d011881\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_de173f5ad0c3c23b\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/FreeBusyCalendar/properties/errors/items\"}]},\"shape_756febf894aa2479\":{\"id\":\"shape_756febf894aa2479\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Optional error(s) (if computation for the calendar failed).\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_616807c58d011881\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/FreeBusyCalendar/properties/errors\"}]},\"shape_959414ecaed4b58a\":{\"id\":\"shape_959414ecaed4b58a\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"busy\":{\"shapeId\":\"shape_b8c5a0363dd06b5f\",\"docs\":{\"description\":\"List of time ranges during which this calendar should be regarded as busy.\"}},\"errors\":{\"shapeId\":\"shape_756febf894aa2479\",\"docs\":{\"description\":\"Optional error(s) (if computation for the calendar failed).\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/FreeBusyCalendar\"}]},\"shape_bf5f99e56d52b458\":{\"id\":\"shape_bf5f99e56d52b458\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_959414ecaed4b58a\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response/properties/calendars/additionalProperties\"}]},\"shape_2c7a6205e8158b0f\":{\"id\":\"shape_2c7a6205e8158b0f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"List of free/busy information for calendars.\"},\"node\":{\"type\":\"object\",\"fields\":{},\"additionalProperties\":\"shape_bf5f99e56d52b458\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response/properties/calendars\"}]},\"shape_4d3558df5fbbd1d3\":{\"id\":\"shape_4d3558df5fbbd1d3\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"errors\":{\"shapeId\":\"shape_756febf894aa2479\",\"docs\":{\"description\":\"Optional error(s) (if computation for the group failed).\"}},\"calendars\":{\"shapeId\":\"shape_4031ddb626d2d5df\",\"docs\":{\"description\":\"List of calendars' identifiers within a group.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/$defs/google/FreeBusyGroup\"}]},\"shape_f496d26c5b95ade1\":{\"id\":\"shape_f496d26c5b95ade1\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_4d3558df5fbbd1d3\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response/properties/groups/additionalProperties\"}]},\"shape_48c9d45a4778a43d\":{\"id\":\"shape_48c9d45a4778a43d\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Expansion of groups.\"},\"node\":{\"type\":\"object\",\"fields\":{},\"additionalProperties\":\"shape_f496d26c5b95ade1\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response/properties/groups\"}]},\"shape_9b0912462b43882f\":{\"id\":\"shape_9b0912462b43882f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"kind\":{\"shapeId\":\"shape_6e0c44ba3e0b8ae2\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#freeBusy\\\").\"}},\"timeMin\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The start of the interval.\"}},\"timeMax\":{\"shapeId\":\"shape_13904d247e72e80f\",\"docs\":{\"description\":\"The end of the interval.\"}},\"calendars\":{\"shapeId\":\"shape_2c7a6205e8158b0f\",\"docs\":{\"description\":\"List of free/busy information for calendars.\"}},\"groups\":{\"shapeId\":\"shape_48c9d45a4778a43d\",\"docs\":{\"description\":\"Expansion of groups.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response\"}]},\"response_f532df62cd1fc08e\":{\"id\":\"response_f532df62cd1fc08e\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns free/busy information for a set of calendars.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9b0912462b43882f\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/response\"}]},\"security_55bad56ad7c71847\":{\"id\":\"security_55bad56ad7c71847\",\"kind\":\"securityScheme\",\"schemeType\":\"oauth2\",\"docs\":{\"summary\":\"OAuth 2.0\",\"description\":\"Imported from Google Discovery scopes.\"},\"oauth\":{\"flows\":{},\"scopes\":{\"https://www.googleapis.com/auth/calendar\":\"See, edit, share, and permanently delete all the calendars you can access using Google Calendar\",\"https://www.googleapis.com/auth/calendar.readonly\":\"See and download any calendar you can access using your Google Calendar\",\"https://www.googleapis.com/auth/calendar.settings.readonly\":\"View your Calendar settings\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/security\"}]},\"param_523baf2f764ebc73\":{\"id\":\"param_523baf2f764ebc73\",\"kind\":\"parameter\",\"name\":\"setting\",\"location\":\"path\",\"required\":true,\"docs\":{\"description\":\"The id of the user setting.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/parameter/path/setting\"}]},\"shape_f4afb64d27171373\":{\"id\":\"shape_f4afb64d27171373\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#setting\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#setting\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/response/properties/kind\"}]},\"shape_4814e6d637874b49\":{\"id\":\"shape_4814e6d637874b49\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"value\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Value of the user setting. The format of the value depends on the ID of the setting. It must always be a UTF-8 string of length up to 1024 characters.\"}},\"id\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"The id of the user setting.\"}},\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"ETag of the resource.\"}},\"kind\":{\"shapeId\":\"shape_f4afb64d27171373\",\"docs\":{\"description\":\"Type of the resource (\\\"calendar#setting\\\").\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/response\"}]},\"response_bf71b027a1512161\":{\"id\":\"response_bf71b027a1512161\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns a single user setting.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_4814e6d637874b49\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/response\"}]},\"param_b44cdfa4fb88a43f\":{\"id\":\"param_b44cdfa4fb88a43f\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/parameter/query/pageToken\"}]},\"param_4eb160198e2d8915\":{\"id\":\"param_4eb160198e2d8915\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/parameter/query/maxResults\"}]},\"param_67a2b125e37f645d\":{\"id\":\"param_67a2b125e37f645d\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/parameter/query/syncToken\"}]},\"shape_08da30ef577952c4\":{\"id\":\"shape_08da30ef577952c4\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#settings\\\").\"},\"node\":{\"type\":\"scalar\",\"scalar\":\"string\",\"constraints\":{\"default\":\"calendar#settings\"}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/response/properties/kind\"}]},\"shape_3ca51736a9534b1f\":{\"id\":\"shape_3ca51736a9534b1f\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"ref\",\"target\":\"shape_4814e6d637874b49\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/response/properties/items/items\"}]},\"shape_e382bf5747ac8383\":{\"id\":\"shape_e382bf5747ac8383\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"docs\":{\"description\":\"List of user settings.\"},\"node\":{\"type\":\"array\",\"itemShapeId\":\"shape_3ca51736a9534b1f\"},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/response/properties/items\"}]},\"shape_c48c96a26a594fea\":{\"id\":\"shape_c48c96a26a594fea\",\"kind\":\"shape\",\"resourceId\":\"res_3088a953c6f2a8aa\",\"node\":{\"type\":\"object\",\"fields\":{\"etag\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Etag of the collection.\"}},\"kind\":{\"shapeId\":\"shape_08da30ef577952c4\",\"docs\":{\"description\":\"Type of the collection (\\\"calendar#settings\\\").\"}},\"nextPageToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used to access the next page of this result. Omitted if no further results are available, in which case nextSyncToken is provided.\"}},\"items\":{\"shapeId\":\"shape_e382bf5747ac8383\",\"docs\":{\"description\":\"List of user settings.\"}},\"nextSyncToken\":{\"shapeId\":\"shape_e85dfd870db3f887\",\"docs\":{\"description\":\"Token used at a later point in time to retrieve only the entries that have changed since this result was returned. Omitted if further results are available, in which case nextPageToken is provided.\"}}}},\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/response\"}]},\"response_a94f36fd9dd3bc2f\":{\"id\":\"response_a94f36fd9dd3bc2f\",\"kind\":\"response\",\"docs\":{\"description\":\"Returns all user settings for the authenticated user.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_c48c96a26a594fea\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/response\"}]},\"param_e4623cc9d4016099\":{\"id\":\"param_e4623cc9d4016099\",\"kind\":\"parameter\",\"name\":\"syncToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed since then.\\nIf the syncToken expires, the server will respond with a 410 GONE response code and the client should clear its storage and perform a full synchronization without any syncToken.\\nLearn more about incremental synchronization.\\nOptional. The default is to return all entries.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/parameter/query/syncToken\"}]},\"param_a7a03ea2440d4817\":{\"id\":\"param_a7a03ea2440d4817\",\"kind\":\"parameter\",\"name\":\"maxResults\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries. Optional.\"},\"schemaShapeId\":\"shape_f7389b9d7df65e12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/parameter/query/maxResults\"}]},\"param_8303fd62c8755eab\":{\"id\":\"param_8303fd62c8755eab\",\"kind\":\"parameter\",\"name\":\"pageToken\",\"location\":\"query\",\"required\":false,\"docs\":{\"description\":\"Token specifying which result page to return. Optional.\"},\"schemaShapeId\":\"shape_e85dfd870db3f887\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/parameter/query/pageToken\"}]},\"request_body_ae33cb25af8eb947\":{\"id\":\"request_body_ae33cb25af8eb947\",\"kind\":\"requestBody\",\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/requestBody\"}]},\"response_ae33cb25af8eb947\":{\"id\":\"response_ae33cb25af8eb947\",\"kind\":\"response\",\"docs\":{\"description\":\"Watch for changes to Settings resources.\"},\"contents\":[{\"mediaType\":\"application/json\",\"shapeId\":\"shape_9706af66da9de736\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/response\"}]}},\"capabilities\":{\"cap_d1588c9824105e90\":{\"id\":\"cap_d1588c9824105e90\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"delete\"],\"title\":\"acl.delete\",\"summary\":\"Deletes an access control rule.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"delete\",\"safe\":false,\"idempotent\":true,\"destructive\":true},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_6c8d27b28090ce3e\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"delete\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_0d9cc1aeb2a610c9\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/capability\"}]},\"cap_5d96e73fb32858e2\":{\"id\":\"cap_5d96e73fb32858e2\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"get\"],\"title\":\"acl.get\",\"summary\":\"Returns an access control rule.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_d7a46b25955cd4a8\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\",\"https://www.googleapis.com/auth/calendar.acls.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_40326c968686842a\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/capability\"}]},\"cap_bf207e73241e90a1\":{\"id\":\"cap_bf207e73241e90a1\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"insert\"],\"title\":\"acl.insert\",\"summary\":\"Creates an access control rule.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_6c8d27b28090ce3e\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_06dc06d889900b68\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/capability\"}]},\"cap_6232f6390f86e5c2\":{\"id\":\"cap_6232f6390f86e5c2\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"list\"],\"title\":\"acl.list\",\"summary\":\"Returns the rules in the access control list for the calendar.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_2ee450a156c24b8b\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\",\"https://www.googleapis.com/auth/calendar.acls.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_42091bd0b15ea397\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/capability\"}]},\"cap_49d4533c6fba4b2c\":{\"id\":\"cap_49d4533c6fba4b2c\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"patch\"],\"title\":\"acl.patch\",\"summary\":\"Updates an access control rule. This method supports patch semantics.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_6c8d27b28090ce3e\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_1c0015c4876813b5\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/capability\"}]},\"cap_9fcc54e8950420a5\":{\"id\":\"cap_9fcc54e8950420a5\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"update\"],\"title\":\"acl.update\",\"summary\":\"Updates an access control rule.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_6c8d27b28090ce3e\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_0485b918b35353d8\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/capability\"}]},\"cap_fbf41c4356265be5\":{\"id\":\"cap_fbf41c4356265be5\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"acl\",\"watch\"],\"title\":\"acl.watch\",\"summary\":\"Watch for changes to ACL resources.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_2ee450a156c24b8b\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\",\"https://www.googleapis.com/auth/calendar.acls.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_2e7c21e830734565\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/capability\"}]},\"cap_373652967bde91e9\":{\"id\":\"cap_373652967bde91e9\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"delete\"],\"title\":\"calendarList.delete\",\"summary\":\"Removes a calendar from the user's calendar list.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"delete\",\"safe\":false,\"idempotent\":true,\"destructive\":true},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_2fee943152021660\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendarlist\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"delete\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_c342a23bae96550f\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.delete/capability\"}]},\"cap_4da97f0d351766e8\":{\"id\":\"cap_4da97f0d351766e8\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"get\"],\"title\":\"calendarList.get\",\"summary\":\"Returns a calendar from the user's calendar list.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_79a5890d3e23d8ee\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendarlist\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_a67c0ede0490674b\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/capability\"}]},\"cap_a6587361cc50ea09\":{\"id\":\"cap_a6587361cc50ea09\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"insert\"],\"title\":\"calendarList.insert\",\"summary\":\"Inserts an existing calendar into the user's calendar list.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_dd267db75d9d9445\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.calendarlist\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_8610aacfc71280f2\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/capability\"}]},\"cap_26069f65b9fd2cc6\":{\"id\":\"cap_26069f65b9fd2cc6\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"list\"],\"title\":\"calendarList.list\",\"summary\":\"Returns the calendars on the user's calendar list.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_206e609b39f51e58\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.calendarlist\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_81aaf533c25ee0c5\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/capability\"}]},\"cap_3969604657f5ccbe\":{\"id\":\"cap_3969604657f5ccbe\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"patch\"],\"title\":\"calendarList.patch\",\"summary\":\"Updates an existing calendar on the user's calendar list. This method supports patch semantics.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_2fee943152021660\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendarlist\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_6977919c51288a19\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/capability\"}]},\"cap_0a9980e441f1f39f\":{\"id\":\"cap_0a9980e441f1f39f\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"update\"],\"title\":\"calendarList.update\",\"summary\":\"Updates an existing calendar on the user's calendar list.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_2fee943152021660\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendarlist\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_1c13896053534abd\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/capability\"}]},\"cap_264ff74cd4a89365\":{\"id\":\"cap_264ff74cd4a89365\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendarList\",\"watch\"],\"title\":\"calendarList.watch\",\"summary\":\"Watch for changes to CalendarList resources.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_206e609b39f51e58\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.calendarlist\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_e4ae837396c8dd7a\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/capability\"}]},\"cap_be537e656210cc0b\":{\"id\":\"cap_be537e656210cc0b\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendars\",\"clear\"],\"title\":\"calendars.clear\",\"summary\":\"Clears a primary calendar. This operation deletes all events associated with the primary calendar of an account.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_f4177ef5b7fbd2dd\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.calendars\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_f7df2c1c3dd3f285\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.clear/capability\"}]},\"cap_7af0d4eee044c893\":{\"id\":\"cap_7af0d4eee044c893\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendars\",\"delete\"],\"title\":\"calendars.delete\",\"summary\":\"Deletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"delete\",\"safe\":false,\"idempotent\":true,\"destructive\":true},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b9f1b81ad65a4447\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendars\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"delete\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_4141bb260bd4ed4b\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.delete/capability\"}]},\"cap_75f5314ebaf13d00\":{\"id\":\"cap_75f5314ebaf13d00\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendars\",\"get\"],\"title\":\"calendars.get\",\"summary\":\"Returns metadata for a calendar.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_2b1f1156e0d7817a\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendars\",\"https://www.googleapis.com/auth/calendar.calendars.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_b1c3bbc0a5d6f22d\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/capability\"}]},\"cap_1b8cb5deab471c0d\":{\"id\":\"cap_1b8cb5deab471c0d\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendars\",\"insert\"],\"title\":\"calendars.insert\",\"summary\":\"Creates a secondary calendar.\\nThe authenticated user for the request is made the data owner of the new calendar.\\n\\nNote: We recommend to authenticate as the intended data owner of the calendar. You can use domain-wide delegation of authority to allow applications to act on behalf of a specific user. Don't use a service account for authentication. If you use a service account for authentication, the service account is the data owner, which can lead to unexpected behavior. For example, if a service account is the data owner, data ownership cannot be transferred.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b9f1b81ad65a4447\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendars\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_510884250579e09f\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/capability\"}]},\"cap_eb40ae43e3dd6267\":{\"id\":\"cap_eb40ae43e3dd6267\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendars\",\"patch\"],\"title\":\"calendars.patch\",\"summary\":\"Updates metadata for a calendar. This method supports patch semantics.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b9f1b81ad65a4447\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendars\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_1f75f2586f85e5a7\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/capability\"}]},\"cap_7ce7b0eacc8e8a1d\":{\"id\":\"cap_7ce7b0eacc8e8a1d\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"calendars\",\"update\"],\"title\":\"calendars.update\",\"summary\":\"Updates metadata for a calendar.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b9f1b81ad65a4447\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendars\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_7763db57783a474d\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/capability\"}]},\"cap_e9ad6557df80c999\":{\"id\":\"cap_e9ad6557df80c999\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"channels\",\"stop\"],\"title\":\"channels.stop\",\"summary\":\"Stop watching resources through this channel\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_51453cd90777bfe0\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.acls\",\"https://www.googleapis.com/auth/calendar.acls.readonly\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendarlist\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.events.owned\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\",\"https://www.googleapis.com/auth/calendar.settings.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_503a02fc42c7f879\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/channels.stop/capability\"}]},\"cap_fa2811bc1ff76bbe\":{\"id\":\"cap_fa2811bc1ff76bbe\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"colors\",\"get\"],\"title\":\"colors.get\",\"summary\":\"Returns the color definitions for calendars and events.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_1d7e9668153221b8\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.calendarlist\",\"https://www.googleapis.com/auth/calendar.calendarlist.readonly\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.events.owned\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_7f826e1a7e3c28ad\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/capability\"}]},\"cap_f463690169859d7f\":{\"id\":\"cap_f463690169859d7f\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"delete\"],\"title\":\"events.delete\",\"summary\":\"Deletes an event.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"delete\",\"safe\":false,\"idempotent\":true,\"destructive\":true},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_c5960c297ea564ea\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"delete\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_0900f2617f19e0dd\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/capability\"}]},\"cap_32a5ec8e79313c1a\":{\"id\":\"cap_32a5ec8e79313c1a\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"get\"],\"title\":\"events.get\",\"summary\":\"Returns an event based on its Google Calendar ID. To retrieve an event using its iCalendar ID, call the events.list method using the iCalUID parameter.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b39e22a1c580fb61\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.events.owned\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_21666a4163b06a04\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/capability\"}]},\"cap_7ca96fd1f732dd34\":{\"id\":\"cap_7ca96fd1f732dd34\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"import\"],\"title\":\"events.import\",\"summary\":\"Imports an event. This operation is used to add a private copy of an existing event to a calendar. Only events with an eventType of default may be imported.\\nDeprecated behavior: If a non-default event is imported, its type will be changed to default and any event-type-specific properties it may have will be dropped.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_c5960c297ea564ea\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_22dea5cf504cbafe\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/capability\"}]},\"cap_d9f4f2f8f055444a\":{\"id\":\"cap_d9f4f2f8f055444a\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"insert\"],\"title\":\"events.insert\",\"summary\":\"Creates an event.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_c5960c297ea564ea\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_065dd229fcf48edd\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/capability\"}]},\"cap_ac9c8a3188151c96\":{\"id\":\"cap_ac9c8a3188151c96\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"instances\"],\"title\":\"events.instances\",\"summary\":\"Returns instances of the specified recurring event.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b39e22a1c580fb61\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.events.owned\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_cb6e33867ff430f4\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/capability\"}]},\"cap_e7eabd4383663719\":{\"id\":\"cap_e7eabd4383663719\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"list\"],\"title\":\"events.list\",\"summary\":\"Returns events on the specified calendar.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b39e22a1c580fb61\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.events.owned\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_49b384d6d175ef49\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/capability\"}]},\"cap_bec2190ba718f46d\":{\"id\":\"cap_bec2190ba718f46d\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"move\"],\"title\":\"events.move\",\"summary\":\"Moves an event to another calendar, i.e. changes an event's organizer. Note that only default events can be moved; birthday, focusTime, fromGmail, outOfOffice and workingLocation events cannot be moved.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_8d8e36595a5acd83\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_0c3ee632da59e21a\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/capability\"}]},\"cap_0d4436100c00d14b\":{\"id\":\"cap_0d4436100c00d14b\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"patch\"],\"title\":\"events.patch\",\"summary\":\"Updates an event. This method supports patch semantics.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_c5960c297ea564ea\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_e3e657a8a6bd04c9\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/capability\"}]},\"cap_4f77c18bf7dd0698\":{\"id\":\"cap_4f77c18bf7dd0698\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"quickAdd\"],\"title\":\"events.quickAdd\",\"summary\":\"Creates an event based on a simple text string.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_c5960c297ea564ea\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_968693949b0ca233\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/capability\"}]},\"cap_18ace1bad16245c1\":{\"id\":\"cap_18ace1bad16245c1\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"update\"],\"title\":\"events.update\",\"summary\":\"Updates an event.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_c5960c297ea564ea\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.owned\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_a8384dafdc65452e\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/capability\"}]},\"cap_653a2d99bdca0bbc\":{\"id\":\"cap_653a2d99bdca0bbc\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"events\",\"watch\"],\"title\":\"events.watch\",\"summary\":\"Watch for changes to Events resources.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_b39e22a1c580fb61\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.app.created\",\"https://www.googleapis.com/auth/calendar.events\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.events.owned\",\"https://www.googleapis.com/auth/calendar.events.owned.readonly\",\"https://www.googleapis.com/auth/calendar.events.public.readonly\",\"https://www.googleapis.com/auth/calendar.events.readonly\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_70a90d49603f1f1a\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/capability\"}]},\"cap_f3a567d9e212312f\":{\"id\":\"cap_f3a567d9e212312f\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"freebusy\",\"query\"],\"title\":\"freebusy.query\",\"summary\":\"Returns free/busy information for a set of calendars.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_79749795b985075a\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.events.freebusy\",\"https://www.googleapis.com/auth/calendar.freebusy\",\"https://www.googleapis.com/auth/calendar.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_929c11009f3e6e93\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/capability\"}]},\"cap_623cff2cc64c5bf0\":{\"id\":\"cap_623cff2cc64c5bf0\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"settings\",\"get\"],\"title\":\"settings.get\",\"summary\":\"Returns a single user setting.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_55bad56ad7c71847\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.readonly\",\"https://www.googleapis.com/auth/calendar.settings.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_7c61fa456778c6e2\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/capability\"}]},\"cap_e0080d921757c650\":{\"id\":\"cap_e0080d921757c650\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"settings\",\"list\"],\"title\":\"settings.list\",\"summary\":\"Returns all user settings for the authenticated user.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"read\",\"safe\":true,\"idempotent\":true,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_55bad56ad7c71847\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.readonly\",\"https://www.googleapis.com/auth/calendar.settings.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":false,\"reasons\":[]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_974045d8b66ee830\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/capability\"}]},\"cap_c9a6b731ec208fc1\":{\"id\":\"cap_c9a6b731ec208fc1\",\"serviceScopeId\":\"scope_service_3088a953c6f2a8aa\",\"surface\":{\"toolPath\":[\"google\",\"calendar\",\"settings\",\"watch\"],\"title\":\"settings.watch\",\"summary\":\"Watch for changes to Settings resources.\",\"tags\":[\"google\",\"calendar\",\"v3\"]},\"semantics\":{\"effect\":\"write\",\"safe\":false,\"idempotent\":false,\"destructive\":false},\"auth\":{\"kind\":\"scheme\",\"schemeId\":\"security_55bad56ad7c71847\",\"scopes\":[\"https://www.googleapis.com/auth/calendar\",\"https://www.googleapis.com/auth/calendar.readonly\",\"https://www.googleapis.com/auth/calendar.settings.readonly\"]},\"interaction\":{\"approval\":{\"mayRequire\":true,\"reasons\":[\"write\"]},\"elicitation\":{\"mayRequest\":false},\"resume\":{\"supported\":false}},\"executableIds\":[\"exec_1032b3b4916261b0\"],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/capability\"}]}},\"executables\":{\"exec_0d9cc1aeb2a610c9\":{\"id\":\"exec_0d9cc1aeb2a610c9\",\"protocol\":\"http\",\"capabilityId\":\"cap_d1588c9824105e90\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"DELETE\",\"pathTemplate\":\"calendars/{calendarId}/acl/{ruleId}\",\"pathParameterIds\":[\"param_444fe2702ad04f9a\",\"param_19c73bb23f885a89\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_940c4260f62ef0fe\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/executable\"}]},\"exec_40326c968686842a\":{\"id\":\"exec_40326c968686842a\",\"protocol\":\"http\",\"capabilityId\":\"cap_5d96e73fb32858e2\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"calendars/{calendarId}/acl/{ruleId}\",\"pathParameterIds\":[\"param_865494764597f7b6\",\"param_0fe8805e1b945ba1\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_e516c7e218d47035\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/executable\"}]},\"exec_06dc06d889900b68\":{\"id\":\"exec_06dc06d889900b68\",\"protocol\":\"http\",\"capabilityId\":\"cap_bf207e73241e90a1\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/acl\",\"pathParameterIds\":[\"param_3ee0dffb803d98e5\"],\"queryParameterIds\":[\"param_9ed2f2c993628f54\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_2c7783d069126a63\",\"responseSetId\":\"response_set_31a38fd13cfceaf9\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/executable\"}]},\"exec_42091bd0b15ea397\":{\"id\":\"exec_42091bd0b15ea397\",\"protocol\":\"http\",\"capabilityId\":\"cap_6232f6390f86e5c2\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"calendars/{calendarId}/acl\",\"pathParameterIds\":[\"param_37b50056b425b1fd\"],\"queryParameterIds\":[\"param_5d695eba168f1738\",\"param_a442b1333d2bd96f\",\"param_eb3f00c3868930dd\",\"param_bd79e3db605465e6\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_c52eec714813bbac\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/executable\"}]},\"exec_1c0015c4876813b5\":{\"id\":\"exec_1c0015c4876813b5\",\"protocol\":\"http\",\"capabilityId\":\"cap_49d4533c6fba4b2c\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PATCH\",\"pathTemplate\":\"calendars/{calendarId}/acl/{ruleId}\",\"pathParameterIds\":[\"param_8b0ec8f9d2b133b4\",\"param_709b382d2b74c13c\"],\"queryParameterIds\":[\"param_ff7287c81138b78a\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_3e1a7bc02964b694\",\"responseSetId\":\"response_set_57474de9fcfae806\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/executable\"}]},\"exec_0485b918b35353d8\":{\"id\":\"exec_0485b918b35353d8\",\"protocol\":\"http\",\"capabilityId\":\"cap_9fcc54e8950420a5\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PUT\",\"pathTemplate\":\"calendars/{calendarId}/acl/{ruleId}\",\"pathParameterIds\":[\"param_591f9de8536c5abf\",\"param_683668fc1b4fc9b3\"],\"queryParameterIds\":[\"param_689ff163a3f82a6b\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_b8a0c727756a936c\",\"responseSetId\":\"response_set_7997fccf720d7d12\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/executable\"}]},\"exec_2e7c21e830734565\":{\"id\":\"exec_2e7c21e830734565\",\"protocol\":\"http\",\"capabilityId\":\"cap_fbf41c4356265be5\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/acl/watch\",\"pathParameterIds\":[\"param_049f4a76e106758d\"],\"queryParameterIds\":[\"param_312132807a36e3e0\",\"param_713f047a3bf27dc3\",\"param_ce58aff032fecab2\",\"param_273f58b38f4f4f15\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_f6c2dfea21888d6f\",\"responseSetId\":\"response_set_b593507cf998203e\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/executable\"}]},\"exec_c342a23bae96550f\":{\"id\":\"exec_c342a23bae96550f\",\"protocol\":\"http\",\"capabilityId\":\"cap_373652967bde91e9\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"DELETE\",\"pathTemplate\":\"users/me/calendarList/{calendarId}\",\"pathParameterIds\":[\"param_9e7de972616d958c\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_e8afd9e8ef5d5dc1\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.delete/executable\"}]},\"exec_a67c0ede0490674b\":{\"id\":\"exec_a67c0ede0490674b\",\"protocol\":\"http\",\"capabilityId\":\"cap_4da97f0d351766e8\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"users/me/calendarList/{calendarId}\",\"pathParameterIds\":[\"param_19da6fd236794ac9\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_05f1b9c14a0f5fb7\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/executable\"}]},\"exec_8610aacfc71280f2\":{\"id\":\"exec_8610aacfc71280f2\",\"protocol\":\"http\",\"capabilityId\":\"cap_a6587361cc50ea09\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"users/me/calendarList\",\"pathParameterIds\":[],\"queryParameterIds\":[\"param_04acfd77cbca9cf2\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_e3a6143db2e03c18\",\"responseSetId\":\"response_set_f1d6718b59ac24fb\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/executable\"}]},\"exec_81aaf533c25ee0c5\":{\"id\":\"exec_81aaf533c25ee0c5\",\"protocol\":\"http\",\"capabilityId\":\"cap_26069f65b9fd2cc6\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"users/me/calendarList\",\"pathParameterIds\":[],\"queryParameterIds\":[\"param_ccfb54832f688ede\",\"param_d556cf6121ff508e\",\"param_a4fd19e0cacc3199\",\"param_19f162a5faa492f4\",\"param_274c47b86d463953\",\"param_b574b1d9c2e540bc\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_6a1c6e8faa666ede\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/executable\"}]},\"exec_6977919c51288a19\":{\"id\":\"exec_6977919c51288a19\",\"protocol\":\"http\",\"capabilityId\":\"cap_3969604657f5ccbe\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PATCH\",\"pathTemplate\":\"users/me/calendarList/{calendarId}\",\"pathParameterIds\":[\"param_905935f366f3f169\"],\"queryParameterIds\":[\"param_e7dd508896d09376\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_99e53c62c1052bfe\",\"responseSetId\":\"response_set_955d99fda0ba4dcd\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/executable\"}]},\"exec_1c13896053534abd\":{\"id\":\"exec_1c13896053534abd\",\"protocol\":\"http\",\"capabilityId\":\"cap_0a9980e441f1f39f\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PUT\",\"pathTemplate\":\"users/me/calendarList/{calendarId}\",\"pathParameterIds\":[\"param_fc9ee8249e864763\"],\"queryParameterIds\":[\"param_8822c12f3ffee545\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_b5c69a9694d6070b\",\"responseSetId\":\"response_set_35443d9e9c30cd88\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/executable\"}]},\"exec_e4ae837396c8dd7a\":{\"id\":\"exec_e4ae837396c8dd7a\",\"protocol\":\"http\",\"capabilityId\":\"cap_264ff74cd4a89365\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"users/me/calendarList/watch\",\"pathParameterIds\":[],\"queryParameterIds\":[\"param_e0893af8e4a2cfac\",\"param_348aa18581374f6d\",\"param_53c064d546369fa0\",\"param_2f53b399a77dee36\",\"param_899ad5331e36e108\",\"param_d67670a2064f9e9b\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_c7a2eafdc5c99178\",\"responseSetId\":\"response_set_9f7aa42886b76c21\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/executable\"}]},\"exec_f7df2c1c3dd3f285\":{\"id\":\"exec_f7df2c1c3dd3f285\",\"protocol\":\"http\",\"capabilityId\":\"cap_be537e656210cc0b\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/clear\",\"pathParameterIds\":[\"param_f5bdb9e3c6d11c0c\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_ca4a4c5e15233531\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.clear/executable\"}]},\"exec_4141bb260bd4ed4b\":{\"id\":\"exec_4141bb260bd4ed4b\",\"protocol\":\"http\",\"capabilityId\":\"cap_7af0d4eee044c893\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"DELETE\",\"pathTemplate\":\"calendars/{calendarId}\",\"pathParameterIds\":[\"param_5b98cbb4acd90d7e\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_23f0ab9617bc6b9d\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.delete/executable\"}]},\"exec_b1c3bbc0a5d6f22d\":{\"id\":\"exec_b1c3bbc0a5d6f22d\",\"protocol\":\"http\",\"capabilityId\":\"cap_75f5314ebaf13d00\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"calendars/{calendarId}\",\"pathParameterIds\":[\"param_dfda87731f99af97\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_c1d9a3918da0a024\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/executable\"}]},\"exec_510884250579e09f\":{\"id\":\"exec_510884250579e09f\",\"protocol\":\"http\",\"capabilityId\":\"cap_1b8cb5deab471c0d\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars\",\"pathParameterIds\":[],\"queryParameterIds\":[],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_2db08056adefca97\",\"responseSetId\":\"response_set_953577feeb38035b\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/executable\"}]},\"exec_1f75f2586f85e5a7\":{\"id\":\"exec_1f75f2586f85e5a7\",\"protocol\":\"http\",\"capabilityId\":\"cap_eb40ae43e3dd6267\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PATCH\",\"pathTemplate\":\"calendars/{calendarId}\",\"pathParameterIds\":[\"param_fc1f00874dc759fc\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_4449f8126cd6253f\",\"responseSetId\":\"response_set_fa7cffbedeaadc17\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/executable\"}]},\"exec_7763db57783a474d\":{\"id\":\"exec_7763db57783a474d\",\"protocol\":\"http\",\"capabilityId\":\"cap_7ce7b0eacc8e8a1d\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PUT\",\"pathTemplate\":\"calendars/{calendarId}\",\"pathParameterIds\":[\"param_7eca185f50976a10\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_896a2168ace1b3dc\",\"responseSetId\":\"response_set_f0a42fa8d665bb51\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/executable\"}]},\"exec_503a02fc42c7f879\":{\"id\":\"exec_503a02fc42c7f879\",\"protocol\":\"http\",\"capabilityId\":\"cap_e9ad6557df80c999\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"channels/stop\",\"pathParameterIds\":[],\"queryParameterIds\":[],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_35929b9fe1764fc8\",\"responseSetId\":\"response_set_8e21b855438306f1\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/channels.stop/executable\"}]},\"exec_7f826e1a7e3c28ad\":{\"id\":\"exec_7f826e1a7e3c28ad\",\"protocol\":\"http\",\"capabilityId\":\"cap_fa2811bc1ff76bbe\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"colors\",\"pathParameterIds\":[],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_966e41319371efc1\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/executable\"}]},\"exec_0900f2617f19e0dd\":{\"id\":\"exec_0900f2617f19e0dd\",\"protocol\":\"http\",\"capabilityId\":\"cap_f463690169859d7f\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"DELETE\",\"pathTemplate\":\"calendars/{calendarId}/events/{eventId}\",\"pathParameterIds\":[\"param_ab94c0091357a70b\",\"param_c7508e8640df74be\"],\"queryParameterIds\":[\"param_07676ae5ed9c46e3\",\"param_779569f40e1975e9\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_1986faa167b4799b\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/executable\"}]},\"exec_21666a4163b06a04\":{\"id\":\"exec_21666a4163b06a04\",\"protocol\":\"http\",\"capabilityId\":\"cap_32a5ec8e79313c1a\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"calendars/{calendarId}/events/{eventId}\",\"pathParameterIds\":[\"param_e3d8efd19fb6be72\",\"param_029e62f55c519446\"],\"queryParameterIds\":[\"param_df57a7df6732daa5\",\"param_bdab85831749cfe9\",\"param_23af8751757d5f46\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_8629fce88ac65a1a\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/executable\"}]},\"exec_22dea5cf504cbafe\":{\"id\":\"exec_22dea5cf504cbafe\",\"protocol\":\"http\",\"capabilityId\":\"cap_7ca96fd1f732dd34\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/events/import\",\"pathParameterIds\":[\"param_92464e145a0e7cd0\"],\"queryParameterIds\":[\"param_961a84fc1f772970\",\"param_f33b132347e0c72b\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_5bc736601558997b\",\"responseSetId\":\"response_set_21146a1d54fc554d\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/executable\"}]},\"exec_065dd229fcf48edd\":{\"id\":\"exec_065dd229fcf48edd\",\"protocol\":\"http\",\"capabilityId\":\"cap_d9f4f2f8f055444a\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/events\",\"pathParameterIds\":[\"param_479a0c3a287d7744\"],\"queryParameterIds\":[\"param_035da1bb531ef9a3\",\"param_6632f1419875fcbd\",\"param_a72079d429c74417\",\"param_59244e6733ea1611\",\"param_5357874bc978fe80\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_dbad99b5fa389efc\",\"responseSetId\":\"response_set_57c21c87af2ab09f\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/executable\"}]},\"exec_cb6e33867ff430f4\":{\"id\":\"exec_cb6e33867ff430f4\",\"protocol\":\"http\",\"capabilityId\":\"cap_ac9c8a3188151c96\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"calendars/{calendarId}/events/{eventId}/instances\",\"pathParameterIds\":[\"param_99911e24846f8dca\",\"param_e102125019af7b35\"],\"queryParameterIds\":[\"param_66dbaa4bc12ad1a5\",\"param_89e1aa16ec1b3de7\",\"param_a890ae73cb3700c3\",\"param_4d498314056cdfe3\",\"param_da7e13c9c305f9ed\",\"param_627bb5704af8cc49\",\"param_fcdf5d0bde28f776\",\"param_3ea41f75bb0dc0d6\",\"param_34eba3783d51cbcd\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_cdd0944b572401d7\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/executable\"}]},\"exec_49b384d6d175ef49\":{\"id\":\"exec_49b384d6d175ef49\",\"protocol\":\"http\",\"capabilityId\":\"cap_e7eabd4383663719\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"calendars/{calendarId}/events\",\"pathParameterIds\":[\"param_70109dd5984bb284\"],\"queryParameterIds\":[\"param_851564caa6a1eef8\",\"param_6e51ccd484fb4fe8\",\"param_702e7bdb3c5e88d6\",\"param_43361ea32cf5eb32\",\"param_53d62b41fae98de9\",\"param_39c62be47def83a1\",\"param_c9679eeffff63321\",\"param_c1e644e174d7e8f8\",\"param_eb12017474790432\",\"param_c80b2d8edd9c6703\",\"param_b12c80a9b39fe3cf\",\"param_f094b1f67ef8c5af\",\"param_42d590cc523d32f9\",\"param_d38dddc58ca55163\",\"param_67a592b58e1e78e3\",\"param_cc4822fb5b81fda1\",\"param_2bac9366fea24b65\",\"param_d059d5812368621b\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_6fca7bd2b199870d\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/executable\"}]},\"exec_0c3ee632da59e21a\":{\"id\":\"exec_0c3ee632da59e21a\",\"protocol\":\"http\",\"capabilityId\":\"cap_bec2190ba718f46d\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/events/{eventId}/move\",\"pathParameterIds\":[\"param_120afbcde7fe9d3a\",\"param_0da26325d3c2613e\"],\"queryParameterIds\":[\"param_0719b9f3c1fd07ce\",\"param_dd15ae7ed0c2bb83\",\"param_15e6d27124a3c9b6\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_43b9dc0bffbd626b\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/executable\"}]},\"exec_e3e657a8a6bd04c9\":{\"id\":\"exec_e3e657a8a6bd04c9\",\"protocol\":\"http\",\"capabilityId\":\"cap_0d4436100c00d14b\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PATCH\",\"pathTemplate\":\"calendars/{calendarId}/events/{eventId}\",\"pathParameterIds\":[\"param_fcc4987592c42c53\",\"param_a476486cc443a3e1\"],\"queryParameterIds\":[\"param_b6a591e4f8414035\",\"param_5981b18c5886dc7a\",\"param_b6523e5adce05f6b\",\"param_9a945bc213edb3f3\",\"param_23f7a1541c4f4f2e\",\"param_4d9f811fa5167432\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_7b1a8bbb0bab6c38\",\"responseSetId\":\"response_set_b4d24232cfcf1416\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/executable\"}]},\"exec_968693949b0ca233\":{\"id\":\"exec_968693949b0ca233\",\"protocol\":\"http\",\"capabilityId\":\"cap_4f77c18bf7dd0698\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/events/quickAdd\",\"pathParameterIds\":[\"param_eecc10d52c900e9e\"],\"queryParameterIds\":[\"param_43b25dd10c781757\",\"param_a1dee2df407a2d7a\",\"param_5244a6a0ff75f939\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_bf5a87bcdb426125\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/executable\"}]},\"exec_a8384dafdc65452e\":{\"id\":\"exec_a8384dafdc65452e\",\"protocol\":\"http\",\"capabilityId\":\"cap_18ace1bad16245c1\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"PUT\",\"pathTemplate\":\"calendars/{calendarId}/events/{eventId}\",\"pathParameterIds\":[\"param_fea5b4c780b5bd58\",\"param_2feeaf973cfabdf3\"],\"queryParameterIds\":[\"param_0c4d811925c3f596\",\"param_40786c3d98e2bd4c\",\"param_d3dbf562cd4cc592\",\"param_41d628f575abdff6\",\"param_919a916bd117022c\",\"param_c89673fe2b895ce4\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_16e159b8907b5434\",\"responseSetId\":\"response_set_9ec99e4659d6300c\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/executable\"}]},\"exec_70a90d49603f1f1a\":{\"id\":\"exec_70a90d49603f1f1a\",\"protocol\":\"http\",\"capabilityId\":\"cap_653a2d99bdca0bbc\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"calendars/{calendarId}/events/watch\",\"pathParameterIds\":[\"param_07ed382122c503b0\"],\"queryParameterIds\":[\"param_20e4abbc072bdf25\",\"param_b14ca7b98232b887\",\"param_75fec3bd2c123866\",\"param_a09ca9466c5c38e1\",\"param_0ebc7aaa730f0da8\",\"param_a38119650a77a4bb\",\"param_d38bcc3c0cba0d92\",\"param_3d0630ed03ee0ba3\",\"param_34ecb262b4ae4c97\",\"param_623d0c5975f8bc42\",\"param_2d89c3d275125386\",\"param_c5f8955a1f7b7f3c\",\"param_e382ce6fc6a62ee2\",\"param_b15952abd08c1894\",\"param_25f83ab55ca4ebd0\",\"param_a1dd74a84118704a\",\"param_bc9237d272c92374\",\"param_67e67523051ae4e6\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_95d8195350f6fe13\",\"responseSetId\":\"response_set_fef50db45cf510cd\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/executable\"}]},\"exec_929c11009f3e6e93\":{\"id\":\"exec_929c11009f3e6e93\",\"protocol\":\"http\",\"capabilityId\":\"cap_f3a567d9e212312f\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"freeBusy\",\"pathParameterIds\":[],\"queryParameterIds\":[],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_f532df62cd1fc08e\",\"responseSetId\":\"response_set_1112408baf853fea\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/executable\"}]},\"exec_7c61fa456778c6e2\":{\"id\":\"exec_7c61fa456778c6e2\",\"protocol\":\"http\",\"capabilityId\":\"cap_623cff2cc64c5bf0\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"users/me/settings/{setting}\",\"pathParameterIds\":[\"param_523baf2f764ebc73\"],\"queryParameterIds\":[],\"headerParameterIds\":[],\"responseSetId\":\"response_set_89b0554e4d2b216a\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/executable\"}]},\"exec_974045d8b66ee830\":{\"id\":\"exec_974045d8b66ee830\",\"protocol\":\"http\",\"capabilityId\":\"cap_e0080d921757c650\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"GET\",\"pathTemplate\":\"users/me/settings\",\"pathParameterIds\":[],\"queryParameterIds\":[\"param_b44cdfa4fb88a43f\",\"param_4eb160198e2d8915\",\"param_67a2b125e37f645d\"],\"headerParameterIds\":[],\"responseSetId\":\"response_set_f4cb772203ee8e9d\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/executable\"}]},\"exec_1032b3b4916261b0\":{\"id\":\"exec_1032b3b4916261b0\",\"protocol\":\"http\",\"capabilityId\":\"cap_c9a6b731ec208fc1\",\"scopeId\":\"scope_service_3088a953c6f2a8aa\",\"method\":\"POST\",\"pathTemplate\":\"users/me/settings/watch\",\"pathParameterIds\":[],\"queryParameterIds\":[\"param_e4623cc9d4016099\",\"param_a7a03ea2440d4817\",\"param_8303fd62c8755eab\"],\"headerParameterIds\":[],\"requestBodyId\":\"request_body_ae33cb25af8eb947\",\"responseSetId\":\"response_set_4cd1baae0184d469\",\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/executable\"}]}},\"responseSets\":{\"response_set_940c4260f62ef0fe\":{\"id\":\"response_set_940c4260f62ef0fe\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_471db4ec66f0f0fb\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.delete/responseSet\"}]},\"response_set_e516c7e218d47035\":{\"id\":\"response_set_e516c7e218d47035\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_4d903baef2f6e4ff\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.get/responseSet\"}]},\"response_set_31a38fd13cfceaf9\":{\"id\":\"response_set_31a38fd13cfceaf9\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_2c7783d069126a63\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.insert/responseSet\"}]},\"response_set_c52eec714813bbac\":{\"id\":\"response_set_c52eec714813bbac\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_ff70a66f04000bd1\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.list/responseSet\"}]},\"response_set_57474de9fcfae806\":{\"id\":\"response_set_57474de9fcfae806\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_3e1a7bc02964b694\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.patch/responseSet\"}]},\"response_set_7997fccf720d7d12\":{\"id\":\"response_set_7997fccf720d7d12\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_b8a0c727756a936c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.update/responseSet\"}]},\"response_set_b593507cf998203e\":{\"id\":\"response_set_b593507cf998203e\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_f6c2dfea21888d6f\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/acl.watch/responseSet\"}]},\"response_set_e8afd9e8ef5d5dc1\":{\"id\":\"response_set_e8afd9e8ef5d5dc1\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_9e9231e118b48dbf\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.delete/responseSet\"}]},\"response_set_05f1b9c14a0f5fb7\":{\"id\":\"response_set_05f1b9c14a0f5fb7\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_1cd437418aa08fe2\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.get/responseSet\"}]},\"response_set_f1d6718b59ac24fb\":{\"id\":\"response_set_f1d6718b59ac24fb\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_e3a6143db2e03c18\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/responseSet\"}]},\"response_set_6a1c6e8faa666ede\":{\"id\":\"response_set_6a1c6e8faa666ede\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_c09378fb89eced1c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.list/responseSet\"}]},\"response_set_955d99fda0ba4dcd\":{\"id\":\"response_set_955d99fda0ba4dcd\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_99e53c62c1052bfe\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/responseSet\"}]},\"response_set_35443d9e9c30cd88\":{\"id\":\"response_set_35443d9e9c30cd88\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_b5c69a9694d6070b\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/responseSet\"}]},\"response_set_9f7aa42886b76c21\":{\"id\":\"response_set_9f7aa42886b76c21\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_c7a2eafdc5c99178\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.watch/responseSet\"}]},\"response_set_ca4a4c5e15233531\":{\"id\":\"response_set_ca4a4c5e15233531\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_b5bf0d1134490ee8\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.clear/responseSet\"}]},\"response_set_23f0ab9617bc6b9d\":{\"id\":\"response_set_23f0ab9617bc6b9d\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_0b9905c4a74c8ba4\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.delete/responseSet\"}]},\"response_set_c1d9a3918da0a024\":{\"id\":\"response_set_c1d9a3918da0a024\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_3945632f075b1614\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.get/responseSet\"}]},\"response_set_953577feeb38035b\":{\"id\":\"response_set_953577feeb38035b\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_2db08056adefca97\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/responseSet\"}]},\"response_set_fa7cffbedeaadc17\":{\"id\":\"response_set_fa7cffbedeaadc17\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_4449f8126cd6253f\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/responseSet\"}]},\"response_set_f0a42fa8d665bb51\":{\"id\":\"response_set_f0a42fa8d665bb51\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_896a2168ace1b3dc\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/responseSet\"}]},\"response_set_8e21b855438306f1\":{\"id\":\"response_set_8e21b855438306f1\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_35929b9fe1764fc8\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/channels.stop/responseSet\"}]},\"response_set_966e41319371efc1\":{\"id\":\"response_set_966e41319371efc1\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_400a9e370909fc9a\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/colors.get/responseSet\"}]},\"response_set_1986faa167b4799b\":{\"id\":\"response_set_1986faa167b4799b\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_8b48915acd5174b9\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.delete/responseSet\"}]},\"response_set_8629fce88ac65a1a\":{\"id\":\"response_set_8629fce88ac65a1a\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_5f22f8ecd98dd95a\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.get/responseSet\"}]},\"response_set_21146a1d54fc554d\":{\"id\":\"response_set_21146a1d54fc554d\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_5bc736601558997b\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/responseSet\"}]},\"response_set_57c21c87af2ab09f\":{\"id\":\"response_set_57c21c87af2ab09f\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_dbad99b5fa389efc\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/responseSet\"}]},\"response_set_cdd0944b572401d7\":{\"id\":\"response_set_cdd0944b572401d7\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_28ca93f313d1b5df\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.instances/responseSet\"}]},\"response_set_6fca7bd2b199870d\":{\"id\":\"response_set_6fca7bd2b199870d\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_e90691855782b8d8\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.list/responseSet\"}]},\"response_set_43b9dc0bffbd626b\":{\"id\":\"response_set_43b9dc0bffbd626b\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_ea5e28b5220cae6c\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.move/responseSet\"}]},\"response_set_b4d24232cfcf1416\":{\"id\":\"response_set_b4d24232cfcf1416\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_7b1a8bbb0bab6c38\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/responseSet\"}]},\"response_set_bf5a87bcdb426125\":{\"id\":\"response_set_bf5a87bcdb426125\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_910737eb065350c5\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.quickAdd/responseSet\"}]},\"response_set_9ec99e4659d6300c\":{\"id\":\"response_set_9ec99e4659d6300c\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_16e159b8907b5434\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/responseSet\"}]},\"response_set_fef50db45cf510cd\":{\"id\":\"response_set_fef50db45cf510cd\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_95d8195350f6fe13\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.watch/responseSet\"}]},\"response_set_1112408baf853fea\":{\"id\":\"response_set_1112408baf853fea\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_f532df62cd1fc08e\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/responseSet\"}]},\"response_set_89b0554e4d2b216a\":{\"id\":\"response_set_89b0554e4d2b216a\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_bf71b027a1512161\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.get/responseSet\"}]},\"response_set_f4cb772203ee8e9d\":{\"id\":\"response_set_f4cb772203ee8e9d\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_a94f36fd9dd3bc2f\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.list/responseSet\"}]},\"response_set_4cd1baae0184d469\":{\"id\":\"response_set_4cd1baae0184d469\",\"variants\":[{\"match\":{\"kind\":\"range\",\"value\":\"2XX\"},\"responseId\":\"response_ae33cb25af8eb947\"}],\"synthetic\":false,\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/settings.watch/responseSet\"}]}},\"diagnostics\":{\"diag_fdaca57dcfdf1294\":{\"id\":\"diag_fdaca57dcfdf1294\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/CalendarNotification\",\"relatedSymbolIds\":[\"shape_7685d83bcd59d435\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/notificationSettings/properties/notifications/items\"}]},\"diag_b8352d2ce9332696\":{\"id\":\"diag_b8352d2ce9332696\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceProperties\",\"relatedSymbolIds\":[\"shape_8ebbe75cc189ee84\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/conferenceProperties\"}]},\"diag_bd128538f1700633\":{\"id\":\"diag_bd128538f1700633\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.insert/requestBody/properties/defaultReminders/items\"}]},\"diag_95bbd0537a40464e\":{\"id\":\"diag_95bbd0537a40464e\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/CalendarNotification\",\"relatedSymbolIds\":[\"shape_7685d83bcd59d435\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/requestBody/properties/notificationSettings/properties/notifications/items\"}]},\"diag_f1d97b58b43b7b57\":{\"id\":\"diag_f1d97b58b43b7b57\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceProperties\",\"relatedSymbolIds\":[\"shape_8ebbe75cc189ee84\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/requestBody/properties/conferenceProperties\"}]},\"diag_068ee598aa6454d6\":{\"id\":\"diag_068ee598aa6454d6\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.patch/requestBody/properties/defaultReminders/items\"}]},\"diag_ea212c3aad57ac32\":{\"id\":\"diag_ea212c3aad57ac32\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/CalendarNotification\",\"relatedSymbolIds\":[\"shape_7685d83bcd59d435\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/requestBody/properties/notificationSettings/properties/notifications/items\"}]},\"diag_b5b9fbab23f4e09e\":{\"id\":\"diag_b5b9fbab23f4e09e\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceProperties\",\"relatedSymbolIds\":[\"shape_8ebbe75cc189ee84\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/requestBody/properties/conferenceProperties\"}]},\"diag_5cb888fdf05b7c71\":{\"id\":\"diag_5cb888fdf05b7c71\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendarList.update/requestBody/properties/defaultReminders/items\"}]},\"diag_2bfbdbfdfbd68437\":{\"id\":\"diag_2bfbdbfdfbd68437\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceProperties\",\"relatedSymbolIds\":[\"shape_8ebbe75cc189ee84\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.insert/requestBody/properties/conferenceProperties\"}]},\"diag_4bc0d8d06c2ff911\":{\"id\":\"diag_4bc0d8d06c2ff911\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceProperties\",\"relatedSymbolIds\":[\"shape_8ebbe75cc189ee84\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.patch/requestBody/properties/conferenceProperties\"}]},\"diag_a2c321df5235ef42\":{\"id\":\"diag_a2c321df5235ef42\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceProperties\",\"relatedSymbolIds\":[\"shape_8ebbe75cc189ee84\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/calendars.update/requestBody/properties/conferenceProperties\"}]},\"diag_e6f9feb7a990fc4b\":{\"id\":\"diag_e6f9feb7a990fc4b\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventBirthdayProperties\",\"relatedSymbolIds\":[\"shape_e53e2434a170fe98\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/birthdayProperties\"}]},\"diag_443d649539bf3756\":{\"id\":\"diag_443d649539bf3756\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/reminders/properties/overrides/items\"}]},\"diag_1028ae05f892fc3c\":{\"id\":\"diag_1028ae05f892fc3c\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/originalStartTime\"}]},\"diag_3c770c013e8efcab\":{\"id\":\"diag_3c770c013e8efcab\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventOutOfOfficeProperties\",\"relatedSymbolIds\":[\"shape_6d1fdc9c995b3bfc\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/outOfOfficeProperties\"}]},\"diag_8a8955a02ca6c9da\":{\"id\":\"diag_8a8955a02ca6c9da\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttachment\",\"relatedSymbolIds\":[\"shape_c217cb50f473d6e8\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/attachments/items\"}]},\"diag_bff042b4f5f54e82\":{\"id\":\"diag_bff042b4f5f54e82\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/end\"}]},\"diag_fd861fd2ac4906ef\":{\"id\":\"diag_fd861fd2ac4906ef\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/start\"}]},\"diag_de64dc5888f9fe84\":{\"id\":\"diag_de64dc5888f9fe84\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttendee\",\"relatedSymbolIds\":[\"shape_5a52d993e5987dce\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/attendees/items\"}]},\"diag_9b76b139c9ceddb2\":{\"id\":\"diag_9b76b139c9ceddb2\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventFocusTimeProperties\",\"relatedSymbolIds\":[\"shape_cdb805a94a2cacb6\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/focusTimeProperties\"}]},\"diag_6999f80a94c5ea2f\":{\"id\":\"diag_6999f80a94c5ea2f\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceData\",\"relatedSymbolIds\":[\"shape_729aa44fe0ab3b09\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/conferenceData\"}]},\"diag_804ecd9c4ac44e85\":{\"id\":\"diag_804ecd9c4ac44e85\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventWorkingLocationProperties\",\"relatedSymbolIds\":[\"shape_3ed30949d86c7d20\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.import/requestBody/properties/workingLocationProperties\"}]},\"diag_f247084f2bee953c\":{\"id\":\"diag_f247084f2bee953c\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventBirthdayProperties\",\"relatedSymbolIds\":[\"shape_e53e2434a170fe98\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/birthdayProperties\"}]},\"diag_0c5aa08412ceb5ca\":{\"id\":\"diag_0c5aa08412ceb5ca\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/reminders/properties/overrides/items\"}]},\"diag_d1ed71543a62aaab\":{\"id\":\"diag_d1ed71543a62aaab\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/originalStartTime\"}]},\"diag_80cf2d66c37c3293\":{\"id\":\"diag_80cf2d66c37c3293\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventOutOfOfficeProperties\",\"relatedSymbolIds\":[\"shape_6d1fdc9c995b3bfc\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/outOfOfficeProperties\"}]},\"diag_0fd30012799a4af4\":{\"id\":\"diag_0fd30012799a4af4\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttachment\",\"relatedSymbolIds\":[\"shape_c217cb50f473d6e8\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/attachments/items\"}]},\"diag_b21822e80aa79dff\":{\"id\":\"diag_b21822e80aa79dff\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/end\"}]},\"diag_de84b2163f4ca406\":{\"id\":\"diag_de84b2163f4ca406\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/start\"}]},\"diag_e3f1ecbe30427279\":{\"id\":\"diag_e3f1ecbe30427279\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttendee\",\"relatedSymbolIds\":[\"shape_5a52d993e5987dce\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/attendees/items\"}]},\"diag_1f09d312d559e9f7\":{\"id\":\"diag_1f09d312d559e9f7\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventFocusTimeProperties\",\"relatedSymbolIds\":[\"shape_cdb805a94a2cacb6\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/focusTimeProperties\"}]},\"diag_f270b8658774a7a1\":{\"id\":\"diag_f270b8658774a7a1\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceData\",\"relatedSymbolIds\":[\"shape_729aa44fe0ab3b09\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/conferenceData\"}]},\"diag_97e65f0adf73c4a0\":{\"id\":\"diag_97e65f0adf73c4a0\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventWorkingLocationProperties\",\"relatedSymbolIds\":[\"shape_3ed30949d86c7d20\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.insert/requestBody/properties/workingLocationProperties\"}]},\"diag_dd278dbf32f7f2af\":{\"id\":\"diag_dd278dbf32f7f2af\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventBirthdayProperties\",\"relatedSymbolIds\":[\"shape_e53e2434a170fe98\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/birthdayProperties\"}]},\"diag_14bd7a3c22bcd295\":{\"id\":\"diag_14bd7a3c22bcd295\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/reminders/properties/overrides/items\"}]},\"diag_0e4f0c2848af55e7\":{\"id\":\"diag_0e4f0c2848af55e7\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/originalStartTime\"}]},\"diag_90413c0edfdfc8db\":{\"id\":\"diag_90413c0edfdfc8db\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventOutOfOfficeProperties\",\"relatedSymbolIds\":[\"shape_6d1fdc9c995b3bfc\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/outOfOfficeProperties\"}]},\"diag_1529db5e24fdab6e\":{\"id\":\"diag_1529db5e24fdab6e\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttachment\",\"relatedSymbolIds\":[\"shape_c217cb50f473d6e8\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/attachments/items\"}]},\"diag_99cf0da925055502\":{\"id\":\"diag_99cf0da925055502\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/end\"}]},\"diag_e7e76ec5e0bc2448\":{\"id\":\"diag_e7e76ec5e0bc2448\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/start\"}]},\"diag_0788968f6c93b5b1\":{\"id\":\"diag_0788968f6c93b5b1\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttendee\",\"relatedSymbolIds\":[\"shape_5a52d993e5987dce\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/attendees/items\"}]},\"diag_b615c7f6a4ada7ff\":{\"id\":\"diag_b615c7f6a4ada7ff\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventFocusTimeProperties\",\"relatedSymbolIds\":[\"shape_cdb805a94a2cacb6\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/focusTimeProperties\"}]},\"diag_b50e4f868ef3034a\":{\"id\":\"diag_b50e4f868ef3034a\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceData\",\"relatedSymbolIds\":[\"shape_729aa44fe0ab3b09\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/conferenceData\"}]},\"diag_b9baa4a2d26c66b7\":{\"id\":\"diag_b9baa4a2d26c66b7\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventWorkingLocationProperties\",\"relatedSymbolIds\":[\"shape_3ed30949d86c7d20\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.patch/requestBody/properties/workingLocationProperties\"}]},\"diag_e4e2de6d59b2adf7\":{\"id\":\"diag_e4e2de6d59b2adf7\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventBirthdayProperties\",\"relatedSymbolIds\":[\"shape_e53e2434a170fe98\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/birthdayProperties\"}]},\"diag_a2ff89c0bc2bb9d8\":{\"id\":\"diag_a2ff89c0bc2bb9d8\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventReminder\",\"relatedSymbolIds\":[\"shape_f5a032e784e5c459\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/reminders/properties/overrides/items\"}]},\"diag_d90a881ab9e2c194\":{\"id\":\"diag_d90a881ab9e2c194\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/originalStartTime\"}]},\"diag_677b9de82ba614ae\":{\"id\":\"diag_677b9de82ba614ae\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventOutOfOfficeProperties\",\"relatedSymbolIds\":[\"shape_6d1fdc9c995b3bfc\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/outOfOfficeProperties\"}]},\"diag_33c000631c6c2d2e\":{\"id\":\"diag_33c000631c6c2d2e\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttachment\",\"relatedSymbolIds\":[\"shape_c217cb50f473d6e8\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/attachments/items\"}]},\"diag_ac748dee75aaffd8\":{\"id\":\"diag_ac748dee75aaffd8\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/end\"}]},\"diag_b204eadb0c85de3b\":{\"id\":\"diag_b204eadb0c85de3b\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventDateTime\",\"relatedSymbolIds\":[\"shape_63a1c24586eeb1bf\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/start\"}]},\"diag_301ca1d6e81123de\":{\"id\":\"diag_301ca1d6e81123de\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventAttendee\",\"relatedSymbolIds\":[\"shape_5a52d993e5987dce\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/attendees/items\"}]},\"diag_37cc2b21d52cbb75\":{\"id\":\"diag_37cc2b21d52cbb75\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventFocusTimeProperties\",\"relatedSymbolIds\":[\"shape_cdb805a94a2cacb6\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/focusTimeProperties\"}]},\"diag_2e79907c3e4317aa\":{\"id\":\"diag_2e79907c3e4317aa\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/ConferenceData\",\"relatedSymbolIds\":[\"shape_729aa44fe0ab3b09\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/conferenceData\"}]},\"diag_08393b5f1f1dff8e\":{\"id\":\"diag_08393b5f1f1dff8e\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/EventWorkingLocationProperties\",\"relatedSymbolIds\":[\"shape_3ed30949d86c7d20\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/events.update/requestBody/properties/workingLocationProperties\"}]},\"diag_33f7500663f438e8\":{\"id\":\"diag_33f7500663f438e8\",\"level\":\"warning\",\"code\":\"unresolved_ref\",\"message\":\"Unresolved JSON schema ref #/$defs/google/FreeBusyRequestItem\",\"relatedSymbolIds\":[\"shape_3f769d3d74e25eb5\"],\"provenance\":[{\"relation\":\"declared\",\"documentId\":\"doc_3c24a6731267de91\",\"pointer\":\"#/googleDiscovery/freebusy.query/requestBody/properties/items/items\"}]}}}}}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/__fixtures__/v1.2.3-google-calendar-workspace/.executor/executor.jsonc",
    "content": "{\n  \"sources\": {\n    \"google-calendar\": {\n      \"name\": \"Google Calendar\",\n      \"namespace\": \"google.calendar\",\n      \"connection\": {\n        \"endpoint\": \"https://calendar-json.googleapis.com/$discovery/rest?version=v3\"\n      },\n      \"kind\": \"google_discovery\",\n      \"binding\": {\n        \"service\": \"calendar\",\n        \"version\": \"v3\",\n        \"discoveryUrl\": \"https://calendar-json.googleapis.com/$discovery/rest?version=v3\",\n        \"defaultHeaders\": null,\n        \"scopes\": []\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/__fixtures__/v1.2.3-google-calendar-workspace/.executor/state/workspace-state.json",
    "content": "{\n  \"version\": 1,\n  \"sources\": {\n    \"google-calendar\": {\n      \"status\": \"connected\",\n      \"lastError\": null,\n      \"sourceHash\": \"166ac818364c015b739f3aa6979000f1e2df8ecf6762975e89e3873316e07059\",\n      \"createdAt\": 1773634384004,\n      \"updatedAt\": 1773634395669\n    }\n  },\n  \"policies\": {}\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/__fixtures__/v1.2.3-google-calendar-workspace/fixture.json",
    "content": "{\n  \"schemaVersion\": 1,\n  \"kind\": \"release-workspace\",\n  \"id\": \"v1.2.3-google-calendar\",\n  \"releaseVersion\": \"v1.2.3\",\n  \"sourceId\": \"google-calendar\",\n  \"artifactExpectation\": \"cache-miss\",\n  \"description\": \"Google Calendar workspace captured from the v1.2.3 release line.\"\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/auth-artifacts.ts",
    "content": "import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport {\n  type AccountId,\n  AuthGrantSetJsonSchema,\n  McpOAuthAuthArtifactConfigJsonSchema,\n  McpOAuthAuthArtifactKind,\n  ProviderGrantRefAuthArtifactConfigJsonSchema,\n  ProviderGrantRefAuthArtifactKind,\n  RequestPlacementTemplatesJsonSchema,\n  RefreshableOAuth2AuthorizedUserAuthArtifactConfigJsonSchema,\n  RefreshableOAuth2AuthorizedUserAuthArtifactKind,\n  StaticBearerAuthArtifactConfigJsonSchema,\n  StaticBearerAuthArtifactKind,\n  StaticOAuth2AuthArtifactConfigJsonSchema,\n  StaticOAuth2AuthArtifactKind,\n  StaticPlacementsAuthArtifactConfigJsonSchema,\n  StaticPlacementsAuthArtifactKind,\n  authArtifactSecretRefs,\n  decodeAuthGrantSet,\n  decodeBuiltInAuthArtifactConfig,\n  decodeMcpOAuthAuthArtifactConfig,\n  decodeProviderGrantRefAuthArtifactConfig,\n  type AuthArtifact,\n  type CredentialSlot,\n  type RequestPlacement,\n  type RequestPlacementPart,\n  type SecretRef,\n  type Source,\n  type SourceAuth,\n} from \"#schema\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport type {\n  ResolveSecretMaterial,\n  SecretMaterialResolveContext,\n} from \"../local/secret-material-providers\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nexport type ResolvedSourceAuthMaterial = {\n  placements: ReadonlyArray<RequestPlacement>;\n  headers: Readonly<Record<string, string>>;\n  queryParams: Readonly<Record<string, string>>;\n  cookies: Readonly<Record<string, string>>;\n  bodyValues: Readonly<Record<string, string>>;\n  expiresAt: number | null;\n  refreshAfter: number | null;\n  authProvider?: OAuthClientProvider | undefined;\n};\n\nconst emptyResolvedAuthMaterial: ResolvedSourceAuthMaterial = {\n  placements: [],\n  headers: {},\n  queryParams: {},\n  cookies: {},\n  bodyValues: {},\n  expiresAt: null,\n  refreshAfter: null,\n  authProvider: undefined,\n};\n\nconst encodeStaticBearerAuthArtifactConfig = Schema.encodeSync(\n  StaticBearerAuthArtifactConfigJsonSchema,\n);\n\nconst encodeStaticOAuth2AuthArtifactConfig = Schema.encodeSync(\n  StaticOAuth2AuthArtifactConfigJsonSchema,\n);\n\nconst encodeStaticPlacementsAuthArtifactConfig = Schema.encodeSync(\n  StaticPlacementsAuthArtifactConfigJsonSchema,\n);\nconst encodeRefreshableOAuth2AuthorizedUserAuthArtifactConfig = Schema.encodeSync(\n  RefreshableOAuth2AuthorizedUserAuthArtifactConfigJsonSchema,\n);\nconst encodeProviderGrantRefAuthArtifactConfig = Schema.encodeSync(\n  ProviderGrantRefAuthArtifactConfigJsonSchema,\n);\nconst encodeMcpOAuthAuthArtifactConfig = Schema.encodeSync(\n  McpOAuthAuthArtifactConfigJsonSchema,\n);\n\nconst decodeRequestPlacementTemplates = Schema.decodeUnknownEither(\n  RequestPlacementTemplatesJsonSchema,\n);\nconst encodeAuthGrantSet = Schema.encodeSync(AuthGrantSetJsonSchema);\n\nconst mergePlacement = (acc: {\n  headers: Record<string, string>;\n  queryParams: Record<string, string>;\n  cookies: Record<string, string>;\n  bodyValues: Record<string, string>;\n}, placement: RequestPlacement) => {\n  switch (placement.location) {\n    case \"header\":\n      acc.headers[placement.name] = placement.value;\n      break;\n    case \"query\":\n      acc.queryParams[placement.name] = placement.value;\n      break;\n    case \"cookie\":\n      acc.cookies[placement.name] = placement.value;\n      break;\n    case \"body\":\n      acc.bodyValues[placement.path] = placement.value;\n      break;\n  }\n};\n\nconst summarizeResolvedPlacements = (placements: ReadonlyArray<RequestPlacement>, input: {\n  expiresAt?: number | null;\n  refreshAfter?: number | null;\n} = {}): ResolvedSourceAuthMaterial => {\n  const acc = {\n    headers: {} as Record<string, string>,\n    queryParams: {} as Record<string, string>,\n    cookies: {} as Record<string, string>,\n    bodyValues: {} as Record<string, string>,\n  };\n\n  for (const placement of placements) {\n    mergePlacement(acc, placement);\n  }\n\n  return {\n    placements,\n    headers: acc.headers,\n    queryParams: acc.queryParams,\n    cookies: acc.cookies,\n    bodyValues: acc.bodyValues,\n    expiresAt: input.expiresAt ?? null,\n    refreshAfter: input.refreshAfter ?? null,\n  };\n};\n\nconst resolvePlacementParts = (input: {\n  parts: ReadonlyArray<RequestPlacementPart>;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<string, Error, never> =>\n  Effect.map(\n    Effect.forEach(input.parts, (part) =>\n      part.kind === \"literal\"\n        ? Effect.succeed(part.value)\n        : input.resolveSecretMaterial({\n            ref: part.ref,\n            context: input.context,\n          }), { discard: false }),\n    (values) => values.join(\"\"),\n  );\n\nexport const authArtifactFromSourceAuth = (input: {\n  source: Source;\n  auth: SourceAuth;\n  slot: CredentialSlot;\n  actorAccountId?: AccountId | null;\n  existingAuthArtifactId?: AuthArtifact[\"id\"] | null;\n}): AuthArtifact | null => {\n  if (input.auth.kind === \"none\") {\n    return null;\n  }\n\n  const id = input.existingAuthArtifactId ?? `auth_art_${crypto.randomUUID()}` as AuthArtifact[\"id\"];\n  const grantSetJson =\n    input.auth.kind === \"oauth2_authorized_user\"\n      ? encodeAuthGrantSetJson(input.auth.grantSet)\n      : null;\n\n  if (input.auth.kind === \"bearer\") {\n    return {\n      id,\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      actorAccountId: input.actorAccountId ?? null,\n      slot: input.slot,\n      artifactKind: StaticBearerAuthArtifactKind,\n      configJson: encodeStaticBearerAuthArtifactConfig({\n        headerName: input.auth.headerName,\n        prefix: input.auth.prefix,\n        token: input.auth.token,\n      }),\n      grantSetJson,\n      createdAt: input.source.createdAt,\n      updatedAt: input.source.updatedAt,\n    };\n  }\n\n  if (input.auth.kind === \"oauth2_authorized_user\") {\n    return {\n      id,\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      actorAccountId: input.actorAccountId ?? null,\n      slot: input.slot,\n      artifactKind: RefreshableOAuth2AuthorizedUserAuthArtifactKind,\n      configJson: encodeRefreshableOAuth2AuthorizedUserAuthArtifactConfig({\n        headerName: input.auth.headerName,\n        prefix: input.auth.prefix,\n        tokenEndpoint: input.auth.tokenEndpoint,\n        clientId: input.auth.clientId,\n        clientAuthentication: input.auth.clientAuthentication,\n        clientSecret: input.auth.clientSecret,\n        refreshToken: input.auth.refreshToken,\n      }),\n      grantSetJson,\n      createdAt: input.source.createdAt,\n      updatedAt: input.source.updatedAt,\n    };\n  }\n\n  if (input.auth.kind === \"provider_grant_ref\") {\n    return {\n      id,\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      actorAccountId: input.actorAccountId ?? null,\n      slot: input.slot,\n      artifactKind: ProviderGrantRefAuthArtifactKind,\n      configJson: encodeProviderGrantRefAuthArtifactConfig({\n        grantId: input.auth.grantId,\n        providerKey: input.auth.providerKey,\n        requiredScopes: [...input.auth.requiredScopes],\n        headerName: input.auth.headerName,\n        prefix: input.auth.prefix,\n      }),\n      grantSetJson,\n      createdAt: input.source.createdAt,\n      updatedAt: input.source.updatedAt,\n    };\n  }\n\n  if (input.auth.kind === \"mcp_oauth\") {\n    return {\n      id,\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      actorAccountId: input.actorAccountId ?? null,\n      slot: input.slot,\n      artifactKind: McpOAuthAuthArtifactKind,\n      configJson: encodeMcpOAuthAuthArtifactConfig({\n        redirectUri: input.auth.redirectUri,\n        accessToken: input.auth.accessToken,\n        refreshToken: input.auth.refreshToken,\n        tokenType: input.auth.tokenType,\n        expiresIn: input.auth.expiresIn,\n        scope: input.auth.scope,\n        resourceMetadataUrl: input.auth.resourceMetadataUrl,\n        authorizationServerUrl: input.auth.authorizationServerUrl,\n        resourceMetadataJson: input.auth.resourceMetadataJson,\n        authorizationServerMetadataJson: input.auth.authorizationServerMetadataJson,\n        clientInformationJson: input.auth.clientInformationJson,\n      }),\n      grantSetJson,\n      createdAt: input.source.createdAt,\n      updatedAt: input.source.updatedAt,\n    };\n  }\n\n  return {\n    id,\n    workspaceId: input.source.workspaceId,\n    sourceId: input.source.id,\n    actorAccountId: input.actorAccountId ?? null,\n    slot: input.slot,\n    artifactKind: StaticOAuth2AuthArtifactKind,\n    configJson: encodeStaticOAuth2AuthArtifactConfig({\n      headerName: input.auth.headerName,\n      prefix: input.auth.prefix,\n      accessToken: input.auth.accessToken,\n      refreshToken: input.auth.refreshToken,\n    }),\n    grantSetJson,\n    createdAt: input.source.createdAt,\n    updatedAt: input.source.updatedAt,\n  };\n};\n\nexport const sourceAuthFromAuthArtifact = (artifact: AuthArtifact | null): SourceAuth => {\n  if (artifact === null) {\n    return { kind: \"none\" };\n  }\n\n  const providerGrantRefConfig = decodeProviderGrantRefAuthArtifactConfig(artifact);\n  if (providerGrantRefConfig !== null) {\n    return {\n      kind: \"provider_grant_ref\",\n      grantId: providerGrantRefConfig.grantId,\n      providerKey: providerGrantRefConfig.providerKey,\n      requiredScopes: [...providerGrantRefConfig.requiredScopes],\n      headerName: providerGrantRefConfig.headerName,\n      prefix: providerGrantRefConfig.prefix,\n    };\n  }\n\n  const mcpOAuthConfig = decodeMcpOAuthAuthArtifactConfig(artifact);\n  if (mcpOAuthConfig !== null) {\n    return {\n      kind: \"mcp_oauth\",\n      redirectUri: mcpOAuthConfig.redirectUri,\n      accessToken: mcpOAuthConfig.accessToken,\n      refreshToken: mcpOAuthConfig.refreshToken,\n      tokenType: mcpOAuthConfig.tokenType,\n      expiresIn: mcpOAuthConfig.expiresIn,\n      scope: mcpOAuthConfig.scope,\n      resourceMetadataUrl: mcpOAuthConfig.resourceMetadataUrl,\n      authorizationServerUrl: mcpOAuthConfig.authorizationServerUrl,\n      resourceMetadataJson: mcpOAuthConfig.resourceMetadataJson,\n      authorizationServerMetadataJson: mcpOAuthConfig.authorizationServerMetadataJson,\n      clientInformationJson: mcpOAuthConfig.clientInformationJson,\n    };\n  }\n\n  const decoded = decodeBuiltInAuthArtifactConfig(artifact);\n  if (decoded === null) {\n    return { kind: \"none\" };\n  }\n\n  switch (decoded.artifactKind) {\n    case StaticBearerAuthArtifactKind:\n      return {\n        kind: \"bearer\",\n        headerName: decoded.config.headerName,\n        prefix: decoded.config.prefix,\n        token: decoded.config.token,\n      };\n    case StaticOAuth2AuthArtifactKind:\n      return {\n        kind: \"oauth2\",\n        headerName: decoded.config.headerName,\n        prefix: decoded.config.prefix,\n        accessToken: decoded.config.accessToken,\n        refreshToken: decoded.config.refreshToken,\n      };\n    case StaticPlacementsAuthArtifactKind:\n      return { kind: \"none\" };\n    case RefreshableOAuth2AuthorizedUserAuthArtifactKind:\n      return {\n        kind: \"oauth2_authorized_user\",\n        headerName: decoded.config.headerName,\n        prefix: decoded.config.prefix,\n        tokenEndpoint: decoded.config.tokenEndpoint,\n        clientId: decoded.config.clientId,\n        clientAuthentication: decoded.config.clientAuthentication,\n        clientSecret: decoded.config.clientSecret,\n        refreshToken: decoded.config.refreshToken,\n        grantSet: decodeAuthGrantSet(artifact.grantSetJson),\n      };\n  }\n};\n\nexport const authArtifactGrantSet = (artifact: Pick<AuthArtifact, \"grantSetJson\">): ReadonlyArray<string> | null =>\n  decodeAuthGrantSet(artifact.grantSetJson);\n\nexport const authArtifactSecretMaterialRefs = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n): ReadonlyArray<SecretRef> => authArtifactSecretRefs(artifact);\n\nexport const encodeStaticPlacementsArtifactConfig = (placements: ReadonlyArray<{\n  location: \"header\" | \"query\" | \"cookie\" | \"body\";\n  name?: string;\n  path?: string;\n  parts: ReadonlyArray<RequestPlacementPart>;\n}>): string =>\n  encodeStaticPlacementsAuthArtifactConfig({\n    placements: placements.map((placement) =>\n      placement.location === \"body\"\n        ? {\n            location: \"body\" as const,\n            path: placement.path ?? \"\",\n            parts: [...placement.parts],\n          }\n        : {\n            location: placement.location,\n            name: placement.name ?? \"\",\n            parts: [...placement.parts],\n          }),\n  });\n\nexport const encodeAuthGrantSetJson = (grantSet: ReadonlyArray<string> | null): string | null =>\n  grantSet === null ? null : encodeAuthGrantSet([...grantSet]);\n\nexport const resolveAuthArtifactMaterial = (input: {\n  artifact: AuthArtifact | null;\n  lease?: {\n    placementsTemplateJson: string;\n    expiresAt: number | null;\n    refreshAfter: number | null;\n  } | null;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<ResolvedSourceAuthMaterial, Error, never> =>\n  Effect.gen(function* () {\n    if (input.artifact === null) {\n      return emptyResolvedAuthMaterial;\n    }\n\n    const decoded = decodeBuiltInAuthArtifactConfig(input.artifact);\n    if (decoded !== null) {\n      switch (decoded.artifactKind) {\n        case StaticBearerAuthArtifactKind: {\n          const token = yield* input.resolveSecretMaterial({\n            ref: decoded.config.token,\n            context: input.context,\n          });\n\n          return summarizeResolvedPlacements([\n            {\n              location: \"header\",\n              name: decoded.config.headerName,\n              value: `${decoded.config.prefix}${token}`,\n            },\n          ]);\n        }\n        case StaticOAuth2AuthArtifactKind: {\n          const accessToken = yield* input.resolveSecretMaterial({\n            ref: decoded.config.accessToken,\n            context: input.context,\n          });\n\n          return summarizeResolvedPlacements([\n            {\n              location: \"header\",\n              name: decoded.config.headerName,\n              value: `${decoded.config.prefix}${accessToken}`,\n            },\n          ]);\n        }\n        case StaticPlacementsAuthArtifactKind: {\n          const placements = yield* Effect.forEach(decoded.config.placements, (placement) =>\n            Effect.map(\n              resolvePlacementParts({\n                parts: placement.parts,\n                resolveSecretMaterial: input.resolveSecretMaterial,\n                context: input.context,\n              }),\n              (value): RequestPlacement =>\n                placement.location === \"body\"\n                  ? {\n                      location: \"body\",\n                      path: placement.path,\n                      value,\n                    }\n                  : {\n                      location: placement.location,\n                      name: placement.name,\n                      value,\n                    },\n            ), { discard: false });\n\n          return summarizeResolvedPlacements(placements);\n        }\n        case RefreshableOAuth2AuthorizedUserAuthArtifactKind:\n          break;\n      }\n    }\n\n    const providerGrantRefConfig = decodeProviderGrantRefAuthArtifactConfig(input.artifact);\n    if (providerGrantRefConfig !== null) {\n      if (input.lease === null || input.lease === undefined) {\n        return yield* runtimeEffectError(\"auth/auth-artifacts\", `Provider grant auth artifact ${input.artifact.id} requires a lease`);\n      }\n    }\n\n    const mcpOAuthConfig = decodeMcpOAuthAuthArtifactConfig(input.artifact);\n    if (mcpOAuthConfig !== null) {\n      return {\n        ...emptyResolvedAuthMaterial,\n      };\n    }\n\n    if (input.lease === null || input.lease === undefined) {\n      return yield* runtimeEffectError(\"auth/auth-artifacts\", `Unsupported auth artifact kind: ${input.artifact.artifactKind}`);\n    }\n\n    const templatesEither = decodeRequestPlacementTemplates(\n      input.lease.placementsTemplateJson,\n    );\n    if (Either.isLeft(templatesEither)) {\n      return yield* runtimeEffectError(\"auth/auth-artifacts\", \n        `Invalid auth lease placements for artifact ${input.artifact.id}`,\n      );\n    }\n\n    const placements = yield* Effect.forEach(templatesEither.right, (placement) =>\n      Effect.map(\n        resolvePlacementParts({\n          parts: placement.parts,\n          resolveSecretMaterial: input.resolveSecretMaterial,\n          context: input.context,\n        }),\n        (value): RequestPlacement =>\n          placement.location === \"body\"\n            ? {\n                location: \"body\",\n                path: placement.path,\n                value,\n              }\n            : {\n                location: placement.location,\n                name: placement.name,\n                value,\n              },\n      ), { discard: false });\n\n    return summarizeResolvedPlacements(placements, {\n      expiresAt: input.lease.expiresAt,\n      refreshAfter: input.lease.refreshAfter,\n    });\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/auth-leases.ts",
    "content": "import type {\n  AuthArtifact,\n  AuthLease,\n  ProviderAuthGrant,\n  RequestPlacementTemplate,\n  SecretRef,\n} from \"#schema\";\nimport {\n  AuthLeaseIdSchema,\n  decodeMcpOAuthAuthArtifactConfig,\n  decodeProviderGrantRefAuthArtifactConfig,\n  RefreshableOAuth2AuthorizedUserAuthArtifactKind,\n  authLeaseSecretRefs,\n  decodeBuiltInAuthArtifactConfig,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\n\nimport type { ControlPlaneStoreShape } from \"../store\";\nimport { resolveAuthArtifactMaterial, type ResolvedSourceAuthMaterial } from \"./auth-artifacts\";\nimport {\n  createDefaultSecretMaterialDeleter,\n  createDefaultSecretMaterialStorer,\n  type ResolveSecretMaterial,\n  type SecretMaterialResolveContext,\n} from \"../local/secret-material-providers\";\nimport { refreshOAuth2AccessToken } from \"./oauth2-pkce\";\nimport type { OAuth2TokenResponse } from \"./oauth2-pkce\";\nimport { createPersistedMcpAuthProvider } from \"./mcp-auth-provider\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nconst LEASE_REFRESH_SKEW_MS = 60_000;\n\nconst encodeLeasePlacementTemplatesJson = (templates: ReadonlyArray<RequestPlacementTemplate>): string =>\n  JSON.stringify(templates);\n\nconst secretRefKey = (ref: SecretRef): string =>\n  `${ref.providerId}:${ref.handle}`;\n\nconst cleanupAuthLeaseSecretRefs = (\n  rows: ControlPlaneStoreShape,\n  input: {\n    previous: Pick<AuthLease, \"placementsTemplateJson\"> | null;\n    next: Pick<AuthLease, \"placementsTemplateJson\"> | null;\n  },\n) =>\n  Effect.gen(function* () {\n    if (input.previous === null) {\n      return;\n    }\n\n    const deleteSecretMaterial = createDefaultSecretMaterialDeleter({ rows });\n    const nextRefKeys = new Set(\n      (input.next === null ? [] : authLeaseSecretRefs(input.next)).map(secretRefKey),\n    );\n    const refsToDelete = authLeaseSecretRefs(input.previous).filter(\n      (ref) => !nextRefKeys.has(secretRefKey(ref)),\n    );\n\n    yield* Effect.forEach(\n      refsToDelete,\n      (ref) => Effect.either(deleteSecretMaterial(ref)),\n      { discard: true },\n    );\n  });\n\nconst leaseIsFresh = (lease: AuthLease | null, now: number): boolean => {\n  if (lease === null) {\n    return false;\n  }\n\n  if (lease.refreshAfter !== null && now >= lease.refreshAfter) {\n    return false;\n  }\n\n  if (lease.expiresAt !== null && now >= lease.expiresAt - LEASE_REFRESH_SKEW_MS) {\n    return false;\n  }\n\n  return true;\n};\n\nconst refreshRefreshableOauth2AuthorizedUserArtifact = (input: {\n  rows: ControlPlaneStoreShape;\n  artifact: AuthArtifact;\n  lease: AuthLease | null;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<AuthLease, Error, never> =>\n  Effect.gen(function* () {\n    const decoded = decodeBuiltInAuthArtifactConfig(input.artifact);\n    if (\n      decoded === null\n      || decoded.artifactKind !== RefreshableOAuth2AuthorizedUserAuthArtifactKind\n    ) {\n      return yield* runtimeEffectError(\"auth/auth-leases\", `Unsupported auth artifact kind: ${input.artifact.artifactKind}`);\n    }\n\n    const refreshToken = yield* input.resolveSecretMaterial({\n      ref: decoded.config.refreshToken,\n      context: input.context,\n    });\n    let clientSecret: string | null = null;\n    if (decoded.config.clientSecret) {\n      clientSecret = yield* input.resolveSecretMaterial({\n        ref: decoded.config.clientSecret,\n        context: input.context,\n      });\n    }\n\n    const tokenResponse = yield* refreshOAuth2AccessToken({\n      tokenEndpoint: decoded.config.tokenEndpoint,\n      clientId: decoded.config.clientId,\n      clientAuthentication: decoded.config.clientAuthentication,\n      clientSecret,\n      refreshToken,\n    });\n\n    const storeSecretMaterial = createDefaultSecretMaterialStorer({\n      rows: input.rows,\n    });\n    const accessTokenRef = yield* storeSecretMaterial({\n      purpose: \"oauth_access_token\",\n      value: tokenResponse.access_token,\n      name: `${decoded.config.clientId} Access Token`,\n    });\n    const now = Date.now();\n    const expiresInMs =\n      typeof tokenResponse.expires_in === \"number\" && Number.isFinite(tokenResponse.expires_in)\n        ? Math.max(0, tokenResponse.expires_in * 1000)\n        : null;\n    const expiresAt = expiresInMs === null ? null : now + expiresInMs;\n    const refreshAfter =\n      expiresAt === null ? null : Math.max(now, expiresAt - LEASE_REFRESH_SKEW_MS);\n\n    const nextLease: AuthLease = {\n      id: input.lease?.id ?? AuthLeaseIdSchema.make(`auth_lease_${crypto.randomUUID()}`),\n      authArtifactId: input.artifact.id,\n      workspaceId: input.artifact.workspaceId,\n      sourceId: input.artifact.sourceId,\n      actorAccountId: input.artifact.actorAccountId,\n      slot: input.artifact.slot,\n      placementsTemplateJson: encodeLeasePlacementTemplatesJson([\n        {\n          location: \"header\",\n          name: decoded.config.headerName,\n          parts: [\n            {\n              kind: \"literal\",\n              value: decoded.config.prefix,\n            },\n            {\n              kind: \"secret_ref\",\n              ref: accessTokenRef,\n            },\n          ],\n        },\n      ]),\n      expiresAt,\n      refreshAfter,\n      createdAt: input.lease?.createdAt ?? now,\n      updatedAt: now,\n    };\n\n    yield* input.rows.authLeases.upsert(nextLease);\n    yield* cleanupAuthLeaseSecretRefs(input.rows, {\n      previous: input.lease,\n      next: nextLease,\n    });\n\n    return nextLease;\n  });\n\nconst workspaceOauthClientSecretRef = (input: {\n  clientSecretProviderId: string | null;\n  clientSecretHandle: string | null;\n}): SecretRef | null =>\n  input.clientSecretProviderId && input.clientSecretHandle\n    ? {\n        providerId: input.clientSecretProviderId,\n        handle: input.clientSecretHandle,\n      }\n    : null;\n\nconst cleanupProviderGrantRefreshToken = (rows: ControlPlaneStoreShape, input: {\n  previous: SecretRef;\n  next: SecretRef;\n}) =>\n  secretRefKey(input.previous) === secretRefKey(input.next)\n    ? Effect.void\n    : createDefaultSecretMaterialDeleter({ rows })(input.previous).pipe(\n        Effect.either,\n        Effect.ignore,\n      );\n\nconst refreshProviderGrantRefArtifact = (input: {\n  rows: ControlPlaneStoreShape;\n  artifact: AuthArtifact;\n  lease: AuthLease | null;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<AuthLease, Error, never> =>\n  Effect.gen(function* () {\n    const config = decodeProviderGrantRefAuthArtifactConfig(input.artifact);\n    if (config === null) {\n      return yield* runtimeEffectError(\"auth/auth-leases\", `Unsupported auth artifact kind: ${input.artifact.artifactKind}`);\n    }\n\n    const grantOption = yield* input.rows.providerAuthGrants.getById(config.grantId);\n    if (Option.isNone(grantOption)) {\n      return yield* runtimeEffectError(\"auth/auth-leases\", `Provider auth grant not found: ${config.grantId}`);\n    }\n    const grant = grantOption.value;\n\n    const oauthClientOption = yield* input.rows.workspaceOauthClients.getById(grant.oauthClientId);\n    if (Option.isNone(oauthClientOption)) {\n      return yield* runtimeEffectError(\"auth/auth-leases\", `Workspace OAuth client not found: ${grant.oauthClientId}`);\n    }\n    const oauthClient = oauthClientOption.value;\n\n    const refreshToken = yield* input.resolveSecretMaterial({\n      ref: grant.refreshToken,\n      context: input.context,\n    });\n    const clientSecretRef = workspaceOauthClientSecretRef(oauthClient);\n    const clientSecret = clientSecretRef\n      ? yield* input.resolveSecretMaterial({\n          ref: clientSecretRef,\n          context: input.context,\n        })\n      : null;\n\n    const tokenResponse = yield* refreshOAuth2AccessToken({\n      tokenEndpoint: grant.tokenEndpoint,\n      clientId: oauthClient.clientId,\n      clientAuthentication: grant.clientAuthentication,\n      clientSecret,\n      refreshToken,\n      scopes: config.requiredScopes.length > 0 ? config.requiredScopes : null,\n    });\n\n    const storeSecretMaterial = createDefaultSecretMaterialStorer({\n      rows: input.rows,\n    });\n    const accessTokenRef = yield* storeSecretMaterial({\n      purpose: \"oauth_access_token\",\n      value: tokenResponse.access_token,\n      name: `${grant.providerKey} Access Token`,\n    });\n\n    const rotatedRefreshTokenRef = tokenResponse.refresh_token\n      ? yield* storeSecretMaterial({\n          purpose: \"oauth_refresh_token\",\n          value: tokenResponse.refresh_token,\n          name: `${grant.providerKey} Refresh Token`,\n        })\n      : grant.refreshToken;\n\n    const now = Date.now();\n    const nextGrant: ProviderAuthGrant = {\n      ...grant,\n      refreshToken: rotatedRefreshTokenRef,\n      lastRefreshedAt: now,\n      updatedAt: now,\n    };\n    yield* input.rows.providerAuthGrants.upsert(nextGrant);\n    yield* cleanupProviderGrantRefreshToken(input.rows, {\n      previous: grant.refreshToken,\n      next: rotatedRefreshTokenRef,\n    });\n\n    const expiresInMs =\n      typeof tokenResponse.expires_in === \"number\" && Number.isFinite(tokenResponse.expires_in)\n        ? Math.max(0, tokenResponse.expires_in * 1000)\n        : null;\n    const expiresAt = expiresInMs === null ? null : now + expiresInMs;\n    const refreshAfter =\n      expiresAt === null ? null : Math.max(now, expiresAt - LEASE_REFRESH_SKEW_MS);\n\n    const nextLease: AuthLease = {\n      id: input.lease?.id ?? AuthLeaseIdSchema.make(`auth_lease_${crypto.randomUUID()}`),\n      authArtifactId: input.artifact.id,\n      workspaceId: input.artifact.workspaceId,\n      sourceId: input.artifact.sourceId,\n      actorAccountId: input.artifact.actorAccountId,\n      slot: input.artifact.slot,\n      placementsTemplateJson: encodeLeasePlacementTemplatesJson([\n        {\n          location: \"header\",\n          name: config.headerName,\n          parts: [\n            {\n              kind: \"literal\",\n              value: config.prefix,\n            },\n            {\n              kind: \"secret_ref\",\n              ref: accessTokenRef,\n            },\n          ],\n        },\n      ]),\n      expiresAt,\n      refreshAfter,\n      createdAt: input.lease?.createdAt ?? now,\n      updatedAt: now,\n    };\n\n    yield* input.rows.authLeases.upsert(nextLease);\n    yield* cleanupAuthLeaseSecretRefs(input.rows, {\n      previous: input.lease,\n      next: nextLease,\n    });\n\n    return nextLease;\n  });\n\nexport const removeAuthLeaseAndSecrets = (rows: ControlPlaneStoreShape, input: {\n  authArtifactId: AuthArtifact[\"id\"];\n}): Effect.Effect<void, Error, never> =>\n  Effect.gen(function* () {\n    const existingLease = yield* rows.authLeases.getByAuthArtifactId(input.authArtifactId);\n    if (Option.isNone(existingLease)) {\n      return;\n    }\n\n    yield* rows.authLeases.removeByAuthArtifactId(input.authArtifactId);\n    yield* cleanupAuthLeaseSecretRefs(rows, {\n      previous: existingLease.value,\n      next: null,\n    });\n  });\n\nexport const upsertOauth2AuthorizedUserLeaseFromTokenResponse = (input: {\n  rows: ControlPlaneStoreShape;\n  artifact: AuthArtifact;\n  tokenResponse: OAuth2TokenResponse;\n}): Effect.Effect<void, Error, never> =>\n  Effect.gen(function* () {\n    const decoded = decodeBuiltInAuthArtifactConfig(input.artifact);\n    if (\n      decoded === null\n      || decoded.artifactKind !== RefreshableOAuth2AuthorizedUserAuthArtifactKind\n    ) {\n      return yield* runtimeEffectError(\"auth/auth-leases\", `Unsupported auth artifact kind: ${input.artifact.artifactKind}`);\n    }\n\n    const existingLeaseOption = yield* input.rows.authLeases.getByAuthArtifactId(input.artifact.id);\n    const existingLease = Option.isSome(existingLeaseOption) ? existingLeaseOption.value : null;\n    const storeSecretMaterial = createDefaultSecretMaterialStorer({\n      rows: input.rows,\n    });\n    const accessTokenRef = yield* storeSecretMaterial({\n      purpose: \"oauth_access_token\",\n      value: input.tokenResponse.access_token,\n      name: `${decoded.config.clientId} Access Token`,\n    });\n    const now = Date.now();\n    const expiresInMs =\n      typeof input.tokenResponse.expires_in === \"number\" && Number.isFinite(input.tokenResponse.expires_in)\n        ? Math.max(0, input.tokenResponse.expires_in * 1000)\n        : null;\n    const expiresAt = expiresInMs === null ? null : now + expiresInMs;\n    const refreshAfter =\n      expiresAt === null ? null : Math.max(now, expiresAt - LEASE_REFRESH_SKEW_MS);\n\n    const nextLease: AuthLease = {\n      id: existingLease?.id ?? AuthLeaseIdSchema.make(`auth_lease_${crypto.randomUUID()}`),\n      authArtifactId: input.artifact.id,\n      workspaceId: input.artifact.workspaceId,\n      sourceId: input.artifact.sourceId,\n      actorAccountId: input.artifact.actorAccountId,\n      slot: input.artifact.slot,\n      placementsTemplateJson: encodeLeasePlacementTemplatesJson([\n        {\n          location: \"header\",\n          name: decoded.config.headerName,\n          parts: [\n            {\n              kind: \"literal\",\n              value: decoded.config.prefix,\n            },\n            {\n              kind: \"secret_ref\",\n              ref: accessTokenRef,\n            },\n          ],\n        },\n      ]),\n      expiresAt,\n      refreshAfter,\n      createdAt: existingLease?.createdAt ?? now,\n      updatedAt: now,\n    };\n\n    yield* input.rows.authLeases.upsert(nextLease);\n    yield* cleanupAuthLeaseSecretRefs(input.rows, {\n      previous: existingLease,\n      next: nextLease,\n    });\n  });\n\nexport const resolveAuthArtifactMaterialWithLeases = (input: {\n  rows: ControlPlaneStoreShape;\n  artifact: AuthArtifact | null;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<ResolvedSourceAuthMaterial, Error, never> =>\n  Effect.gen(function* () {\n    if (input.artifact === null) {\n      return yield* resolveAuthArtifactMaterial({\n        artifact: null,\n        resolveSecretMaterial: input.resolveSecretMaterial,\n        context: input.context,\n      });\n    }\n\n    const existingLeaseOption = yield* input.rows.authLeases.getByAuthArtifactId(input.artifact.id);\n    const existingLease = Option.isSome(existingLeaseOption) ? existingLeaseOption.value : null;\n    const decoded = decodeBuiltInAuthArtifactConfig(input.artifact);\n    const providerGrantConfig = decodeProviderGrantRefAuthArtifactConfig(input.artifact);\n    const mcpOAuthConfig = decodeMcpOAuthAuthArtifactConfig(input.artifact);\n\n    if (\n      decoded !== null\n      && decoded.artifactKind === RefreshableOAuth2AuthorizedUserAuthArtifactKind\n    ) {\n      const lease = leaseIsFresh(existingLease, Date.now())\n        ? existingLease\n        : yield* refreshRefreshableOauth2AuthorizedUserArtifact({\n            rows: input.rows,\n            artifact: input.artifact,\n            lease: existingLease,\n            resolveSecretMaterial: input.resolveSecretMaterial,\n            context: input.context,\n          });\n\n      return yield* resolveAuthArtifactMaterial({\n        artifact: input.artifact,\n        lease,\n        resolveSecretMaterial: input.resolveSecretMaterial,\n        context: input.context,\n      });\n    }\n\n    if (providerGrantConfig !== null) {\n      const lease = leaseIsFresh(existingLease, Date.now())\n        ? existingLease\n        : yield* refreshProviderGrantRefArtifact({\n            rows: input.rows,\n            artifact: input.artifact,\n            lease: existingLease,\n            resolveSecretMaterial: input.resolveSecretMaterial,\n            context: input.context,\n          });\n\n      return yield* resolveAuthArtifactMaterial({\n        artifact: input.artifact,\n        lease,\n        resolveSecretMaterial: input.resolveSecretMaterial,\n        context: input.context,\n      });\n    }\n\n    if (mcpOAuthConfig !== null) {\n      const material = yield* resolveAuthArtifactMaterial({\n        artifact: input.artifact,\n        resolveSecretMaterial: input.resolveSecretMaterial,\n        context: input.context,\n      });\n\n      return {\n        ...material,\n        authProvider: createPersistedMcpAuthProvider({\n          rows: input.rows,\n          artifact: input.artifact,\n          config: mcpOAuthConfig,\n          resolveSecretMaterial: input.resolveSecretMaterial,\n          context: input.context,\n        }),\n      };\n    }\n\n    return yield* resolveAuthArtifactMaterial({\n      artifact: input.artifact,\n      lease: existingLease,\n      resolveSecretMaterial: input.resolveSecretMaterial,\n      context: input.context,\n    });\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/mcp-auth-provider.ts",
    "content": "import type {\n  OAuthClientInformationMixed,\n  OAuthTokens,\n} from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport type {\n  OAuthClientMetadata,\n} from \"@modelcontextprotocol/sdk/shared/auth.js\";\nimport type {\n  OAuthClientProvider,\n  OAuthDiscoveryState,\n} from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type {\n  AuthArtifact,\n  McpOAuthAuthArtifactConfig,\n  SecretRef,\n} from \"#schema\";\nimport {\n  McpOAuthAuthArtifactConfigJsonSchema,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ControlPlaneStoreShape } from \"../store\";\nimport {\n  createDefaultSecretMaterialDeleter,\n  createDefaultSecretMaterialStorer,\n  type ResolveSecretMaterial,\n  type SecretMaterialResolveContext,\n} from \"../local/secret-material-providers\";\n\nconst encodeMcpOAuthAuthArtifactConfig = Schema.encodeSync(\n  McpOAuthAuthArtifactConfigJsonSchema,\n);\n\nconst parseJsonObject = <T>(value: string | null): T | undefined => {\n  if (value === null) {\n    return undefined;\n  }\n\n  try {\n    const parsed = JSON.parse(value) as unknown;\n    return parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)\n      ? parsed as T\n      : undefined;\n  } catch {\n    return undefined;\n  }\n};\n\nconst stringifyJsonObject = (value: unknown): string | null =>\n  value === null || value === undefined ? null : JSON.stringify(value);\n\nconst createClientMetadata = (redirectUrl: string): OAuthClientMetadata => ({\n  redirect_uris: [redirectUrl],\n  grant_types: [\"authorization_code\", \"refresh_token\"],\n  response_types: [\"code\"],\n  token_endpoint_auth_method: \"none\",\n  client_name: \"Executor Local\",\n});\n\nconst secretRefEquals = (left: SecretRef | null, right: SecretRef | null): boolean =>\n  (left?.providerId ?? null) === (right?.providerId ?? null)\n  && (left?.handle ?? null) === (right?.handle ?? null);\n\nconst cleanupReplacedSecretRefs = (rows: ControlPlaneStoreShape, input: {\n  previousAccessToken: SecretRef;\n  nextAccessToken: SecretRef;\n  previousRefreshToken: SecretRef | null;\n  nextRefreshToken: SecretRef | null;\n}) =>\n  Effect.gen(function* () {\n    const deleteSecretMaterial = createDefaultSecretMaterialDeleter({ rows });\n\n    if (!secretRefEquals(input.previousAccessToken, input.nextAccessToken)) {\n      yield* Effect.either(deleteSecretMaterial(input.previousAccessToken));\n    }\n\n    if (\n      input.previousRefreshToken !== null\n      && !secretRefEquals(input.previousRefreshToken, input.nextRefreshToken)\n    ) {\n      yield* Effect.either(deleteSecretMaterial(input.previousRefreshToken));\n    }\n  });\n\nexport const createPersistedMcpOAuthSourceAuth = (input: {\n  redirectUri: string;\n  accessToken: SecretRef;\n  refreshToken: SecretRef | null;\n  tokenType: string;\n  expiresIn: number | null;\n  scope: string | null;\n  resourceMetadataUrl: string | null;\n  authorizationServerUrl: string | null;\n  resourceMetadata: unknown;\n  authorizationServerMetadata: unknown;\n  clientInformation: unknown;\n}) => ({\n  kind: \"mcp_oauth\" as const,\n  redirectUri: input.redirectUri,\n  accessToken: input.accessToken,\n  refreshToken: input.refreshToken,\n  tokenType: input.tokenType,\n  expiresIn: input.expiresIn,\n  scope: input.scope,\n  resourceMetadataUrl: input.resourceMetadataUrl,\n  authorizationServerUrl: input.authorizationServerUrl,\n  resourceMetadataJson: stringifyJsonObject(input.resourceMetadata),\n  authorizationServerMetadataJson: stringifyJsonObject(input.authorizationServerMetadata),\n  clientInformationJson: stringifyJsonObject(input.clientInformation),\n});\n\nexport const createPersistedMcpAuthProvider = (input: {\n  rows: ControlPlaneStoreShape;\n  artifact: AuthArtifact;\n  config: McpOAuthAuthArtifactConfig;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): OAuthClientProvider => {\n  const storeSecretMaterial = createDefaultSecretMaterialStorer({\n    rows: input.rows,\n  });\n\n  let currentArtifact = input.artifact;\n  let currentConfig = input.config;\n\n  const persistConfig = (nextConfig: McpOAuthAuthArtifactConfig) =>\n    Effect.gen(function* () {\n      const nextArtifact: AuthArtifact = {\n        ...currentArtifact,\n        configJson: encodeMcpOAuthAuthArtifactConfig(nextConfig),\n        updatedAt: Date.now(),\n      };\n      yield* input.rows.authArtifacts.upsert(nextArtifact);\n      currentArtifact = nextArtifact;\n      currentConfig = nextConfig;\n    });\n\n  return {\n    get redirectUrl() {\n      return currentConfig.redirectUri;\n    },\n\n    get clientMetadata() {\n      return createClientMetadata(currentConfig.redirectUri);\n    },\n\n    clientInformation: () =>\n      parseJsonObject<OAuthClientInformationMixed>(currentConfig.clientInformationJson),\n\n    saveClientInformation: (clientInformation) =>\n      Effect.runPromise(\n        persistConfig({\n          ...currentConfig,\n          clientInformationJson: stringifyJsonObject(clientInformation),\n        }),\n      ).then(() => undefined),\n\n    tokens: async () => {\n      const accessToken = await Effect.runPromise(\n        input.resolveSecretMaterial({\n          ref: currentConfig.accessToken,\n          context: input.context,\n        }),\n      );\n      const refreshToken = currentConfig.refreshToken\n        ? await Effect.runPromise(\n            input.resolveSecretMaterial({\n              ref: currentConfig.refreshToken,\n              context: input.context,\n            }),\n          )\n        : undefined;\n\n      return {\n        access_token: accessToken,\n        token_type: currentConfig.tokenType,\n        ...(typeof currentConfig.expiresIn === \"number\"\n          ? { expires_in: currentConfig.expiresIn }\n          : {}),\n        ...(currentConfig.scope ? { scope: currentConfig.scope } : {}),\n        ...(refreshToken ? { refresh_token: refreshToken } : {}),\n      } satisfies OAuthTokens;\n    },\n\n    saveTokens: (tokens) =>\n      Effect.runPromise(Effect.gen(function* () {\n        const previousConfig = currentConfig;\n        const accessTokenRef = yield* storeSecretMaterial({\n          purpose: \"oauth_access_token\",\n          value: tokens.access_token,\n          name: `${currentArtifact.sourceId} MCP Access Token`,\n        });\n        const refreshTokenRef = tokens.refresh_token\n          ? yield* storeSecretMaterial({\n              purpose: \"oauth_refresh_token\",\n              value: tokens.refresh_token,\n              name: `${currentArtifact.sourceId} MCP Refresh Token`,\n            })\n          : currentConfig.refreshToken;\n\n        const nextConfig: McpOAuthAuthArtifactConfig = {\n          ...currentConfig,\n          accessToken: accessTokenRef,\n          refreshToken: refreshTokenRef,\n          tokenType: tokens.token_type ?? currentConfig.tokenType,\n          expiresIn:\n            typeof tokens.expires_in === \"number\" && Number.isFinite(tokens.expires_in)\n              ? tokens.expires_in\n              : currentConfig.expiresIn,\n          scope: tokens.scope ?? currentConfig.scope,\n        };\n\n        yield* persistConfig(nextConfig);\n        yield* cleanupReplacedSecretRefs(input.rows, {\n          previousAccessToken: previousConfig.accessToken,\n          nextAccessToken: accessTokenRef,\n          previousRefreshToken: previousConfig.refreshToken,\n          nextRefreshToken: refreshTokenRef,\n        });\n      })).then(() => undefined),\n\n    redirectToAuthorization: async (authorizationUrl) => {\n      throw new Error(\n        `MCP OAuth re-authorization is required for ${currentArtifact.sourceId}: ${authorizationUrl.toString()}`,\n      );\n    },\n\n    saveCodeVerifier: () => undefined,\n\n    codeVerifier: () => {\n      throw new Error(\"Persisted MCP OAuth sessions do not retain an active PKCE verifier\");\n    },\n\n    saveDiscoveryState: (state) =>\n      Effect.runPromise(\n        persistConfig({\n          ...currentConfig,\n          resourceMetadataUrl: state.resourceMetadataUrl ?? null,\n          authorizationServerUrl: state.authorizationServerUrl ?? null,\n          resourceMetadataJson: stringifyJsonObject(state.resourceMetadata),\n          authorizationServerMetadataJson: stringifyJsonObject(\n            state.authorizationServerMetadata,\n          ),\n        }),\n      ).then(() => undefined),\n\n    discoveryState: () =>\n      currentConfig.authorizationServerUrl === null\n        ? undefined\n        : {\n            resourceMetadataUrl: currentConfig.resourceMetadataUrl ?? undefined,\n            authorizationServerUrl: currentConfig.authorizationServerUrl,\n            resourceMetadata: parseJsonObject<OAuthDiscoveryState[\"resourceMetadata\"]>(\n              currentConfig.resourceMetadataJson,\n            ),\n            authorizationServerMetadata: parseJsonObject<\n              OAuthDiscoveryState[\"authorizationServerMetadata\"]\n            >(currentConfig.authorizationServerMetadataJson),\n          },\n  };\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/mcp-oauth.ts",
    "content": "export * from \"@executor/auth-mcp-oauth\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/oauth-loopback.test.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport { startOauthLoopbackRedirectServer } from \"./oauth-loopback\";\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst makeCompletionServer = Effect.acquireRelease(\n  Effect.tryPromise({\n    try: () =>\n      new Promise<{\n        completionUrl: string;\n        requests: string[];\n        server: ReturnType<typeof createServer>;\n      }>((resolve, reject) => {\n        const requests: string[] = [];\n        const server = createServer((request, response) => {\n          requests.push(request.url ?? \"/\");\n          response.statusCode = 200;\n          response.end(\"ok\");\n        });\n\n        server.listen(0, \"127.0.0.1\", (error?: Error) => {\n          if (error) {\n            reject(error);\n            return;\n          }\n\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"Failed to resolve completion server address\"));\n            return;\n          }\n\n          resolve({\n            completionUrl: `http://127.0.0.1:${address.port}/oauth/complete?sessionId=test-session`,\n            requests,\n            server,\n          });\n        });\n      }),\n    catch: toError,\n  }),\n  ({ server }) =>\n    Effect.tryPromise({\n      try: () =>\n        new Promise<void>((resolve, reject) => {\n          server.close((error) => {\n            if (error) {\n              reject(error);\n              return;\n            }\n            resolve();\n          });\n        }),\n      catch: toError,\n    }),\n);\n\nconst withCompletionServer = <T>(\n  handler: (input: {\n    completionUrl: string;\n    requests: string[];\n  }) => Effect.Effect<T, Error, never>,\n) => Effect.flatMap(makeCompletionServer, handler);\n\ndescribe(\"oauth-loopback\", () => {\n  it.scoped(\n    \"redirects loopback callbacks to the app completion URL with query params intact\",\n    () =>\n      withCompletionServer(({ completionUrl, requests }) =>\n        Effect.gen(function* () {\n          const receiver = yield* Effect.acquireRelease(\n            startOauthLoopbackRedirectServer({\n              completionUrl,\n            }),\n            (server) => server.close,\n          );\n\n          const response = yield* Effect.tryPromise({\n            try: () =>\n              fetch(\n                `${receiver.redirectUri}?state=oauth-state&code=oauth-code`,\n                {\n                  redirect: \"follow\",\n                  signal: AbortSignal.timeout(10_000),\n                },\n              ),\n            catch: toError,\n          });\n\n          expect(response.ok).toBe(true);\n          expect(requests).toEqual([\n            \"/oauth/complete?sessionId=test-session&state=oauth-state&code=oauth-code\",\n          ]);\n        }),\n      ),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/oauth-loopback.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport * as Effect from \"effect/Effect\";\n\nconst DEFAULT_LOOPBACK_TIMEOUT_MS = 10 * 60_000;\n\nexport type OauthLoopbackRedirectServer = {\n  redirectUri: string;\n  close: Effect.Effect<void, Error, never>;\n};\n\nconst closeServer = (\n  server: ReturnType<typeof createServer>,\n): Promise<void> =>\n  new Promise<void>((resolve, reject) => {\n    server.close((error) => {\n      if (error) {\n        reject(error);\n        return;\n      }\n      resolve();\n    });\n  });\n\nexport const startOauthLoopbackRedirectServer = (input: {\n  completionUrl: string;\n  publicHost?: \"localhost\" | \"127.0.0.1\";\n  listenHost?: \"127.0.0.1\";\n  timeoutMs?: number;\n}): Effect.Effect<OauthLoopbackRedirectServer, Error, never> =>\n  Effect.tryPromise({\n    try: () =>\n      new Promise<OauthLoopbackRedirectServer>((resolve, reject) => {\n    const publicHost = input.publicHost ?? \"127.0.0.1\";\n    const listenHost = input.listenHost ?? \"127.0.0.1\";\n    const completionUrl = new URL(input.completionUrl);\n    const server = createServer((request, response) => {\n      try {\n        const requestUrl = new URL(\n          request.url ?? \"/\",\n          `http://${publicHost}`,\n        );\n        const redirectUrl = new URL(completionUrl.toString());\n\n        for (const [key, value] of requestUrl.searchParams.entries()) {\n          redirectUrl.searchParams.set(key, value);\n        }\n\n        response.statusCode = 302;\n        response.setHeader(\"cache-control\", \"no-store\");\n        response.setHeader(\"location\", redirectUrl.toString());\n        response.end();\n      } catch (cause) {\n        const error = cause instanceof Error ? cause : new Error(String(cause));\n        response.statusCode = 500;\n        response.setHeader(\"content-type\", \"text/plain; charset=utf-8\");\n        response.end(`OAuth redirect failed: ${error.message}`);\n      } finally {\n      void closeServer(server).catch(() => {});\n      }\n    });\n\n    let timeout: NodeJS.Timeout | null = null;\n    const cleanup = (): Promise<void> => {\n      if (timeout !== null) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      return closeServer(server).catch(() => undefined);\n    };\n\n    server.once(\"error\", (cause) => {\n      reject(\n        cause instanceof Error ? cause : new Error(String(cause)),\n      );\n    });\n\n    server.listen(0, listenHost, () => {\n      const address = server.address();\n      if (!address || typeof address === \"string\") {\n        reject(new Error(\"Failed to resolve OAuth loopback port\"));\n        return;\n      }\n\n      timeout = setTimeout(() => {\n        void cleanup();\n      }, input.timeoutMs ?? DEFAULT_LOOPBACK_TIMEOUT_MS);\n      if (typeof timeout.unref === \"function\") {\n        timeout.unref();\n      }\n\n      resolve({\n        redirectUri: `http://${publicHost}:${address.port}`,\n        close: Effect.tryPromise({\n          try: cleanup,\n          catch: (cause) =>\n            cause instanceof Error ? cause : new Error(String(cause)),\n        }),\n      });\n    });\n      }),\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/oauth2-pkce.ts",
    "content": "export * from \"@executor/auth-oauth2\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/provider-grant-lifecycle.ts",
    "content": "import type {\n  AuthArtifact,\n  ProviderAuthGrant,\n  WorkspaceId,\n} from \"#schema\";\nimport {\n  decodeProviderGrantRefAuthArtifactConfig,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\n\nimport { createDefaultSecretMaterialDeleter } from \"../local/secret-material-providers\";\nimport type { ControlPlaneStoreShape } from \"../store\";\n\nconst providerGrantRefFromArtifact = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n) => decodeProviderGrantRefAuthArtifactConfig(artifact);\n\nexport const providerGrantIdFromArtifact = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n): ProviderAuthGrant[\"id\"] | null =>\n  providerGrantRefFromArtifact(artifact)?.grantId ?? null;\n\nexport const listProviderGrantRefArtifacts = (rows: ControlPlaneStoreShape, input: {\n  workspaceId: WorkspaceId;\n  grantId?: ProviderAuthGrant[\"id\"] | null;\n}): Effect.Effect<readonly AuthArtifact[], Error, never> =>\n  Effect.map(\n    rows.authArtifacts.listByWorkspaceId(input.workspaceId),\n    (artifacts) =>\n      artifacts.filter((artifact) => {\n        const grantId = providerGrantIdFromArtifact(artifact);\n        return grantId !== null && (input.grantId == null || grantId === input.grantId);\n      }),\n  );\n\nexport const clearProviderGrantOrphanedAt = (rows: ControlPlaneStoreShape, input: {\n  grantId: ProviderAuthGrant[\"id\"];\n}): Effect.Effect<boolean, Error, never> =>\n  Effect.gen(function* () {\n    const grantOption = yield* rows.providerAuthGrants.getById(input.grantId);\n    if (Option.isNone(grantOption) || grantOption.value.orphanedAt === null) {\n      return false;\n    }\n\n    yield* rows.providerAuthGrants.upsert({\n      ...grantOption.value,\n      orphanedAt: null,\n      updatedAt: Date.now(),\n    });\n    return true;\n  });\n\nexport const markProviderGrantOrphanedIfUnused = (rows: ControlPlaneStoreShape, input: {\n  workspaceId: WorkspaceId;\n  grantId: ProviderAuthGrant[\"id\"];\n}): Effect.Effect<boolean, Error, never> =>\n  Effect.gen(function* () {\n    const references = yield* listProviderGrantRefArtifacts(rows, input);\n    if (references.length > 0) {\n      return false;\n    }\n\n    const grantOption = yield* rows.providerAuthGrants.getById(input.grantId);\n    if (Option.isNone(grantOption) || grantOption.value.workspaceId !== input.workspaceId) {\n      return false;\n    }\n\n    const grant = grantOption.value;\n    if (grant.orphanedAt !== null) {\n      return false;\n    }\n\n    yield* rows.providerAuthGrants.upsert({\n      ...grant,\n      orphanedAt: Date.now(),\n      updatedAt: Date.now(),\n    });\n    return true;\n  });\n\nexport const removeProviderAuthGrantSecret = (rows: ControlPlaneStoreShape, input: {\n  grant: ProviderAuthGrant;\n}): Effect.Effect<void, Error, never> =>\n  Effect.gen(function* () {\n    const deleteSecretMaterial = createDefaultSecretMaterialDeleter({\n      rows,\n    });\n    yield* deleteSecretMaterial(input.grant.refreshToken).pipe(\n      Effect.either,\n      Effect.ignore,\n    );\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/source-auth-material.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\n\nimport {\n  AuthArtifactIdSchema,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n  type Source,\n} from \"#schema\";\n\nimport { resolveSourceAuthMaterialWithDeps } from \"./source-auth-material\";\n\nconst makeSource = (overrides: Partial<Source> = {}): Source => ({\n  id: SourceIdSchema.make(\"src_tool_artifacts\"),\n  workspaceId: WorkspaceIdSchema.make(\"ws_tool_artifacts\"),\n  name: \"GitHub\",\n  kind: \"openapi\",\n  endpoint: \"https://api.github.com\",\n  status: \"connected\",\n  enabled: true,\n  namespace: \"github\",\n  bindingVersion: 1,\n  binding: {\n    specUrl: \"https://api.github.com/openapi.json\",\n    defaultHeaders: null,\n  },\n  importAuthPolicy: \"reuse_runtime\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: null,\n  lastError: null,\n  createdAt: 1000,\n  updatedAt: 1000,\n  ...overrides,\n});\n\ndescribe(\"source-auth-material\", () => {\n  describe(\"resolveSourceAuthMaterial\", () => {\n    it.effect(\"returns empty headers for auth.kind none\", () =>\n      Effect.gen(function* () {\n        const auth = yield* resolveSourceAuthMaterialWithDeps({\n          source: makeSource({\n            auth: { kind: \"none\" },\n          }),\n          resolveSecretMaterial: () => Effect.die(\"should not be called\"),\n        });\n\n        expect(auth).toEqual({\n          placements: [],\n          headers: {},\n          queryParams: {},\n          cookies: {},\n          bodyValues: {},\n          expiresAt: null,\n          refreshAfter: null,\n        });\n      }),\n    );\n\n    it.effect(\n      \"resolves bearer auth headers from the configured token ref\",\n      () => {\n        const calls: string[] = [];\n\n        return Effect.gen(function* () {\n          const auth = yield* resolveSourceAuthMaterialWithDeps({\n            source: makeSource({\n              auth: {\n                kind: \"bearer\",\n                headerName: \"X-Api-Key\",\n                prefix: \"Token \",\n                token: {\n                  providerId: \"local\",\n                  handle: \"sec_bearer\",\n                },\n              },\n            }),\n            resolveSecretMaterial: ({ ref }) => {\n              calls.push(`${ref.providerId}:${ref.handle}`);\n              return Effect.succeed(\"resolved-bearer-token\");\n            },\n          });\n\n          expect(calls).toEqual([\"local:sec_bearer\"]);\n          expect(auth).toEqual({\n            placements: [\n              {\n                location: \"header\",\n                name: \"X-Api-Key\",\n                value: \"Token resolved-bearer-token\",\n              },\n            ],\n            headers: {\n              \"X-Api-Key\": \"Token resolved-bearer-token\",\n            },\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n            refreshAfter: null,\n          });\n        });\n      },\n    );\n\n    it.effect(\n      \"uses the oauth access token ref and ignores the refresh token\",\n      () => {\n        const calls: string[] = [];\n\n        return Effect.gen(function* () {\n          const auth = yield* resolveSourceAuthMaterialWithDeps({\n            source: makeSource({\n              kind: \"graphql\",\n              endpoint: \"https://example.com/graphql\",\n              binding: {\n                defaultHeaders: null,\n              },\n              auth: {\n                kind: \"oauth2\",\n                headerName: \"Authorization\",\n                prefix: \"Bearer \",\n                accessToken: {\n                  providerId: \"local\",\n                  handle: \"sec_access\",\n                },\n                refreshToken: {\n                  providerId: \"local\",\n                  handle: \"sec_refresh\",\n                },\n              },\n            }),\n            resolveSecretMaterial: ({ ref }) => {\n              calls.push(`${ref.providerId}:${ref.handle}`);\n              return Effect.succeed(\"resolved-access-token\");\n            },\n          });\n\n          expect(calls).toEqual([\"local:sec_access\"]);\n          expect(auth).toEqual({\n            placements: [\n              {\n                location: \"header\",\n                name: \"Authorization\",\n                value: \"Bearer resolved-access-token\",\n              },\n            ],\n            headers: {\n              Authorization: \"Bearer resolved-access-token\",\n            },\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n            refreshAfter: null,\n          });\n        });\n      },\n    );\n\n    it.effect(\n      \"reconstructs persisted MCP OAuth auth providers from stored auth artifacts\",\n      () => {\n        const calls: string[] = [];\n\n        return Effect.gen(function* () {\n          const auth = yield* resolveSourceAuthMaterialWithDeps({\n            source: makeSource({\n              kind: \"mcp\",\n              endpoint: \"https://example.com/mcp\",\n              binding: {\n                transport: \"streamable-http\",\n                queryParams: null,\n                headers: null,\n              },\n              auth: { kind: \"none\" },\n            }),\n            actorAccountId: null,\n            rows: {\n              authArtifacts: {\n                getByWorkspaceSourceAndActor: () =>\n                  Effect.succeed(\n                    Option.some({\n                      id: AuthArtifactIdSchema.make(\"auth_artifact_mcp\"),\n                      workspaceId: WorkspaceIdSchema.make(\"ws_tool_artifacts\"),\n                      sourceId: SourceIdSchema.make(\"src_tool_artifacts\"),\n                      actorAccountId: null,\n                      slot: \"runtime\",\n                      artifactKind: \"mcp_oauth\",\n                      configJson: JSON.stringify({\n                        redirectUri: \"http://127.0.0.1/oauth/callback\",\n                        accessToken: {\n                          providerId: \"local\",\n                          handle: \"sec_mcp_access\",\n                        },\n                        refreshToken: {\n                          providerId: \"local\",\n                          handle: \"sec_mcp_refresh\",\n                        },\n                        tokenType: \"Bearer\",\n                        expiresIn: 3600,\n                        scope: \"mcp\",\n                        resourceMetadataUrl:\n                          \"https://example.com/.well-known/oauth-protected-resource\",\n                        authorizationServerUrl: \"https://example.com/oauth\",\n                        resourceMetadataJson: JSON.stringify({\n                          resource: \"mcp\",\n                        }),\n                        authorizationServerMetadataJson: JSON.stringify({\n                          issuer: \"https://example.com/oauth\",\n                          token_endpoint: \"https://example.com/oauth/token\",\n                        }),\n                        clientInformationJson: JSON.stringify({\n                          client_id: \"client-123\",\n                        }),\n                      }),\n                      grantSetJson: null,\n                      createdAt: 1,\n                      updatedAt: 1,\n                    }),\n                  ),\n              },\n              authLeases: {\n                getByAuthArtifactId: () => Effect.succeed(Option.none()),\n              },\n            } as any,\n            resolveSecretMaterial: ({ ref }) => {\n              calls.push(`${ref.providerId}:${ref.handle}`);\n              return Effect.succeed(\n                ref.handle === \"sec_mcp_access\"\n                  ? \"persisted-access-token\"\n                  : \"persisted-refresh-token\",\n              );\n            },\n          });\n\n          expect(auth.headers).toEqual({});\n          expect(auth.authProvider).toBeDefined();\n\n          const tokens = yield* Effect.tryPromise({\n            try: () => auth.authProvider!.tokens(),\n            catch: (error) =>\n              error instanceof Error ? error : new Error(String(error)),\n          });\n\n          expect(tokens).toEqual({\n            access_token: \"persisted-access-token\",\n            refresh_token: \"persisted-refresh-token\",\n            token_type: \"Bearer\",\n            expires_in: 3600,\n            scope: \"mcp\",\n          });\n          expect(calls).toEqual([\n            \"local:sec_mcp_access\",\n            \"local:sec_mcp_refresh\",\n          ]);\n        });\n      },\n    );\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/auth/source-auth-material.ts",
    "content": "import type {\n  AccountId,\n  CredentialSlot,\n  Source,\n  SourceAuth,\n} from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\n\nimport { ControlPlaneStore, type ControlPlaneStoreShape } from \"../store\";\nimport {\n  authArtifactFromSourceAuth,\n  resolveAuthArtifactMaterial,\n  type ResolvedSourceAuthMaterial,\n} from \"./auth-artifacts\";\nimport { resolveAuthArtifactMaterialWithLeases } from \"./auth-leases\";\nimport type {\n  ResolveSecretMaterial,\n  SecretMaterialResolveContext,\n} from \"../local/secret-material-providers\";\nimport { SecretMaterialResolverService } from \"../local/secret-material-providers\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nconst authForSlot = (input: {\n  source: Source;\n  slot: CredentialSlot;\n}): SourceAuth => {\n  if (input.slot === \"runtime\") {\n    return input.source.auth;\n  }\n\n  if (input.source.importAuthPolicy === \"reuse_runtime\") {\n    return input.source.auth;\n  }\n\n  if (input.source.importAuthPolicy === \"none\") {\n    return { kind: \"none\" };\n  }\n\n  return input.source.importAuth;\n};\n\nexport type RuntimeSourceAuthMaterialShape = {\n  resolve: (input: {\n    source: Source;\n    slot?: CredentialSlot;\n    actorAccountId?: AccountId | null;\n    context?: SecretMaterialResolveContext;\n  }) => Effect.Effect<ResolvedSourceAuthMaterial, Error, never>;\n};\n\nexport class RuntimeSourceAuthMaterialService extends Context.Tag(\n  \"#runtime/RuntimeSourceAuthMaterialService\",\n)<RuntimeSourceAuthMaterialService, RuntimeSourceAuthMaterialShape>() {}\n\nexport const resolveSourceAuthMaterialWithDeps = (input: {\n  source: Source;\n  slot?: CredentialSlot;\n  actorAccountId?: AccountId | null;\n  rows?: ControlPlaneStoreShape;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<ResolvedSourceAuthMaterial, Error, never> =>\n  Effect.gen(function* () {\n    const slot = input.slot ?? \"runtime\";\n\n    if (input.rows !== undefined) {\n      const candidateSlots =\n        slot === \"import\" && input.source.importAuthPolicy === \"reuse_runtime\"\n          ? [\"import\", \"runtime\"] satisfies ReadonlyArray<CredentialSlot>\n          : [slot] satisfies ReadonlyArray<CredentialSlot>;\n\n      for (const candidateSlot of candidateSlots) {\n        const artifactOption = yield* input.rows.authArtifacts.getByWorkspaceSourceAndActor({\n          workspaceId: input.source.workspaceId,\n          sourceId: input.source.id,\n          actorAccountId: input.actorAccountId ?? null,\n          slot: candidateSlot,\n        });\n\n        if (Option.isSome(artifactOption)) {\n          return yield* resolveAuthArtifactMaterialWithLeases({\n            rows: input.rows,\n            artifact: artifactOption.value,\n            resolveSecretMaterial: input.resolveSecretMaterial,\n            context: input.context,\n          });\n        }\n      }\n    }\n\n    const artifact = authArtifactFromSourceAuth({\n      source: input.source,\n      auth: authForSlot({\n        source: input.source,\n        slot,\n      }),\n      slot,\n      actorAccountId: input.actorAccountId ?? null,\n    });\n\n    if (input.rows !== undefined) {\n      return yield* resolveAuthArtifactMaterialWithLeases({\n        rows: input.rows,\n        artifact,\n        resolveSecretMaterial: input.resolveSecretMaterial,\n        context: input.context,\n      });\n    }\n\n    if (\n      artifact?.artifactKind === \"oauth2_authorized_user\"\n      || artifact?.artifactKind === \"provider_grant_ref\"\n      || artifact?.artifactKind === \"mcp_oauth\"\n    ) {\n      return yield* runtimeEffectError(\"auth/source-auth-material\", \"Dynamic auth artifacts require persistence-backed lease resolution\");\n    }\n\n    return yield* resolveAuthArtifactMaterial({\n      artifact,\n      resolveSecretMaterial: input.resolveSecretMaterial,\n      context: input.context,\n    });\n  });\n\nexport const resolveSourceAuthMaterial = (input: {\n  source: Source;\n  slot?: CredentialSlot;\n  actorAccountId?: AccountId | null;\n  context?: SecretMaterialResolveContext;\n}): Effect.Effect<ResolvedSourceAuthMaterial, Error, RuntimeSourceAuthMaterialService> =>\n  Effect.flatMap(RuntimeSourceAuthMaterialService, (service) => service.resolve(input));\n\nexport const RuntimeSourceAuthMaterialLive = Layer.effect(\n  RuntimeSourceAuthMaterialService,\n  Effect.gen(function* () {\n    const rows = yield* ControlPlaneStore;\n    const resolveSecretMaterial = yield* SecretMaterialResolverService;\n\n    return RuntimeSourceAuthMaterialService.of({\n      resolve: (input) =>\n        resolveSourceAuthMaterialWithDeps({\n          ...input,\n          rows,\n          resolveSecretMaterial,\n        }),\n    });\n  }),\n);\n\nexport type { ResolvedSourceAuthMaterial } from \"./auth-artifacts\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/catalog-typescript.ts",
    "content": "import { createHash } from \"node:crypto\";\n\nimport type { ProjectedCatalog } from \"@executor/ir/catalog\";\nimport type { ShapeSymbolId } from \"@executor/ir/ids\";\nimport type {\n  CatalogV1,\n  DocumentationBlock,\n  ShapeNode,\n  ShapeSymbol,\n} from \"@executor/ir/model\";\n\nexport type CatalogTypeRoot = {\n  readonly shapeId: ShapeSymbolId;\n  readonly aliasHint: string;\n};\n\ntype TypeRenderOptions = {\n  readonly stack?: readonly ShapeSymbolId[];\n  readonly aliasHint?: string;\n};\n\ntype RenderShape = (shapeId: ShapeSymbolId, options?: TypeRenderOptions) => string;\n\ntype SignatureInfo = {\n  readonly key: string;\n  readonly recursive: boolean;\n};\n\ntype ObjectLikeNode = Extract<ShapeNode, { type: \"object\" }> | Extract<ShapeNode, { type: \"graphqlInterface\" }>;\n\ntype RenderableObjectNode = {\n  readonly fields: ObjectLikeNode[\"fields\"];\n  readonly required: readonly string[];\n  readonly additionalProperties: Extract<ShapeNode, { type: \"object\" }>[\"additionalProperties\"];\n  readonly patternProperties: Readonly<Record<string, ShapeSymbolId>>;\n};\n\ntype UnionVariantObject = {\n  readonly shapeId: ShapeSymbolId;\n  readonly node: Extract<ShapeNode, { type: \"object\" }>;\n};\n\ntype DiscriminatorCandidate = {\n  readonly key: string;\n  readonly serializedValuesByVariant: readonly (readonly string[])[];\n};\n\nexport type CatalogTypeProjector = {\n  readonly renderSelfContainedShape: RenderShape;\n  readonly renderDeclarationShape: RenderShape;\n  readonly supportingDeclarations: () => readonly string[];\n};\n\nconst VALID_IDENTIFIER_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nconst TYPE_ALIAS_REFERENCE_PATTERN = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nconst hashSignature = (value: string): string =>\n  createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 24);\n\nexport const formatPropertyKey = (value: string): string =>\n  VALID_IDENTIFIER_PATTERN.test(value) ? value : JSON.stringify(value);\n\nconst typeNameWords = (value: string): string[] =>\n  value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/([A-Z]+)([A-Z][a-z])/g, \"$1 $2\")\n    .split(/[^A-Za-z0-9]+/)\n    .filter((segment) => segment.length > 0);\n\nconst pascalCaseWord = (value: string): string =>\n  /^\\d+$/.test(value)\n    ? value\n    : `${value.slice(0, 1).toUpperCase()}${value.slice(1).toLowerCase()}`;\n\nexport const formatTypeNameSegment = (value: string): string => {\n  const formatted = typeNameWords(value)\n    .map((segment) => pascalCaseWord(segment))\n    .join(\"\");\n  if (formatted.length === 0) {\n    return \"Type\";\n  }\n\n  return /^[A-Za-z_$]/.test(formatted) ? formatted : `T${formatted}`;\n};\n\nexport const joinTypeNameSegments = (...segments: ReadonlyArray<string>): string =>\n  segments\n    .map((segment) => formatTypeNameSegment(segment))\n    .filter((segment) => segment.length > 0)\n    .join(\"\");\n\nconst primitiveTypeName = (value: string): string => {\n  switch (value) {\n    case \"string\":\n    case \"boolean\":\n      return value;\n    case \"bytes\":\n      return \"string\";\n    case \"integer\":\n    case \"number\":\n      return \"number\";\n    case \"null\":\n      return \"null\";\n    case \"object\":\n      return \"Record<string, unknown>\";\n    case \"array\":\n      return \"Array<unknown>\";\n    default:\n      throw new Error(`Unsupported JSON Schema primitive type: ${value}`);\n  }\n};\n\nconst jsonLiteral = (value: unknown): string => {\n  const serialized = JSON.stringify(value);\n  if (serialized === undefined) {\n    throw new Error(`Unsupported literal value in declaration schema: ${String(value)}`);\n  }\n  return serialized;\n};\n\nconst wrapCompositeType = (value: string): string =>\n  value.includes(\" | \") || value.includes(\" & \")\n    ? `(${value})`\n    : value;\n\nconst objectTypeLiteral = (\n  lines: readonly string[],\n  indent: string,\n): string => {\n  if (lines.length === 0) {\n    return \"{}\";\n  }\n\n  return [\n    \"{\",\n    ...lines.flatMap((line) =>\n      line.split(\"\\n\").map((segment) => `${indent}${segment}`)\n    ),\n    `${indent.slice(0, -2)}}`,\n  ].join(\"\\n\");\n};\n\nconst getShapeSymbol = (catalog: CatalogV1, shapeId: ShapeSymbolId): ShapeSymbol => {\n  const symbol = catalog.symbols[shapeId];\n  if (!symbol || symbol.kind !== \"shape\") {\n    throw new Error(`Missing shape symbol for ${shapeId}`);\n  }\n\n  return symbol;\n};\n\nconst isInlineShapeNode = (node: ShapeNode): boolean =>\n  node.type === \"unknown\"\n  || node.type === \"scalar\"\n  || node.type === \"const\"\n  || node.type === \"enum\";\n\nconst isSyntheticShapeLabel = (value: string): boolean =>\n  /^shape_[a-f0-9_]+$/i.test(value);\n\nconst looksLikeHumanPhrase = (value: string): boolean => /\\s/.test(value.trim());\n\nconst cleanDocText = (value: string | undefined): string | null => {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : null;\n};\n\nconst escapeJsDocText = (value: string): string => value.replace(/\\*\\//g, \"*\\\\/\");\n\nconst pushParagraphLines = (\n  lines: Array<string>,\n  value: string | null,\n): void => {\n  if (!value) {\n    return;\n  }\n\n  if (lines.length > 0) {\n    lines.push(\"\");\n  }\n\n  for (const line of value.split(/\\r?\\n/)) {\n    lines.push(escapeJsDocText(line.trimEnd()));\n  }\n};\n\nexport const documentationComment = (input: {\n  title?: string;\n  docs?: DocumentationBlock;\n  deprecated?: boolean;\n  includeTitle?: boolean;\n}): string | null => {\n  const lines: Array<string> = [];\n  const title = input.includeTitle && input.title && looksLikeHumanPhrase(input.title)\n    ? cleanDocText(input.title)\n    : null;\n  const summary = cleanDocText(input.docs?.summary);\n  const description = cleanDocText(input.docs?.description);\n  const externalDocsUrl = cleanDocText(input.docs?.externalDocsUrl);\n\n  pushParagraphLines(lines, title && title !== summary ? title : null);\n  pushParagraphLines(lines, summary);\n  pushParagraphLines(lines, description && description !== summary ? description : null);\n\n  if (externalDocsUrl) {\n    if (lines.length > 0) {\n      lines.push(\"\");\n    }\n    lines.push(`@see ${escapeJsDocText(externalDocsUrl)}`);\n  }\n\n  if (input.deprecated) {\n    if (lines.length > 0) {\n      lines.push(\"\");\n    }\n    lines.push(\"@deprecated\");\n  }\n\n  if (lines.length === 0) {\n    return null;\n  }\n\n  return [\n    \"/**\",\n    ...lines.map((line) => line.length > 0 ? ` * ${line}` : \" *\"),\n    \" */\",\n  ].join(\"\\n\");\n};\n\nconst compactAliasHint = (value: string): string => {\n  const segments = typeNameWords(value);\n  if (segments.length <= 5) {\n    return joinTypeNameSegments(...segments);\n  }\n\n  const meaningful = segments.filter((segment, index) =>\n    index >= segments.length - 2\n    || ![\"item\", \"member\", \"value\"].includes(segment.toLowerCase())\n  );\n\n  return joinTypeNameSegments(...meaningful.slice(-5));\n};\n\nconst childShapeIds = (node: ShapeNode): ShapeSymbolId[] => {\n  switch (node.type) {\n    case \"unknown\":\n    case \"scalar\":\n    case \"const\":\n    case \"enum\":\n      return [];\n    case \"object\":\n      return [\n        ...Object.values(node.fields).map((field) => field.shapeId),\n        ...(typeof node.additionalProperties === \"string\" ? [node.additionalProperties] : []),\n        ...Object.values(node.patternProperties ?? {}),\n      ];\n    case \"array\":\n      return [node.itemShapeId];\n    case \"tuple\":\n      return [\n        ...node.itemShapeIds,\n        ...(typeof node.additionalItems === \"string\" ? [node.additionalItems] : []),\n      ];\n    case \"map\":\n      return [node.valueShapeId];\n    case \"allOf\":\n    case \"anyOf\":\n    case \"oneOf\":\n      return [...node.items];\n    case \"nullable\":\n      return [node.itemShapeId];\n    case \"ref\":\n      return [node.target];\n    case \"not\":\n      return [node.itemShapeId];\n    case \"conditional\":\n      return [\n        node.ifShapeId,\n        ...(node.thenShapeId ? [node.thenShapeId] : []),\n        ...(node.elseShapeId ? [node.elseShapeId] : []),\n      ];\n    case \"graphqlInterface\":\n      return [\n        ...Object.values(node.fields).map((field) => field.shapeId),\n        ...node.possibleTypeIds,\n      ];\n    case \"graphqlUnion\":\n      return [...node.memberTypeIds];\n  }\n};\n\nconst renderInlineShapeNode = (node: ShapeNode): string => {\n  switch (node.type) {\n    case \"unknown\":\n      return \"unknown\";\n    case \"scalar\":\n      return primitiveTypeName(node.scalar);\n    case \"const\":\n      return jsonLiteral(node.value);\n    case \"enum\":\n      return node.values.map((value) => jsonLiteral(value)).join(\" | \");\n    default:\n      throw new Error(`Cannot inline non-primitive shape node: ${node.type}`);\n  }\n};\n\nconst renderIndexValueType = (\n  shapeIds: readonly ShapeSymbolId[],\n  allowUnknown: boolean,\n  aliasHint: string | undefined,\n  stack: readonly ShapeSymbolId[],\n  renderShape: RenderShape,\n): string => {\n  const members = new Set<string>();\n  if (allowUnknown) {\n    members.add(\"unknown\");\n  }\n\n  for (const shapeId of shapeIds) {\n    members.add(renderShape(shapeId, { stack, aliasHint }));\n  }\n\n  return [...members].sort((left, right) => left.localeCompare(right)).join(\" | \");\n};\n\nconst renderObjectNode = (\n  node: RenderableObjectNode,\n  stack: readonly ShapeSymbolId[],\n  aliasHint: string | undefined,\n  renderShape: RenderShape,\n  includeDocs: boolean,\n): string => {\n  const required = new Set(node.required);\n  const lines = Object.keys(node.fields)\n    .sort((left, right) => left.localeCompare(right))\n    .map((key) => {\n      const field = node.fields[key]!;\n      const propertyLine =\n        `${formatPropertyKey(key)}${required.has(key) ? \"\" : \"?\"}: ${renderShape(field.shapeId, {\n          stack,\n          aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, key) : key,\n        })};`;\n      const comment = includeDocs\n        ? documentationComment({\n            docs: field.docs,\n            deprecated: field.deprecated,\n          })\n        : null;\n\n      return comment ? `${comment}\\n${propertyLine}` : propertyLine;\n    });\n\n  const patternShapeIds = Object.values(node.patternProperties ?? {});\n  const hasUnknownIndex = node.additionalProperties === true;\n  const additionalShapeIds = typeof node.additionalProperties === \"string\"\n    ? [node.additionalProperties]\n    : [];\n  if (hasUnknownIndex || patternShapeIds.length > 0 || additionalShapeIds.length > 0) {\n    lines.push(\n      `[key: string]: ${renderIndexValueType(\n        [...patternShapeIds, ...additionalShapeIds],\n        hasUnknownIndex,\n        aliasHint ? joinTypeNameSegments(aliasHint, \"value\") : \"value\",\n        stack,\n        renderShape,\n      )};`,\n    );\n  }\n\n  return objectTypeLiteral(lines, \"  \");\n};\n\nconst renderObjectFields = (\n  node: ObjectLikeNode,\n  stack: readonly ShapeSymbolId[],\n  aliasHint: string | undefined,\n  renderShape: RenderShape,\n  includeDocs: boolean,\n): string =>\n  renderObjectNode(\n    {\n      fields: node.fields,\n      required: node.type === \"object\" ? (node.required ?? []) : [],\n      additionalProperties: node.type === \"object\" ? node.additionalProperties : false,\n      patternProperties: node.type === \"object\" ? node.patternProperties ?? {} : {},\n    },\n    stack,\n    aliasHint,\n    renderShape,\n    includeDocs,\n  );\n\nconst renderShapeBody = (\n  catalog: CatalogV1,\n  shapeId: ShapeSymbolId,\n  stack: readonly ShapeSymbolId[],\n  aliasHint: string | undefined,\n  renderShape: RenderShape,\n  includeDocs: boolean,\n): string => {\n  const shape = getShapeSymbol(catalog, shapeId);\n  const node = shape.node;\n\n  switch (node.type) {\n    case \"unknown\":\n    case \"scalar\":\n    case \"const\":\n    case \"enum\":\n      return renderInlineShapeNode(node);\n    case \"object\":\n    case \"graphqlInterface\":\n      return renderObjectFields(node, stack, aliasHint, renderShape, includeDocs);\n    case \"array\":\n      return `Array<${wrapCompositeType(renderShape(node.itemShapeId, {\n        stack,\n        aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, \"item\") : \"item\",\n      }))}>`;\n    case \"tuple\": {\n      const items = node.itemShapeIds.map((itemShapeId, index) =>\n        renderShape(itemShapeId, {\n          stack,\n          aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, `item_${String(index + 1)}`) : `item_${String(index + 1)}`,\n        })\n      );\n      const suffix = node.additionalItems === true\n        ? \", ...unknown[]\"\n        : typeof node.additionalItems === \"string\"\n          ? `, ...Array<${wrapCompositeType(renderShape(node.additionalItems, {\n              stack,\n              aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, \"rest\") : \"rest\",\n            }))}>`\n          : \"\";\n      return `[${items.join(\", \")}${suffix}]`;\n    }\n    case \"map\":\n      return `Record<string, ${renderShape(node.valueShapeId, {\n        stack,\n        aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, \"value\") : \"value\",\n      })}>`;\n    case \"allOf\":\n      return node.items.map((itemShapeId, index) =>\n        wrapCompositeType(renderShape(itemShapeId, {\n          stack,\n          aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, `member_${String(index + 1)}`) : `member_${String(index + 1)}`,\n        }))\n      ).join(\" & \");\n    case \"anyOf\":\n    case \"oneOf\":\n      return node.items.map((itemShapeId, index) =>\n        wrapCompositeType(renderShape(itemShapeId, {\n          stack,\n          aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, `member_${String(index + 1)}`) : `member_${String(index + 1)}`,\n        }))\n      ).join(\" | \");\n    case \"nullable\":\n      return `${wrapCompositeType(renderShape(node.itemShapeId, { stack, aliasHint }))} | null`;\n    case \"ref\":\n      return renderShape(node.target, { stack, aliasHint });\n    case \"not\":\n    case \"conditional\":\n      return \"unknown\";\n    case \"graphqlUnion\":\n      return node.memberTypeIds.map((memberTypeId, index) =>\n        wrapCompositeType(renderShape(memberTypeId, {\n          stack,\n          aliasHint: aliasHint ? joinTypeNameSegments(aliasHint, `member_${String(index + 1)}`) : `member_${String(index + 1)}`,\n        }))\n      ).join(\" | \");\n  }\n};\n\nexport const createCatalogTypeProjector = (input: {\n  catalog: CatalogV1;\n  roots: readonly CatalogTypeRoot[];\n}): CatalogTypeProjector => {\n  const { catalog, roots } = input;\n  const signatureCache = new Map<ShapeSymbolId, SignatureInfo>();\n  const recursiveSignatures = new Set<string>();\n  const shapeIdsBySignature = new Map<string, ShapeSymbolId[]>();\n  const usageCountBySignature = new Map<string, number>();\n  const aliasNameBySignature = new Map<string, string>();\n  const canonicalTypeBySignature = new Map<string, string>();\n  const rootAliasHintBySignature = new Map<string, string>();\n  const usedAliasNames = new Set<string>();\n  const usedAliasSignatures = new Set<string>();\n\n  const shapeSignatureInfo = (shapeId: ShapeSymbolId, stack: readonly ShapeSymbolId[] = []): SignatureInfo => {\n    const cached = signatureCache.get(shapeId);\n    if (cached) {\n      return cached;\n    }\n\n    if (stack.includes(shapeId)) {\n      return {\n        key: `cycle:${shapeId}`,\n        recursive: true,\n      };\n    }\n\n    const shape = getShapeSymbol(catalog, shapeId);\n    const nextStack = [...stack, shapeId];\n    const childSignatures = (shapeIds: readonly ShapeSymbolId[], sort: boolean): SignatureInfo[] => {\n      const values = shapeIds.map((childShapeId) => shapeSignatureInfo(childShapeId, nextStack));\n      return sort ? values.sort((left, right) => left.key.localeCompare(right.key)) : values;\n    };\n    let recursive = false;\n    const childSignatureKey = (childShapeId: ShapeSymbolId): string => {\n      const info = shapeSignatureInfo(childShapeId, nextStack);\n      recursive = recursive || info.recursive;\n      return info.key;\n    };\n    const childSignatureKeys = (shapeIds: readonly ShapeSymbolId[], sort: boolean): string[] => {\n      const values = childSignatures(shapeIds, sort);\n      recursive = recursive || values.some((value) => value.recursive);\n      return values.map((value) => value.key);\n    };\n\n    const signatureBody = (() => {\n      switch (shape.node.type) {\n        case \"unknown\":\n          return \"unknown\";\n        case \"scalar\":\n          return `scalar:${primitiveTypeName(shape.node.scalar)}`;\n        case \"const\":\n          return `const:${jsonLiteral(shape.node.value)}`;\n        case \"enum\":\n          return `enum:${shape.node.values.map((value) => jsonLiteral(value)).sort().join(\"|\")}`;\n        case \"object\": {\n          const required = shape.node.required ?? [];\n          const fields = Object.entries(shape.node.fields)\n            .sort(([left], [right]) => left.localeCompare(right))\n            .map(([key, field]) => `${key}${required.includes(key) ? \"!\" : \"?\"}:${childSignatureKey(field.shapeId)}`)\n            .join(\",\");\n          const additionalProperties =\n            shape.node.additionalProperties === true\n              ? \"unknown\"\n              : typeof shape.node.additionalProperties === \"string\"\n                ? childSignatureKey(shape.node.additionalProperties)\n                : \"none\";\n          const patternProperties = Object.entries(shape.node.patternProperties ?? {})\n            .map(([, valueShapeId]) => shapeSignatureInfo(valueShapeId, nextStack))\n            .sort((left, right) => left.key.localeCompare(right.key))\n            .map((value) => {\n              recursive = recursive || value.recursive;\n              return value.key;\n            })\n            .join(\"|\");\n          return `object:${fields}:index=${additionalProperties}:patterns=${patternProperties}`;\n        }\n        case \"array\":\n          return `array:${childSignatureKey(shape.node.itemShapeId)}`;\n        case \"tuple\":\n          return `tuple:${childSignatureKeys(shape.node.itemShapeIds, false).join(\",\")}:rest=${\n            shape.node.additionalItems === true\n              ? \"unknown\"\n              : typeof shape.node.additionalItems === \"string\"\n                ? childSignatureKey(shape.node.additionalItems)\n                : \"none\"\n          }`;\n        case \"map\":\n          return `map:${childSignatureKey(shape.node.valueShapeId)}`;\n        case \"allOf\":\n          return `allOf:${childSignatureKeys(shape.node.items, true).join(\"&\")}`;\n        case \"anyOf\":\n          return `anyOf:${childSignatureKeys(shape.node.items, true).join(\"|\")}`;\n        case \"oneOf\":\n          return `oneOf:${childSignatureKeys(shape.node.items, true).join(\"|\")}`;\n        case \"nullable\":\n          return `nullable:${childSignatureKey(shape.node.itemShapeId)}`;\n        case \"ref\":\n          return childSignatureKey(shape.node.target);\n        case \"not\":\n        case \"conditional\":\n          return \"unknown\";\n        case \"graphqlInterface\": {\n          const fields = Object.entries(shape.node.fields)\n            .sort(([left], [right]) => left.localeCompare(right))\n            .map(([key, field]) => `${key}:${childSignatureKey(field.shapeId)}`)\n            .join(\",\");\n          const possibleTypes = childSignatureKeys(shape.node.possibleTypeIds, true).join(\"|\");\n          return `graphqlInterface:${fields}:possible=${possibleTypes}`;\n        }\n        case \"graphqlUnion\":\n          return `graphqlUnion:${childSignatureKeys(shape.node.memberTypeIds, true).join(\"|\")}`;\n      }\n    })();\n\n    const signature: SignatureInfo = {\n      key: `sig:${hashSignature(signatureBody)}`,\n      recursive,\n    };\n\n    if (signature.recursive) {\n      recursiveSignatures.add(signature.key);\n    }\n\n    signatureCache.set(shapeId, signature);\n    const group = shapeIdsBySignature.get(signature.key);\n    if (group) {\n      group.push(shapeId);\n    } else {\n      shapeIdsBySignature.set(signature.key, [shapeId]);\n    }\n    return signature;\n  };\n\n  const shapeSignature = (shapeId: ShapeSymbolId, stack: readonly ShapeSymbolId[] = []): string =>\n    shapeSignatureInfo(shapeId, stack).key;\n\n  const reachableShapeIds = new Set<ShapeSymbolId>();\n\n  const collectReachableShapes = (shapeId: ShapeSymbolId): void => {\n    if (reachableShapeIds.has(shapeId)) {\n      return;\n    }\n\n    reachableShapeIds.add(shapeId);\n    for (const childShapeId of childShapeIds(getShapeSymbol(catalog, shapeId).node)) {\n      collectReachableShapes(childShapeId);\n    }\n  };\n\n  for (const root of roots) {\n    collectReachableShapes(root.shapeId);\n  }\n\n  for (const rootShapeId of roots.map((root) => root.shapeId)) {\n    const rootShape = getShapeSymbol(catalog, rootShapeId);\n    if (isInlineShapeNode(rootShape.node)) {\n      continue;\n    }\n\n    const signature = shapeSignature(rootShapeId);\n    usageCountBySignature.set(signature, (usageCountBySignature.get(signature) ?? 0) + 1);\n  }\n\n  for (const shapeId of reachableShapeIds) {\n    for (const childShapeId of childShapeIds(getShapeSymbol(catalog, shapeId).node)) {\n      const childShape = getShapeSymbol(catalog, childShapeId);\n      if (isInlineShapeNode(childShape.node)) {\n        continue;\n      }\n\n      const signature = shapeSignature(childShapeId);\n      usageCountBySignature.set(signature, (usageCountBySignature.get(signature) ?? 0) + 1);\n    }\n  }\n\n  for (const root of roots) {\n    const signature = shapeSignature(root.shapeId);\n    const existing = rootAliasHintBySignature.get(signature);\n    if (!existing || root.aliasHint.length < existing.length) {\n      rootAliasHintBySignature.set(signature, root.aliasHint);\n    }\n  }\n\n  const resolveUnionVariantObject = (\n    shapeId: ShapeSymbolId,\n    seen: readonly ShapeSymbolId[] = [],\n  ): UnionVariantObject | null => {\n    if (seen.includes(shapeId)) {\n      return null;\n    }\n\n    const shape = getShapeSymbol(catalog, shapeId);\n    switch (shape.node.type) {\n      case \"ref\":\n        return resolveUnionVariantObject(shape.node.target, [...seen, shapeId]);\n      case \"object\":\n        return {\n          shapeId,\n          node: shape.node,\n        };\n      default:\n        return null;\n    }\n  };\n\n  const literalValuesForDiscriminator = (\n    shapeId: ShapeSymbolId,\n    seen: readonly ShapeSymbolId[] = [],\n  ): readonly string[] | null => {\n    if (seen.includes(shapeId)) {\n      return null;\n    }\n\n    const shape = getShapeSymbol(catalog, shapeId);\n    switch (shape.node.type) {\n      case \"ref\":\n        return literalValuesForDiscriminator(shape.node.target, [...seen, shapeId]);\n      case \"const\":\n        return [jsonLiteral(shape.node.value)];\n      case \"enum\":\n        return shape.node.values.map((value) => jsonLiteral(value));\n      default:\n        return null;\n    }\n  };\n\n  const sameAdditionalProperties = (variants: readonly UnionVariantObject[]): boolean => {\n    const [first, ...rest] = variants;\n    if (!first) {\n      return false;\n    }\n\n    return rest.every((variant) => {\n      const left = first.node.additionalProperties;\n      const right = variant.node.additionalProperties;\n      if (left === right) {\n        return true;\n      }\n      return typeof left === \"string\"\n        && typeof right === \"string\"\n        && shapeSignature(left) === shapeSignature(right);\n    });\n  };\n\n  const samePatternProperties = (variants: readonly UnionVariantObject[]): boolean => {\n    const [first, ...rest] = variants;\n    if (!first) {\n      return false;\n    }\n\n    const firstPatternProperties = first.node.patternProperties ?? {};\n    const firstKeys = Object.keys(firstPatternProperties).sort();\n    return rest.every((variant) => {\n      const variantPatternProperties = variant.node.patternProperties ?? {};\n      const keys = Object.keys(variantPatternProperties).sort();\n      if (keys.length !== firstKeys.length || keys.some((key, index) => key !== firstKeys[index])) {\n        return false;\n      }\n\n      return keys.every((key) =>\n        shapeSignature(firstPatternProperties[key]) === shapeSignature(variantPatternProperties[key])\n      );\n    });\n  };\n\n  const sharedDiscriminatorCandidate = (\n    variants: readonly UnionVariantObject[],\n  ): DiscriminatorCandidate | null => {\n    const [first] = variants;\n    if (!first) {\n      return null;\n    }\n\n    const preferredKeys = [\"type\", \"kind\", \"action\", \"status\", \"event\"];\n    const requiredInAll = Object.keys(first.node.fields).filter((key) =>\n      variants.every((variant) => (variant.node.required ?? []).includes(key))\n    );\n    const candidates = requiredInAll.flatMap((key) => {\n      const serializedValuesByVariant = variants.map((variant) => {\n        const field = variant.node.fields[key];\n        return field ? literalValuesForDiscriminator(field.shapeId) : null;\n      });\n      if (serializedValuesByVariant.some((value) => value === null || value.length === 0)) {\n        return [];\n      }\n\n      const seen = new Set<string>();\n      for (const values of serializedValuesByVariant as readonly (readonly string[])[]) {\n        for (const value of values) {\n          if (seen.has(value)) {\n            return [];\n          }\n          seen.add(value);\n        }\n      }\n\n      return [{\n        key,\n        serializedValuesByVariant: serializedValuesByVariant as readonly (readonly string[])[],\n      } satisfies DiscriminatorCandidate];\n    });\n\n    const sorted = candidates.sort((left, right) => {\n      const leftPreferred = preferredKeys.indexOf(left.key);\n      const rightPreferred = preferredKeys.indexOf(right.key);\n      const leftRank = leftPreferred === -1 ? Number.MAX_SAFE_INTEGER : leftPreferred;\n      const rightRank = rightPreferred === -1 ? Number.MAX_SAFE_INTEGER : rightPreferred;\n      return leftRank - rightRank || left.key.localeCompare(right.key);\n    });\n\n    return sorted[0] ?? null;\n  };\n\n  const variantAliasLabel = (candidate: DiscriminatorCandidate | null, index: number): string => {\n    const serializedValue = candidate?.serializedValuesByVariant[index]?.[0];\n    if (!serializedValue) {\n      return `Variant${String(index + 1)}`;\n    }\n\n    if (serializedValue.startsWith(\"\\\"\") && serializedValue.endsWith(\"\\\"\")) {\n      return formatTypeNameSegment(serializedValue.slice(1, -1));\n    }\n\n    return formatTypeNameSegment(serializedValue);\n  };\n\n  const normalizedUnionRender = (\n    shapeIds: readonly ShapeSymbolId[],\n    stack: readonly ShapeSymbolId[],\n    aliasHint: string | undefined,\n    renderShape: RenderShape,\n    includeDocs: boolean,\n  ): string | null => {\n    const variants = shapeIds.map((shapeId) => resolveUnionVariantObject(shapeId));\n    if (variants.some((variant) => variant === null)) {\n      return null;\n    }\n\n    const objectVariants = variants as readonly UnionVariantObject[];\n    if (objectVariants.length === 0 || !sameAdditionalProperties(objectVariants) || !samePatternProperties(objectVariants)) {\n      return null;\n    }\n\n    const discriminator = sharedDiscriminatorCandidate(objectVariants);\n    const [firstVariant] = objectVariants;\n    if (!firstVariant) {\n      return null;\n    }\n\n    const sharedFieldKeys = Object.keys(firstVariant.node.fields)\n      .filter((key) => key !== discriminator?.key)\n      .filter((key) => {\n        const firstField = firstVariant.node.fields[key];\n        if (!firstField) {\n          return false;\n        }\n\n        const firstRequired = (firstVariant.node.required ?? []).includes(key);\n        return objectVariants.every((variant) => {\n          const field = variant.node.fields[key];\n          if (!field) {\n            return false;\n          }\n\n          const required = (variant.node.required ?? []).includes(key);\n          return required === firstRequired\n            && shapeSignature(field.shapeId) === shapeSignature(firstField.shapeId);\n        });\n      });\n\n    const sharedNode: RenderableObjectNode = {\n      fields: Object.fromEntries(sharedFieldKeys.map((key) => [key, firstVariant.node.fields[key]!])),\n      required: sharedFieldKeys.filter((key) => (firstVariant.node.required ?? []).includes(key)),\n      additionalProperties: firstVariant.node.additionalProperties,\n      patternProperties: firstVariant.node.patternProperties ?? {},\n    };\n\n    const baseHasSharedStructure = sharedFieldKeys.length > 0\n      || sharedNode.additionalProperties === true\n      || typeof sharedNode.additionalProperties === \"string\"\n      || Object.keys(sharedNode.patternProperties).length > 0;\n\n    if (!baseHasSharedStructure && discriminator === null) {\n      return null;\n    }\n\n    const baseText = baseHasSharedStructure\n      ? renderObjectNode(sharedNode, stack, aliasHint, renderShape, includeDocs)\n      : null;\n\n    const variantTexts = objectVariants.map((variant, index) => {\n      const variantFieldKeys = Object.keys(variant.node.fields)\n        .filter((key) => !sharedFieldKeys.includes(key));\n      const variantNode: RenderableObjectNode = {\n        fields: Object.fromEntries(variantFieldKeys.map((key) => [key, variant.node.fields[key]!])),\n        required: variantFieldKeys.filter((key) => (variant.node.required ?? []).includes(key)),\n        additionalProperties: false,\n        patternProperties: {},\n      };\n      return renderObjectNode(\n        variantNode,\n        stack,\n        aliasHint ? joinTypeNameSegments(aliasHint, variantAliasLabel(discriminator, index)) : variantAliasLabel(discriminator, index),\n        renderShape,\n        includeDocs,\n      );\n    });\n    const unionText = variantTexts.map((variantText) => wrapCompositeType(variantText)).join(\" | \");\n\n    return baseText ? `${wrapCompositeType(baseText)} & (${unionText})` : unionText;\n  };\n\n  const representativeShapeIdForSignature = (signature: string): ShapeSymbolId => {\n    const group = shapeIdsBySignature.get(signature);\n    if (!group || group.length === 0) {\n      throw new Error(`Missing representative shape for signature ${signature}`);\n    }\n\n    const sorted = [...group].sort((left, right) => {\n      const leftShape = getShapeSymbol(catalog, left);\n      const rightShape = getShapeSymbol(catalog, right);\n      const leftTitle = leftShape.title ?? leftShape.id;\n      const rightTitle = rightShape.title ?? rightShape.id;\n      const leftRefPenalty = leftShape.node.type === \"ref\" ? 1 : 0;\n      const rightRefPenalty = rightShape.node.type === \"ref\" ? 1 : 0;\n      const leftSynthetic = isSyntheticShapeLabel(leftTitle) ? 1 : 0;\n      const rightSynthetic = isSyntheticShapeLabel(rightTitle) ? 1 : 0;\n      return leftRefPenalty - rightRefPenalty\n        || leftSynthetic - rightSynthetic\n        || leftTitle.localeCompare(rightTitle);\n    });\n\n    return sorted[0]!;\n  };\n\n  const aliasNameForSignature = (signature: string, hint?: string): string => {\n    const existing = aliasNameBySignature.get(signature);\n    if (existing) {\n      return existing;\n    }\n\n    const representative = getShapeSymbol(catalog, representativeShapeIdForSignature(signature));\n    const representativeName = representative.title ?? representative.id;\n    const rootHint = rootAliasHintBySignature.get(signature);\n    const contextualHint = hint ? compactAliasHint(joinTypeNameSegments(hint)) : undefined;\n    const representativeTypeName = !isSyntheticShapeLabel(representativeName) && !looksLikeHumanPhrase(representativeName)\n      ? formatTypeNameSegment(representativeName)\n      : undefined;\n    const baseName = rootHint\n      ?? representativeTypeName\n      ?? contextualHint\n      ?? formatTypeNameSegment(representative.id);\n    let candidate = baseName;\n    let suffix = 2;\n    while (usedAliasNames.has(candidate)) {\n      candidate = `${baseName}_${String(suffix)}`;\n      suffix += 1;\n    }\n\n    aliasNameBySignature.set(signature, candidate);\n    usedAliasNames.add(candidate);\n    return candidate;\n  };\n\n  const shouldAliasSignature = (signature: string): boolean =>\n    recursiveSignatures.has(signature) || (usageCountBySignature.get(signature) ?? 0) > 1;\n\n  const renderDeclarationShapeBody = (\n    shapeId: ShapeSymbolId,\n    stack: readonly ShapeSymbolId[],\n    aliasHint?: string,\n  ): string => {\n    const shape = getShapeSymbol(catalog, shapeId);\n    switch (shape.node.type) {\n      case \"anyOf\":\n      case \"oneOf\": {\n        const normalized = normalizedUnionRender(\n          shape.node.items,\n          stack,\n          aliasHint,\n          renderDeclarationShape,\n          true,\n        );\n        return normalized ?? renderShapeBody(catalog, shapeId, stack, aliasHint, renderDeclarationShape, true);\n      }\n      case \"graphqlUnion\": {\n        const normalized = normalizedUnionRender(shape.node.memberTypeIds, stack, aliasHint, renderDeclarationShape, true);\n        return normalized ?? renderShapeBody(catalog, shapeId, stack, aliasHint, renderDeclarationShape, true);\n      }\n      default:\n        return renderShapeBody(catalog, shapeId, stack, aliasHint, renderDeclarationShape, true);\n    }\n  };\n\n  const canonicalTypeForSignature = (signature: string, hint?: string): string => {\n    const existing = canonicalTypeBySignature.get(signature);\n    if (existing) {\n      return existing;\n    }\n\n    const aliasName = aliasNameForSignature(signature, hint);\n    canonicalTypeBySignature.set(signature, aliasName);\n    const representativeShapeId = representativeShapeIdForSignature(signature);\n    const body = renderDeclarationShapeBody(representativeShapeId, [representativeShapeId], aliasName);\n    const canonical = TYPE_ALIAS_REFERENCE_PATTERN.test(body) && body !== aliasName\n      ? body\n      : aliasName;\n    canonicalTypeBySignature.set(signature, canonical);\n    return canonical;\n  };\n\n  const renderDeclarationShape: RenderShape = (shapeId, options = {}) => {\n    const shape = getShapeSymbol(catalog, shapeId);\n    if (isInlineShapeNode(shape.node)) {\n      return renderInlineShapeNode(shape.node);\n    }\n\n    const signature = shapeSignature(shapeId);\n    if (shouldAliasSignature(signature)) {\n      usedAliasSignatures.add(signature);\n      return canonicalTypeForSignature(signature, options.aliasHint);\n    }\n\n    const stack = options.stack ?? [];\n    if (stack.includes(shapeId)) {\n      usedAliasSignatures.add(signature);\n      return canonicalTypeForSignature(signature, options.aliasHint);\n    }\n\n    return renderDeclarationShapeBody(shapeId, [...stack, shapeId], options.aliasHint);\n  };\n\n  const renderSelfContainedShape: RenderShape = (shapeId, options = {}) => {\n    const shape = getShapeSymbol(catalog, shapeId);\n    if (isInlineShapeNode(shape.node)) {\n      return renderInlineShapeNode(shape.node);\n    }\n\n    const stack = options.stack ?? [];\n    if (stack.includes(shapeId)) {\n      return \"unknown\";\n    }\n\n    switch (shape.node.type) {\n      case \"anyOf\":\n      case \"oneOf\": {\n        const normalized = normalizedUnionRender(\n          shape.node.items,\n          [...stack, shapeId],\n          options.aliasHint,\n          renderSelfContainedShape,\n          false,\n        );\n        return normalized ?? renderShapeBody(\n          catalog,\n          shapeId,\n          [...stack, shapeId],\n          options.aliasHint,\n          renderSelfContainedShape,\n          false,\n        );\n      }\n      case \"graphqlUnion\": {\n        const normalized = normalizedUnionRender(\n          shape.node.memberTypeIds,\n          [...stack, shapeId],\n          options.aliasHint,\n          renderSelfContainedShape,\n          false,\n        );\n        return normalized ?? renderShapeBody(\n          catalog,\n          shapeId,\n          [...stack, shapeId],\n          options.aliasHint,\n          renderSelfContainedShape,\n          false,\n        );\n      }\n    }\n\n    return renderShapeBody(\n      catalog,\n      shapeId,\n      [...stack, shapeId],\n      options.aliasHint,\n      renderSelfContainedShape,\n      false,\n    );\n  };\n\n  const supportingDeclarations = (): readonly string[] => {\n    const pending = [...usedAliasSignatures];\n    const emitted = new Set<string>();\n\n    while (pending.length > 0) {\n      const signature = pending.pop()!;\n      if (emitted.has(signature)) {\n        continue;\n      }\n\n      emitted.add(signature);\n      const representativeShapeId = representativeShapeIdForSignature(signature);\n      renderDeclarationShapeBody(representativeShapeId, [representativeShapeId], aliasNameForSignature(signature));\n\n      for (const discoveredSignature of usedAliasSignatures) {\n        if (!emitted.has(discoveredSignature)) {\n          pending.push(discoveredSignature);\n        }\n      }\n    }\n\n    return [...emitted]\n      .sort((left, right) => aliasNameForSignature(left).localeCompare(aliasNameForSignature(right)))\n      .map((signature) => {\n        const canonicalType = canonicalTypeForSignature(signature);\n        const representativeShapeId = representativeShapeIdForSignature(signature);\n        const aliasName = aliasNameForSignature(signature);\n        const representativeShape = getShapeSymbol(catalog, representativeShapeId);\n        const comment = documentationComment({\n          title: representativeShape.title,\n          docs: representativeShape.docs,\n          deprecated: representativeShape.deprecated,\n          includeTitle: true,\n        });\n        if (canonicalType !== aliasName) {\n          return comment\n            ? `${comment}\\ntype ${aliasName} = ${canonicalType};`\n            : `type ${aliasName} = ${canonicalType};`;\n        }\n        const body = renderDeclarationShapeBody(representativeShapeId, [representativeShapeId], aliasName);\n        if (body === aliasName) {\n          return \"\";\n        }\n\n        const declaration = `type ${aliasName} = ${body};`;\n        return comment ? `${comment}\\n${declaration}` : declaration;\n      })\n      .filter((declaration) => declaration.length > 0);\n  };\n\n  return {\n    renderSelfContainedShape,\n    renderDeclarationShape,\n    supportingDeclarations,\n  };\n};\n\nexport const projectedCatalogTypeRoots = (\n  projected: Pick<ProjectedCatalog, \"toolDescriptors\">,\n): readonly CatalogTypeRoot[] =>\n  Object.values(projected.toolDescriptors)\n    .sort((left, right) => left.toolPath.join(\".\").localeCompare(right.toolPath.join(\".\")))\n    .flatMap((descriptor) => [\n      {\n        shapeId: descriptor.callShapeId,\n        aliasHint: joinTypeNameSegments(...descriptor.toolPath, \"call\"),\n      },\n      ...(descriptor.resultShapeId\n        ? [{\n            shapeId: descriptor.resultShapeId,\n            aliasHint: joinTypeNameSegments(...descriptor.toolPath, \"result\"),\n          }]\n        : []),\n    ]);\n\nexport const shapeAllowsOmittedArgs = (catalog: CatalogV1, shapeId: ShapeSymbolId): boolean => {\n  const shape = getShapeSymbol(catalog, shapeId);\n\n  switch (shape.node.type) {\n    case \"ref\":\n      return shapeAllowsOmittedArgs(catalog, shape.node.target);\n    case \"object\":\n      return (shape.node.required ?? []).length === 0;\n    default:\n      return false;\n  }\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/prettier-format.ts",
    "content": "import { format } from \"prettier/standalone\";\nimport parserBabel from \"prettier/plugins/babel\";\nimport parserEstree from \"prettier/plugins/estree\";\nimport parserTypescript from \"prettier/plugins/typescript\";\n\nexport type PrettierParser = \"json\" | \"typescript\" | \"typescript-module\";\n\nconst plugins = [parserBabel, parserEstree, parserTypescript];\n\nconst formatCache = new Map<string, string>();\n\nfunction formatCacheKey(code: string, parser: PrettierParser): string {\n  return `${parser}::${code.length}::${code}`;\n}\n\nexport async function formatWithPrettier(\n  code: string,\n  parser: PrettierParser,\n): Promise<string> {\n  const key = formatCacheKey(code, parser);\n  const cached = formatCache.get(key);\n  if (cached) return cached;\n\n  try {\n    let input = code;\n    let unwrap = false;\n\n    if (parser === \"typescript\") {\n      input = `type __T = ${code}`;\n      unwrap = true;\n    }\n\n    const result = await format(input, {\n      parser: parser === \"typescript-module\" ? \"typescript\" : parser,\n      plugins,\n      printWidth: 60,\n      tabWidth: 2,\n      semi: true,\n      singleQuote: false,\n      trailingComma: \"all\",\n    });\n\n    let trimmed = result.trimEnd();\n\n    if (unwrap) {\n      trimmed = trimmed\n        .replace(/^type __T =\\s*/, \"\")\n        .replace(/;$/, \"\")\n        .trimEnd();\n    }\n\n    formatCache.set(key, trimmed);\n    return trimmed;\n  } catch {\n    return code;\n  }\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/schema-type-signature.ts",
    "content": "import * as JSONSchema from \"effect/JSONSchema\";\n\ntype JsonSchemaRecord = Record<string, unknown>;\n\nconst asRecord = (value: unknown): JsonSchemaRecord =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? value as JsonSchemaRecord\n    : {};\n\nconst asStringArray = (value: unknown): Array<string> =>\n  Array.isArray(value) ? value.filter((item): item is string => typeof item === \"string\") : [];\n\nconst truncate = (value: string, maxLength: number): string =>\n  value.length <= maxLength ? value : `${value.slice(0, Math.max(0, maxLength - 4))} ...`;\n\nconst propertyLabel = (name: string, schema: JsonSchemaRecord, optional: boolean): string =>\n  `${name}${optional ? \"?\" : \"\"}: ${schemaToTypeSignature(schema)}`;\n\nconst compositeLabel = (\n  key: \"oneOf\" | \"anyOf\" | \"allOf\",\n  schema: JsonSchemaRecord,\n): string | null => {\n  const items = Array.isArray(schema[key]) ? schema[key].map(asRecord) : [];\n  if (items.length === 0) {\n    return null;\n  }\n\n  const labels = items\n    .map((item) => schemaToTypeSignature(item))\n    .filter((label) => label.length > 0);\n\n  if (labels.length === 0) {\n    return null;\n  }\n\n  return labels.join(key === \"allOf\" ? \" & \" : \" | \");\n};\n\nexport const schemaToTypeSignature = (\n  input: unknown,\n  maxLength: number = 220,\n): string => {\n  const schema = asRecord(input);\n\n  if (typeof schema.$ref === \"string\") {\n    const ref = schema.$ref.trim();\n    return ref.length > 0 ? ref.split(\"/\").at(-1) ?? ref : \"unknown\";\n  }\n\n  if (\"const\" in schema) {\n    return JSON.stringify(schema.const);\n  }\n\n  const enumValues = Array.isArray(schema.enum) ? schema.enum : [];\n  if (enumValues.length > 0) {\n    return truncate(enumValues.map((value) => JSON.stringify(value)).join(\" | \"), maxLength);\n  }\n\n  const composite =\n    compositeLabel(\"oneOf\", schema)\n    ?? compositeLabel(\"anyOf\", schema)\n    ?? compositeLabel(\"allOf\", schema);\n  if (composite) {\n    return truncate(composite, maxLength);\n  }\n\n  if (schema.type === \"array\") {\n    const itemLabel = schema.items ? schemaToTypeSignature(schema.items, maxLength) : \"unknown\";\n    return truncate(`${itemLabel}[]`, maxLength);\n  }\n\n  if (schema.type === \"object\" || schema.properties) {\n    const properties = asRecord(schema.properties);\n    const keys = Object.keys(properties);\n    if (keys.length === 0) {\n      return schema.additionalProperties ? \"Record<string, unknown>\" : \"object\";\n    }\n\n    const required = new Set(asStringArray(schema.required));\n    const parts = keys.map((key) =>\n      propertyLabel(key, asRecord(properties[key]), !required.has(key))\n    );\n\n    return truncate(`{ ${parts.join(\", \")} }`, maxLength);\n  }\n\n  if (Array.isArray(schema.type)) {\n    return truncate(schema.type.join(\" | \"), maxLength);\n  }\n\n  if (typeof schema.type === \"string\") {\n    return schema.type;\n  }\n\n  return \"unknown\";\n};\n\nexport const deriveSchemaTypeSignature = (\n  schema: unknown,\n  maxLength?: number,\n): string => {\n  const schemaJson = deriveSchemaJson(schema);\n  return schemaJson ? schemaToTypeSignature(schemaJson, maxLength) : \"unknown\";\n};\n\nexport const deriveSchemaJson = (\n  schema: unknown,\n): JsonSchemaRecord | null => {\n  try {\n    return asRecord(JSONSchema.make(schema as any));\n  } catch {\n    return null;\n  }\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/reconcile.ts",
    "content": "import type {\n  AccountId,\n  Source,\n  WorkspaceId,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport { RuntimeLocalWorkspaceService } from \"../../local/runtime-context\";\nimport { SourceArtifactStore } from \"../../local/storage\";\nimport { getSourceAdapterForSource } from \"../../sources/source-adapters\";\nimport { RuntimeSourceStoreService } from \"../../sources/source-store\";\nimport { RuntimeSourceCatalogSyncService } from \"./sync\";\n\nconst shouldReconcileSource = (source: Source): boolean =>\n  source.enabled\n  && source.status === \"connected\"\n  && getSourceAdapterForSource(source).catalogKind !== \"internal\";\n\nexport const reconcileMissingSourceCatalogArtifacts = (input: {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n}): Effect.Effect<\n  void,\n  Error,\n  | RuntimeLocalWorkspaceService\n  | SourceArtifactStore\n  | RuntimeSourceStoreService\n  | RuntimeSourceCatalogSyncService\n> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const sourceStore = yield* RuntimeSourceStoreService;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n    const sourceCatalogSync = yield* RuntimeSourceCatalogSyncService;\n    const sources = yield* sourceStore.loadSourcesInWorkspace(input.workspaceId, {\n      actorAccountId: input.actorAccountId,\n    });\n\n    for (const source of sources) {\n      if (!shouldReconcileSource(source)) {\n        continue;\n      }\n\n      const artifact = yield* sourceArtifactStore.read({\n        context: runtimeLocalWorkspace.context,\n        sourceId: source.id,\n      });\n      if (artifact !== null) {\n        continue;\n      }\n\n      yield* sourceCatalogSync.sync({\n        source,\n        actorAccountId: input.actorAccountId,\n      }).pipe(\n        Effect.catchAll(() => Effect.void),\n      );\n    }\n  }).pipe(\n    Effect.withSpan(\"source.catalog.reconcile_missing\", {\n      attributes: {\n        \"executor.workspace.id\": input.workspaceId,\n      },\n    }),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/runtime.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport type {\n  Source,\n  StoredSourceCatalogRevisionRecord,\n  StoredSourceRecord,\n} from \"#schema\";\nimport {\n  SourceCatalogIdSchema,\n  SourceCatalogRevisionIdSchema,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\n\nimport {\n  createCatalogSnapshotV1,\n  createEmptyCatalogV1,\n  projectCatalogForAgentSdk,\n} from \"@executor/ir/catalog\";\nimport {\n  CapabilityIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ResourceIdSchema,\n  ResponseSetIdSchema,\n  ScopeIdSchema,\n  ShapeSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type { CatalogV1, ProvenanceRef } from \"@executor/ir/model\";\nimport {\n  createCatalogTypeProjector,\n  formatTypeNameSegment,\n  joinTypeNameSegments,\n  projectedCatalogTypeRoots,\n} from \"../catalog-typescript\";\nimport {\n  expandCatalogToolByPath,\n  expandCatalogTools,\n  type LoadedSourceCatalog,\n} from \"./runtime\";\n\nconst put = <K extends string, V>(record: Record<K, V>, key: K, value: V) => {\n  record[key] = value;\n};\n\nconst docId = DocumentIdSchema.make(\"doc_graphql\");\nconst baseProvenance = (pointer: string): ProvenanceRef[] => [{\n  relation: \"declared\",\n  documentId: docId,\n  pointer,\n}];\n\nconst createGraphqlCatalog = (): CatalogV1 => {\n  const catalog = createEmptyCatalogV1();\n  const resourceId = ResourceIdSchema.make(\"res_graphql\");\n  const scopeId = ScopeIdSchema.make(\"scope_graphql\");\n  const stringShapeId = ShapeSymbolIdSchema.make(\"shape_string\");\n  const teamFilterShapeId = ShapeSymbolIdSchema.make(\"shape_team_filter\");\n  const callShapeId = ShapeSymbolIdSchema.make(\"shape_team_query_args\");\n  const resultShapeId = ShapeSymbolIdSchema.make(\"shape_team_connection\");\n  const executableId = ExecutableIdSchema.make(\"exec_graphql_teams\");\n  const capabilityId = CapabilityIdSchema.make(\"cap_graphql_teams\");\n  const responseSetId = ResponseSetIdSchema.make(\"response_set_graphql_teams\");\n\n  put(catalog.documents as Record<typeof docId, CatalogV1[\"documents\"][typeof docId]>, docId, {\n    id: docId,\n    kind: \"graphql-schema\",\n    title: \"Linear GraphQL\",\n    fetchedAt: \"2026-03-14T00:00:00.000Z\",\n    rawRef: \"memory://linear/graphql\",\n  });\n\n  put(catalog.resources as Record<typeof resourceId, CatalogV1[\"resources\"][typeof resourceId]>, resourceId, {\n    id: resourceId,\n    documentId: docId,\n    canonicalUri: \"https://api.linear.app/graphql\",\n    baseUri: \"https://api.linear.app/graphql\",\n    anchors: {},\n    dynamicAnchors: {},\n    synthetic: false,\n    provenance: baseProvenance(\"#\"),\n  });\n\n  put(catalog.scopes as Record<typeof scopeId, CatalogV1[\"scopes\"][typeof scopeId]>, scopeId, {\n    id: scopeId,\n    kind: \"service\",\n    name: \"Linear\",\n    namespace: \"linear\",\n    synthetic: false,\n    provenance: baseProvenance(\"#\"),\n  });\n\n  put(catalog.symbols as Record<typeof stringShapeId, CatalogV1[\"symbols\"][typeof stringShapeId]>, stringShapeId, {\n    id: stringShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"String\",\n    node: {\n      type: \"scalar\",\n      scalar: \"string\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/scalar/String\"),\n  });\n\n  put(catalog.symbols as Record<typeof teamFilterShapeId, CatalogV1[\"symbols\"][typeof teamFilterShapeId]>, teamFilterShapeId, {\n    id: teamFilterShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"TeamFilter\",\n    node: {\n      type: \"object\",\n      fields: {\n        name: {\n          shapeId: stringShapeId,\n          docs: {\n            description: \"Filter teams by name.\",\n          },\n        },\n      },\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/input/TeamFilter\"),\n  });\n\n  put(catalog.symbols as Record<typeof callShapeId, CatalogV1[\"symbols\"][typeof callShapeId]>, callShapeId, {\n    id: callShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"TeamsArgs\",\n    node: {\n      type: \"object\",\n      fields: {\n        filter: {\n          shapeId: teamFilterShapeId,\n          docs: {\n            description: \"Filter returned teams.\",\n          },\n        },\n        after: {\n          shapeId: stringShapeId,\n          docs: {\n            description: \"A cursor to be used with first for forward pagination\",\n          },\n        },\n        before: {\n          shapeId: stringShapeId,\n          docs: {\n            description: \"A cursor to be used with last for backward pagination.\",\n          },\n        },\n      },\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/query/teams/args\"),\n  });\n\n  put(catalog.symbols as Record<typeof resultShapeId, CatalogV1[\"symbols\"][typeof resultShapeId]>, resultShapeId, {\n    id: resultShapeId,\n    kind: \"shape\",\n    resourceId,\n    title: \"TeamConnection\",\n    node: {\n      type: \"object\",\n      fields: {\n        nodes: {\n          shapeId: teamFilterShapeId,\n        },\n      },\n      additionalProperties: false,\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/query/teams/result\"),\n  });\n\n  put(catalog.responseSets as Record<typeof responseSetId, CatalogV1[\"responseSets\"][typeof responseSetId]>, responseSetId, {\n    id: responseSetId,\n    variants: [],\n    synthetic: false,\n    provenance: baseProvenance(\"#/responses\"),\n  });\n\n  put(catalog.capabilities as Record<typeof capabilityId, CatalogV1[\"capabilities\"][typeof capabilityId]>, capabilityId, {\n    id: capabilityId,\n    serviceScopeId: scopeId,\n    surface: {\n      toolPath: [\"linear\", \"teams\"],\n      title: \"Teams\",\n      summary: \"List teams\",\n    },\n    semantics: {\n      effect: \"read\",\n      safe: true,\n      idempotent: true,\n      destructive: false,\n    },\n    auth: { kind: \"none\" },\n    interaction: {\n      approval: { mayRequire: false },\n      elicitation: { mayRequest: false },\n      resume: { supported: false },\n    },\n    executableIds: [executableId],\n    preferredExecutableId: executableId,\n    synthetic: false,\n    provenance: baseProvenance(\"#/query/teams\"),\n  });\n\n  put(catalog.executables as Record<typeof executableId, CatalogV1[\"executables\"][typeof executableId]>, executableId, {\n    id: executableId,\n    capabilityId,\n    scopeId,\n    adapterKey: \"graphql\",\n    bindingVersion: 1,\n    binding: {\n      kind: \"graphql\",\n      toolKind: \"field\",\n      toolId: \"teams\",\n      rawToolId: \"teams\",\n      group: \"query\",\n      leaf: \"teams\",\n      fieldName: \"teams\",\n      operationType: \"query\",\n      operationName: \"TeamsQuery\",\n      operationDocument: \"query TeamsQuery { teams { nodes { id } } }\",\n      queryTypeName: \"Query\",\n      mutationTypeName: null,\n      subscriptionTypeName: null,\n    },\n    projection: {\n      responseSetId,\n      callShapeId,\n      resultDataShapeId: resultShapeId,\n    },\n    display: {\n      protocol: \"graphql\",\n      method: \"query\",\n      pathTemplate: \"teams\",\n      operationId: \"teams\",\n      group: \"query\",\n      leaf: \"teams\",\n      rawToolId: \"teams\",\n      title: \"Teams\",\n      summary: \"List teams\",\n    },\n    synthetic: false,\n    provenance: baseProvenance(\"#/query/teams\"),\n  });\n\n  return catalog;\n};\n\nconst createLoadedCatalog = (options?: {\n  mutateCatalog?: (catalog: CatalogV1) => void;\n}): LoadedSourceCatalog => {\n  const catalog = createGraphqlCatalog();\n  options?.mutateCatalog?.(catalog);\n  const projected = projectCatalogForAgentSdk({\n    catalog,\n  });\n  const snapshot = createCatalogSnapshotV1({\n    import: {\n      sourceKind: \"graphql-schema\",\n      adapterKey: \"graphql\",\n      importerVersion: \"test\",\n      importedAt: \"2026-03-14T00:00:00.000Z\",\n      sourceConfigHash: \"hash_test\",\n    },\n    catalog,\n  });\n\n  const source = {\n    id: SourceIdSchema.make(\"src_linear\"),\n    workspaceId: WorkspaceIdSchema.make(\"ws_linear\"),\n    name: \"Linear\",\n    kind: \"graphql-schema\",\n    endpoint: \"https://api.linear.app/graphql\",\n    status: \"connected\",\n    enabled: true,\n    namespace: \"linear\",\n    bindingVersion: 1,\n    binding: {},\n    importAuthPolicy: \"reuse_runtime\",\n    importAuth: { kind: \"none\" },\n    auth: { kind: \"none\" },\n    sourceHash: \"hash_test\",\n    lastError: null,\n    createdAt: 0,\n    updatedAt: 0,\n  } satisfies Source;\n\n  const sourceRecord = {\n    id: source.id,\n    workspaceId: source.workspaceId,\n    catalogId: SourceCatalogIdSchema.make(\"catalog_linear\"),\n    catalogRevisionId: SourceCatalogRevisionIdSchema.make(\"catalog_revision_linear\"),\n    name: source.name,\n    kind: source.kind,\n    endpoint: source.endpoint,\n    status: source.status,\n    enabled: source.enabled,\n    namespace: source.namespace,\n    importAuthPolicy: source.importAuthPolicy,\n    bindingConfigJson: \"{}\",\n    sourceHash: source.sourceHash,\n    lastError: source.lastError,\n    createdAt: source.createdAt,\n    updatedAt: source.updatedAt,\n  } satisfies StoredSourceRecord;\n\n  const revision = {\n    id: SourceCatalogRevisionIdSchema.make(\"catalog_revision_linear\"),\n    catalogId: SourceCatalogIdSchema.make(\"catalog_linear\"),\n    revisionNumber: 1,\n    sourceConfigJson: \"{}\",\n    importMetadataJson: \"{}\",\n    importMetadataHash: \"hash_import\",\n    snapshotHash: \"hash_snapshot\",\n    createdAt: 0,\n    updatedAt: 0,\n  } satisfies StoredSourceCatalogRevisionRecord;\n\n  return {\n    source,\n    sourceRecord,\n    revision,\n    snapshot,\n    catalog,\n    projected,\n    typeProjector: createCatalogTypeProjector({\n      catalog: projected.catalog,\n      roots: projectedCatalogTypeRoots(projected),\n    }),\n    importMetadata: snapshot.import,\n  };\n};\n\ndescribe(\"source-catalog-runtime\", () => {\n  it(\"formats declaration aliases as safe PascalCase names\", () => {\n    expect(formatTypeNameSegment(\"teams_call\")).toBe(\"TeamsCall\");\n    expect(formatTypeNameSegment(\"120 factors 1 member 1\")).toBe(\"T120Factors1Member1\");\n    expect(joinTypeNameSegments(\"linear\", \"teamsSearch\", \"call\")).toBe(\"LinearTeamsSearchCall\");\n  });\n\n  it.effect(\"projects friendly schemas for discover and inspection consumers\", () =>\n    Effect.gen(function* () {\n      const [tool] = yield* expandCatalogTools({\n        catalogs: [createLoadedCatalog()],\n        includeSchemas: true,\n      });\n\n      expect(tool).toBeDefined();\n      expect(tool?.descriptor.contract?.inputSchema).toMatchObject({\n        type: \"object\",\n        properties: {\n          filter: {\n            title: \"TeamFilter\",\n          },\n          after: {\n            type: \"string\",\n          },\n          before: {\n            type: \"string\",\n          },\n        },\n      });\n\n      const serializedInput = JSON.stringify(tool?.descriptor.contract?.inputSchema);\n      expect(serializedInput).not.toContain(\"\\\"$ref\\\":\\\"#/$defs/shape_\");\n      expect(serializedInput).not.toContain(\"\\\"shape_\");\n      expect(tool?.descriptor.contract?.inputTypePreview).toContain(\"filter?: {\");\n      expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"nodes?: {\");\n    }));\n\n  it.effect(\"can skip type previews when only list metadata is needed\", () =>\n    Effect.gen(function* () {\n      const [tool] = yield* expandCatalogTools({\n        catalogs: [createLoadedCatalog()],\n        includeSchemas: false,\n        includeTypePreviews: false,\n      });\n\n      expect(tool).toBeDefined();\n      expect(tool?.descriptor.contract?.inputSchema).toBeUndefined();\n      expect(tool?.descriptor.contract?.outputSchema).toBeUndefined();\n      expect(tool?.descriptor.contract?.inputTypePreview).toBeUndefined();\n      expect(tool?.descriptor.contract?.outputTypePreview).toBeUndefined();\n    }));\n\n  it.effect(\"projects a single tool by path without expanding the whole catalog\", () =>\n    Effect.gen(function* () {\n      const tool = yield* expandCatalogToolByPath({\n        catalogs: [createLoadedCatalog()],\n        path: \"linear.teams\",\n        includeSchemas: true,\n      });\n\n      expect(tool).not.toBeNull();\n      expect(tool?.path).toBe(\"linear.teams\");\n      expect(tool?.descriptor.contract?.inputSchema).toMatchObject({\n        type: \"object\",\n        properties: {\n          filter: {\n            title: \"TeamFilter\",\n          },\n        },\n      });\n    }));\n\n  it.effect(\"normalizes object unions into discriminated unions with shared fields\", () =>\n    Effect.gen(function* () {\n      const tool = yield* expandCatalogToolByPath({\n        catalogs: [createLoadedCatalog({\n          mutateCatalog: (catalog) => {\n            const stringShapeId = ShapeSymbolIdSchema.make(\"shape_string\");\n            const numberShapeId = ShapeSymbolIdSchema.make(\"shape_number\");\n            const blockedActionShapeId = ShapeSymbolIdSchema.make(\"shape_action_blocked\");\n            const unblockedActionShapeId = ShapeSymbolIdSchema.make(\"shape_action_unblocked\");\n            const routeBlockedActionShapeId = ShapeSymbolIdSchema.make(\"shape_action_route_blocked\");\n            const routeShapeId = ShapeSymbolIdSchema.make(\"shape_route\");\n            const blockedShapeId = ShapeSymbolIdSchema.make(\"shape_abuse_blocked\");\n            const unblockedShapeId = ShapeSymbolIdSchema.make(\"shape_abuse_unblocked\");\n            const routeBlockedShapeId = ShapeSymbolIdSchema.make(\"shape_abuse_route_blocked\");\n            const unionShapeId = ShapeSymbolIdSchema.make(\"shape_abuse_union\");\n            const executable = Object.values(catalog.executables)[0]!;\n            const resourceId = catalog.symbols[stringShapeId]?.kind === \"shape\"\n              ? catalog.symbols[stringShapeId].resourceId\n              : undefined;\n\n            put(catalog.symbols as Record<typeof numberShapeId, CatalogV1[\"symbols\"][typeof numberShapeId]>, numberShapeId, {\n              id: numberShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"Number\",\n              node: {\n                type: \"scalar\",\n                scalar: \"number\",\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/scalar/Number\"),\n            });\n\n            for (const [shapeId, action] of [\n              [blockedActionShapeId, \"blocked\"],\n              [unblockedActionShapeId, \"unblocked\"],\n              [routeBlockedActionShapeId, \"route-blocked\"],\n            ] as const) {\n              put(catalog.symbols as Record<typeof shapeId, CatalogV1[\"symbols\"][typeof shapeId]>, shapeId, {\n                id: shapeId,\n                kind: \"shape\",\n                ...(resourceId ? { resourceId } : {}),\n                title: String(action),\n                node: {\n                  type: \"const\",\n                  value: action,\n                },\n                synthetic: false,\n                provenance: baseProvenance(`#/const/${action}`),\n              });\n            }\n\n            put(catalog.symbols as Record<typeof routeShapeId, CatalogV1[\"symbols\"][typeof routeShapeId]>, routeShapeId, {\n              id: routeShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"RouteInfo\",\n              node: {\n                type: \"object\",\n                fields: {\n                  source: {\n                    shapeId: stringShapeId,\n                  },\n                },\n                required: [\"source\"],\n                additionalProperties: false,\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/route\"),\n            });\n\n            put(catalog.symbols as Record<typeof blockedShapeId, CatalogV1[\"symbols\"][typeof blockedShapeId]>, blockedShapeId, {\n              id: blockedShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"BlockedHistoryItem\",\n              node: {\n                type: \"object\",\n                fields: {\n                  action: { shapeId: blockedActionShapeId },\n                  actor: { shapeId: stringShapeId },\n                  createdAt: { shapeId: numberShapeId },\n                  reason: { shapeId: stringShapeId },\n                  statusCode: { shapeId: numberShapeId },\n                },\n                required: [\"action\", \"createdAt\", \"reason\", \"statusCode\"],\n                additionalProperties: false,\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/blocked\"),\n            });\n\n            put(catalog.symbols as Record<typeof unblockedShapeId, CatalogV1[\"symbols\"][typeof unblockedShapeId]>, unblockedShapeId, {\n              id: unblockedShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"UnblockedHistoryItem\",\n              node: {\n                type: \"object\",\n                fields: {\n                  action: { shapeId: unblockedActionShapeId },\n                  actor: { shapeId: stringShapeId },\n                  createdAt: { shapeId: numberShapeId },\n                },\n                required: [\"action\", \"createdAt\"],\n                additionalProperties: false,\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/unblocked\"),\n            });\n\n            put(catalog.symbols as Record<typeof routeBlockedShapeId, CatalogV1[\"symbols\"][typeof routeBlockedShapeId]>, routeBlockedShapeId, {\n              id: routeBlockedShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"RouteBlockedHistoryItem\",\n              node: {\n                type: \"object\",\n                fields: {\n                  action: { shapeId: routeBlockedActionShapeId },\n                  actor: { shapeId: stringShapeId },\n                  createdAt: { shapeId: numberShapeId },\n                  reason: { shapeId: stringShapeId },\n                  route: { shapeId: routeShapeId },\n                },\n                required: [\"action\", \"createdAt\", \"reason\", \"route\"],\n                additionalProperties: false,\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/routeBlocked\"),\n            });\n\n            put(catalog.symbols as Record<typeof unionShapeId, CatalogV1[\"symbols\"][typeof unionShapeId]>, unionShapeId, {\n              id: unionShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"AbuseBlockHistoryItem\",\n              node: {\n                type: \"oneOf\",\n                items: [blockedShapeId, unblockedShapeId, routeBlockedShapeId],\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/union\"),\n            });\n\n            put(catalog.executables as Record<typeof executable.id, CatalogV1[\"executables\"][typeof executable.id]>, executable.id, {\n              ...executable,\n              projection: {\n                ...executable.projection,\n                resultDataShapeId: unionShapeId,\n              },\n            });\n          },\n        })],\n        path: \"linear.teams\",\n        includeSchemas: true,\n      });\n\n      expect(tool).not.toBeNull();\n      expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"actor?: string;\");\n      expect(tool?.descriptor.contract?.outputTypePreview).toContain('action: \"blocked\";');\n      expect(tool?.descriptor.contract?.outputTypePreview).toContain('action: \"unblocked\";');\n      expect(tool?.descriptor.contract?.outputTypePreview).toContain('action: \"route-blocked\";');\n      expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"& (\");\n      expect(tool?.descriptor.contract?.outputTypePreview).not.toContain(\"Member2\");\n    }));\n\n  it.effect(\"uses the shared TS projector for unsupported preview shapes\", () =>\n    Effect.gen(function* () {\n      const tool = yield* expandCatalogToolByPath({\n        catalogs: [createLoadedCatalog({\n          mutateCatalog: (catalog) => {\n            const unsupportedShapeId = ShapeSymbolIdSchema.make(\"shape_unsupported_not\");\n            const executable = Object.values(catalog.executables)[0]!;\n            const callShape = catalog.symbols[executable.projection.callShapeId];\n            const resourceId = callShape?.kind === \"shape\" ? callShape.resourceId : undefined;\n            if (!callShape || callShape.kind !== \"shape\" || callShape.node.type !== \"object\") {\n              throw new Error(\"Expected object argument shape in fixture\");\n            }\n\n            put(catalog.symbols as Record<typeof unsupportedShapeId, CatalogV1[\"symbols\"][typeof unsupportedShapeId]>, unsupportedShapeId, {\n              id: unsupportedShapeId,\n              kind: \"shape\",\n              ...(resourceId ? { resourceId } : {}),\n              title: \"UnsupportedNot\",\n              node: {\n                type: \"not\",\n                itemShapeId: callShape.node.fields.filter!.shapeId,\n              },\n              synthetic: false,\n              provenance: baseProvenance(\"#/unsupported/not\"),\n            });\n\n            put(catalog.symbols as Record<typeof callShape.id, CatalogV1[\"symbols\"][typeof callShape.id]>, callShape.id, {\n              ...callShape,\n              node: {\n                ...callShape.node,\n                fields: {\n                  ...callShape.node.fields,\n                  unsupported: {\n                    shapeId: unsupportedShapeId,\n                  },\n                },\n              },\n            });\n          },\n        })],\n        path: \"linear.teams\",\n        includeSchemas: true,\n      });\n\n      expect(tool).not.toBeNull();\n      expect(tool?.descriptor.contract?.inputTypePreview).toContain(\"unsupported?: unknown;\");\n    }));\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/runtime.ts",
    "content": "import {\n  type ToolCatalogEntry,\n  type ToolDescriptor as CatalogToolDescriptor,\n} from \"@executor/codemode-core\";\nimport type {\n  AccountId,\n  Source,\n  StoredSourceRecord,\n  StoredSourceCatalogRevisionRecord,\n  WorkspaceId,\n} from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\n\nimport {\n  decodeCatalogSnapshotV1,\n  projectCatalogForAgentSdk,\n  type ProjectedCatalog,\n} from \"@executor/ir/catalog\";\nimport type { ShapeSymbolId } from \"@executor/ir/ids\";\nimport type {\n  Capability,\n  CatalogSnapshotV1,\n  CatalogV1,\n  Executable,\n  ShapeSymbol,\n} from \"@executor/ir/model\";\nimport { LocalSourceArtifactMissingError } from \"../../local/errors\";\nimport {\n  createCatalogTypeProjector,\n  documentationComment,\n  joinTypeNameSegments,\n  projectedCatalogTypeRoots,\n  shapeAllowsOmittedArgs,\n  type CatalogTypeProjector,\n} from \"../catalog-typescript\";\nimport { formatWithPrettier } from \"../prettier-format\";\nimport {\n  RuntimeLocalWorkspaceService,\n  type RuntimeLocalWorkspaceState,\n} from \"../../local/runtime-context\";\nimport type { LocalSourceArtifact } from \"../../local/source-artifacts\";\nimport {\n  SourceArtifactStore,\n  type SourceArtifactStoreShape,\n} from \"../../local/storage\";\nimport {\n  RuntimeSourceStoreService,\n  type RuntimeSourceStore,\n} from \"../../sources/source-store\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\ntype CatalogImportMetadata = CatalogSnapshotV1[\"import\"];\n\ntype ProjectedToolDescriptor = ProjectedCatalog[\"toolDescriptors\"][keyof ProjectedCatalog[\"toolDescriptors\"]];\n\nexport type LoadedSourceCatalog = {\n  source: Source;\n  sourceRecord: StoredSourceRecord;\n  revision: StoredSourceCatalogRevisionRecord;\n  snapshot: CatalogSnapshotV1;\n  catalog: CatalogV1;\n  projected: ProjectedCatalog;\n  typeProjector: CatalogTypeProjector;\n  importMetadata: CatalogImportMetadata;\n};\n\nexport type LoadedSourceCatalogTool = {\n  path: string;\n  searchNamespace: string;\n  searchText: string;\n  source: Source;\n  sourceRecord: StoredSourceRecord;\n  revision: StoredSourceCatalogRevisionRecord;\n  capabilityId: keyof CatalogV1[\"capabilities\"];\n  executableId: keyof CatalogV1[\"executables\"];\n  capability: Capability;\n  executable: Executable;\n  projectedDescriptor: ProjectedToolDescriptor;\n  descriptor: CatalogToolDescriptor;\n  projectedCatalog: CatalogV1;\n  typeProjector: CatalogTypeProjector;\n};\n\nexport type LoadedSourceCatalogToolIndexEntry = Omit<\n  LoadedSourceCatalogTool,\n  \"revision\" | \"projectedDescriptor\" | \"typeProjector\"\n>;\n\nexport type LoadedSourceCatalogToolContractSide = {\n  shapeId: string | null;\n  typePreview: string | null;\n  typeDeclaration: string | null;\n  schemaJson: string | null;\n  exampleJson: string | null;\n};\n\nexport type LoadedSourceCatalogToolContract = {\n  callSignature: string;\n  callDeclaration: string;\n  callShapeId: string;\n  resultShapeId: string | null;\n  responseSetId: string;\n  input: LoadedSourceCatalogToolContractSide;\n  output: LoadedSourceCatalogToolContractSide;\n};\n\nexport const catalogToolCatalogEntry = (input: {\n  tool: LoadedSourceCatalogToolIndexEntry;\n  score: (queryTokens: readonly string[]) => number;\n}): ToolCatalogEntry => ({\n  descriptor: input.tool.descriptor,\n  namespace: input.tool.searchNamespace,\n  searchText: input.tool.searchText,\n  score: input.score,\n});\n\nconst catalogNamespaceFromPath = (path: string): string => {\n  const [first, second] = path.split(\".\");\n  return second ? `${first}.${second}` : first;\n};\n\nconst descriptorPath = (descriptor: CatalogToolDescriptor): string => descriptor.path;\n\nconst optionalJsonString = (value: unknown): string | null => {\n  if (value === undefined || value === null) {\n    return null;\n  }\n\n  return JSON.stringify(value, null, 2);\n};\n\nconst projectedToolPath = (projected: ProjectedCatalog, capability: Capability): string =>\n  projected.toolDescriptors[capability.id]?.toolPath.join(\".\") ?? \"\";\n\nconst chooseExecutable = (catalog: CatalogV1, capability: Capability): Executable => {\n  const preferred =\n    capability.preferredExecutableId !== undefined\n      ? catalog.executables[capability.preferredExecutableId]\n      : undefined;\n  if (preferred) {\n    return preferred;\n  }\n\n  const first = capability.executableIds\n    .map((id) => catalog.executables[id])\n    .find((entry): entry is Executable => entry !== undefined);\n  if (!first) {\n    throw new Error(`Capability ${capability.id} has no executable`);\n  }\n  return first;\n};\n\nconst asShape = (catalog: CatalogV1, shapeId: string | undefined): ShapeSymbol | undefined => {\n  if (!shapeId) {\n    return undefined;\n  }\n\n  const symbol = catalog.symbols[shapeId];\n  return symbol?.kind === \"shape\" ? symbol : undefined;\n};\n\nexport const shapeToJsonSchema = (catalog: CatalogV1, rootShapeId: string): unknown => {\n  const defs: Record<string, unknown> = {};\n  const inlineStack = new Set<string>();\n  const buildingDefs = new Set<string>();\n  const builtDefs = new Set<string>();\n  const defNameByShapeId = new Map<string, string>();\n  const usedDefNames = new Set<string>();\n\n  const sanitizeDefName = (value: string): string | null => {\n    const trimmed = value.trim();\n    if (trimmed.length === 0) {\n      return null;\n    }\n\n    const sanitized = trimmed\n      .replace(/[^A-Za-z0-9_]+/g, \"_\")\n      .replace(/_+/g, \"_\")\n      .replace(/^_+|_+$/g, \"\");\n\n    if (sanitized.length === 0) {\n      return null;\n    }\n\n    return /^[A-Za-z_]/.test(sanitized) ? sanitized : `shape_${sanitized}`;\n  };\n\n  const shapeLabelCandidates = (shapeId: string, suggestions: readonly string[]): string[] => {\n    const shape = asShape(catalog, shapeId);\n    return [\n      ...suggestions,\n      shape?.title,\n      shapeId,\n    ].flatMap((candidate) =>\n      typeof candidate === \"string\" && candidate.trim().length > 0\n        ? [candidate]\n        : [],\n    );\n  };\n\n  const defNameFor = (shapeId: string, suggestions: readonly string[]): string => {\n    const existing = defNameByShapeId.get(shapeId);\n    if (existing) {\n      return existing;\n    }\n\n    const candidates = shapeLabelCandidates(shapeId, suggestions);\n    for (const candidate of candidates) {\n      const sanitized = sanitizeDefName(candidate);\n      if (!sanitized) {\n        continue;\n      }\n\n      if (!usedDefNames.has(sanitized)) {\n        defNameByShapeId.set(shapeId, sanitized);\n        usedDefNames.add(sanitized);\n        return sanitized;\n      }\n    }\n\n    const fallbackBase = sanitizeDefName(shapeId) ?? \"shape\";\n    let fallback = fallbackBase;\n    let index = 2;\n    while (usedDefNames.has(fallback)) {\n      fallback = `${fallbackBase}_${String(index)}`;\n      index += 1;\n    }\n\n    defNameByShapeId.set(shapeId, fallback);\n    usedDefNames.add(fallback);\n    return fallback;\n  };\n\n  const primaryLabel = (shapeId: string, suggestions: readonly string[], fallback: string): string =>\n    shapeLabelCandidates(shapeId, suggestions)[0] ?? fallback;\n\n  const isShallowInlineCandidate = (\n    shapeId: string,\n    depth: number,\n    seen: ReadonlySet<string>,\n  ): boolean => {\n    const shape = asShape(catalog, shapeId);\n    if (!shape) {\n      return true;\n    }\n\n    if (depth < 0 || seen.has(shapeId)) {\n      return false;\n    }\n\n    const nextSeen = new Set(seen);\n    nextSeen.add(shapeId);\n\n    return Match.value(shape.node).pipe(\n      Match.when({ type: \"unknown\" }, () => true),\n      Match.when({ type: \"const\" }, () => true),\n      Match.when({ type: \"enum\" }, () => true),\n      Match.when({ type: \"scalar\" }, () => true),\n      Match.when({ type: \"ref\" }, (node) =>\n        isShallowInlineCandidate(node.target, depth, nextSeen)),\n      Match.when({ type: \"nullable\" }, (node) =>\n        isShallowInlineCandidate(node.itemShapeId, depth - 1, nextSeen)),\n      Match.when({ type: \"array\" }, (node) =>\n        isShallowInlineCandidate(node.itemShapeId, depth - 1, nextSeen)),\n      Match.when({ type: \"object\" }, (node) => {\n        const fields = Object.values(node.fields);\n        return fields.length <= 8\n          && fields.every((field) =>\n            isShallowInlineCandidate(field.shapeId, depth - 1, nextSeen));\n      }),\n      Match.orElse(() => false),\n    );\n  };\n\n  const shouldInlineRefTarget = (shapeId: string): boolean =>\n    isShallowInlineCandidate(shapeId, 2, new Set<string>());\n\n  const buildInline = (\n    shapeId: string,\n    suggestions: readonly string[] = [],\n  ): Record<string, unknown> => {\n    if (inlineStack.has(shapeId)) {\n      return buildRef(shapeId, suggestions);\n    }\n\n    const shape = asShape(catalog, shapeId);\n    if (!shape) {\n      return {};\n    }\n\n    inlineStack.add(shapeId);\n    try {\n      return buildSchema(shapeId, suggestions);\n    } finally {\n      inlineStack.delete(shapeId);\n    }\n  };\n\n  const buildRef = (\n    shapeId: string,\n    suggestions: readonly string[] = [],\n  ): { $ref: string } => {\n    const defName = defNameFor(shapeId, suggestions);\n    if (builtDefs.has(shapeId) || buildingDefs.has(shapeId)) {\n      return { $ref: `#/$defs/${defName}` };\n    }\n\n    const shape = asShape(catalog, shapeId);\n    buildingDefs.add(shapeId);\n    const alreadyInline = inlineStack.has(shapeId);\n    if (!alreadyInline) {\n      inlineStack.add(shapeId);\n    }\n\n    try {\n      defs[defName] = shape\n        ? buildSchema(shapeId, suggestions)\n        : {};\n      builtDefs.add(shapeId);\n    } finally {\n      buildingDefs.delete(shapeId);\n      if (!alreadyInline) {\n        inlineStack.delete(shapeId);\n      }\n    }\n\n    return { $ref: `#/$defs/${defName}` };\n  };\n\n  const buildSchema = (\n    shapeId: string,\n    suggestions: readonly string[] = [],\n  ): Record<string, unknown> => {\n    const shape = asShape(catalog, shapeId);\n    if (!shape) {\n      return {};\n    }\n\n    const label = primaryLabel(shapeId, suggestions, \"shape\");\n    const withDocs = (schemaValue: Record<string, unknown>): Record<string, unknown> => ({\n      ...(shape.title ? { title: shape.title } : {}),\n      ...(shape.docs?.description ? { description: shape.docs.description } : {}),\n      ...schemaValue,\n    });\n\n    return Match.value(shape.node).pipe(\n      Match.when({ type: \"unknown\" }, () => withDocs({})),\n      Match.when({ type: \"const\" }, (node) => withDocs({ const: node.value })),\n      Match.when({ type: \"enum\" }, (node) => withDocs({ enum: node.values })),\n      Match.when({ type: \"scalar\" }, (node) =>\n        withDocs({\n          type: node.scalar === \"bytes\" ? \"string\" : node.scalar,\n          ...(node.scalar === \"bytes\" ? { format: \"binary\" } : {}),\n          ...(node.format ? { format: node.format } : {}),\n          ...node.constraints,\n        })),\n      Match.when({ type: \"ref\" }, (node) =>\n        shouldInlineRefTarget(node.target)\n          ? buildInline(node.target, suggestions)\n          : buildRef(node.target, suggestions)),\n      Match.when({ type: \"nullable\" }, (node) =>\n        withDocs({\n          anyOf: [\n            buildInline(node.itemShapeId, suggestions),\n            { type: \"null\" },\n          ],\n        })),\n      Match.when({ type: \"allOf\" }, (node) =>\n        withDocs({\n          allOf: node.items.map((entry, index) =>\n            buildInline(entry, [`${label}_allOf_${String(index + 1)}`])),\n        })),\n      Match.when({ type: \"anyOf\" }, (node) =>\n        withDocs({\n          anyOf: node.items.map((entry, index) =>\n            buildInline(entry, [`${label}_anyOf_${String(index + 1)}`])),\n        })),\n      Match.when({ type: \"oneOf\" }, (node) =>\n        withDocs({\n          oneOf: node.items.map((entry, index) =>\n            buildInline(entry, [`${label}_option_${String(index + 1)}`])),\n          ...(node.discriminator\n            ? {\n                discriminator: {\n                  propertyName: node.discriminator.propertyName,\n                  ...(node.discriminator.mapping\n                    ? {\n                        mapping: Object.fromEntries(\n                          Object.entries(node.discriminator.mapping).map(([key, value]) => [\n                            key,\n                            buildRef(value, [key, `${label}_${key}`]).$ref,\n                          ]),\n                        ),\n                      }\n                    : {}),\n                },\n              }\n            : {}),\n        })),\n      Match.when({ type: \"not\" }, (node) =>\n        withDocs({\n          not: buildInline(node.itemShapeId, [`${label}_not`]),\n        })),\n      Match.when({ type: \"conditional\" }, (node) =>\n        withDocs({\n          if: buildInline(node.ifShapeId, [`${label}_if`]),\n          ...(node.thenShapeId\n            ? { then: buildInline(node.thenShapeId, [`${label}_then`]) }\n            : {}),\n          ...(node.elseShapeId\n            ? { else: buildInline(node.elseShapeId, [`${label}_else`]) }\n            : {}),\n        })),\n      Match.when({ type: \"array\" }, (node) =>\n        withDocs({\n          type: \"array\",\n          items: buildInline(node.itemShapeId, [`${label}_item`]),\n          ...(node.minItems !== undefined ? { minItems: node.minItems } : {}),\n          ...(node.maxItems !== undefined ? { maxItems: node.maxItems } : {}),\n        })),\n      Match.when({ type: \"tuple\" }, (node) =>\n        withDocs({\n          type: \"array\",\n          prefixItems: node.itemShapeIds.map((entry, index) =>\n            buildInline(entry, [`${label}_item_${String(index + 1)}`])),\n          ...(node.additionalItems !== undefined\n            ? {\n                items:\n                  typeof node.additionalItems === \"boolean\"\n                    ? node.additionalItems\n                    : buildInline(node.additionalItems, [`${label}_item_rest`]),\n              }\n            : {}),\n        })),\n      Match.when({ type: \"map\" }, (node) =>\n        withDocs({\n          type: \"object\",\n          additionalProperties: buildInline(node.valueShapeId, [`${label}_value`]),\n        })),\n      Match.when({ type: \"object\" }, (node) =>\n        withDocs({\n          type: \"object\",\n          properties: Object.fromEntries(\n            Object.entries(node.fields).map(([key, field]) => [\n              key,\n              {\n                ...buildInline(field.shapeId, [key]),\n                ...(field.docs?.description ? { description: field.docs.description } : {}),\n              },\n            ]),\n          ),\n          ...(node.required && node.required.length > 0\n            ? { required: node.required }\n            : {}),\n          ...(node.additionalProperties !== undefined\n            ? {\n                additionalProperties:\n                  typeof node.additionalProperties === \"boolean\"\n                    ? node.additionalProperties\n                    : buildInline(node.additionalProperties, [`${label}_additionalProperty`]),\n              }\n            : {}),\n          ...(node.patternProperties\n            ? {\n                patternProperties: Object.fromEntries(\n                  Object.entries(node.patternProperties).map(([key, value]) => [\n                    key,\n                    buildInline(value, [`${label}_patternProperty`]),\n                  ]),\n                ),\n              }\n            : {}),\n        })),\n      Match.when({ type: \"graphqlInterface\" }, (node) =>\n        withDocs({\n          type: \"object\",\n          properties: Object.fromEntries(\n            Object.entries(node.fields).map(([key, field]) => [\n              key,\n              buildInline(field.shapeId, [key]),\n            ]),\n          ),\n        })),\n      Match.when({ type: \"graphqlUnion\" }, (node) =>\n        withDocs({\n          oneOf: node.memberTypeIds.map((entry, index) =>\n            buildInline(entry, [`${label}_member_${String(index + 1)}`])),\n        })),\n      Match.exhaustive,\n    );\n  };\n\n  const buildRootSchema = (\n    shapeId: string,\n    suggestions: readonly string[] = [],\n  ): Record<string, unknown> => {\n    const shape = asShape(catalog, shapeId);\n    if (!shape) {\n      return {};\n    }\n\n    return Match.value(shape.node).pipe(\n      Match.when({ type: \"ref\" }, (node) => buildRootSchema(node.target, suggestions)),\n      Match.orElse(() => buildInline(shapeId, suggestions)),\n    );\n  };\n\n  const rootSchema = buildRootSchema(rootShapeId, [\"input\"]);\n  return Object.keys(defs).length > 0\n    ? {\n        ...rootSchema,\n        $defs: defs,\n      }\n    : rootSchema;\n};\n\nconst projectorForProjectedCatalog = (projected: ProjectedCatalog): CatalogTypeProjector =>\n  createCatalogTypeProjector({\n    catalog: projected.catalog,\n    roots: projectedCatalogTypeRoots(projected),\n  });\n\nconst codemodeDescriptorFromCapability = (input: {\n  source: Source;\n  projected: ProjectedCatalog;\n  capability: Capability;\n  executable: Executable;\n  typeProjector: CatalogTypeProjector;\n  includeSchemas: boolean;\n  includeTypePreviews: boolean;\n}): CatalogToolDescriptor => {\n  const projectedDescriptor = input.projected.toolDescriptors[input.capability.id];\n  const path = projectedDescriptor.toolPath.join(\".\");\n  const interaction =\n    projectedDescriptor.interaction.mayRequireApproval || projectedDescriptor.interaction.mayElicit\n      ? \"required\"\n      : \"auto\";\n  const inputSchema = input.includeSchemas\n    ? shapeToJsonSchema(input.projected.catalog, projectedDescriptor.callShapeId)\n    : undefined;\n  const rawOutputSchema =\n    input.includeSchemas && projectedDescriptor.resultShapeId\n      ? shapeToJsonSchema(input.projected.catalog, projectedDescriptor.resultShapeId)\n      : undefined;\n  const outputSchema = rawOutputSchema;\n  const inputTypePreview = input.includeTypePreviews\n    ? input.typeProjector.renderSelfContainedShape(\n        projectedDescriptor.callShapeId,\n        {\n          aliasHint: joinTypeNameSegments(...projectedDescriptor.toolPath, \"call\"),\n        },\n      )\n    : undefined;\n  const outputTypePreview = input.includeTypePreviews && projectedDescriptor.resultShapeId\n    ? input.typeProjector.renderSelfContainedShape(projectedDescriptor.resultShapeId, {\n        aliasHint: joinTypeNameSegments(...projectedDescriptor.toolPath, \"result\"),\n      })\n    : undefined;\n\n  return {\n    path: path as CatalogToolDescriptor[\"path\"],\n    sourceKey: input.source.id,\n    description: input.capability.surface.summary ?? input.capability.surface.description,\n    interaction,\n    contract: {\n      inputTypePreview,\n      ...(outputTypePreview !== undefined ? { outputTypePreview } : {}),\n      ...(inputSchema !== undefined ? { inputSchema } : {}),\n      ...(outputSchema !== undefined ? { outputSchema } : {}),\n    },\n    providerKind: input.executable.adapterKey,\n    providerData: {\n      capabilityId: input.capability.id,\n      executableId: input.executable.id,\n      adapterKey: input.executable.adapterKey,\n      display: input.executable.display,\n    },\n  };\n};\n\nconst loadedCatalogToolFromCapability = (input: {\n  catalogEntry: LoadedSourceCatalog;\n  capability: Capability;\n  includeSchemas: boolean;\n  includeTypePreviews: boolean;\n}): LoadedSourceCatalogTool => {\n  const executable = chooseExecutable(input.catalogEntry.projected.catalog, input.capability);\n  const projectedDescriptor = input.catalogEntry.projected.toolDescriptors[input.capability.id];\n  const descriptor = codemodeDescriptorFromCapability({\n    source: input.catalogEntry.source,\n    projected: input.catalogEntry.projected,\n    capability: input.capability,\n    executable,\n    typeProjector: input.catalogEntry.typeProjector,\n    includeSchemas: input.includeSchemas,\n    includeTypePreviews: input.includeTypePreviews,\n  });\n  const path = descriptorPath(descriptor);\n  const searchDoc = input.catalogEntry.projected.searchDocs[input.capability.id];\n  const searchNamespace = catalogNamespaceFromPath(path);\n  const searchText = [\n    path,\n    searchNamespace,\n    input.catalogEntry.source.name,\n    input.capability.surface.title,\n    input.capability.surface.summary,\n    input.capability.surface.description,\n    descriptor.contract?.inputTypePreview,\n    descriptor.contract?.outputTypePreview,\n    ...(searchDoc?.tags ?? []),\n    ...(searchDoc?.protocolHints ?? []),\n    ...(searchDoc?.authHints ?? []),\n  ]\n    .filter((part): part is string => typeof part === \"string\" && part.length > 0)\n    .join(\" \")\n    .toLowerCase();\n\n  return {\n    path,\n    searchNamespace,\n    searchText,\n    source: input.catalogEntry.source,\n    sourceRecord: input.catalogEntry.sourceRecord,\n    revision: input.catalogEntry.revision,\n    capabilityId: input.capability.id,\n    executableId: executable.id,\n    capability: input.capability,\n    executable,\n    projectedDescriptor,\n    descriptor,\n    projectedCatalog: input.catalogEntry.projected.catalog,\n    typeProjector: input.catalogEntry.typeProjector,\n  } satisfies LoadedSourceCatalogTool;\n};\n\nconst sourceRecordFromCatalogArtifact = (input: {\n  source: Source;\n  artifact: {\n    catalogId: StoredSourceRecord[\"catalogId\"];\n    revision: StoredSourceCatalogRevisionRecord;\n  };\n}): StoredSourceRecord => ({\n  id: input.source.id,\n  workspaceId: input.source.workspaceId,\n  catalogId: input.artifact.catalogId,\n  catalogRevisionId: input.artifact.revision.id,\n  name: input.source.name,\n  kind: input.source.kind,\n  endpoint: input.source.endpoint,\n  status: input.source.status,\n  enabled: input.source.enabled,\n  namespace: input.source.namespace,\n  importAuthPolicy: input.source.importAuthPolicy,\n  bindingConfigJson: JSON.stringify(input.source.binding),\n  sourceHash: input.source.sourceHash,\n  lastError: input.source.lastError,\n  createdAt: input.source.createdAt,\n  updatedAt: input.source.updatedAt,\n});\n\ntype RuntimeSourceCatalogStoreShape = {\n  loadWorkspaceSourceCatalogs: (input: {\n    workspaceId: WorkspaceId;\n    actorAccountId?: AccountId | null;\n  }) => Effect.Effect<readonly LoadedSourceCatalog[], Error, never>;\n  loadSourceWithCatalog: (input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n    actorAccountId?: AccountId | null;\n  }) => Effect.Effect<LoadedSourceCatalog, Error | LocalSourceArtifactMissingError, never>;\n  loadWorkspaceSourceCatalogToolIndex: (input: {\n    workspaceId: WorkspaceId;\n    actorAccountId?: AccountId | null;\n    includeSchemas: boolean;\n  }) => Effect.Effect<readonly LoadedSourceCatalogToolIndexEntry[], Error, never>;\n  loadWorkspaceSourceCatalogToolByPath: (input: {\n    workspaceId: WorkspaceId;\n    path: string;\n    actorAccountId?: AccountId | null;\n    includeSchemas: boolean;\n  }) => Effect.Effect<LoadedSourceCatalogToolIndexEntry | null, Error, never>;\n};\n\nexport type RuntimeSourceCatalogStore = RuntimeSourceCatalogStoreShape;\n\nexport class RuntimeSourceCatalogStoreService extends Context.Tag(\n  \"#runtime/RuntimeSourceCatalogStoreService\",\n)<RuntimeSourceCatalogStoreService, RuntimeSourceCatalogStoreShape>() {}\n\ntype RuntimeSourceCatalogStoreDeps = {\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState;\n  sourceStore: RuntimeSourceStore;\n  sourceArtifactStore: SourceArtifactStoreShape;\n};\n\ntype SourceCatalogRuntimeServices =\n  | RuntimeLocalWorkspaceService\n  | RuntimeSourceStoreService\n  | SourceArtifactStore;\n\nconst ensureRuntimeCatalogWorkspace = (\n  deps: RuntimeSourceCatalogStoreDeps,\n  workspaceId: WorkspaceId,\n) => {\n  if (deps.runtimeLocalWorkspace.installation.workspaceId !== workspaceId) {\n    return Effect.fail(\n      runtimeEffectError(\"catalog/source/runtime\", \n        `Runtime local workspace mismatch: expected ${workspaceId}, got ${deps.runtimeLocalWorkspace.installation.workspaceId}`,\n      ),\n    );\n  }\n\n  return Effect.succeed(deps.runtimeLocalWorkspace.context);\n};\n\nconst buildSnapshotFromArtifact = (input: {\n  source: Source;\n  artifact: LocalSourceArtifact;\n}): CatalogSnapshotV1 => {\n  return decodeCatalogSnapshotV1(input.artifact.snapshot);\n};\n\nconst loadWorkspaceSourceCatalogsWithDeps = (deps: RuntimeSourceCatalogStoreDeps, input: {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n}): Effect.Effect<readonly LoadedSourceCatalog[], Error, never> =>\n  Effect.gen(function* () {\n    const workspaceContext = yield* ensureRuntimeCatalogWorkspace(\n      deps,\n      input.workspaceId,\n    );\n    const sources = yield* deps.sourceStore.loadSourcesInWorkspace(\n      input.workspaceId,\n      {\n        actorAccountId: input.actorAccountId,\n      },\n    );\n\n    const localCatalogs = yield* Effect.forEach(sources, (source) =>\n      Effect.gen(function* () {\n        const artifact = yield* deps.sourceArtifactStore.read({\n          context: workspaceContext,\n          sourceId: source.id,\n        });\n        if (artifact === null) {\n          return null;\n        }\n\n        const snapshot = buildSnapshotFromArtifact({\n          source,\n          artifact,\n        });\n        const projected = projectCatalogForAgentSdk({\n          catalog: snapshot.catalog,\n        });\n        const typeProjector = projectorForProjectedCatalog(projected);\n\n        return {\n          source,\n          sourceRecord: sourceRecordFromCatalogArtifact({\n            source,\n            artifact,\n          }),\n          revision: artifact.revision,\n          snapshot,\n          catalog: snapshot.catalog,\n          projected,\n          typeProjector,\n          importMetadata: snapshot.import,\n        } satisfies LoadedSourceCatalog;\n      }),\n    );\n\n    return localCatalogs.filter((catalogEntry): catalogEntry is LoadedSourceCatalog => catalogEntry !== null);\n  });\n\nconst loadSourceWithCatalogWithDeps = (deps: RuntimeSourceCatalogStoreDeps, input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  actorAccountId?: AccountId | null;\n}): Effect.Effect<LoadedSourceCatalog, Error | LocalSourceArtifactMissingError, never> =>\n  Effect.gen(function* () {\n    const workspaceContext = yield* ensureRuntimeCatalogWorkspace(\n      deps,\n      input.workspaceId,\n    );\n    const source = yield* deps.sourceStore.loadSourceById({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n      actorAccountId: input.actorAccountId,\n    });\n    const artifact = yield* deps.sourceArtifactStore.read({\n      context: workspaceContext,\n      sourceId: source.id,\n    });\n    if (artifact === null) {\n      return yield* new LocalSourceArtifactMissingError({\n          message: `Catalog artifact missing for source ${input.sourceId}`,\n          sourceId: input.sourceId,\n        });\n    }\n\n    const snapshot = buildSnapshotFromArtifact({\n      source,\n      artifact,\n    });\n    const projected = projectCatalogForAgentSdk({\n      catalog: snapshot.catalog,\n    });\n    const typeProjector = projectorForProjectedCatalog(projected);\n\n    return {\n      source,\n      sourceRecord: sourceRecordFromCatalogArtifact({\n        source,\n        artifact,\n      }),\n      revision: artifact.revision,\n      snapshot,\n      catalog: snapshot.catalog,\n      projected,\n      typeProjector,\n      importMetadata: snapshot.import,\n    } satisfies LoadedSourceCatalog;\n  });\n\nexport const loadWorkspaceSourceCatalogs = (input: {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n}): Effect.Effect<readonly LoadedSourceCatalog[], Error, SourceCatalogRuntimeServices> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const sourceStore = yield* RuntimeSourceStoreService;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n\n    return yield* loadWorkspaceSourceCatalogsWithDeps(\n      {\n        runtimeLocalWorkspace,\n        sourceStore,\n        sourceArtifactStore,\n      },\n      input,\n    );\n  });\n\nexport const loadSourceWithCatalog = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  actorAccountId?: AccountId | null;\n}): Effect.Effect<\n  LoadedSourceCatalog,\n  Error | LocalSourceArtifactMissingError,\n  SourceCatalogRuntimeServices\n> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const sourceStore = yield* RuntimeSourceStoreService;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n\n    return yield* loadSourceWithCatalogWithDeps(\n      {\n        runtimeLocalWorkspace,\n        sourceStore,\n        sourceArtifactStore,\n      },\n      input,\n    );\n  });\n\nexport const expandCatalogTools = (input: {\n  catalogs: readonly LoadedSourceCatalog[];\n  includeSchemas: boolean;\n  includeTypePreviews?: boolean;\n}): Effect.Effect<readonly LoadedSourceCatalogTool[], Error, never> =>\n  Effect.succeed(\n    input.catalogs.flatMap((catalogEntry) =>\n      Object.values(catalogEntry.catalog.capabilities).map((capability) =>\n        loadedCatalogToolFromCapability({\n          catalogEntry,\n          capability,\n          includeSchemas: input.includeSchemas,\n          includeTypePreviews: input.includeTypePreviews ?? true,\n        })),\n    ),\n  );\n\nconst declarationBlockForShape = (input: {\n  catalog: CatalogV1;\n  shapeId: ShapeSymbolId;\n  aliasHint: string;\n}): Effect.Effect<string, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      const projector = createCatalogTypeProjector({\n        catalog: input.catalog,\n        roots: [{\n          shapeId: input.shapeId,\n          aliasHint: input.aliasHint,\n        }],\n      });\n      const rootType = projector.renderDeclarationShape(input.shapeId, {\n        aliasHint: input.aliasHint,\n      });\n      const supportingDeclarations = projector.supportingDeclarations();\n      const rootDeclarationPrefix = `type ${input.aliasHint} =`;\n      const declarationText = supportingDeclarations.some((declaration) =>\n        declaration.includes(rootDeclarationPrefix)\n      )\n        ? supportingDeclarations.join(\"\\n\\n\")\n        : [\n            ...supportingDeclarations,\n            typeAliasDeclaration({\n              catalog: input.catalog,\n              shapeId: input.shapeId,\n              aliasHint: input.aliasHint,\n              body: rootType,\n            }),\n          ].join(\"\\n\\n\");\n\n      return formatWithPrettier(declarationText, \"typescript-module\");\n    },\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nconst formattedOptionalTypeExpression = (\n  value: string | undefined,\n): Effect.Effect<string | null, Error, never> =>\n  value === undefined\n    ? Effect.succeed(null)\n    : Effect.tryPromise({\n        try: () => formatWithPrettier(value, \"typescript\"),\n        catch: (cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      });\n\nconst formattedOptionalJson = (\n  value: unknown,\n): Effect.Effect<string | null, Error, never> => {\n  const serialized = optionalJsonString(value);\n  return serialized === null\n    ? Effect.succeed(null)\n    : Effect.tryPromise({\n        try: () => formatWithPrettier(serialized, \"json\"),\n        catch: (cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      });\n};\n\nconst lowerCamelCase = (value: string): string =>\n  value.length === 0 ? \"tool\" : `${value.slice(0, 1).toLowerCase()}${value.slice(1)}`;\n\nconst typeAliasDeclaration = (input: {\n  catalog: CatalogV1;\n  shapeId: ShapeSymbolId;\n  aliasHint: string;\n  body: string;\n}): string => {\n  const shape = input.catalog.symbols[input.shapeId];\n  const comment = shape?.kind === \"shape\"\n    ? documentationComment({\n        title: shape.title,\n        docs: shape.docs,\n        deprecated: shape.deprecated,\n        includeTitle: true,\n      })\n    : null;\n  const declaration = `type ${input.aliasHint} = ${input.body};`;\n  return comment ? `${comment}\\n${declaration}` : declaration;\n};\n\nexport const buildLoadedSourceCatalogToolContract = (\n  tool: LoadedSourceCatalogTool,\n): Effect.Effect<LoadedSourceCatalogToolContract, Error, never> => {\n  const inputAlias = joinTypeNameSegments(...tool.projectedDescriptor.toolPath, \"call\");\n  const outputAlias = joinTypeNameSegments(...tool.projectedDescriptor.toolPath, \"result\");\n  const inputShapeId = tool.projectedDescriptor.callShapeId;\n  const outputShapeId = tool.projectedDescriptor.resultShapeId ?? null;\n  const argsOptional = shapeAllowsOmittedArgs(tool.projectedCatalog, inputShapeId);\n  const outputTypeName = outputShapeId ? outputAlias : \"unknown\";\n  const callFunctionName = lowerCamelCase(\n    joinTypeNameSegments(...tool.projectedDescriptor.toolPath),\n  );\n  const callComment = documentationComment({\n    title: tool.capability.surface.title,\n    docs: {\n      ...(tool.capability.surface.summary\n        ? { summary: tool.capability.surface.summary }\n        : {}),\n      ...(tool.capability.surface.description\n        ? { description: tool.capability.surface.description }\n        : {}),\n    },\n    includeTitle: true,\n  });\n\n  return Effect.gen(function* () {\n    const [\n      inputTypePreview,\n      outputTypePreview,\n      inputTypeDeclaration,\n      outputTypeDeclaration,\n      inputSchemaJson,\n      outputSchemaJson,\n      callSignature,\n      callDeclaration,\n    ] =\n      yield* Effect.all([\n        formattedOptionalTypeExpression(tool.descriptor.contract?.inputTypePreview),\n        formattedOptionalTypeExpression(tool.descriptor.contract?.outputTypePreview),\n        declarationBlockForShape({\n          catalog: tool.projectedCatalog,\n          shapeId: inputShapeId,\n          aliasHint: inputAlias,\n        }),\n        outputShapeId\n          ? declarationBlockForShape({\n              catalog: tool.projectedCatalog,\n              shapeId: outputShapeId,\n              aliasHint: outputAlias,\n            })\n          : Effect.succeed<string | null>(null),\n        formattedOptionalJson(\n          tool.descriptor.contract?.inputSchema\n          ?? shapeToJsonSchema(tool.projectedCatalog, inputShapeId),\n        ),\n        outputShapeId\n          ? formattedOptionalJson(\n              tool.descriptor.contract?.outputSchema\n              ?? shapeToJsonSchema(tool.projectedCatalog, outputShapeId),\n            )\n          : Effect.succeed<string | null>(null),\n        Effect.tryPromise({\n          try: () =>\n            formatWithPrettier(\n              `(${argsOptional ? \"args?\" : \"args\"}: ${inputAlias}) => Promise<${outputTypeName}>`,\n              \"typescript\",\n            ),\n          catch: (cause) =>\n            cause instanceof Error ? cause : new Error(String(cause)),\n        }),\n        Effect.tryPromise({\n          try: () =>\n            formatWithPrettier(\n              [\n                ...(callComment ? [callComment] : []),\n                `declare function ${callFunctionName}(${argsOptional ? \"args?\" : \"args\"}: ${inputAlias}): Promise<${outputTypeName}>;`,\n              ].join(\"\\n\"),\n              \"typescript-module\",\n            ),\n          catch: (cause) =>\n            cause instanceof Error ? cause : new Error(String(cause)),\n        }),\n      ]);\n\n    return {\n      callSignature,\n      callDeclaration,\n      callShapeId: inputShapeId,\n      resultShapeId: outputShapeId,\n      responseSetId: tool.projectedDescriptor.responseSetId,\n      input: {\n        shapeId: inputShapeId,\n        typePreview: inputTypePreview,\n        typeDeclaration: inputTypeDeclaration,\n        schemaJson: inputSchemaJson,\n        exampleJson: null,\n      },\n      output: {\n        shapeId: outputShapeId,\n        typePreview: outputTypePreview,\n        typeDeclaration: outputTypeDeclaration,\n        schemaJson: outputSchemaJson,\n        exampleJson: null,\n      },\n    } satisfies LoadedSourceCatalogToolContract;\n  });\n};\n\nexport const expandCatalogToolByPath = (input: {\n  catalogs: readonly LoadedSourceCatalog[];\n  path: string;\n  includeSchemas: boolean;\n  includeTypePreviews?: boolean;\n}): Effect.Effect<LoadedSourceCatalogTool | null, Error, never> =>\n  Effect.succeed(\n    input.catalogs\n      .flatMap((catalogEntry) =>\n        Object.values(catalogEntry.catalog.capabilities).flatMap((capability) => {\n          return projectedToolPath(catalogEntry.projected, capability) === input.path\n            ? [\n                loadedCatalogToolFromCapability({\n                  catalogEntry,\n                  capability,\n                  includeSchemas: input.includeSchemas,\n                  includeTypePreviews: input.includeTypePreviews ?? true,\n                }),\n              ]\n            : [];\n        }))\n      .at(0) ?? null,\n  );\n\nexport const loadWorkspaceSourceCatalogToolIndex = (input: {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  includeSchemas: boolean;\n}): Effect.Effect<\n  readonly LoadedSourceCatalogToolIndexEntry[],\n  Error,\n  SourceCatalogRuntimeServices\n> =>\n  Effect.gen(function* () {\n    const catalogs = yield* loadWorkspaceSourceCatalogs({\n      workspaceId: input.workspaceId,\n      actorAccountId: input.actorAccountId,\n    });\n    const tools = yield* expandCatalogTools({\n      catalogs,\n      includeSchemas: input.includeSchemas,\n    });\n    return tools.map((tool) => ({\n      path: tool.path,\n      searchNamespace: tool.searchNamespace,\n      searchText: tool.searchText,\n      source: tool.source,\n      sourceRecord: tool.sourceRecord,\n      capabilityId: tool.capabilityId,\n      executableId: tool.executableId,\n      capability: tool.capability,\n      executable: tool.executable,\n      descriptor: tool.descriptor,\n      projectedCatalog: tool.projectedCatalog,\n    }));\n  });\n\nexport const loadWorkspaceSourceCatalogToolByPath = (input: {\n  workspaceId: WorkspaceId;\n  path: string;\n  actorAccountId?: AccountId | null;\n  includeSchemas: boolean;\n}): Effect.Effect<\n  LoadedSourceCatalogToolIndexEntry | null,\n  Error,\n  SourceCatalogRuntimeServices\n> =>\n  Effect.gen(function* () {\n    const catalogs = yield* loadWorkspaceSourceCatalogs({\n      workspaceId: input.workspaceId,\n      actorAccountId: input.actorAccountId,\n    });\n    const tool = yield* expandCatalogToolByPath({\n      catalogs,\n      path: input.path,\n      includeSchemas: input.includeSchemas,\n    });\n    return tool\n      ? {\n          path: tool.path,\n          searchNamespace: tool.searchNamespace,\n          searchText: tool.searchText,\n          source: tool.source,\n          sourceRecord: tool.sourceRecord,\n          capabilityId: tool.capabilityId,\n          executableId: tool.executableId,\n          capability: tool.capability,\n          executable: tool.executable,\n          descriptor: tool.descriptor,\n          projectedCatalog: tool.projectedCatalog,\n        }\n      : null;\n  });\n\nexport const RuntimeSourceCatalogStoreLive = Layer.effect(\n  RuntimeSourceCatalogStoreService,\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const sourceStore = yield* RuntimeSourceStoreService;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n\n    const deps: RuntimeSourceCatalogStoreDeps = {\n      runtimeLocalWorkspace,\n      sourceStore,\n      sourceArtifactStore,\n    };\n\n    return RuntimeSourceCatalogStoreService.of({\n      loadWorkspaceSourceCatalogs: (input) =>\n        loadWorkspaceSourceCatalogsWithDeps(deps, input),\n      loadSourceWithCatalog: (input) =>\n        loadSourceWithCatalogWithDeps(deps, input),\n      loadWorkspaceSourceCatalogToolIndex: (input) =>\n        loadWorkspaceSourceCatalogToolIndex(input).pipe(\n          Effect.provideService(RuntimeLocalWorkspaceService, runtimeLocalWorkspace),\n          Effect.provideService(RuntimeSourceStoreService, sourceStore),\n          Effect.provideService(SourceArtifactStore, sourceArtifactStore),\n        ),\n      loadWorkspaceSourceCatalogToolByPath: (input) =>\n        loadWorkspaceSourceCatalogToolByPath(input).pipe(\n          Effect.provideService(RuntimeLocalWorkspaceService, runtimeLocalWorkspace),\n          Effect.provideService(RuntimeSourceStoreService, sourceStore),\n          Effect.provideService(SourceArtifactStore, sourceArtifactStore),\n        ),\n    });\n  }),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/snapshot.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\n\nimport type { Source } from \"#schema\";\n\nimport {\n  buildGraphqlToolPresentation,\n  compileGraphqlToolDefinitions,\n  type GraphqlToolManifest,\n} from \"@executor/source-graphql\";\nimport { createGoogleDiscoveryCatalogSnapshot } from \"@executor/source-google-discovery\";\nimport { createGraphqlCatalogSnapshot } from \"@executor/source-graphql\";\nimport { createMcpCatalogSnapshot } from \"@executor/source-mcp\";\nimport { createOpenApiCatalogSnapshot } from \"@executor/source-openapi\";\n\nconst baseSource: Source = {\n  id: \"src_calendar\" as Source[\"id\"],\n  workspaceId: \"ws_test\" as Source[\"workspaceId\"],\n  name: \"Calendar\",\n  kind: \"openapi\",\n  endpoint: \"https://api.example.test\",\n  status: \"connected\",\n  enabled: true,\n  namespace: \"google.calendar\",\n  bindingVersion: 1,\n  binding: {\n    specUrl: \"https://api.example.test/openapi.json\",\n    defaultHeaders: null,\n  },\n  importAuthPolicy: \"none\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: \"hash_source\",\n  lastError: null,\n  createdAt: 1,\n  updatedAt: 1,\n};\n\ndescribe(\"source-catalog-snapshot\", () => {\n  it(\"builds an HTTP capability graph from OpenAPI operation inputs\", () => {\n    const snapshot = createOpenApiCatalogSnapshot({\n      source: baseSource,\n      documents: [\n        {\n          documentKind: \"openapi\",\n          documentKey: \"https://api.example.test/openapi.json\",\n          contentText: \"{}\",\n          fetchedAt: 1,\n        },\n      ],\n      operations: [\n        {\n          toolId: \"events.update\",\n          title: \"Update event\",\n          description: \"Update a calendar event\",\n          effect: \"write\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              calendarId: { type: \"string\", description: \"Calendar ID\" },\n              eventId: { type: \"string\" },\n              sendUpdates: { type: \"string\", enum: [\"all\", \"none\"] },\n              body: {\n                type: \"object\",\n                properties: {\n                  summary: { type: \"string\" },\n                },\n              },\n            },\n            required: [\"calendarId\", \"eventId\", \"body\"],\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              id: { type: \"string\" },\n              summary: { type: \"string\" },\n            },\n            required: [\"id\"],\n          },\n          providerData: {\n            kind: \"openapi\",\n            toolId: \"events.update\",\n            rawToolId: \"events.update\",\n            group: \"events\",\n            leaf: \"update\",\n            tags: [\"events\"],\n            method: \"patch\",\n            path: \"/calendars/{calendarId}/events/{eventId}\",\n            operationHash: \"op_hash\",\n            invocation: {\n              method: \"patch\",\n              pathTemplate: \"/calendars/{calendarId}/events/{eventId}\",\n              parameters: [\n                { name: \"calendarId\", location: \"path\", required: true },\n                { name: \"eventId\", location: \"path\", required: true },\n                { name: \"sendUpdates\", location: \"query\", required: false },\n              ],\n              requestBody: {\n                required: true,\n                contentTypes: [\"application/json\"],\n              },\n            },\n            documentation: {\n              summary: \"Update event\",\n              parameters: [\n                {\n                  name: \"calendarId\",\n                  location: \"path\",\n                  required: true,\n                  description: \"Calendar identifier\",\n                },\n              ],\n              requestBody: {\n                description: \"Event patch body\",\n              },\n              response: {\n                statusCode: \"200\",\n                description: \"Updated event\",\n                contentTypes: [\"application/json\"],\n              },\n            },\n          },\n        },\n      ],\n    });\n\n    expect(snapshot.version).toBe(\"ir.v1.snapshot\");\n    expect(Object.keys(snapshot.catalog.capabilities)).toHaveLength(1);\n\n    const capability = Object.values(snapshot.catalog.capabilities)[0]!;\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n    const responseSet = Object.values(snapshot.catalog.responseSets)[0]!;\n    const resource = Object.values(snapshot.catalog.resources)[0]!;\n    const serviceScope = snapshot.catalog.scopes[capability.serviceScopeId]!;\n\n    expect(capability.surface.toolPath).toEqual([\n      \"google\",\n      \"calendar\",\n      \"events\",\n      \"update\",\n    ]);\n    expect(capability.semantics.effect).toBe(\"write\");\n    expect(capability.auth.kind).toBe(\"none\");\n    expect(snapshot.catalog.documents[resource.documentId]).toBeDefined();\n    expect(\n      snapshot.catalog.documents[serviceScope.provenance[0]!.documentId],\n    ).toBeDefined();\n    expect(executable.adapterKey).toBe(\"openapi\");\n    expect(executable.projection.callShapeId).toBeDefined();\n    expect(executable.display?.method).toBe(\"PATCH\");\n    expect(executable.display?.pathTemplate).toBe(\n      \"/calendars/{calendarId}/events/{eventId}\",\n    );\n    expect(executable.native).toBeUndefined();\n    expect(capability.native).toBeUndefined();\n    expect(responseSet.variants).toHaveLength(1);\n  });\n\n  it(\"projects OpenAPI auth requirements and response variants into IR\", () => {\n    const snapshot = createOpenApiCatalogSnapshot({\n      source: baseSource,\n      documents: [\n        {\n          documentKind: \"openapi\",\n          documentKey: \"https://api.example.test/openapi.json\",\n          contentText: \"{}\",\n          fetchedAt: 1,\n        },\n      ],\n      operations: [\n        {\n          toolId: \"projects.get\",\n          title: \"Get project\",\n          description: \"Get a project\",\n          effect: \"read\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              projectId: {\n                type: \"string\",\n              },\n            },\n            required: [\"projectId\"],\n            additionalProperties: false,\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              id: {\n                type: \"string\",\n              },\n            },\n            required: [\"id\"],\n            additionalProperties: false,\n          },\n          providerData: {\n            kind: \"openapi\",\n            toolId: \"projects.get\",\n            rawToolId: \"projects.get\",\n            group: \"projects\",\n            leaf: \"get\",\n            tags: [\"projects\"],\n            method: \"get\",\n            path: \"/projects/{projectId}\",\n            operationHash: \"op_hash_projects_get\",\n            invocation: {\n              method: \"get\",\n              pathTemplate: \"/projects/{projectId}\",\n              parameters: [\n                { name: \"projectId\", location: \"path\", required: true },\n              ],\n              requestBody: null,\n            },\n            documentation: {\n              summary: \"Get project\",\n              parameters: [],\n              response: {\n                statusCode: \"200\",\n                description: \"Project\",\n                contentTypes: [\"application/json\"],\n              },\n            },\n            authRequirement: {\n              kind: \"anyOf\",\n              items: [\n                {\n                  kind: \"scheme\",\n                  schemeName: \"bearerToken\",\n                },\n                {\n                  kind: \"scheme\",\n                  schemeName: \"apiKeyHeader\",\n                },\n              ],\n            },\n            securitySchemes: [\n              {\n                schemeName: \"bearerToken\",\n                schemeType: \"http\",\n                description: \"Bearer auth.\",\n                scheme: \"bearer\",\n                bearerFormat: \"JWT\",\n              },\n              {\n                schemeName: \"apiKeyHeader\",\n                schemeType: \"apiKey\",\n                placementIn: \"header\",\n                placementName: \"x-api-key\",\n              },\n            ],\n            responses: [\n              {\n                statusCode: \"200\",\n                description: \"Project\",\n                contentTypes: [\"application/json\"],\n                schema: {\n                  type: \"object\",\n                  properties: {\n                    id: {\n                      type: \"string\",\n                    },\n                  },\n                  required: [\"id\"],\n                  additionalProperties: false,\n                },\n              },\n              {\n                statusCode: \"404\",\n                description: \"Missing\",\n                contentTypes: [\"application/json\"],\n                schema: {\n                  type: \"object\",\n                  properties: {\n                    error: {\n                      type: \"string\",\n                    },\n                  },\n                  required: [\"error\"],\n                  additionalProperties: false,\n                },\n              },\n            ],\n          },\n        },\n      ],\n    });\n\n    const capability = Object.values(snapshot.catalog.capabilities)[0]!;\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n    const responseSet = Object.values(snapshot.catalog.responseSets)[0]!;\n    const securitySchemes = Object.values(snapshot.catalog.symbols).filter(\n      (symbol) => symbol.kind === \"securityScheme\",\n    );\n\n    expect(capability.auth).toMatchObject({\n      kind: \"anyOf\",\n    });\n    expect(executable.native).toBeUndefined();\n    expect(capability.native).toBeUndefined();\n    expect(securitySchemes).toHaveLength(2);\n    expect(responseSet.variants.map((variant) => variant.match)).toEqual([\n      { kind: \"exact\", status: 200 },\n      { kind: \"exact\", status: 404 },\n    ]);\n  });\n\n  it(\"projects OpenAPI servers, parameter serialization, and response headers into IR\", () => {\n    const snapshot = createOpenApiCatalogSnapshot({\n      source: baseSource,\n      documents: [\n        {\n          documentKind: \"openapi\",\n          documentKey: \"https://api.example.test/openapi.json\",\n          contentText: \"{}\",\n          fetchedAt: 1,\n        },\n      ],\n      operations: [\n        {\n          toolId: \"items.get\",\n          title: \"Get item\",\n          description: \"Get an item\",\n          effect: \"read\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              itemId: {\n                type: \"array\",\n                items: {\n                  type: \"string\",\n                },\n              },\n              filter: {\n                type: \"object\",\n                additionalProperties: {\n                  type: \"string\",\n                },\n              },\n              body: {\n                type: \"object\",\n                properties: {\n                  title: {\n                    type: \"string\",\n                  },\n                },\n              },\n            },\n            required: [\"itemId\"],\n            additionalProperties: false,\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              id: {\n                type: \"string\",\n              },\n            },\n            required: [\"id\"],\n            additionalProperties: false,\n          },\n          providerData: {\n            kind: \"openapi\",\n            toolId: \"items.get\",\n            rawToolId: \"items.get\",\n            group: \"items\",\n            leaf: \"get\",\n            tags: [\"items\"],\n            method: \"get\",\n            path: \"/items/{itemId}\",\n            operationHash: \"op_hash_items_get\",\n            invocation: {\n              method: \"get\",\n              pathTemplate: \"/items/{itemId}\",\n              parameters: [\n                {\n                  name: \"itemId\",\n                  location: \"path\",\n                  required: true,\n                  style: \"label\",\n                  explode: true,\n                },\n                {\n                  name: \"filter\",\n                  location: \"query\",\n                  required: false,\n                  style: \"deepObject\",\n                  explode: true,\n                },\n              ],\n              requestBody: {\n                required: false,\n                contentTypes: [\n                  \"application/x-www-form-urlencoded\",\n                  \"application/json\",\n                ],\n                contents: [\n                  {\n                    mediaType: \"application/x-www-form-urlencoded\",\n                    schema: {\n                      type: \"object\",\n                      properties: {\n                        title: {\n                          type: \"string\",\n                        },\n                      },\n                    },\n                  },\n                  {\n                    mediaType: \"application/json\",\n                    schema: {\n                      type: \"object\",\n                      properties: {\n                        title: {\n                          type: \"string\",\n                        },\n                      },\n                    },\n                  },\n                ],\n              },\n            },\n            documentation: null,\n            documentServers: [\n              {\n                url: \"https://api.example.test/{version}\",\n                variables: {\n                  version: \"v1\",\n                },\n              },\n            ],\n            servers: [\n              {\n                url: \"https://regional.example.test/base\",\n              },\n            ],\n            responses: [\n              {\n                statusCode: \"200\",\n                description: \"Item\",\n                contentTypes: [\"application/json\", \"text/plain\"],\n                contents: [\n                  {\n                    mediaType: \"application/json\",\n                    schema: {\n                      type: \"object\",\n                      properties: {\n                        id: {\n                          type: \"string\",\n                        },\n                      },\n                      required: [\"id\"],\n                      additionalProperties: false,\n                    },\n                  },\n                  {\n                    mediaType: \"text/plain\",\n                    schema: {\n                      type: \"string\",\n                    },\n                  },\n                ],\n                headers: [\n                  {\n                    name: \"x-next-cursor\",\n                    description: \"Next cursor.\",\n                    schema: {\n                      type: \"string\",\n                    },\n                  },\n                ],\n              },\n            ],\n          },\n        },\n      ],\n    });\n\n    const capability = Object.values(snapshot.catalog.capabilities)[0]!;\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n    const serviceScope = snapshot.catalog.scopes[capability.serviceScopeId]!;\n    const operationScope = snapshot.catalog.scopes[executable.scopeId]!;\n    const pathParameter = Object.values(snapshot.catalog.symbols).find(\n      (symbol) => symbol.kind === \"parameter\" && symbol.name === \"itemId\",\n    );\n    const queryParameter = Object.values(snapshot.catalog.symbols).find(\n      (symbol) => symbol.kind === \"parameter\" && symbol.name === \"filter\",\n    );\n    const requestBody = Object.values(snapshot.catalog.symbols).find(\n      (symbol) => symbol.kind === \"requestBody\",\n    );\n    const response = Object.values(snapshot.catalog.symbols).find(\n      (symbol) => symbol.kind === \"response\",\n    );\n\n    expect(serviceScope.defaults?.servers).toEqual([\n      {\n        url: \"https://api.example.test/{version}\",\n        variables: {\n          version: \"v1\",\n        },\n      },\n    ]);\n    expect(operationScope.defaults?.servers).toEqual([\n      {\n        url: \"https://regional.example.test/base\",\n      },\n    ]);\n    expect(pathParameter).toMatchObject({\n      kind: \"parameter\",\n      style: \"label\",\n      explode: true,\n    });\n    expect(queryParameter).toMatchObject({\n      kind: \"parameter\",\n      style: \"deepObject\",\n      explode: true,\n    });\n    expect(requestBody?.kind).toBe(\"requestBody\");\n    expect(\n      requestBody?.kind === \"requestBody\"\n        ? requestBody.contents.map((content) => content.mediaType)\n        : [],\n    ).toEqual([\"application/x-www-form-urlencoded\", \"application/json\"]);\n    expect(response?.kind).toBe(\"response\");\n    expect(response?.kind === \"response\" ? response.headerIds?.length : 0).toBe(\n      1,\n    );\n    expect(\n      response?.kind === \"response\"\n        ? response.contents?.map((content) => content.mediaType)\n        : [],\n    ).toEqual([\"application/json\", \"text/plain\"]);\n  });\n\n  it(\"imports Google Discovery scopes as auth requirements\", () => {\n    const snapshot = createGoogleDiscoveryCatalogSnapshot({\n      source: {\n        ...baseSource,\n        kind: \"google_discovery\",\n        namespace: \"google.drive\",\n      },\n      documents: [],\n      operations: [\n        {\n          toolId: \"files.list\",\n          title: \"List files\",\n          description: \"List drive files\",\n          effect: \"read\",\n          inputSchema: {\n            type: \"object\",\n            properties: { pageSize: { type: \"integer\" } },\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: { files: { type: \"array\", items: { type: \"string\" } } },\n          },\n          providerData: {\n            kind: \"google_discovery\",\n            service: \"drive\",\n            version: \"v3\",\n            toolId: \"files.list\",\n            rawToolId: \"files.list\",\n            methodId: \"drive.files.list\",\n            group: \"files\",\n            leaf: \"list\",\n            invocation: {\n              method: \"get\",\n              path: \"/drive/v3/files\",\n              flatPath: null,\n              rootUrl: \"https://www.googleapis.com/\",\n              servicePath: \"drive/v3/\",\n              parameters: [],\n              requestSchemaId: null,\n              responseSchemaId: \"FileList\",\n              scopes: [\"https://www.googleapis.com/auth/drive.readonly\"],\n              scopeDescriptions: {\n                \"https://www.googleapis.com/auth/drive.readonly\":\n                  \"View your Google Drive files.\",\n              },\n              supportsMediaUpload: false,\n              supportsMediaDownload: false,\n            },\n          },\n        },\n      ],\n    });\n\n    const capability = Object.values(snapshot.catalog.capabilities)[0]!;\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n    const serviceScope = snapshot.catalog.scopes[capability.serviceScopeId]!;\n    const securityScheme = Object.values(snapshot.catalog.symbols).find(\n      (symbol) => symbol.kind === \"securityScheme\",\n    );\n\n    expect(capability.auth.kind).toBe(\"scheme\");\n    expect(capability.native).toBeUndefined();\n    expect(executable.native).toBeUndefined();\n    expect(serviceScope.defaults?.servers).toEqual([\n      {\n        url: \"https://www.googleapis.com/drive/v3/\",\n      },\n    ]);\n    expect(securityScheme?.kind).toBe(\"securityScheme\");\n    expect(\n      securityScheme?.kind === \"securityScheme\"\n        ? securityScheme.oauth?.scopes\n        : undefined,\n    ).toEqual({\n      \"https://www.googleapis.com/auth/drive.readonly\":\n        \"View your Google Drive files.\",\n    });\n  });\n\n  it(\"resolves Google Discovery request body refs against the materialized input schema root\", () => {\n    const snapshot = createGoogleDiscoveryCatalogSnapshot({\n      source: {\n        ...baseSource,\n        kind: \"google_discovery\",\n        namespace: \"google.gmail\",\n      },\n      documents: [],\n      operations: [\n        {\n          toolId: \"users.drafts.create\",\n          title: \"Create draft\",\n          description: \"Create a draft\",\n          effect: \"write\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              userId: { type: \"string\" },\n              body: {\n                type: \"object\",\n                properties: {\n                  message: { $ref: \"#/$defs/google/Message\" },\n                },\n              },\n            },\n            required: [\"userId\", \"body\"],\n            $defs: {\n              google: {\n                Message: {\n                  type: \"object\",\n                  properties: {\n                    raw: { type: \"string\" },\n                  },\n                },\n              },\n            },\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              id: { type: \"string\" },\n            },\n          },\n          providerData: {\n            kind: \"google_discovery\",\n            service: \"gmail\",\n            version: \"v1\",\n            toolId: \"users.drafts.create\",\n            rawToolId: \"users.drafts.create\",\n            methodId: \"gmail.users.drafts.create\",\n            group: \"users.drafts\",\n            leaf: \"create\",\n            invocation: {\n              method: \"post\",\n              path: \"/gmail/v1/users/{userId}/drafts\",\n              flatPath: null,\n              rootUrl: \"https://gmail.googleapis.com/\",\n              servicePath: \"\",\n              parameters: [\n                {\n                  name: \"userId\",\n                  location: \"path\",\n                  required: true,\n                  repeated: false,\n                  description: \"The user ID.\",\n                  type: \"string\",\n                },\n              ],\n              requestSchemaId: \"Draft\",\n              responseSchemaId: \"Draft\",\n              scopes: [],\n              scopeDescriptions: undefined,\n              supportsMediaUpload: false,\n              supportsMediaDownload: false,\n            },\n          },\n        },\n      ],\n    });\n\n    expect(Object.values(snapshot.catalog.diagnostics)).toEqual([]);\n\n    const requestBody = Object.values(snapshot.catalog.symbols).find(\n      (symbol) => symbol.kind === \"requestBody\",\n    );\n    expect(requestBody?.kind).toBe(\"requestBody\");\n    if (!requestBody || requestBody.kind !== \"requestBody\") {\n      throw new Error(\"Expected Google Discovery request body symbol\");\n    }\n\n    const requestBodyShape =\n      snapshot.catalog.symbols[requestBody.contents[0]!.shapeId];\n    expect(requestBodyShape?.kind).toBe(\"shape\");\n    if (!requestBodyShape || requestBodyShape.kind !== \"shape\") {\n      throw new Error(\"Expected request body shape\");\n    }\n\n    expect(requestBodyShape.node.type).toBe(\"object\");\n    if (requestBodyShape.node.type !== \"object\") {\n      throw new Error(\"Expected request body object shape\");\n    }\n\n    const messageShapeId = requestBodyShape.node.fields.message?.shapeId;\n    expect(messageShapeId).toBeDefined();\n    const messageShape =\n      messageShapeId === undefined\n        ? undefined\n        : snapshot.catalog.symbols[messageShapeId];\n\n    expect(messageShape?.kind).toBe(\"shape\");\n    if (!messageShape || messageShape.kind !== \"shape\") {\n      throw new Error(\"Expected message field shape\");\n    }\n\n    expect(messageShape.node.type).toBe(\"ref\");\n    if (messageShape.node.type !== \"ref\") {\n      throw new Error(\"Expected message field ref shape\");\n    }\n\n    const targetShape = snapshot.catalog.symbols[messageShape.node.target];\n    expect(targetShape?.kind).toBe(\"shape\");\n    if (!targetShape || targetShape.kind !== \"shape\") {\n      throw new Error(\"Expected referenced Message shape\");\n    }\n\n    expect(targetShape.node.type).toBe(\"object\");\n    if (targetShape.node.type !== \"object\") {\n      throw new Error(\"Expected referenced Message object shape\");\n    }\n\n    expect(targetShape.node.fields.raw?.shapeId).toBeDefined();\n  });\n\n  it(\"deduplicates structurally identical JSON schema shapes across operations\", () => {\n    const repeatedObjectSchema = {\n      type: \"object\",\n      properties: {\n        id: { type: \"string\" },\n        name: { type: \"string\" },\n      },\n      required: [\"id\"],\n      additionalProperties: false,\n    };\n\n    const snapshot = createOpenApiCatalogSnapshot({\n      source: baseSource,\n      documents: [\n        {\n          documentKind: \"openapi\",\n          documentKey: \"https://api.example.test/openapi.json\",\n          contentText: \"{}\",\n          fetchedAt: 1,\n        },\n      ],\n      operations: [\n        {\n          toolId: \"events.get\",\n          title: \"Get event\",\n          description: \"Get an event\",\n          effect: \"read\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              eventId: { type: \"string\" },\n            },\n          },\n          outputSchema: repeatedObjectSchema,\n          providerData: {\n            kind: \"openapi\",\n            toolId: \"events.get\",\n            rawToolId: \"events.get\",\n            group: \"events\",\n            leaf: \"get\",\n            tags: [\"events\"],\n            method: \"get\",\n            path: \"/events/{eventId}\",\n            operationHash: \"op_hash_get\",\n            invocation: {\n              method: \"get\",\n              pathTemplate: \"/events/{eventId}\",\n              parameters: [\n                { name: \"eventId\", location: \"path\", required: true },\n              ],\n              requestBody: null,\n            },\n            documentation: null,\n          },\n        },\n        {\n          toolId: \"events.list\",\n          title: \"List events\",\n          description: \"List events\",\n          effect: \"read\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              pageToken: { type: \"string\" },\n            },\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              items: {\n                type: \"array\",\n                items: repeatedObjectSchema,\n              },\n            },\n            additionalProperties: false,\n          },\n          providerData: {\n            kind: \"openapi\",\n            toolId: \"events.list\",\n            rawToolId: \"events.list\",\n            group: \"events\",\n            leaf: \"list\",\n            tags: [\"events\"],\n            method: \"get\",\n            path: \"/events\",\n            operationHash: \"op_hash_list\",\n            invocation: {\n              method: \"get\",\n              pathTemplate: \"/events\",\n              parameters: [],\n              requestBody: null,\n            },\n            documentation: null,\n          },\n        },\n      ],\n    });\n\n    const shapes = Object.values(snapshot.catalog.symbols).filter(\n      (symbol) => symbol.kind === \"shape\",\n    );\n    const stringScalars = shapes.filter(\n      (symbol) =>\n        symbol.node.type === \"scalar\" &&\n        symbol.node.scalar === \"string\" &&\n        symbol.node.format === undefined,\n    );\n    const repeatedObjects = shapes.filter(\n      (symbol) =>\n        symbol.node.type === \"object\" &&\n        Object.keys(symbol.node.fields).length === 2 &&\n        symbol.node.fields.id !== undefined &&\n        symbol.node.fields.name !== undefined &&\n        symbol.node.additionalProperties === false &&\n        symbol.node.required?.length === 1 &&\n        symbol.node.required[0] === \"id\",\n    );\n    expect(stringScalars).toHaveLength(1);\n    expect(repeatedObjects.length).toBeGreaterThan(0);\n  });\n\n  it(\"converts GraphQL field operations into GraphQL executables\", () => {\n    const snapshot = createGraphqlCatalogSnapshot({\n      source: {\n        ...baseSource,\n        kind: \"graphql\",\n        namespace: \"github\",\n      },\n      documents: [],\n      operations: [\n        {\n          toolId: \"viewer\",\n          title: \"Viewer\",\n          description: \"Load the current viewer\",\n          effect: \"read\",\n          inputSchema: { type: \"object\", properties: {} },\n          outputSchema: {\n            type: \"object\",\n            properties: { login: { type: \"string\" } },\n          },\n          providerData: {\n            kind: \"graphql\",\n            toolKind: \"field\",\n            toolId: \"viewer\",\n            rawToolId: \"viewer\",\n            group: \"query\",\n            leaf: \"viewer\",\n            fieldName: \"viewer\",\n            operationType: \"query\",\n            operationName: \"ViewerQuery\",\n            operationDocument: \"query ViewerQuery { viewer { login } }\",\n            queryTypeName: \"Query\",\n            mutationTypeName: null,\n            subscriptionTypeName: null,\n          },\n        },\n      ],\n    });\n\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n\n    expect(executable.adapterKey).toBe(\"graphql\");\n    expect(executable.projection.callShapeId).toBeDefined();\n    expect(executable.projection.resultDataShapeId).toBeDefined();\n    expect(executable.projection.resultErrorShapeId).toBeDefined();\n    expect(executable.display?.protocol).toBe(\"graphql\");\n    expect(executable.display?.method).toBe(\"query\");\n    expect(executable.display?.pathTemplate).toBe(\"viewer\");\n    expect(executable.binding).toMatchObject({\n      kind: \"graphql\",\n      toolKind: \"field\",\n      operationType: \"query\",\n      fieldName: \"viewer\",\n      operationName: \"ViewerQuery\",\n      operationDocument: \"query ViewerQuery { viewer { login } }\",\n    });\n    expect(executable.native).toBeUndefined();\n  });\n\n  it(\"projects MCP metadata into capability semantics\", () => {\n    const snapshot = createMcpCatalogSnapshot({\n      source: {\n        ...baseSource,\n        kind: \"mcp\",\n        namespace: \"workspace.mcp\",\n      },\n      documents: [\n        {\n          documentKind: \"mcp_manifest\",\n          documentKey: \"https://mcp.example.test\",\n          contentText: \"{}\",\n          fetchedAt: 1,\n        },\n      ],\n      operations: [\n        {\n          toolId: \"memory.read_file\",\n          title: \"Read File\",\n          description: \"Read a file from memory\",\n          effect: \"read\",\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              path: {\n                type: \"string\",\n              },\n            },\n            required: [\"path\"],\n            additionalProperties: false,\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              content: {\n                type: \"string\",\n              },\n            },\n            required: [\"content\"],\n            additionalProperties: false,\n          },\n          providerData: {\n            toolId: \"memory.read_file\",\n            toolName: \"read_file\",\n            displayTitle: \"Read File\",\n            title: \"Read File\",\n            description: \"Read a file from memory\",\n            annotations: {\n              title: \"Read File (Annotated)\",\n              readOnlyHint: true,\n              destructiveHint: false,\n              idempotentHint: true,\n              openWorldHint: false,\n            },\n            execution: {\n              taskSupport: \"required\",\n            },\n            icons: [\n              {\n                src: \"https://example.test/icon.png\",\n              },\n            ],\n            meta: {\n              category: \"filesystem\",\n            },\n            rawTool: {\n              name: \"read_file\",\n              annotations: {\n                readOnlyHint: true,\n              },\n            },\n            server: {\n              info: {\n                name: \"mcp-test-server\",\n                version: \"1.0.0\",\n                title: \"Test Server\",\n                description: null,\n                websiteUrl: null,\n                icons: null,\n              },\n              capabilities: {\n                experimental: null,\n                logging: false,\n                completions: false,\n                prompts: null,\n                resources: null,\n                tools: {\n                  listChanged: true,\n                },\n                tasks: {\n                  list: false,\n                  cancel: false,\n                  toolCall: true,\n                },\n              },\n              instructions: \"Use carefully.\",\n              rawInfo: {\n                name: \"mcp-test-server\",\n                version: \"1.0.0\",\n              },\n              rawCapabilities: {\n                tools: {\n                  listChanged: true,\n                },\n              },\n            },\n          },\n        },\n      ],\n    });\n\n    const capability = Object.values(snapshot.catalog.capabilities)[0]!;\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n\n    expect(capability.surface.title).toBe(\"Read File\");\n    expect(capability.semantics).toMatchObject({\n      effect: \"read\",\n      safe: true,\n      idempotent: true,\n      destructive: false,\n    });\n    expect(capability.interaction.resume.supported).toBe(true);\n    expect(capability.native).toBeUndefined();\n    expect(executable.adapterKey).toBe(\"mcp\");\n    expect(executable.projection.callShapeId).toBeDefined();\n    expect(executable.projection.resultStatusShapeId).toBeDefined();\n    expect(executable.display?.protocol).toBe(\"mcp\");\n    expect(executable.native).toBeUndefined();\n  });\n\n  it(\"materializes GraphQL input refs before importing into IR snapshots\", () => {\n    const manifest: GraphqlToolManifest = {\n      version: 2,\n      sourceHash: \"hash_graphql\",\n      queryTypeName: \"Query\",\n      mutationTypeName: \"Mutation\",\n      subscriptionTypeName: null,\n      schemaRefTable: {\n        \"#/$defs/graphql/input/AgentActivityCreatePromptInput\": JSON.stringify({\n          type: \"object\",\n          properties: {\n            prompt: {\n              type: \"string\",\n              description: \"Prompt text.\",\n            },\n          },\n          required: [\"prompt\"],\n          additionalProperties: false,\n        }),\n      },\n      tools: [\n        {\n          kind: \"field\",\n          toolId: \"agentActivityCreatePrompt\",\n          rawToolId: \"agentActivityCreatePrompt\",\n          toolName: \"Agent Activity Create Prompt\",\n          description: \"Create a prompt activity.\",\n          group: \"mutation\",\n          leaf: \"agentActivityCreatePrompt\",\n          fieldName: \"agentActivityCreatePrompt\",\n          operationType: \"mutation\",\n          operationName: \"MutationAgentActivityCreatePrompt\",\n          operationDocument:\n            \"mutation MutationAgentActivityCreatePrompt($input: AgentActivityCreatePromptInput!) { agentActivityCreatePrompt(input: $input) { success __typename } }\",\n          searchTerms: [\"mutation\", \"agentActivityCreatePrompt\", \"input\"],\n          inputSchema: {\n            type: \"object\",\n            properties: {\n              input: {\n                $ref: \"#/$defs/graphql/input/AgentActivityCreatePromptInput\",\n                description: \"Prompt activity input.\",\n              },\n              headers: {\n                type: \"object\",\n                additionalProperties: {\n                  type: \"string\",\n                },\n              },\n            },\n            required: [\"input\"],\n            additionalProperties: false,\n          },\n          outputSchema: {\n            type: \"object\",\n            properties: {\n              data: {\n                type: \"object\",\n                properties: {\n                  success: {\n                    type: \"boolean\",\n                  },\n                },\n                required: [\"success\"],\n                additionalProperties: false,\n              },\n              errors: {\n                type: \"array\",\n                items: {\n                  type: \"object\",\n                  properties: {\n                    message: {\n                      type: \"string\",\n                    },\n                  },\n                },\n              },\n            },\n            required: [\"data\", \"errors\"],\n            additionalProperties: false,\n          },\n        },\n      ],\n    };\n\n    const definition = compileGraphqlToolDefinitions(manifest)[0]!;\n    const presentation = buildGraphqlToolPresentation({\n      manifest,\n      definition,\n    });\n    const snapshot = createGraphqlCatalogSnapshot({\n      source: {\n        ...baseSource,\n        kind: \"graphql\",\n        namespace: \"linear\",\n      },\n      documents: [],\n      operations: [\n        {\n          toolId: definition.toolId,\n          title: definition.name,\n          description: definition.description,\n          effect: \"write\",\n          inputSchema: presentation.inputSchema,\n          outputSchema: presentation.outputSchema,\n          providerData: presentation.providerData,\n        },\n      ],\n    });\n\n    expect(presentation.inputTypePreview).toContain(\"{ input: {\");\n    expect(presentation.outputTypePreview).not.toContain(\"unknown[]\");\n\n    const executable = Object.values(snapshot.catalog.executables)[0]!;\n    const argumentShape =\n      snapshot.catalog.symbols[executable.projection.callShapeId];\n    expect(argumentShape?.kind).toBe(\"shape\");\n    if (!argumentShape || argumentShape.kind !== \"shape\") {\n      throw new Error(\"Expected argument shape symbol\");\n    }\n\n    expect(argumentShape.node.type).toBe(\"object\");\n    if (argumentShape.node.type !== \"object\") {\n      throw new Error(\"Expected object argument shape\");\n    }\n\n    const inputFieldShapeId = argumentShape.node.fields.input?.shapeId;\n    expect(inputFieldShapeId).toBeDefined();\n    const inputFieldShape =\n      inputFieldShapeId === undefined\n        ? undefined\n        : snapshot.catalog.symbols[inputFieldShapeId];\n\n    expect(inputFieldShape?.kind).toBe(\"shape\");\n    if (!inputFieldShape || inputFieldShape.kind !== \"shape\") {\n      throw new Error(\"Expected GraphQL input field shape\");\n    }\n\n    expect(inputFieldShape.node.type).toBe(\"ref\");\n    expect(\n      Object.values(snapshot.catalog.diagnostics).some(\n        (diagnostic) =>\n          diagnostic.code === \"unresolved_ref\" &&\n          diagnostic.message.includes(\"AgentActivityCreatePromptInput\"),\n      ),\n    ).toBe(false);\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/sync.ts",
    "content": "import type {\n  AccountId,\n  Source,\n  SourceStatus,\n} from \"#schema\";\nimport type { McpToolManifest } from \"@executor/source-mcp\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  RuntimeLocalWorkspaceService,\n  type RuntimeLocalWorkspaceState,\n} from \"../../local/runtime-context\";\nimport {\n  SourceArtifactStore,\n  type SourceArtifactStoreShape,\n  WorkspaceStateStore,\n  type WorkspaceStateStoreShape,\n} from \"../../local/storage\";\nimport {\n  type LocalWorkspaceState,\n} from \"../../local/workspace-state\";\nimport {\n  RuntimeSourceAuthMaterialService,\n} from \"../../auth/source-auth-material\";\nimport {\n  getSourceAdapterForSource,\n} from \"../../sources/source-adapters\";\nimport {\n  catalogSyncResultFromMcpManifest,\n} from \"@executor/source-mcp\";\nimport { SecretMaterialResolverService } from \"../../local/secret-material-providers\";\nimport { snapshotFromSourceCatalogSyncResult } from \"@executor/source-core\";\nimport {\n  refreshSourceTypeDeclarationInBackground,\n} from \"./type-declarations\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\nconst shouldIndexSource = (source: Source): boolean =>\n  source.enabled\n  && source.status === \"connected\"\n  && getSourceAdapterForSource(source).catalogKind !== \"internal\";\n\ntype RuntimeSourceCatalogSyncDeps = {\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n  resolveSecretMaterial: Effect.Effect.Success<typeof SecretMaterialResolverService>;\n  sourceAuthMaterialService: Effect.Effect.Success<typeof RuntimeSourceAuthMaterialService>;\n};\n\ntype SourceCatalogSyncServices =\n  | RuntimeLocalWorkspaceService\n  | WorkspaceStateStore\n  | SourceArtifactStore\n  | RuntimeSourceAuthMaterialService\n  | SecretMaterialResolverService;\n\nexport type RuntimeSourceCatalogSyncShape = {\n  sync: (input: {\n    source: Source;\n    actorAccountId?: AccountId | null;\n  }) => Effect.Effect<void, Error, never>;\n  persistMcpCatalogSnapshotFromManifest: (input: {\n    source: Source;\n    manifest: McpToolManifest;\n  }) => Effect.Effect<void, Error, never>;\n};\n\nexport class RuntimeSourceCatalogSyncService extends Context.Tag(\n  \"#runtime/RuntimeSourceCatalogSyncService\",\n)<RuntimeSourceCatalogSyncService, RuntimeSourceCatalogSyncShape>() {}\n\nconst ensureRuntimeCatalogSyncWorkspace = (\n  deps: RuntimeSourceCatalogSyncDeps,\n  workspaceId: Source[\"workspaceId\"],\n) => {\n  if (deps.runtimeLocalWorkspace.installation.workspaceId !== workspaceId) {\n    return Effect.fail(\n      runtimeEffectError(\"catalog/source/sync\", \n        `Runtime local workspace mismatch: expected ${workspaceId}, got ${deps.runtimeLocalWorkspace.installation.workspaceId}`,\n      ),\n    );\n  }\n\n  return Effect.succeed(deps.runtimeLocalWorkspace.context);\n};\n\nconst syncSourceCatalogWithDeps = (\n  deps: RuntimeSourceCatalogSyncDeps,\n  input: {\n    source: Source;\n    actorAccountId?: AccountId | null;\n  },\n): Effect.Effect<void, Error, never> =>\n  Effect.gen(function* () {\n    const workspaceContext = yield* ensureRuntimeCatalogSyncWorkspace(\n      deps,\n      input.source.workspaceId,\n    );\n\n    if (!shouldIndexSource(input.source)) {\n      const state = yield* deps.workspaceStateStore.load(workspaceContext);\n      const existingSourceState = state.sources[input.source.id];\n      const nextState: LocalWorkspaceState = {\n        ...state,\n        sources: {\n          ...state.sources,\n          [input.source.id]: {\n            status: (input.source.enabled ? input.source.status : \"draft\") as SourceStatus,\n            lastError: null,\n            sourceHash: input.source.sourceHash,\n            createdAt: existingSourceState?.createdAt ?? input.source.createdAt,\n            updatedAt: Date.now(),\n          },\n        },\n      };\n      yield* deps.workspaceStateStore.write({\n        context: workspaceContext,\n        state: nextState,\n      });\n      yield* Effect.sync(() => {\n        refreshSourceTypeDeclarationInBackground({\n          context: workspaceContext,\n          source: input.source,\n          snapshot: null,\n        });\n      });\n      return;\n    }\n\n    const adapter = getSourceAdapterForSource(input.source);\n    const syncResult = yield* adapter.syncCatalog({\n      source: input.source,\n      resolveSecretMaterial: deps.resolveSecretMaterial,\n      resolveAuthMaterialForSlot: (slot) =>\n        deps.sourceAuthMaterialService.resolve({\n          source: input.source,\n          slot,\n          actorAccountId: input.actorAccountId,\n        }),\n    });\n    const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n    yield* deps.sourceArtifactStore.write({\n      context: workspaceContext,\n      sourceId: input.source.id,\n      artifact: deps.sourceArtifactStore.build({\n        source: input.source,\n        syncResult,\n      }),\n    });\n\n    const state = yield* deps.workspaceStateStore.load(workspaceContext);\n    const existingSourceState = state.sources[input.source.id];\n    const nextState: LocalWorkspaceState = {\n      ...state,\n      sources: {\n        ...state.sources,\n        [input.source.id]: {\n          status: \"connected\",\n          lastError: null,\n          sourceHash: syncResult.sourceHash,\n          createdAt: existingSourceState?.createdAt ?? input.source.createdAt,\n          updatedAt: Date.now(),\n        },\n      },\n    };\n    yield* deps.workspaceStateStore.write({\n      context: workspaceContext,\n      state: nextState,\n    });\n\n    yield* Effect.sync(() => {\n      refreshSourceTypeDeclarationInBackground({\n        context: workspaceContext,\n        source: input.source,\n        snapshot,\n      });\n    });\n  }).pipe(\n    Effect.withSpan(\"source.catalog.sync\", {\n      attributes: {\n        \"executor.source.id\": input.source.id,\n        \"executor.source.kind\": input.source.kind,\n        \"executor.source.namespace\": input.source.namespace,\n        \"executor.source.endpoint\": input.source.endpoint,\n      },\n    }),\n  );\n\nconst persistMcpCatalogSnapshotFromManifestWithDeps = (\n  deps: RuntimeSourceCatalogSyncDeps,\n  input: {\n    source: Source;\n    manifest: McpToolManifest;\n  },\n): Effect.Effect<void, Error, never> =>\n  Effect.gen(function* () {\n    const workspaceContext = yield* ensureRuntimeCatalogSyncWorkspace(\n      deps,\n      input.source.workspaceId,\n    );\n    const syncResult = catalogSyncResultFromMcpManifest({\n      source: input.source,\n      endpoint: input.source.endpoint,\n      manifest: input.manifest,\n    });\n    const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n\n    yield* deps.sourceArtifactStore.write({\n      context: workspaceContext,\n      sourceId: input.source.id,\n      artifact: deps.sourceArtifactStore.build({\n        source: input.source,\n        syncResult,\n      }),\n    });\n\n    yield* Effect.sync(() => {\n      refreshSourceTypeDeclarationInBackground({\n        context: workspaceContext,\n        source: input.source,\n        snapshot,\n      });\n    });\n  });\n\nexport const syncSourceCatalog = (input: {\n  source: Source;\n  actorAccountId?: AccountId | null;\n}): Effect.Effect<void, Error, SourceCatalogSyncServices> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n    const resolveSecretMaterial = yield* SecretMaterialResolverService;\n    const sourceAuthMaterialService = yield* RuntimeSourceAuthMaterialService;\n\n    return yield* syncSourceCatalogWithDeps(\n      {\n        runtimeLocalWorkspace,\n        workspaceStateStore,\n        sourceArtifactStore,\n        resolveSecretMaterial,\n        sourceAuthMaterialService,\n      },\n      {\n        source: input.source,\n        actorAccountId: input.actorAccountId,\n      },\n    );\n  });\n\nexport const persistMcpCatalogSnapshotFromManifest = (input: {\n  source: Source;\n  manifest: McpToolManifest;\n}): Effect.Effect<void, Error, SourceCatalogSyncServices> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n    const resolveSecretMaterial = yield* SecretMaterialResolverService;\n    const sourceAuthMaterialService = yield* RuntimeSourceAuthMaterialService;\n\n    return yield* persistMcpCatalogSnapshotFromManifestWithDeps(\n      {\n        runtimeLocalWorkspace,\n        workspaceStateStore,\n        sourceArtifactStore,\n        resolveSecretMaterial,\n        sourceAuthMaterialService,\n      },\n      input,\n    );\n  });\n\nexport const RuntimeSourceCatalogSyncLive = Layer.effect(\n  RuntimeSourceCatalogSyncService,\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n    const resolveSecretMaterial = yield* SecretMaterialResolverService;\n    const sourceAuthMaterialService = yield* RuntimeSourceAuthMaterialService;\n\n    const deps: RuntimeSourceCatalogSyncDeps = {\n      runtimeLocalWorkspace,\n      workspaceStateStore,\n      sourceArtifactStore,\n      resolveSecretMaterial,\n      sourceAuthMaterialService,\n    };\n\n    return RuntimeSourceCatalogSyncService.of({\n      sync: (input) => syncSourceCatalogWithDeps(deps, input),\n      persistMcpCatalogSnapshotFromManifest: (input) =>\n        persistMcpCatalogSnapshotFromManifestWithDeps(deps, input),\n    });\n  }),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/type-declarations.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport { SourceIdSchema, WorkspaceIdSchema, type Source } from \"#schema\";\n\nimport {\n  createCatalogSnapshotV1,\n  createEmptyCatalogV1,\n} from \"@executor/ir/catalog\";\nimport {\n  CapabilityIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ResourceIdSchema,\n  ResponseSetIdSchema,\n  ScopeIdSchema,\n  ShapeSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type { CatalogV1, ProvenanceRef } from \"@executor/ir/model\";\nimport { syncWorkspaceSourceTypeDeclarationsNode } from \"./type-declarations\";\n\nconst put = <K extends string, V>(record: Record<K, V>, key: K, value: V) => {\n  record[key] = value;\n};\n\nconst docId = DocumentIdSchema.make(\"doc_graphql\");\nconst baseProvenance = (pointer: string): ProvenanceRef[] => [\n  {\n    relation: \"declared\",\n    documentId: docId,\n    pointer,\n  },\n];\n\nconst createSnapshot = (): ReturnType<typeof createCatalogSnapshotV1> => {\n  const catalog = createEmptyCatalogV1();\n  const resourceId = ResourceIdSchema.make(\"res_graphql\");\n  const scopeId = ScopeIdSchema.make(\"scope_graphql\");\n  const stringShapeId = ShapeSymbolIdSchema.make(\"shape_string\");\n  const teamFilterShapeId = ShapeSymbolIdSchema.make(\"shape_team_filter\");\n  const callShapeId = ShapeSymbolIdSchema.make(\"shape_team_query_args\");\n  const resultShapeId = ShapeSymbolIdSchema.make(\"shape_team_connection\");\n  const executableId = ExecutableIdSchema.make(\"exec_graphql_teams\");\n  const capabilityId = CapabilityIdSchema.make(\"cap_graphql_teams\");\n  const responseSetId = ResponseSetIdSchema.make(\"response_set_graphql_teams\");\n  const secondExecutableId = ExecutableIdSchema.make(\n    \"exec_graphql_teams_search\",\n  );\n  const secondCapabilityId = CapabilityIdSchema.make(\n    \"cap_graphql_teams_search\",\n  );\n\n  put(\n    catalog.documents as Record<\n      typeof docId,\n      CatalogV1[\"documents\"][typeof docId]\n    >,\n    docId,\n    {\n      id: docId,\n      kind: \"graphql-schema\",\n      title: \"Linear GraphQL\",\n      fetchedAt: \"2026-03-14T00:00:00.000Z\",\n      rawRef: \"memory://linear/graphql\",\n    },\n  );\n\n  put(\n    catalog.resources as Record<\n      typeof resourceId,\n      CatalogV1[\"resources\"][typeof resourceId]\n    >,\n    resourceId,\n    {\n      id: resourceId,\n      documentId: docId,\n      canonicalUri: \"https://api.linear.app/graphql\",\n      baseUri: \"https://api.linear.app/graphql\",\n      anchors: {},\n      dynamicAnchors: {},\n      synthetic: false,\n      provenance: baseProvenance(\"#\"),\n    },\n  );\n\n  put(\n    catalog.scopes as Record<\n      typeof scopeId,\n      CatalogV1[\"scopes\"][typeof scopeId]\n    >,\n    scopeId,\n    {\n      id: scopeId,\n      kind: \"service\",\n      name: \"Linear\",\n      namespace: \"linear\",\n      synthetic: false,\n      provenance: baseProvenance(\"#\"),\n    },\n  );\n\n  put(\n    catalog.symbols as Record<\n      typeof stringShapeId,\n      CatalogV1[\"symbols\"][typeof stringShapeId]\n    >,\n    stringShapeId,\n    {\n      id: stringShapeId,\n      kind: \"shape\",\n      resourceId,\n      title: \"String\",\n      node: {\n        type: \"scalar\",\n        scalar: \"string\",\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/scalar/String\"),\n    },\n  );\n\n  put(\n    catalog.symbols as Record<\n      typeof teamFilterShapeId,\n      CatalogV1[\"symbols\"][typeof teamFilterShapeId]\n    >,\n    teamFilterShapeId,\n    {\n      id: teamFilterShapeId,\n      kind: \"shape\",\n      resourceId,\n      title: \"shape_deadbeef\",\n      node: {\n        type: \"object\",\n        fields: {\n          name: {\n            shapeId: stringShapeId,\n          },\n        },\n        additionalProperties: false,\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/input/TeamFilter\"),\n    },\n  );\n\n  put(\n    catalog.symbols as Record<\n      typeof callShapeId,\n      CatalogV1[\"symbols\"][typeof callShapeId]\n    >,\n    callShapeId,\n    {\n      id: callShapeId,\n      kind: \"shape\",\n      resourceId,\n      title: \"shape_feedface\",\n      node: {\n        type: \"object\",\n        fields: {\n          filter: {\n            shapeId: teamFilterShapeId,\n          },\n        },\n        additionalProperties: false,\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/query/teams/args\"),\n    },\n  );\n\n  put(\n    catalog.symbols as Record<\n      typeof resultShapeId,\n      CatalogV1[\"symbols\"][typeof resultShapeId]\n    >,\n    resultShapeId,\n    {\n      id: resultShapeId,\n      kind: \"shape\",\n      resourceId,\n      title: \"TeamConnection\",\n      node: {\n        type: \"object\",\n        fields: {\n          nodes: {\n            shapeId: teamFilterShapeId,\n          },\n        },\n        additionalProperties: false,\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/query/teams/result\"),\n    },\n  );\n\n  put(\n    catalog.responseSets as Record<\n      typeof responseSetId,\n      CatalogV1[\"responseSets\"][typeof responseSetId]\n    >,\n    responseSetId,\n    {\n      id: responseSetId,\n      variants: [],\n      synthetic: false,\n      provenance: baseProvenance(\"#/responses\"),\n    },\n  );\n\n  put(\n    catalog.capabilities as Record<\n      typeof capabilityId,\n      CatalogV1[\"capabilities\"][typeof capabilityId]\n    >,\n    capabilityId,\n    {\n      id: capabilityId,\n      serviceScopeId: scopeId,\n      surface: {\n        toolPath: [\"linear\", \"teams\"],\n        title: \"Teams\",\n        summary: \"List teams\",\n      },\n      semantics: {\n        effect: \"read\",\n        safe: true,\n        idempotent: true,\n        destructive: false,\n      },\n      auth: { kind: \"none\" },\n      interaction: {\n        approval: { mayRequire: false },\n        elicitation: { mayRequest: false },\n        resume: { supported: false },\n      },\n      executableIds: [executableId],\n      preferredExecutableId: executableId,\n      synthetic: false,\n      provenance: baseProvenance(\"#/query/teams\"),\n    },\n  );\n\n  put(\n    catalog.executables as Record<\n      typeof executableId,\n      CatalogV1[\"executables\"][typeof executableId]\n    >,\n    executableId,\n    {\n      id: executableId,\n      capabilityId,\n      scopeId,\n      adapterKey: \"graphql\",\n      bindingVersion: 1,\n      binding: {\n        kind: \"graphql\",\n        toolKind: \"field\",\n        toolId: \"teams\",\n        rawToolId: \"teams\",\n        group: \"query\",\n        leaf: \"teams\",\n        fieldName: \"teams\",\n        operationType: \"query\",\n        operationName: \"TeamsQuery\",\n        operationDocument: \"query TeamsQuery { teams { nodes { id } } }\",\n        queryTypeName: \"Query\",\n        mutationTypeName: null,\n        subscriptionTypeName: null,\n      },\n      projection: {\n        responseSetId,\n        callShapeId,\n        resultDataShapeId: resultShapeId,\n      },\n      display: {\n        protocol: \"graphql\",\n        method: \"query\",\n        pathTemplate: \"teams\",\n        operationId: \"teams\",\n        group: \"query\",\n        leaf: \"teams\",\n        rawToolId: \"teams\",\n        title: \"Teams\",\n        summary: \"List teams\",\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/query/teams\"),\n    },\n  );\n\n  put(\n    catalog.capabilities as Record<\n      typeof secondCapabilityId,\n      CatalogV1[\"capabilities\"][typeof secondCapabilityId]\n    >,\n    secondCapabilityId,\n    {\n      id: secondCapabilityId,\n      serviceScopeId: scopeId,\n      surface: {\n        toolPath: [\"linear\", \"teamsSearch\"],\n        title: \"Teams Search\",\n        summary: \"Search teams\",\n      },\n      semantics: {\n        effect: \"read\",\n        safe: true,\n        idempotent: true,\n        destructive: false,\n      },\n      auth: { kind: \"none\" },\n      interaction: {\n        approval: { mayRequire: false },\n        elicitation: { mayRequest: false },\n        resume: { supported: false },\n      },\n      executableIds: [secondExecutableId],\n      preferredExecutableId: secondExecutableId,\n      synthetic: false,\n      provenance: baseProvenance(\"#/query/teamsSearch\"),\n    },\n  );\n\n  put(\n    catalog.executables as Record<\n      typeof secondExecutableId,\n      CatalogV1[\"executables\"][typeof secondExecutableId]\n    >,\n    secondExecutableId,\n    {\n      id: secondExecutableId,\n      capabilityId: secondCapabilityId,\n      scopeId,\n      adapterKey: \"graphql\",\n      bindingVersion: 1,\n      binding: {\n        kind: \"graphql\",\n        toolKind: \"field\",\n        toolId: \"teamsSearch\",\n        rawToolId: \"teamsSearch\",\n        group: \"query\",\n        leaf: \"teamsSearch\",\n        fieldName: \"teamsSearch\",\n        operationType: \"query\",\n        operationName: \"TeamsSearchQuery\",\n        operationDocument:\n          \"query TeamsSearchQuery { teamsSearch { nodes { id } } }\",\n        queryTypeName: \"Query\",\n        mutationTypeName: null,\n        subscriptionTypeName: null,\n      },\n      projection: {\n        responseSetId,\n        callShapeId,\n        resultDataShapeId: resultShapeId,\n      },\n      display: {\n        protocol: \"graphql\",\n        method: \"query\",\n        pathTemplate: \"teamsSearch\",\n        operationId: \"teamsSearch\",\n        group: \"query\",\n        leaf: \"teamsSearch\",\n        rawToolId: \"teamsSearch\",\n        title: \"Teams Search\",\n        summary: \"Search teams\",\n      },\n      synthetic: false,\n      provenance: baseProvenance(\"#/query/teamsSearch\"),\n    },\n  );\n\n  return createCatalogSnapshotV1({\n    import: {\n      sourceKind: \"graphql-schema\",\n      adapterKey: \"graphql\",\n      importerVersion: \"test\",\n      importedAt: \"2026-03-14T00:00:00.000Z\",\n      sourceConfigHash: \"hash_test\",\n    },\n    catalog,\n  });\n};\n\nconst makeSource = (input: {\n  id: string;\n  enabled?: boolean;\n  status?: Source[\"status\"];\n}): Source => ({\n  id: SourceIdSchema.make(input.id),\n  workspaceId: WorkspaceIdSchema.make(\"ws_test\"),\n  name: input.id,\n  kind: \"graphql\",\n  endpoint: \"https://api.linear.app/graphql\",\n  status: input.status ?? \"connected\",\n  enabled: input.enabled ?? true,\n  namespace: \"linear\",\n  bindingVersion: 1,\n  binding: {\n    defaultHeaders: null,\n  },\n  importAuthPolicy: \"reuse_runtime\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: \"hash_test\",\n  lastError: null,\n  createdAt: 0,\n  updatedAt: 0,\n});\n\nconst makeTempDirectory = (prefix: string) =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) =>\n      fs.makeTempDirectory({\n        directory: tmpdir(),\n        prefix,\n      }),\n    ),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst readTextFile = (path: string) =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) => fs.readFileString(path, \"utf8\")),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst fileExists = (path: string) =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) => fs.exists(path)),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst makeTypeDeclarationsContext = (\n  workspaceRoot: string,\n  workspaceName: string,\n) => ({\n  cwd: workspaceRoot,\n  workspaceRoot,\n  workspaceName,\n  configDirectory: join(workspaceRoot, \".executor\"),\n  projectConfigPath: join(workspaceRoot, \".executor\", \"executor.jsonc\"),\n  homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n  homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n  artifactsDirectory: join(workspaceRoot, \".executor\", \"artifacts\"),\n  stateDirectory: join(workspaceRoot, \".executor\", \"state\"),\n});\n\ndescribe(\"source-type-declarations\", () => {\n  it.effect(\"writes per-source and aggregate declaration files\", () =>\n    Effect.gen(function* () {\n      const workspaceRoot = yield* makeTempDirectory(\"executor-types-\");\n      const context = makeTypeDeclarationsContext(\n        workspaceRoot,\n        \"executor-types\",\n      );\n\n      const snapshot = createSnapshot();\n      yield* syncWorkspaceSourceTypeDeclarationsNode({\n        context,\n        entries: [\n          {\n            source: makeSource({ id: \"src_linear\" }),\n            snapshot,\n          },\n          {\n            source: makeSource({ id: \"src_hidden\", enabled: false }),\n            snapshot,\n          },\n        ],\n      });\n\n      const sourceDeclaration = yield* readTextFile(\n        join(workspaceRoot, \".executor\", \"types\", \"sources\", \"src_linear.d.ts\"),\n      );\n      const aggregateDeclaration = yield* readTextFile(\n        join(workspaceRoot, \".executor\", \"types\", \"index.d.ts\"),\n      );\n\n      expect(sourceDeclaration).toContain(\n        \"export interface SourceTools_src_linear\",\n      );\n      expect(sourceDeclaration).toContain(\"type LinearTeamsCall = {\");\n      expect(sourceDeclaration).toContain(\"type LinearTeamsResult = {\");\n      expect(sourceDeclaration.match(/type LinearTeamsCall =/g)?.length).toBe(\n        1,\n      );\n      expect(sourceDeclaration).not.toContain(\"type shape_\");\n      expect(sourceDeclaration).not.toContain(\"= shape_\");\n      expect(sourceDeclaration).toContain(\"linear: {\");\n      expect(sourceDeclaration).toContain(\n        \"teams: (args?: LinearTeamsCall) => Promise<LinearTeamsResult>;\",\n      );\n      expect(sourceDeclaration).toContain(\n        \"teamsSearch: (args?: LinearTeamsCall) => Promise<LinearTeamsResult>;\",\n      );\n      expect(sourceDeclaration).not.toMatch(/type\\s+[0-9]/);\n      expect(aggregateDeclaration).toContain(\n        'import type { SourceTools_src_linear } from \"../sources/src_linear\";',\n      );\n      expect(aggregateDeclaration).not.toContain(\"src_hidden\");\n      expect(aggregateDeclaration).toContain(\"declare global {\");\n      expect(aggregateDeclaration).toContain(\n        \"const tools: ExecutorSourceTools;\",\n      );\n    }),\n  );\n\n  it.effect(\n    \"removes stale source declarations when the source disappears\",\n    () =>\n      Effect.gen(function* () {\n        const workspaceRoot = yield* makeTempDirectory(\"executor-types-stale-\");\n        const context = makeTypeDeclarationsContext(\n          workspaceRoot,\n          \"executor-types-stale\",\n        );\n\n        const snapshot = createSnapshot();\n        yield* syncWorkspaceSourceTypeDeclarationsNode({\n          context,\n          entries: [{ source: makeSource({ id: \"src_linear\" }), snapshot }],\n        });\n        yield* syncWorkspaceSourceTypeDeclarationsNode({\n          context,\n          entries: [],\n        });\n\n        const aggregateDeclaration = yield* readTextFile(\n          join(workspaceRoot, \".executor\", \"types\", \"index.d.ts\"),\n        );\n        const hasSourceDeclaration = yield* fileExists(\n          join(\n            workspaceRoot,\n            \".executor\",\n            \"types\",\n            \"sources\",\n            \"src_linear.d.ts\",\n          ),\n        );\n\n        expect(aggregateDeclaration).toContain(\n          \"export type ExecutorSourceTools = {};\",\n        );\n        expect(hasSourceDeclaration).toBe(false);\n      }),\n  );\n\n  it.effect(\n    \"falls back to unknown for unsupported declaration-only shape nodes\",\n    () =>\n      Effect.gen(function* () {\n        const workspaceRoot = yield* makeTempDirectory(\n          \"executor-types-unsupported-\",\n        );\n        const context = makeTypeDeclarationsContext(\n          workspaceRoot,\n          \"executor-types-unsupported\",\n        );\n\n        const snapshot = createSnapshot();\n        const unsupportedNotShapeId = ShapeSymbolIdSchema.make(\n          \"shape_unsupported_not\",\n        );\n        const unsupportedConditionalShapeId = ShapeSymbolIdSchema.make(\n          \"shape_unsupported_conditional\",\n        );\n        const executable = Object.values(snapshot.catalog.executables)[0]!;\n        const callShape =\n          snapshot.catalog.symbols[executable.projection.callShapeId];\n        const resultShape = executable.projection.resultDataShapeId\n          ? snapshot.catalog.symbols[executable.projection.resultDataShapeId]\n          : undefined;\n\n        if (\n          !callShape ||\n          callShape.kind !== \"shape\" ||\n          callShape.node.type !== \"object\"\n        ) {\n          throw new Error(\"Expected object argument shape in test fixture\");\n        }\n\n        if (\n          !resultShape ||\n          resultShape.kind !== \"shape\" ||\n          resultShape.node.type !== \"object\"\n        ) {\n          throw new Error(\"Expected object result shape in test fixture\");\n        }\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof unsupportedNotShapeId,\n            CatalogV1[\"symbols\"][typeof unsupportedNotShapeId]\n          >,\n          unsupportedNotShapeId,\n          {\n            id: unsupportedNotShapeId,\n            kind: \"shape\",\n            title: \"UnsupportedNot\",\n            node: {\n              type: \"not\",\n              itemShapeId: callShape.node.fields.filter!.shapeId,\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/unsupported/not\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof unsupportedConditionalShapeId,\n            CatalogV1[\"symbols\"][typeof unsupportedConditionalShapeId]\n          >,\n          unsupportedConditionalShapeId,\n          {\n            id: unsupportedConditionalShapeId,\n            kind: \"shape\",\n            title: \"UnsupportedConditional\",\n            node: {\n              type: \"conditional\",\n              ifShapeId: callShape.node.fields.filter!.shapeId,\n              thenShapeId: resultShape.node.fields.nodes!.shapeId,\n              elseShapeId: executable.projection.resultDataShapeId!,\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/unsupported/conditional\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof callShape.id,\n            CatalogV1[\"symbols\"][typeof callShape.id]\n          >,\n          callShape.id,\n          {\n            ...callShape,\n            node: {\n              ...callShape.node,\n              fields: {\n                ...callShape.node.fields,\n                unsupportedNot: {\n                  shapeId: unsupportedNotShapeId,\n                },\n              },\n            },\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof resultShape.id,\n            CatalogV1[\"symbols\"][typeof resultShape.id]\n          >,\n          resultShape.id,\n          {\n            ...resultShape,\n            node: {\n              ...resultShape.node,\n              fields: {\n                ...resultShape.node.fields,\n                unsupportedConditional: {\n                  shapeId: unsupportedConditionalShapeId,\n                },\n              },\n            },\n          },\n        );\n\n        yield* syncWorkspaceSourceTypeDeclarationsNode({\n          context,\n          entries: [{ source: makeSource({ id: \"src_linear\" }), snapshot }],\n        });\n\n        const sourceDeclaration = yield* readTextFile(\n          join(\n            workspaceRoot,\n            \".executor\",\n            \"types\",\n            \"sources\",\n            \"src_linear.d.ts\",\n          ),\n        );\n\n        expect(sourceDeclaration).toContain(\"unsupportedNot?: unknown;\");\n        expect(sourceDeclaration).toContain(\n          \"unsupportedConditional?: unknown;\",\n        );\n      }),\n  );\n\n  it.effect(\n    \"renders object unions as discriminated unions with shared fields\",\n    () =>\n      Effect.gen(function* () {\n        const workspaceRoot = yield* makeTempDirectory(\"executor-types-union-\");\n        const context = makeTypeDeclarationsContext(\n          workspaceRoot,\n          \"executor-types-union\",\n        );\n\n        const snapshot = createSnapshot();\n        const numberShapeId = ShapeSymbolIdSchema.make(\"shape_number\");\n        const blockedActionShapeId = ShapeSymbolIdSchema.make(\n          \"shape_action_blocked\",\n        );\n        const unblockedActionShapeId = ShapeSymbolIdSchema.make(\n          \"shape_action_unblocked\",\n        );\n        const routeBlockedActionShapeId = ShapeSymbolIdSchema.make(\n          \"shape_action_route_blocked\",\n        );\n        const routeShapeId = ShapeSymbolIdSchema.make(\"shape_route\");\n        const blockedShapeId = ShapeSymbolIdSchema.make(\"shape_abuse_blocked\");\n        const unblockedShapeId = ShapeSymbolIdSchema.make(\n          \"shape_abuse_unblocked\",\n        );\n        const routeBlockedShapeId = ShapeSymbolIdSchema.make(\n          \"shape_abuse_route_blocked\",\n        );\n        const unionShapeId = ShapeSymbolIdSchema.make(\"shape_abuse_union\");\n        const executable = Object.values(snapshot.catalog.executables)[0]!;\n        const stringShapeId = ShapeSymbolIdSchema.make(\"shape_string\");\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof numberShapeId,\n            CatalogV1[\"symbols\"][typeof numberShapeId]\n          >,\n          numberShapeId,\n          {\n            id: numberShapeId,\n            kind: \"shape\",\n            title: \"Number\",\n            node: {\n              type: \"scalar\",\n              scalar: \"number\",\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/scalar/Number\"),\n          },\n        );\n\n        for (const [shapeId, action] of [\n          [blockedActionShapeId, \"blocked\"],\n          [unblockedActionShapeId, \"unblocked\"],\n          [routeBlockedActionShapeId, \"route-blocked\"],\n        ] as const) {\n          put(\n            snapshot.catalog.symbols as Record<\n              typeof shapeId,\n              CatalogV1[\"symbols\"][typeof shapeId]\n            >,\n            shapeId,\n            {\n              id: shapeId,\n              kind: \"shape\",\n              title: String(action),\n              node: {\n                type: \"const\",\n                value: action,\n              },\n              synthetic: false,\n              provenance: baseProvenance(`#/const/${action}`),\n            },\n          );\n        }\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof routeShapeId,\n            CatalogV1[\"symbols\"][typeof routeShapeId]\n          >,\n          routeShapeId,\n          {\n            id: routeShapeId,\n            kind: \"shape\",\n            title: \"RouteInfo\",\n            node: {\n              type: \"object\",\n              fields: {\n                source: {\n                  shapeId: stringShapeId,\n                },\n              },\n              required: [\"source\"],\n              additionalProperties: false,\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/route\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof blockedShapeId,\n            CatalogV1[\"symbols\"][typeof blockedShapeId]\n          >,\n          blockedShapeId,\n          {\n            id: blockedShapeId,\n            kind: \"shape\",\n            title: \"BlockedHistoryItem\",\n            node: {\n              type: \"object\",\n              fields: {\n                action: { shapeId: blockedActionShapeId },\n                actor: { shapeId: stringShapeId },\n                createdAt: { shapeId: numberShapeId },\n                reason: { shapeId: stringShapeId },\n                statusCode: { shapeId: numberShapeId },\n              },\n              required: [\"action\", \"createdAt\", \"reason\", \"statusCode\"],\n              additionalProperties: false,\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/blocked\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof unblockedShapeId,\n            CatalogV1[\"symbols\"][typeof unblockedShapeId]\n          >,\n          unblockedShapeId,\n          {\n            id: unblockedShapeId,\n            kind: \"shape\",\n            title: \"UnblockedHistoryItem\",\n            node: {\n              type: \"object\",\n              fields: {\n                action: { shapeId: unblockedActionShapeId },\n                actor: { shapeId: stringShapeId },\n                createdAt: { shapeId: numberShapeId },\n              },\n              required: [\"action\", \"createdAt\"],\n              additionalProperties: false,\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/unblocked\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof routeBlockedShapeId,\n            CatalogV1[\"symbols\"][typeof routeBlockedShapeId]\n          >,\n          routeBlockedShapeId,\n          {\n            id: routeBlockedShapeId,\n            kind: \"shape\",\n            title: \"RouteBlockedHistoryItem\",\n            node: {\n              type: \"object\",\n              fields: {\n                action: { shapeId: routeBlockedActionShapeId },\n                actor: { shapeId: stringShapeId },\n                createdAt: { shapeId: numberShapeId },\n                reason: { shapeId: stringShapeId },\n                route: { shapeId: routeShapeId },\n              },\n              required: [\"action\", \"createdAt\", \"reason\", \"route\"],\n              additionalProperties: false,\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/routeBlocked\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.symbols as Record<\n            typeof unionShapeId,\n            CatalogV1[\"symbols\"][typeof unionShapeId]\n          >,\n          unionShapeId,\n          {\n            id: unionShapeId,\n            kind: \"shape\",\n            title: \"AbuseBlockHistoryItem\",\n            node: {\n              type: \"oneOf\",\n              items: [blockedShapeId, unblockedShapeId, routeBlockedShapeId],\n            },\n            synthetic: false,\n            provenance: baseProvenance(\"#/union\"),\n          },\n        );\n\n        put(\n          snapshot.catalog.executables as Record<\n            typeof executable.id,\n            CatalogV1[\"executables\"][typeof executable.id]\n          >,\n          executable.id,\n          {\n            ...executable,\n            projection: {\n              ...executable.projection,\n              resultDataShapeId: unionShapeId,\n            },\n          },\n        );\n\n        yield* syncWorkspaceSourceTypeDeclarationsNode({\n          context,\n          entries: [{ source: makeSource({ id: \"src_linear\" }), snapshot }],\n        });\n\n        const sourceDeclaration = yield* readTextFile(\n          join(\n            workspaceRoot,\n            \".executor\",\n            \"types\",\n            \"sources\",\n            \"src_linear.d.ts\",\n          ),\n        );\n\n        expect(sourceDeclaration).toContain(\n          \"teams: (args?: LinearTeamsCall) => Promise<{\",\n        );\n        expect(sourceDeclaration).toContain(\"actor?: string;\");\n        expect(sourceDeclaration).toContain('action: \"blocked\";');\n        expect(sourceDeclaration).toContain('action: \"unblocked\";');\n        expect(sourceDeclaration).toContain('action: \"route-blocked\";');\n        expect(sourceDeclaration).toContain(\"} & (\");\n        expect(sourceDeclaration).not.toContain(\"Member2\");\n      }),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/catalog/source/type-declarations.ts",
    "content": "import { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport type { Source } from \"#schema\";\nimport * as Cause from \"effect/Cause\";\nimport * as Effect from \"effect/Effect\";\nimport * as Fiber from \"effect/Fiber\";\n\nimport { projectCatalogForAgentSdk } from \"@executor/ir/catalog\";\nimport type { CatalogSnapshotV1 } from \"@executor/ir/model\";\nimport {\n  createCatalogTypeProjector,\n  formatPropertyKey,\n  joinTypeNameSegments,\n  projectedCatalogTypeRoots,\n  shapeAllowsOmittedArgs,\n} from \"../catalog-typescript\";\nimport type { ResolvedLocalWorkspaceContext } from \"../../local/config\";\nimport {\n  LocalFileSystemError,\n  unknownLocalErrorDetails,\n} from \"../../local/errors\";\n\ntype SourceDeclarationEntry = {\n  source: Source;\n  snapshot: CatalogSnapshotV1;\n};\n\ntype ToolMethodNode = {\n  readonly segments: readonly string[];\n  readonly inputType: string;\n  readonly outputType: string;\n  readonly argsOptional: boolean;\n};\n\ntype SourceDeclarationModel = {\n  readonly methods: readonly ToolMethodNode[];\n  readonly supportingTypes: readonly string[];\n};\n\ntype ToolTreeNode = {\n  method: ToolMethodNode | null;\n  children: Map<string, ToolTreeNode>;\n};\n\ntype SourceDeclarationStub = {\n  sourceId: string;\n};\n\nconst GENERATED_TYPES_DIRECTORY = \"types\";\nconst GENERATED_SOURCE_TYPES_DIRECTORY = \"sources\";\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  new LocalFileSystemError({\n    message: `Failed to ${action} ${path}: ${unknownLocalErrorDetails(cause)}`,\n    action,\n    path,\n    details: unknownLocalErrorDetails(cause),\n  });\n\nconst declarationDirectory = (context: ResolvedLocalWorkspaceContext): string =>\n  join(context.configDirectory, GENERATED_TYPES_DIRECTORY);\n\nconst sourceDeclarationDirectory = (context: ResolvedLocalWorkspaceContext): string =>\n  join(declarationDirectory(context), GENERATED_SOURCE_TYPES_DIRECTORY);\n\nconst sourceDeclarationFileName = (sourceId: string): string => `${sourceId}.d.ts`;\n\nconst sourceDeclarationPath = (context: ResolvedLocalWorkspaceContext, sourceId: string): string =>\n  join(sourceDeclarationDirectory(context), sourceDeclarationFileName(sourceId));\n\nconst aggregateDeclarationPath = (context: ResolvedLocalWorkspaceContext): string =>\n  join(declarationDirectory(context), \"index.d.ts\");\n\nconst sourceTypeInterfaceName = (sourceId: string): string =>\n  `SourceTools_${sourceId.replace(/[^A-Za-z0-9_$]+/g, \"_\")}`;\n\nconst methodSignature = (method: ToolMethodNode): string =>\n  `(${method.argsOptional ? \"args?:\" : \"args:\"} ${method.inputType}) => Promise<${method.outputType}>`;\n\nconst createToolTreeNode = (): ToolTreeNode => ({\n  method: null,\n  children: new Map(),\n});\n\nconst objectTypeLiteral = (\n  lines: readonly string[],\n  indent: string,\n): string => {\n  if (lines.length === 0) {\n    return \"{}\";\n  }\n\n  return [\n    \"{\",\n    ...lines.map((line) => `${indent}${line}`),\n    `${indent.slice(0, -2)}}`,\n  ].join(\"\\n\");\n};\n\nconst renderToolTreeType = (node: ToolTreeNode, indentLevel: number): string => {\n  const indent = \"  \".repeat(indentLevel + 1);\n  const childLines = [...node.children.entries()]\n    .sort(([left], [right]) => left.localeCompare(right))\n    .map(([segment, child]) =>\n      `${formatPropertyKey(segment)}: ${renderToolTreeType(child, indentLevel + 1)};`\n    );\n\n  const objectType = objectTypeLiteral(childLines, indent);\n  if (node.method === null) {\n    return objectType;\n  }\n\n  const callable = methodSignature(node.method);\n  return node.children.size === 0\n    ? callable\n    : `(${callable}) & ${objectType}`;\n};\n\nconst buildToolTree = (methods: readonly ToolMethodNode[]): ToolTreeNode => {\n  const root = createToolTreeNode();\n\n  for (const method of methods) {\n    let current = root;\n    for (const segment of method.segments) {\n      const existing = current.children.get(segment);\n      if (existing) {\n        current = existing;\n        continue;\n      }\n\n      const next = createToolTreeNode();\n      current.children.set(segment, next);\n      current = next;\n    }\n\n    current.method = method;\n  }\n\n  return root;\n};\n\nconst buildSourceDeclarationModel = (snapshot: CatalogSnapshotV1): SourceDeclarationModel => {\n  const projected = projectCatalogForAgentSdk({\n    catalog: snapshot.catalog,\n  });\n  const toolDescriptors = Object.values(projected.toolDescriptors)\n    .sort((left, right) => left.toolPath.join(\".\").localeCompare(right.toolPath.join(\".\")));\n  const renderer = createCatalogTypeProjector({\n    catalog: projected.catalog,\n    roots: projectedCatalogTypeRoots(projected),\n  });\n\n  const methods = toolDescriptors\n    .map((descriptor) => ({\n      segments: descriptor.toolPath,\n      inputType: renderer.renderDeclarationShape(descriptor.callShapeId, {\n        aliasHint: joinTypeNameSegments(...descriptor.toolPath, \"call\"),\n      }),\n      outputType: descriptor.resultShapeId\n        ? renderer.renderDeclarationShape(descriptor.resultShapeId, {\n            aliasHint: joinTypeNameSegments(...descriptor.toolPath, \"result\"),\n          })\n        : \"unknown\",\n      argsOptional: shapeAllowsOmittedArgs(projected.catalog, descriptor.callShapeId),\n    }) satisfies ToolMethodNode);\n\n  return {\n    methods,\n    supportingTypes: renderer.supportingDeclarations(),\n  };\n};\n\nconst sourceDeclarationText = (entry: SourceDeclarationEntry): string => {\n  const interfaceName = sourceTypeInterfaceName(entry.source.id);\n  const declarationModel = buildSourceDeclarationModel(entry.snapshot);\n  const tree = buildToolTree(declarationModel.methods);\n  const body = renderToolTreeType(tree, 0);\n\n  return [\n    \"// Generated by executor. Do not edit by hand.\",\n    `// Source: ${entry.source.name} (${entry.source.id})`,\n    \"\",\n    ...declarationModel.supportingTypes,\n    ...(declarationModel.supportingTypes.length > 0 ? [\"\"] : []),\n    `export interface ${interfaceName} ${body}`,\n    \"\",\n    `export declare const tools: ${interfaceName};`,\n    `export type ${interfaceName}Tools = ${interfaceName};`,\n    \"export default tools;\",\n    \"\",\n  ].join(\"\\n\");\n};\n\nconst aggregateDeclarationText = (entries: readonly SourceDeclarationEntry[]): string => {\n  return aggregateDeclarationTextFromSourceIds(\n    entries.map((entry) => ({ sourceId: entry.source.id })),\n  );\n};\n\nconst aggregateDeclarationTextFromSourceIds = (entries: readonly SourceDeclarationStub[]): string => {\n  const sorted = [...entries].sort((left, right) => left.sourceId.localeCompare(right.sourceId));\n  const imports = sorted.map((entry) =>\n    `import type { ${sourceTypeInterfaceName(entry.sourceId)} } from \"../sources/${entry.sourceId}\";`\n  );\n  const intersections = sorted.map((entry) => sourceTypeInterfaceName(entry.sourceId));\n  const executorToolsType = intersections.length > 0\n    ? intersections.join(\" & \")\n    : \"{}\";\n\n  return [\n    \"// Generated by executor. Do not edit by hand.\",\n    ...imports,\n    ...(imports.length > 0 ? [\"\"] : []),\n    `export type ExecutorSourceTools = ${executorToolsType};`,\n    \"\",\n    \"declare global {\",\n    \"  const tools: ExecutorSourceTools;\",\n    \"}\",\n    \"\",\n    \"export declare const tools: ExecutorSourceTools;\",\n    \"export default tools;\",\n    \"\",\n  ].join(\"\\n\");\n};\n\nexport const syncWorkspaceSourceTypeDeclarations = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  entries: readonly SourceDeclarationEntry[];\n}): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const declarationsDir = declarationDirectory(input.context);\n    const perSourceDir = sourceDeclarationDirectory(input.context);\n    const activeEntries = input.entries\n      .filter((entry) => entry.source.enabled && entry.source.status === \"connected\")\n      .sort((left, right) => left.source.id.localeCompare(right.source.id));\n\n    yield* fs.makeDirectory(declarationsDir, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(declarationsDir, \"create declaration directory\")),\n    );\n    yield* fs.makeDirectory(perSourceDir, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(perSourceDir, \"create source declaration directory\")),\n    );\n\n    const expectedFiles = new Set(\n      activeEntries.map((entry) => sourceDeclarationFileName(entry.source.id)),\n    );\n    const existingFiles = yield* fs.readDirectory(perSourceDir).pipe(\n      Effect.mapError(mapFileSystemError(perSourceDir, \"read source declaration directory\")),\n    );\n\n    for (const existingFile of existingFiles) {\n      if (expectedFiles.has(existingFile)) {\n        continue;\n      }\n\n      const stalePath = join(perSourceDir, existingFile);\n      yield* fs.remove(stalePath).pipe(\n        Effect.mapError(mapFileSystemError(stalePath, \"remove stale source declaration\")),\n      );\n    }\n\n    for (const entry of activeEntries) {\n      const filePath = sourceDeclarationPath(input.context, entry.source.id);\n      yield* fs.writeFileString(filePath, sourceDeclarationText(entry)).pipe(\n      Effect.mapError(mapFileSystemError(filePath, \"write source declaration\")),\n      );\n    }\n\n    const aggregatePath = aggregateDeclarationPath(input.context);\n    yield* fs.writeFileString(\n      aggregatePath,\n      aggregateDeclarationText(activeEntries),\n    ).pipe(\n      Effect.mapError(mapFileSystemError(aggregatePath, \"write aggregate declaration\")),\n    );\n  });\n\nexport const syncSourceTypeDeclaration = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  source: Source;\n  snapshot: CatalogSnapshotV1 | null;\n}): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const declarationsDir = declarationDirectory(input.context);\n    const perSourceDir = sourceDeclarationDirectory(input.context);\n\n    yield* fs.makeDirectory(declarationsDir, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(declarationsDir, \"create declaration directory\")),\n    );\n    yield* fs.makeDirectory(perSourceDir, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(perSourceDir, \"create source declaration directory\")),\n    );\n\n    const filePath = sourceDeclarationPath(input.context, input.source.id);\n    const shouldWrite = input.source.enabled\n      && input.source.status === \"connected\"\n      && input.snapshot !== null;\n\n    if (shouldWrite) {\n      const snapshot = input.snapshot;\n      if (snapshot === null) {\n        return;\n      }\n      yield* fs.writeFileString(\n        filePath,\n        sourceDeclarationText({\n          source: input.source,\n          snapshot,\n        }),\n      ).pipe(\n        Effect.mapError(mapFileSystemError(filePath, \"write source declaration\")),\n      );\n    } else {\n      const exists = yield* fs.exists(filePath).pipe(\n        Effect.mapError(mapFileSystemError(filePath, \"check source declaration path\")),\n      );\n      if (exists) {\n        yield* fs.remove(filePath).pipe(\n          Effect.mapError(mapFileSystemError(filePath, \"remove source declaration\")),\n        );\n      }\n    }\n\n    const sourceIds = (yield* fs.readDirectory(perSourceDir).pipe(\n      Effect.mapError(mapFileSystemError(perSourceDir, \"read source declaration directory\")),\n    ))\n      .filter((fileName) => fileName.endsWith(\".d.ts\"))\n      .map((fileName) => ({ sourceId: fileName.slice(0, -\".d.ts\".length) }));\n\n    const aggregatePath = aggregateDeclarationPath(input.context);\n    yield* fs.writeFileString(\n      aggregatePath,\n      aggregateDeclarationTextFromSourceIds(sourceIds),\n    ).pipe(\n      Effect.mapError(mapFileSystemError(aggregatePath, \"write aggregate declaration\")),\n    );\n  });\n\nexport const syncWorkspaceSourceTypeDeclarationsNode = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  entries: readonly SourceDeclarationEntry[];\n}): Effect.Effect<void, LocalFileSystemError, never> =>\n  syncWorkspaceSourceTypeDeclarations(input).pipe(Effect.provide(NodeFileSystem.layer));\n\nexport const syncSourceTypeDeclarationNode = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  source: Source;\n  snapshot: CatalogSnapshotV1 | null;\n}): Effect.Effect<void, LocalFileSystemError, never> =>\n  syncSourceTypeDeclaration(input).pipe(Effect.provide(NodeFileSystem.layer));\n\nconst logBackgroundDeclarationError = (label: string, cause: unknown): void => {\n  const message = Cause.isCause(cause)\n    ? Cause.pretty(cause)\n    : cause instanceof Error\n      ? cause.message\n      : String(cause);\n  console.warn(`[source-types] ${label} failed: ${message}`);\n};\n\nconst BACKGROUND_DECLARATION_REFRESH_DELAY = \"1500 millis\";\nconst workspaceRefreshFibers = new Map<string, Fiber.RuntimeFiber<void, never>>();\nconst sourceRefreshFibers = new Map<string, Fiber.RuntimeFiber<void, never>>();\n\nexport const refreshWorkspaceSourceTypeDeclarationsInBackground = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  entries: readonly SourceDeclarationEntry[];\n}): void => {\n  const key = input.context.configDirectory;\n  const existingFiber = workspaceRefreshFibers.get(key);\n  if (existingFiber) {\n    Effect.runFork(Fiber.interruptFork(existingFiber));\n  }\n\n  const fiber = Effect.runFork(\n    Effect.sleep(BACKGROUND_DECLARATION_REFRESH_DELAY).pipe(\n      Effect.zipRight(\n        syncWorkspaceSourceTypeDeclarationsNode(input).pipe(\n          Effect.catchAllCause((cause) =>\n            Effect.sync(() => {\n              logBackgroundDeclarationError(\"workspace declaration refresh\", cause);\n            })\n          ),\n        ),\n      ),\n    ),\n  );\n\n  workspaceRefreshFibers.set(key, fiber);\n  fiber.addObserver(() => {\n    workspaceRefreshFibers.delete(key);\n  });\n};\n\nexport const refreshSourceTypeDeclarationInBackground = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  source: Source;\n  snapshot: CatalogSnapshotV1 | null;\n}): void => {\n  const key = `${input.context.configDirectory}:${input.source.id}`;\n  const existingFiber = sourceRefreshFibers.get(key);\n  if (existingFiber) {\n    Effect.runFork(Fiber.interruptFork(existingFiber));\n  }\n\n  const fiber = Effect.runFork(\n    Effect.sleep(BACKGROUND_DECLARATION_REFRESH_DELAY).pipe(\n      Effect.zipRight(\n        syncSourceTypeDeclarationNode(input).pipe(\n          Effect.catchAllCause((cause) =>\n            Effect.sync(() => {\n              logBackgroundDeclarationError(`source ${input.source.id} declaration refresh`, cause);\n            })\n          ),\n        ),\n      ),\n    ),\n  );\n\n  sourceRefreshFibers.set(key, fiber);\n  fiber.addObserver(() => {\n    sourceRefreshFibers.delete(key);\n  });\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/control-plane-runtime.test.ts",
    "content": "import { createServer } from \"node:http\";\nimport { join } from \"node:path\";\n\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { assertTrue } from \"@effect/vitest/utils\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Fiber from \"effect/Fiber\";\nimport * as Option from \"effect/Option\";\n\nimport {\n  ExecutionIdSchema,\n  ExecutionInteractionIdSchema,\n  type ExecutionInteraction,\n  ProviderAuthGrantIdSchema,\n  SecretMaterialIdSchema,\n  SourceAuthSessionIdSchema,\n  SourceIdSchema,\n  WorkspaceOauthClientIdSchema,\n} from \"#schema\";\nimport type { ToolPath } from \"@executor/codemode-core\";\nimport { createCatalogImportMetadata } from \"@executor/source-core\";\nimport { createGraphqlCatalogFragment } from \"@executor/source-graphql\";\n\nimport {\n  type ControlPlaneRuntime,\n  createControlPlaneRuntime,\n  LiveExecutionManagerService,\n  provideControlPlaneRuntime,\n} from \"./index\";\nimport { createSourceFromPayload } from \"./sources/source-definitions\";\nimport { decodeSourceCredentialSelectionContent } from \"./sources/source-credential-interactions\";\nimport { persistSource } from \"./sources/source-store\";\nimport { withControlPlaneClient } from \"./execution/test-http-client\";\nimport { runtimeEffectError } from \"./effect-errors\";\nimport {\n  resolveLocalWorkspaceContext,\n  writeProjectLocalExecutorConfig,\n} from \"./local/config\";\nimport { writeLocalControlPlaneState } from \"./local/control-plane-store\";\nimport { deriveLocalInstallation } from \"./local/installation\";\nimport {\n  buildLocalSourceArtifact,\n  readLocalSourceArtifact,\n  writeLocalSourceArtifact,\n} from \"./local/source-artifacts\";\nimport { writeLocalWorkspaceState } from \"./local/workspace-state\";\n\nconst makeRuntime = Effect.gen(function* () {\n  const fs = yield* FileSystem.FileSystem;\n  const workspaceRoot = yield* fs.makeTempDirectoryScoped({\n    prefix: \"executor-control-plane-runtime-\",\n  });\n  const homeConfigPath = join(workspaceRoot, \".executor-home.jsonc\");\n  const homeStateDirectory = join(workspaceRoot, \".executor-home-state\");\n\n  return yield* Effect.acquireRelease(\n    createControlPlaneRuntime({\n      workspaceRoot,\n      homeConfigPath,\n      homeStateDirectory,\n    }),\n    (runtime) => Effect.promise(() => runtime.close()).pipe(Effect.orDie),\n  );\n}).pipe(Effect.provide(NodeFileSystem.layer));\n\ntype OpenApiSpecServer = {\n  baseUrl: string;\n  specUrl: string;\n  close: () => Promise<void>;\n};\n\ntype GoogleWorkspaceTestServer = {\n  baseUrl: string;\n  tokenEndpoint: string;\n  discoveryUrl: (input: {\n    service: string;\n    version: string;\n    scope: string;\n  }) => string;\n  queueTokenResponse: (response: {\n    access_token: string;\n    refresh_token?: string;\n    expires_in?: number;\n    scope?: string;\n  }) => void;\n  tokenRequests: URLSearchParams[];\n  discoveryAuthorizations: string[];\n  close: () => Promise<void>;\n};\n\nconst makeOpenApiSpecServer = Effect.acquireRelease(\n  Effect.promise<OpenApiSpecServer>(\n    () =>\n      new Promise<OpenApiSpecServer>((resolve, reject) => {\n        const openApiDocument = JSON.stringify({\n          openapi: \"3.0.3\",\n          info: {\n            title: \"GitHub Test API\",\n            version: \"1.0.0\",\n          },\n          paths: {\n            \"/repos/{owner}/{repo}\": {\n              get: {\n                operationId: \"repos/get-repo\",\n                tags: [\"repos\"],\n                summary: \"Get a repository\",\n                responses: {\n                  200: {\n                    description: \"ok\",\n                  },\n                },\n              },\n            },\n          },\n        });\n\n        const server = createServer((request, response) => {\n          if (request.url !== \"/openapi.json\") {\n            response.statusCode = 404;\n            response.end();\n            return;\n          }\n\n          response.statusCode = 200;\n          response.setHeader(\"content-type\", \"application/json\");\n          response.end(openApiDocument);\n        });\n\n        server.once(\"error\", reject);\n        server.listen(0, \"127.0.0.1\", () => {\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"Failed to bind OpenAPI runtime test server\"));\n            return;\n          }\n\n          const baseUrl = `http://127.0.0.1:${address.port}`;\n          resolve({\n            baseUrl,\n            specUrl: `${baseUrl}/openapi.json`,\n            close: () =>\n              new Promise<void>((closeResolve, closeReject) => {\n                server.close((error) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n\n                  closeResolve();\n                });\n              }),\n          });\n        });\n      }),\n  ),\n  (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n);\n\nconst makeGoogleWorkspaceTestServer = Effect.acquireRelease(\n  Effect.promise<GoogleWorkspaceTestServer>(\n    () =>\n      new Promise<GoogleWorkspaceTestServer>((resolve, reject) => {\n        const discoveryScopes = new Map<string, string>();\n        const tokenResponses: Array<{\n          access_token: string;\n          refresh_token?: string;\n          expires_in?: number;\n          scope?: string;\n        }> = [];\n        const tokenRequests: URLSearchParams[] = [];\n        const discoveryAuthorizations: string[] = [];\n        let baseUrl = \"\";\n\n        const server = createServer(async (request, response) => {\n          const requestUrl = new URL(\n            request.url ?? \"/\",\n            `http://${request.headers.host ?? \"127.0.0.1\"}`,\n          );\n\n          if (request.method === \"POST\" && requestUrl.pathname === \"/oauth/token\") {\n            const chunks: Buffer[] = [];\n            for await (const chunk of request) {\n              chunks.push(Buffer.from(chunk));\n            }\n\n            const params = new URLSearchParams(Buffer.concat(chunks).toString(\"utf8\"));\n            tokenRequests.push(params);\n            const nextResponse = tokenResponses.shift();\n            if (!nextResponse) {\n              response.statusCode = 500;\n              response.setHeader(\"content-type\", \"application/json\");\n              response.end(JSON.stringify({\n                error: \"missing_token_response\",\n              }));\n              return;\n            }\n\n            response.statusCode = 200;\n            response.setHeader(\"content-type\", \"application/json\");\n            response.end(JSON.stringify({\n              token_type: \"Bearer\",\n              expires_in: 3600,\n              ...nextResponse,\n            }));\n            return;\n          }\n\n          const discoveryMatch = /^\\/([^/]+)\\/\\$discovery\\/rest$/.exec(requestUrl.pathname);\n          if (request.method === \"GET\" && discoveryMatch) {\n            const service = discoveryMatch[1]!;\n            const version = requestUrl.searchParams.get(\"version\") ?? \"v1\";\n            const authorizationHeader =\n              typeof request.headers.authorization === \"string\"\n                ? request.headers.authorization\n                : Array.isArray(request.headers.authorization)\n                  ? (request.headers.authorization[0] ?? \"\")\n                  : \"\";\n            if (authorizationHeader.length > 0) {\n              discoveryAuthorizations.push(authorizationHeader);\n            }\n\n            const scope = discoveryScopes.get(`${service}:${version}`)\n              ?? `https://example.test/auth/${service}`;\n            response.statusCode = 200;\n            response.setHeader(\"content-type\", \"application/json\");\n            response.end(JSON.stringify({\n              name: service,\n              version,\n              title: `${service} API`,\n              description: `Test ${service} API`,\n              rootUrl: `${baseUrl}/`,\n              servicePath: `${service}/${version}/`,\n              auth: {\n                oauth2: {\n                  scopes: {\n                    [scope]: {\n                      description: `${service} scope`,\n                    },\n                  },\n                },\n              },\n              methods: {\n                list: {\n                  id: `${service}.list`,\n                  path: \"items\",\n                  httpMethod: \"GET\",\n                  response: {\n                    $ref: \"ListResponse\",\n                  },\n                },\n              },\n              schemas: {\n                ListResponse: {\n                  id: \"ListResponse\",\n                  type: \"object\",\n                  properties: {\n                    items: {\n                      type: \"array\",\n                      items: {\n                        type: \"string\",\n                      },\n                    },\n                  },\n                },\n              },\n            }));\n            return;\n          }\n\n          response.statusCode = 404;\n          response.end();\n        });\n\n        server.once(\"error\", reject);\n        server.listen(0, \"127.0.0.1\", () => {\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"Failed to bind Google workspace test server\"));\n            return;\n          }\n\n          baseUrl = `http://127.0.0.1:${address.port}`;\n          resolve({\n            baseUrl,\n            tokenEndpoint: `${baseUrl}/oauth/token`,\n            discoveryUrl: ({ service, version, scope }) => {\n              discoveryScopes.set(`${service}:${version}`, scope);\n              return `${baseUrl}/${service}/$discovery/rest?version=${encodeURIComponent(version)}`;\n            },\n            queueTokenResponse: (tokenResponse) => {\n              tokenResponses.push(tokenResponse);\n            },\n            tokenRequests,\n            discoveryAuthorizations,\n            close: () =>\n              new Promise<void>((closeResolve, closeReject) => {\n                server.close((error) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n\n                  closeResolve();\n                });\n              }),\n          });\n        });\n      }),\n  ),\n  (server) => Effect.promise(() => server.close()).pipe(Effect.orDie),\n);\n\nconst upsertLocalSecret = (runtime: ControlPlaneRuntime, input: {\n  id: string;\n  name: string;\n  purpose: \"oauth_refresh_token\" | \"oauth_client_info\" | \"oauth_access_token\";\n  value: string;\n}) =>\n  runtime.persistence.rows.secretMaterials.upsert({\n    id: SecretMaterialIdSchema.make(input.id),\n    providerId: \"local\",\n    handle: input.id,\n    name: input.name,\n    purpose: input.purpose,\n    value: input.value,\n    createdAt: Date.now(),\n    updatedAt: Date.now(),\n  });\n\nconst createPersistedGoogleSource = (input: {\n  runtime: ControlPlaneRuntime;\n  name: string;\n  namespace: string;\n  service: string;\n  version: string;\n  discoveryUrl: string;\n  scopes: ReadonlyArray<string>;\n  auth: {\n    kind: \"none\";\n  } | {\n    kind: \"provider_grant_ref\";\n    grantId: ReturnType<typeof ProviderAuthGrantIdSchema.make>;\n    providerKey: string;\n    requiredScopes: ReadonlyArray<string>;\n    headerName: string;\n    prefix: string;\n  };\n}) =>\n  Effect.gen(function* () {\n    const installation = input.runtime.localInstallation;\n    const source = yield* createSourceFromPayload({\n      workspaceId: installation.workspaceId,\n      sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n      payload: {\n        name: input.name,\n        kind: \"google_discovery\",\n        endpoint: input.discoveryUrl,\n        namespace: input.namespace,\n        binding: {\n          service: input.service,\n          version: input.version,\n          discoveryUrl: input.discoveryUrl,\n          scopes: [...input.scopes],\n        },\n        importAuthPolicy: \"reuse_runtime\",\n        importAuth: { kind: \"none\" },\n        auth: input.auth as any,\n        status: \"connected\",\n        enabled: true,\n      },\n      now: Date.now(),\n    });\n\n    return yield* persistSource(input.runtime.persistence.rows, source, {\n      actorAccountId: installation.accountId,\n    }).pipe((effect) => provideControlPlaneRuntime(effect, input.runtime));\n  });\n\nconst expectLeft = <A, E>(effect: Effect.Effect<A, E, never>) =>\n  Effect.either(effect).pipe(\n    Effect.flatMap((result) =>\n      Either.isLeft(result)\n        ? Effect.succeed(result.left)\n        : Effect.fail(runtimeEffectError(\"control-plane-runtime.test\", \"Expected effect to fail\")),\n    ),\n  );\n\ndescribe(\"control-plane-runtime\", () => {\n  it.scoped(\"writes local source changes through executor.jsonc\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const workspaceRoot = yield* fs.makeTempDirectoryScoped({\n        prefix: \"executor-local-config-runtime-\",\n      });\n      const homeConfigPath = join(workspaceRoot, \".executor-home.jsonc\");\n      const homeStateDirectory = join(workspaceRoot, \".executor-home-state\");\n      const runtime = yield* Effect.acquireRelease(\n        createControlPlaneRuntime({\n          workspaceRoot,\n          homeConfigPath,\n          homeStateDirectory,\n        }),\n        (createdRuntime) => Effect.promise(() => createdRuntime.close()).pipe(Effect.orDie),\n      );\n      const openApiServer = yield* makeOpenApiSpecServer;\n      const installation = runtime.localInstallation;\n\n      const createdSource = yield* withControlPlaneClient(\n        { runtime, accountId: installation.accountId },\n        (client) =>\n          client.sources.create({\n            path: { workspaceId: installation.workspaceId },\n            payload: {\n              name: \"GitHub\",\n              kind: \"openapi\",\n              endpoint: openApiServer.baseUrl,\n              namespace: \"github\",\n              binding: {\n                specUrl: openApiServer.specUrl,\n                defaultHeaders: null,\n              },\n              auth: { kind: \"none\" },\n            },\n          }),\n      );\n\n      const configPath = join(workspaceRoot, \".executor\", \"executor.jsonc\");\n      const createdConfig = JSON.parse(yield* fs.readFileString(configPath, \"utf8\")) as {\n        sources?: Record<string, { kind: string; connection: { endpoint: string } }>;\n      };\n      expect(createdConfig.sources?.github?.kind).toBe(\"openapi\");\n      expect(createdConfig.sources?.github?.connection.endpoint).toBe(openApiServer.baseUrl);\n\n      const removed = yield* withControlPlaneClient(\n        { runtime, accountId: installation.accountId },\n        (client) =>\n          client.sources.remove({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId: createdSource.id,\n            },\n          }),\n      );\n      expect(removed.removed).toBe(true);\n\n      const removedConfig = JSON.parse(yield* fs.readFileString(configPath, \"utf8\")) as {\n        sources?: Record<string, unknown>;\n      };\n      expect(removedConfig.sources?.github).toBeUndefined();\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n    60_000,\n  );\n\n  it.scoped(\"manages local secrets through provider-backed metadata rows\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n\n      const created = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.local.createSecret({\n            payload: {\n              name: \"GitHub PAT\",\n              value: \"ghp_test_token\",\n              providerId: \"local\",\n            },\n          }),\n      );\n\n      expect(created.providerId).toBe(\"local\");\n\n      const listed = yield* withControlPlaneClient(\n        { runtime },\n        (client) => client.local.listSecrets({}),\n      );\n      expect(listed).toEqual([\n        expect.objectContaining({\n          id: created.id,\n          providerId: \"local\",\n          name: \"GitHub PAT\",\n        }),\n      ]);\n\n      const updated = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.local.updateSecret({\n            path: { secretId: created.id },\n            payload: {\n              name: \"GitHub PAT Updated\",\n              value: \"ghp_test_token_v2\",\n            },\n          }),\n      );\n      expect(updated.providerId).toBe(\"local\");\n      expect(updated.name).toBe(\"GitHub PAT Updated\");\n\n      const storedSecret = yield* runtime.persistence.rows.secretMaterials.getById(\n        SecretMaterialIdSchema.make(created.id),\n      );\n      assertTrue(Option.isSome(storedSecret));\n      expect(storedSecret.value.providerId).toBe(\"local\");\n      expect(storedSecret.value.value).toBe(\"ghp_test_token_v2\");\n\n      const removed = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.local.deleteSecret({\n            path: { secretId: created.id },\n          }),\n      );\n      expect(removed.removed).toBe(true);\n    }),\n  );\n\n  it.scoped(\"reports safe secret storage options for the current platform\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n\n      const config = yield* withControlPlaneClient(\n        { runtime },\n        (client) => client.local.config({}),\n      );\n\n      const keychainProvider =\n        config.secretProviders.find((provider) => provider.id === \"keychain\") ?? null;\n\n      if (process.platform === \"linux\") {\n        expect(config.defaultSecretStoreProvider).toBe(\"local\");\n        expect(keychainProvider?.canStore).toBe(false);\n        return;\n      }\n\n      if (process.platform === \"darwin\") {\n        expect(keychainProvider?.canStore).toBe(true);\n        return;\n      }\n\n      expect(keychainProvider).toBeNull();\n    }),\n  );\n\n  it.scoped(\"captures credential requests through the local HTML flow without persisting raw tokens\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const executionId = ExecutionIdSchema.make(\"exec_local_credential\");\n      const sourceId = SourceIdSchema.make(\"github\");\n      const interactionSuffix = \"executor.sources.add:test\";\n      const interactionId = ExecutionInteractionIdSchema.make(\n        `${executionId}:${interactionSuffix}`,\n      );\n      const now = Date.now();\n\n      yield* runtime.persistence.rows.executions.insert({\n        id: executionId,\n        workspaceId: installation.workspaceId,\n        createdByAccountId: installation.accountId,\n        status: \"running\",\n        code: \"return await tools.executor.sources.add(...)\",\n        resultJson: null,\n        errorText: null,\n        logsJson: null,\n        startedAt: now,\n        completedAt: null,\n        createdAt: now,\n        updatedAt: now,\n      });\n\n      const localSource = yield* createSourceFromPayload({\n        workspaceId: installation.workspaceId,\n        sourceId,\n        payload: {\n          name: \"GitHub\",\n          kind: \"openapi\",\n          endpoint: \"https://api.github.com\",\n          status: \"auth_required\",\n          enabled: true,\n          namespace: \"github\",\n          importAuthPolicy: \"reuse_runtime\",\n          binding: {\n            specUrl: \"https://example.com/github-openapi.yaml\",\n            defaultHeaders: null,\n          },\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n        },\n        now,\n      }).pipe(Effect.orDie);\n      yield* persistSource(runtime.persistence.rows, localSource, {\n        actorAccountId: installation.accountId,\n      }).pipe((effect) => provideControlPlaneRuntime(effect, runtime), Effect.orDie);\n\n      const interactionFiber = yield* Effect.gen(function* () {\n        const liveExecutionManager = yield* LiveExecutionManagerService;\n        const onElicitation = liveExecutionManager.createOnElicitation({\n          rows: runtime.persistence.rows,\n          executionId,\n        });\n\n        return yield* onElicitation({\n          interactionId: interactionSuffix,\n          path: \"executor.sources.add\" as ToolPath,\n          sourceKey: \"executor\",\n          args: {\n            kind: \"openapi\",\n            endpoint: \"https://api.github.com\",\n            specUrl: \"https://example.com/github-openapi.yaml\",\n            name: \"GitHub\",\n            workspaceId: installation.workspaceId,\n            sourceId,\n          },\n          elicitation: {\n            mode: \"url\",\n            message: \"Open the secure credential page to connect GitHub\",\n            url: `http://127.0.0.1/v1/workspaces/${encodeURIComponent(installation.workspaceId)}/sources/${encodeURIComponent(sourceId)}/credentials?interactionId=${encodeURIComponent(interactionId)}`,\n            elicitationId: interactionSuffix,\n          },\n        });\n      }).pipe(\n        (effect) => provideControlPlaneRuntime(effect, runtime),\n        Effect.fork,\n      );\n\n      const waitForPendingInteraction = (\n        remaining: number,\n      ): Effect.Effect<Option.Option<ExecutionInteraction>, Error> =>\n        runtime.persistence.rows.executionInteractions.getPendingByExecutionId(executionId).pipe(\n          Effect.flatMap((pendingInteraction) =>\n            Option.isSome(pendingInteraction) || remaining <= 0\n              ? Effect.succeed(pendingInteraction)\n              : Effect.yieldNow().pipe(\n                  Effect.zipRight(waitForPendingInteraction(remaining - 1)),\n                ),\n          ),\n        );\n\n      const pendingInteraction = yield* waitForPendingInteraction(20);\n      assertTrue(Option.isSome(pendingInteraction));\n      expect(pendingInteraction.value.id).toBe(interactionId);\n\n      const page = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.credentialPage({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId,\n            },\n            urlParams: {\n              interactionId: pendingInteraction.value.id,\n            },\n          }),\n      );\n      expect(page).toContain(\"Configure Source Access\");\n      expect(page).toContain(\"GitHub\");\n      expect(page).toContain(\"Continue without auth\");\n\n      const submittedPage = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.credentialSubmit({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId,\n            },\n            urlParams: {\n              interactionId: pendingInteraction.value.id,\n            },\n            payload: {\n              action: \"submit\",\n              token: \"ghp_local_test_token\",\n            },\n          }),\n      );\n      expect(submittedPage).toContain(\"Credential Stored\");\n\n      const response = yield* Fiber.join(interactionFiber);\n      expect(response.action).toBe(\"accept\");\n      expect(response.content?.authKind).toBe(\"bearer\");\n\n      const decodedCredentialSelection = decodeSourceCredentialSelectionContent(\n        response.content,\n      );\n      expect(decodedCredentialSelection.authKind).toBe(\"bearer\");\n      expect(\n        decodedCredentialSelection.authKind === \"bearer\"\n          ? decodedCredentialSelection.tokenRef.providerId\n          : null,\n      ).toBe(\"local\");\n\n      const tokenSecretMaterialId = SecretMaterialIdSchema.make(\n        decodedCredentialSelection.authKind === \"bearer\"\n          ? decodedCredentialSelection.tokenRef.handle\n          : \"\",\n      );\n      const storedSecret = yield* runtime.persistence.rows.secretMaterials.getById(\n        tokenSecretMaterialId,\n      );\n      assertTrue(Option.isSome(storedSecret));\n      expect(storedSecret.value.value).toBe(\"ghp_local_test_token\");\n\n      const storedInteraction = yield* runtime.persistence.rows.executionInteractions.getById(\n        pendingInteraction.value.id,\n      );\n      assertTrue(Option.isSome(storedInteraction));\n      expect(storedInteraction.value.responseJson).toContain(\"\\\"authKind\\\":\\\"bearer\\\"\");\n      expect(storedInteraction.value.responseJson).not.toContain(\"tokenRef\");\n      expect(storedInteraction.value.responseJson).not.toContain(\"ghp_local_test_token\");\n    }),\n  );\n\n  it.scoped(\"loads a v1.2.3-style workspace artifact on startup\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const workspaceRoot = yield* fs.makeTempDirectoryScoped({\n        prefix: \"executor-control-plane-runtime-v123-\",\n      });\n      const homeConfigPath = join(workspaceRoot, \".executor-home.jsonc\");\n      const homeStateDirectory = join(workspaceRoot, \".executor-home-state\");\n      const configDirectory = join(workspaceRoot, \".executor\");\n      const configPath = join(configDirectory, \"executor.jsonc\");\n      const sourceId = SourceIdSchema.make(\"graphql\");\n      const now = Date.now();\n\n      yield* fs.makeDirectory(configDirectory, { recursive: true });\n      yield* fs.writeFileString(\n        configPath,\n        `{\n  \"sources\": {\n    \"graphql\": {\n      \"kind\": \"graphql\",\n      \"name\": \"GraphQL API\",\n      \"namespace\": \"graphql\",\n      \"connection\": {\n        \"endpoint\": \"https://example.com/graphql\"\n      },\n      \"binding\": {\n        \"defaultHeaders\": null\n      }\n    }\n  }\n}\n`,\n      );\n\n      const context = yield* resolveLocalWorkspaceContext({\n        workspaceRoot,\n        homeConfigPath,\n        homeStateDirectory,\n      });\n      const installation = deriveLocalInstallation(context);\n      const source = yield* createSourceFromPayload({\n        workspaceId: installation.workspaceId,\n        sourceId,\n        payload: {\n          name: \"GraphQL API\",\n          kind: \"graphql\",\n          endpoint: \"https://example.com/graphql\",\n          status: \"connected\",\n          enabled: true,\n          namespace: \"graphql\",\n          importAuthPolicy: \"reuse_runtime\",\n          binding: {\n            defaultHeaders: null,\n          },\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n        },\n        now,\n      }).pipe(Effect.orDie);\n\n      const artifact = buildLocalSourceArtifact({\n        source,\n        syncResult: {\n          fragment: createGraphqlCatalogFragment({\n            source,\n            documents: [\n              {\n                documentKind: \"graphql_introspection\",\n                documentKey: source.endpoint,\n                contentText: '{\"__schema\":{}}',\n                fetchedAt: now,\n              },\n            ],\n            operations: [\n              {\n                toolId: \"viewer\",\n                title: \"Viewer\",\n                description: \"Load the current viewer\",\n                effect: \"read\",\n                inputSchema: { type: \"object\", properties: {} },\n                outputSchema: {\n                  type: \"object\",\n                  properties: { login: { type: \"string\" } },\n                },\n                providerData: {\n                  kind: \"graphql\",\n                  toolKind: \"field\",\n                  toolId: \"viewer\",\n                  rawToolId: \"viewer\",\n                  group: \"query\",\n                  leaf: \"viewer\",\n                  fieldName: \"viewer\",\n                  operationType: \"query\",\n                  operationName: \"ViewerQuery\",\n                  operationDocument: \"query ViewerQuery { viewer { login } }\",\n                  queryTypeName: \"Query\",\n                  mutationTypeName: null,\n                  subscriptionTypeName: null,\n                },\n              },\n            ],\n          }),\n          importMetadata: createCatalogImportMetadata({\n            source,\n            adapterKey: \"graphql\",\n          }),\n          sourceHash: source.sourceHash,\n        },\n      });\n\n      yield* writeLocalWorkspaceState({\n        context,\n        state: {\n          version: 1,\n          sources: {\n            [sourceId]: {\n              status: source.status,\n              lastError: source.lastError,\n              sourceHash: source.sourceHash,\n              createdAt: source.createdAt,\n              updatedAt: source.updatedAt,\n            },\n          },\n          policies: {},\n        },\n      });\n      yield* writeLocalControlPlaneState({\n        context,\n        state: {\n          version: 1,\n          authArtifacts: [],\n          authLeases: [],\n          sourceOauthClients: [],\n          workspaceOauthClients: [],\n          providerAuthGrants: [],\n          sourceAuthSessions: [],\n          secretMaterials: [],\n          executions: [],\n          executionInteractions: [],\n          executionSteps: [],\n        },\n      });\n      yield* writeLocalSourceArtifact({\n        context,\n        sourceId,\n        artifact,\n      });\n\n      const artifactPath = join(context.artifactsDirectory, \"sources\", `${sourceId}.json`);\n      const legacyArtifact = JSON.parse(\n        yield* fs.readFileString(artifactPath, \"utf8\"),\n      ) as Record<string, unknown>;\n      legacyArtifact.version = 3;\n      yield* fs.writeFileString(artifactPath, `${JSON.stringify(legacyArtifact)}\\n`);\n\n      const runtime = yield* Effect.acquireRelease(\n        createControlPlaneRuntime({\n          workspaceRoot,\n          homeConfigPath,\n          homeStateDirectory,\n        }),\n        (createdRuntime) => Effect.promise(() => createdRuntime.close()).pipe(Effect.orDie),\n      );\n\n      const inspection = yield* withControlPlaneClient(\n        { runtime, accountId: installation.accountId },\n        (client) =>\n          client.sources.inspection({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId,\n            },\n          }),\n      );\n\n      expect(inspection.source.id).toBe(sourceId);\n      expect(inspection.source.kind).toBe(\"graphql\");\n      expect(inspection.toolCount).toBe(1);\n      expect(inspection.tools.map((tool) => tool.path)).toContain(\"graphql.viewer\");\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n\n  it.scoped(\"rebuilds missing connected source artifacts on startup\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const openApiServer = yield* makeOpenApiSpecServer;\n      const workspaceRoot = yield* fs.makeTempDirectoryScoped({\n        prefix: \"executor-control-plane-runtime-startup-rebuild-\",\n      });\n      const homeConfigPath = join(workspaceRoot, \".executor-home.jsonc\");\n      const homeStateDirectory = join(workspaceRoot, \".executor-home-state\");\n      const context = yield* resolveLocalWorkspaceContext({\n        workspaceRoot,\n        homeConfigPath,\n        homeStateDirectory,\n      });\n      const installation = deriveLocalInstallation(context);\n      const sourceId = SourceIdSchema.make(\"github\");\n      const now = Date.now();\n      const source = yield* createSourceFromPayload({\n        workspaceId: installation.workspaceId,\n        sourceId,\n        payload: {\n          name: \"GitHub\",\n          kind: \"openapi\",\n          endpoint: openApiServer.baseUrl,\n          status: \"connected\",\n          enabled: true,\n          namespace: \"github\",\n          importAuthPolicy: \"reuse_runtime\",\n          binding: {\n            specUrl: openApiServer.specUrl,\n            defaultHeaders: null,\n          },\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n        },\n        now,\n      }).pipe(Effect.orDie);\n\n      yield* writeProjectLocalExecutorConfig({\n        context,\n        config: {\n          sources: {\n            [sourceId]: {\n              kind: \"openapi\",\n              name: \"GitHub\",\n              namespace: \"github\",\n              connection: {\n                endpoint: openApiServer.baseUrl,\n              },\n              binding: {\n                specUrl: openApiServer.specUrl,\n                defaultHeaders: null,\n              },\n            },\n          },\n        },\n      });\n      yield* writeLocalWorkspaceState({\n        context,\n        state: {\n          version: 1,\n          sources: {\n            [sourceId]: {\n              status: source.status,\n              lastError: source.lastError,\n              sourceHash: source.sourceHash,\n              createdAt: source.createdAt,\n              updatedAt: source.updatedAt,\n            },\n          },\n          policies: {},\n        },\n      });\n\n      const runtime = yield* Effect.acquireRelease(\n        createControlPlaneRuntime({\n          workspaceRoot,\n          homeConfigPath,\n          homeStateDirectory,\n        }),\n        (createdRuntime) => Effect.promise(() => createdRuntime.close()).pipe(Effect.orDie),\n      );\n\n      const rebuiltArtifact = yield* readLocalSourceArtifact({\n        context,\n        sourceId,\n      }).pipe(Effect.provide(NodeFileSystem.layer));\n      expect(rebuiltArtifact).not.toBeNull();\n\n      const inspection = yield* withControlPlaneClient(\n        { runtime, accountId: installation.accountId },\n        (client) =>\n          client.sources.inspection({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId,\n            },\n          }),\n      );\n      expect(inspection.tools.length).toBeGreaterThan(0);\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n    60_000,\n  );\n\n  it.scoped(\"returns an empty inspection bundle for auth-required sources without a catalog artifact\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const sourceId = SourceIdSchema.make(\"googleapis\");\n      const now = Date.now();\n\n      const localSource = yield* createSourceFromPayload({\n        workspaceId: installation.workspaceId,\n        sourceId,\n        payload: {\n          name: \"Google Drive\",\n          kind: \"google_discovery\",\n          endpoint: \"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\",\n          status: \"auth_required\",\n          enabled: true,\n          namespace: \"googleapis\",\n          importAuthPolicy: \"reuse_runtime\",\n          binding: {\n            service: \"drive\",\n            version: \"v3\",\n            discoveryUrl: \"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\",\n            scopes: [\"https://www.googleapis.com/auth/drive.readonly\"],\n          },\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n        },\n        now,\n      }).pipe(Effect.orDie);\n      yield* persistSource(runtime.persistence.rows, localSource, {\n        actorAccountId: installation.accountId,\n      }).pipe((effect) => provideControlPlaneRuntime(effect, runtime), Effect.orDie);\n\n      const inspection = yield* withControlPlaneClient(\n        { runtime, accountId: installation.accountId },\n        (client) =>\n          client.sources.inspection({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId,\n            },\n          }),\n      );\n\n      expect(inspection.source.id).toBe(sourceId);\n      expect(inspection.source.status).toBe(\"auth_required\");\n      expect(inspection.toolCount).toBe(0);\n      expect(inspection.tools).toEqual([]);\n    }),\n  );\n\n  it.scoped(\"still fails inspection when a connected source is missing its catalog artifact\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const sourceId = SourceIdSchema.make(\"googleapis\");\n      const now = Date.now();\n\n      const localSource = yield* createSourceFromPayload({\n        workspaceId: installation.workspaceId,\n        sourceId,\n        payload: {\n          name: \"Google Drive\",\n          kind: \"google_discovery\",\n          endpoint: \"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\",\n          status: \"connected\",\n          enabled: true,\n          namespace: \"googleapis\",\n          importAuthPolicy: \"reuse_runtime\",\n          binding: {\n            service: \"drive\",\n            version: \"v3\",\n            discoveryUrl: \"https://www.googleapis.com/discovery/v1/apis/drive/v3/rest\",\n            scopes: [\"https://www.googleapis.com/auth/drive.readonly\"],\n          },\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n        },\n        now,\n      }).pipe(Effect.orDie);\n      yield* persistSource(runtime.persistence.rows, localSource, {\n        actorAccountId: installation.accountId,\n      }).pipe((effect) => provideControlPlaneRuntime(effect, runtime), Effect.orDie);\n\n      const error = yield* expectLeft(\n        withControlPlaneClient(\n          { runtime, accountId: installation.accountId },\n          (client) =>\n            client.sources.inspection({\n              path: {\n                workspaceId: installation.workspaceId,\n                sourceId,\n              },\n            }),\n        ),\n      );\n\n      expect(error.message).toContain(\"Catalog artifact missing for source googleapis\");\n    }),\n  );\n\n  it.scoped(\"allows continuing an OpenAPI source credential request without auth\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const executionId = ExecutionIdSchema.make(\"exec_local_credential_continue\");\n      const sourceId = SourceIdSchema.make(\"github\");\n      const interactionSuffix = \"executor.sources.add:continue\";\n      const interactionId = ExecutionInteractionIdSchema.make(\n        `${executionId}:${interactionSuffix}`,\n      );\n      const now = Date.now();\n\n      yield* runtime.persistence.rows.executions.insert({\n        id: executionId,\n        workspaceId: installation.workspaceId,\n        createdByAccountId: installation.accountId,\n        status: \"running\",\n        code: \"return await tools.executor.sources.add(...)\",\n        resultJson: null,\n        errorText: null,\n        logsJson: null,\n        startedAt: now,\n        completedAt: null,\n        createdAt: now,\n        updatedAt: now,\n      });\n\n      const localSource = yield* createSourceFromPayload({\n        workspaceId: installation.workspaceId,\n        sourceId,\n        payload: {\n          name: \"GitHub\",\n          kind: \"openapi\",\n          endpoint: \"https://api.github.com\",\n          status: \"auth_required\",\n          enabled: true,\n          namespace: \"github\",\n          importAuthPolicy: \"reuse_runtime\",\n          binding: {\n            specUrl: \"https://example.com/github-openapi.yaml\",\n            defaultHeaders: null,\n          },\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n        },\n        now,\n      }).pipe(Effect.orDie);\n      yield* persistSource(runtime.persistence.rows, localSource, {\n        actorAccountId: installation.accountId,\n      }).pipe((effect) => provideControlPlaneRuntime(effect, runtime), Effect.orDie);\n\n      const interactionFiber = yield* Effect.gen(function* () {\n        const liveExecutionManager = yield* LiveExecutionManagerService;\n        const onElicitation = liveExecutionManager.createOnElicitation({\n          rows: runtime.persistence.rows,\n          executionId,\n        });\n\n        return yield* onElicitation({\n          interactionId: interactionSuffix,\n          path: \"executor.sources.add\" as ToolPath,\n          sourceKey: \"executor\",\n          args: {\n            kind: \"openapi\",\n            endpoint: \"https://api.github.com\",\n            specUrl: \"https://example.com/github-openapi.yaml\",\n            name: \"GitHub\",\n            workspaceId: installation.workspaceId,\n            sourceId,\n          },\n          elicitation: {\n            mode: \"url\",\n            message: \"Open the secure credential page to connect GitHub\",\n            url: `http://127.0.0.1/v1/workspaces/${encodeURIComponent(installation.workspaceId)}/sources/${encodeURIComponent(sourceId)}/credentials?interactionId=${encodeURIComponent(interactionId)}`,\n            elicitationId: interactionSuffix,\n          },\n        });\n      }).pipe(\n        (effect) => provideControlPlaneRuntime(effect, runtime),\n        Effect.fork,\n      );\n\n      const waitForPendingInteraction = (\n        remaining: number,\n      ): Effect.Effect<Option.Option<ExecutionInteraction>, Error> =>\n        runtime.persistence.rows.executionInteractions.getPendingByExecutionId(executionId).pipe(\n          Effect.flatMap((pendingInteraction) =>\n            Option.isSome(pendingInteraction) || remaining <= 0\n              ? Effect.succeed(pendingInteraction)\n              : Effect.yieldNow().pipe(\n                  Effect.zipRight(waitForPendingInteraction(remaining - 1)),\n                ),\n          ),\n        );\n\n      const pendingInteraction = yield* waitForPendingInteraction(20);\n      assertTrue(Option.isSome(pendingInteraction));\n\n      const submittedPage = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.credentialSubmit({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId,\n            },\n            urlParams: {\n              interactionId: pendingInteraction.value.id,\n            },\n            payload: {\n              action: \"continue\",\n            },\n          }),\n      );\n\n      expect(submittedPage).toContain(\"Continuing without auth\");\n\n      const response = yield* Fiber.join(interactionFiber);\n      expect(response.action).toBe(\"accept\");\n      expect(response.content).toEqual({\n        authKind: \"none\",\n      });\n\n      const storedInteraction = yield* runtime.persistence.rows.executionInteractions.getById(\n        pendingInteraction.value.id,\n      );\n      assertTrue(Option.isSome(storedInteraction));\n      expect(storedInteraction.value.responseJson).toContain(\"\\\"authKind\\\":\\\"none\\\"\");\n      expect(storedInteraction.value.responseJson).not.toContain(\"tokenRef\");\n    }),\n  );\n\n  it.scoped(\"reuses existing Google provider grants for single connects and clears orphan state\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const googleServer = yield* makeGoogleWorkspaceTestServer;\n      const installation = runtime.localInstallation;\n\n      const oauthClient = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.createWorkspaceOauthClient({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              providerKey: \"google_workspace\",\n              label: \"Local Google Workspace Client\",\n              oauthClient: {\n                clientId: \"google-client-id\",\n                clientSecret: \"google-client-secret\",\n              },\n            },\n          }),\n      );\n\n      const refreshSecretId = \"sec_google_refresh_single_reuse\";\n      yield* upsertLocalSecret(runtime, {\n        id: refreshSecretId,\n        name: \"Google Refresh Token\",\n        purpose: \"oauth_refresh_token\",\n        value: \"refresh-token-reuse\",\n      });\n\n      const grantId = ProviderAuthGrantIdSchema.make(`provider_grant_${crypto.randomUUID()}`);\n      yield* runtime.persistence.rows.providerAuthGrants.upsert({\n        id: grantId,\n        workspaceId: installation.workspaceId,\n        actorAccountId: installation.accountId,\n        providerKey: \"google_workspace\",\n        oauthClientId: oauthClient.id,\n        tokenEndpoint: googleServer.tokenEndpoint,\n        clientAuthentication: \"client_secret_post\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        refreshToken: {\n          providerId: \"local\",\n          handle: refreshSecretId,\n        },\n        grantedScopes: [\n          \"scope:drive.readonly\",\n        ],\n        lastRefreshedAt: null,\n        orphanedAt: 123,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n\n      googleServer.queueTokenResponse({\n        access_token: \"reuse-access-token\",\n        scope: \"scope:drive.readonly\",\n      });\n\n      const result = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.connect({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              kind: \"google_discovery\",\n              workspaceOauthClientId: oauthClient.id,\n              service: \"drive\",\n              version: \"v3\",\n              discoveryUrl: googleServer.discoveryUrl({\n                service: \"drive\",\n                version: \"v3\",\n                scope: \"scope:drive.readonly\",\n              }),\n              scopes: [\"scope:drive.readonly\"],\n              name: \"Drive\",\n              namespace: \"google.drive\",\n            },\n          }),\n      );\n\n      expect(result.kind).toBe(\"connected\");\n      if (result.kind !== \"connected\") {\n        throw new Error(`Expected connected result, received ${result.kind}`);\n      }\n      expect(result.source.auth).toEqual({\n        kind: \"provider_grant_ref\",\n        grantId,\n        providerKey: \"google_workspace\",\n        requiredScopes: [\"scope:drive.readonly\"],\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n      });\n\n      const storedGrant = yield* runtime.persistence.rows.providerAuthGrants.getById(grantId);\n      assertTrue(Option.isSome(storedGrant));\n      expect(storedGrant.value.orphanedAt).toBeNull();\n      expect(googleServer.discoveryAuthorizations).toContain(\"Bearer reuse-access-token\");\n    }),\n    60_000,\n  );\n\n  it.scoped(\"uses the app callback redirect for browser-started Google single-source OAuth\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const googleServer = yield* makeGoogleWorkspaceTestServer;\n      const installation = runtime.localInstallation;\n\n      const oauthClient = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.createWorkspaceOauthClient({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              providerKey: \"google_workspace\",\n              label: \"Local Google Workspace Client\",\n              oauthClient: {\n                clientId: \"google-client-id\",\n                clientSecret: \"google-client-secret\",\n              },\n            },\n          }),\n      );\n\n      const result = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.connect({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              kind: \"google_discovery\",\n              workspaceOauthClientId: oauthClient.id,\n              service: \"gmail\",\n              version: \"v1\",\n              discoveryUrl: googleServer.discoveryUrl({\n                service: \"gmail\",\n                version: \"v1\",\n                scope: \"scope:gmail.readonly\",\n              }),\n              scopes: [\"scope:gmail.readonly\"],\n              name: \"Gmail\",\n              namespace: \"google.gmail\",\n            },\n          }),\n      );\n\n      expect(result.kind).toBe(\"oauth_required\");\n      if (result.kind !== \"oauth_required\") {\n        throw new Error(`Expected oauth_required result, received ${result.kind}`);\n      }\n\n      const redirectUri = new URL(result.authorizationUrl).searchParams.get(\"redirect_uri\");\n      expect(redirectUri).not.toBeNull();\n      expect(new URL(redirectUri!).pathname).toBe(\n        `/v1/workspaces/${encodeURIComponent(installation.workspaceId)}/oauth/provider/callback`,\n      );\n      expect(result.source.status).toBe(\"auth_required\");\n    }),\n    60_000,\n  );\n\n  it.scoped(\"reuses existing Google provider grants for batch connects and clears orphan state\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const googleServer = yield* makeGoogleWorkspaceTestServer;\n      const installation = runtime.localInstallation;\n\n      const oauthClient = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.createWorkspaceOauthClient({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              providerKey: \"google_workspace\",\n              label: \"Local Google Workspace Client\",\n              oauthClient: {\n                clientId: \"google-client-id\",\n                clientSecret: \"google-client-secret\",\n              },\n            },\n          }),\n      );\n\n      const refreshSecretId = \"sec_google_refresh_reuse\";\n      yield* upsertLocalSecret(runtime, {\n        id: refreshSecretId,\n        name: \"Google Refresh Token\",\n        purpose: \"oauth_refresh_token\",\n        value: \"refresh-token-reuse\",\n      });\n\n      const grantId = ProviderAuthGrantIdSchema.make(`provider_grant_${crypto.randomUUID()}`);\n      yield* runtime.persistence.rows.providerAuthGrants.upsert({\n        id: grantId,\n        workspaceId: installation.workspaceId,\n        actorAccountId: installation.accountId,\n        providerKey: \"google_workspace\",\n        oauthClientId: oauthClient.id,\n        tokenEndpoint: googleServer.tokenEndpoint,\n        clientAuthentication: \"client_secret_post\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        refreshToken: {\n          providerId: \"local\",\n          handle: refreshSecretId,\n        },\n        grantedScopes: [\n          \"scope:gmail.readonly\",\n          \"scope:calendar.readonly\",\n        ],\n        lastRefreshedAt: null,\n        orphanedAt: 123,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n\n      googleServer.queueTokenResponse({\n        access_token: \"reuse-access-token\",\n        scope: \"scope:gmail.readonly scope:calendar.readonly\",\n      });\n      googleServer.queueTokenResponse({\n        access_token: \"reuse-access-token\",\n        scope: \"scope:gmail.readonly scope:calendar.readonly\",\n      });\n\n      const result = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.connectBatch({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              workspaceOauthClientId: oauthClient.id,\n              sources: [\n                {\n                  service: \"gmail\",\n                  version: \"v1\",\n                  discoveryUrl: googleServer.discoveryUrl({\n                    service: \"gmail\",\n                    version: \"v1\",\n                    scope: \"scope:gmail.readonly\",\n                  }),\n                  scopes: [\"scope:gmail.readonly\"],\n                  name: \"Gmail\",\n                  namespace: \"google.gmail\",\n                },\n                {\n                  service: \"calendar\",\n                  version: \"v3\",\n                  discoveryUrl: googleServer.discoveryUrl({\n                    service: \"calendar\",\n                    version: \"v3\",\n                    scope: \"scope:calendar.readonly\",\n                  }),\n                  scopes: [\"scope:calendar.readonly\"],\n                  name: \"Calendar\",\n                  namespace: \"google.calendar\",\n                },\n              ],\n            },\n          }),\n      );\n\n      expect(result.providerOauthSession).toBeNull();\n      expect(result.results).toHaveLength(2);\n      expect(result.results.every((entry) => entry.status === \"connected\")).toBe(true);\n      expect(result.results.every((entry) => entry.source.auth.kind === \"provider_grant_ref\")).toBe(true);\n\n      const storedGrant = yield* runtime.persistence.rows.providerAuthGrants.getById(grantId);\n      assertTrue(Option.isSome(storedGrant));\n      expect(storedGrant.value.orphanedAt).toBeNull();\n      expect(googleServer.tokenRequests.length).toBeGreaterThanOrEqual(1);\n      expect(\n        googleServer.discoveryAuthorizations.every(\n          (authorization) => authorization === \"Bearer reuse-access-token\",\n        ),\n      ).toBe(true);\n    }),\n    60_000,\n  );\n\n  it.scoped(\"uses the app callback redirect for browser-started Google batch OAuth\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const googleServer = yield* makeGoogleWorkspaceTestServer;\n      const installation = runtime.localInstallation;\n\n      const oauthClient = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.createWorkspaceOauthClient({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              providerKey: \"google_workspace\",\n              label: \"Local Google Workspace Client\",\n              oauthClient: {\n                clientId: \"google-client-id\",\n                clientSecret: \"google-client-secret\",\n              },\n            },\n          }),\n      );\n\n      const result = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.connectBatch({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              workspaceOauthClientId: oauthClient.id,\n              sources: [{\n                service: \"gmail\",\n                version: \"v1\",\n                discoveryUrl: googleServer.discoveryUrl({\n                  service: \"gmail\",\n                  version: \"v1\",\n                  scope: \"scope:gmail.readonly\",\n                }),\n                scopes: [\"scope:gmail.readonly\"],\n                name: \"Gmail\",\n                namespace: \"google.gmail\",\n              }],\n            },\n          }),\n      );\n\n      expect(result.providerOauthSession).not.toBeNull();\n      const redirectUri = new URL(\n        result.providerOauthSession!.authorizationUrl,\n      ).searchParams.get(\"redirect_uri\");\n\n      expect(redirectUri).not.toBeNull();\n      expect(new URL(redirectUri!).pathname).toBe(\n        `/v1/workspaces/${encodeURIComponent(installation.workspaceId)}/oauth/provider/callback`,\n      );\n    }),\n    60_000,\n  );\n\n  it.scoped(\"preserves the existing provider refresh token when callback expansion omits refresh_token\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const googleServer = yield* makeGoogleWorkspaceTestServer;\n      const installation = runtime.localInstallation;\n\n      const oauthClient = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.createWorkspaceOauthClient({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              providerKey: \"google_workspace\",\n              label: \"Local Google Workspace Client\",\n              oauthClient: {\n                clientId: \"google-client-id\",\n                clientSecret: \"google-client-secret\",\n              },\n            },\n          }),\n      );\n\n      const preservedRefreshSecretId = \"sec_google_refresh_preserved\";\n      yield* upsertLocalSecret(runtime, {\n        id: preservedRefreshSecretId,\n        name: \"Preserved Google Refresh Token\",\n        purpose: \"oauth_refresh_token\",\n        value: \"refresh-token-preserved\",\n      });\n\n      const source = yield* createPersistedGoogleSource({\n        runtime,\n        name: \"Drive\",\n        namespace: \"google.drive\",\n        service: \"drive\",\n        version: \"v3\",\n        discoveryUrl: googleServer.discoveryUrl({\n          service: \"drive\",\n          version: \"v3\",\n          scope: \"scope:drive.readonly\",\n        }),\n        scopes: [\"scope:drive.readonly\"],\n        auth: {\n          kind: \"none\",\n        },\n      });\n\n      const grantId = ProviderAuthGrantIdSchema.make(`provider_grant_${crypto.randomUUID()}`);\n      yield* runtime.persistence.rows.providerAuthGrants.upsert({\n        id: grantId,\n        workspaceId: installation.workspaceId,\n        actorAccountId: installation.accountId,\n        providerKey: \"google_workspace\",\n        oauthClientId: oauthClient.id,\n        tokenEndpoint: googleServer.tokenEndpoint,\n        clientAuthentication: \"client_secret_post\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        refreshToken: {\n          providerId: \"local\",\n          handle: preservedRefreshSecretId,\n        },\n        grantedScopes: [\n          \"scope:gmail.readonly\",\n        ],\n        lastRefreshedAt: null,\n        orphanedAt: null,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n\n      const sessionId = SourceAuthSessionIdSchema.make(`src_auth_${crypto.randomUUID()}`);\n      const state = `provider-state-${crypto.randomUUID()}`;\n      yield* runtime.persistence.rows.sourceAuthSessions.upsert({\n        id: sessionId,\n        workspaceId: installation.workspaceId,\n        sourceId: SourceIdSchema.make(`oauth_provider_${crypto.randomUUID()}`),\n        actorAccountId: installation.accountId,\n        credentialSlot: \"runtime\",\n        executionId: null,\n        interactionId: null,\n        providerKind: \"oauth2_provider_batch\",\n        status: \"pending\",\n        state,\n        sessionDataJson: JSON.stringify({\n          kind: \"provider_oauth_batch\",\n          providerKey: \"google_workspace\",\n          authorizationEndpoint: \"https://accounts.google.com/o/oauth2/v2/auth\",\n          tokenEndpoint: googleServer.tokenEndpoint,\n          redirectUri: `${googleServer.baseUrl}/oauth/callback`,\n          oauthClientId: oauthClient.id,\n          clientAuthentication: \"client_secret_post\",\n          scopes: [\n            \"scope:gmail.readonly\",\n            \"scope:drive.readonly\",\n          ],\n          headerName: \"Authorization\",\n          prefix: \"Bearer \",\n          authorizationParams: {\n            access_type: \"offline\",\n            prompt: \"consent\",\n            include_granted_scopes: \"true\",\n          },\n          targetSources: [{\n            sourceId: source.id,\n            requiredScopes: [\"scope:drive.readonly\"],\n          }],\n          codeVerifier: \"pkce-verifier\",\n          authorizationUrl: `https://accounts.google.com/o/oauth2/v2/auth?state=${encodeURIComponent(state)}`,\n        }),\n        errorText: null,\n        completedAt: null,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n\n      googleServer.queueTokenResponse({\n        access_token: \"authorization-code-access-token\",\n        scope: \"scope:gmail.readonly scope:drive.readonly\",\n      });\n      googleServer.queueTokenResponse({\n        access_token: \"post-callback-sync-access-token\",\n        scope: \"scope:gmail.readonly scope:drive.readonly\",\n      });\n\n      const callbackPage = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.providerOauthComplete({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            urlParams: {\n              state,\n              code: \"authorization-code\",\n            },\n          }),\n      );\n\n      expect(callbackPage).toContain(\"Connected 1 source\");\n\n      const storedGrant = yield* runtime.persistence.rows.providerAuthGrants.getById(grantId);\n      assertTrue(Option.isSome(storedGrant));\n      expect(storedGrant.value.refreshToken).toEqual({\n        providerId: \"local\",\n        handle: preservedRefreshSecretId,\n      });\n      expect(storedGrant.value.grantedScopes).toEqual([\n        \"scope:gmail.readonly\",\n        \"scope:drive.readonly\",\n      ]);\n\n      const refreshedSource = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.get({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId: source.id,\n            },\n          }),\n      );\n\n      expect(refreshedSource.status).toBe(\"connected\");\n      expect(refreshedSource.auth).toEqual({\n        kind: \"provider_grant_ref\",\n        grantId,\n        providerKey: \"google_workspace\",\n        requiredScopes: [\"scope:drive.readonly\"],\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n      });\n\n      expect(googleServer.tokenRequests.map((request) => request.get(\"grant_type\"))).toEqual([\n        \"authorization_code\",\n        \"refresh_token\",\n      ]);\n      expect(googleServer.tokenRequests[1]?.get(\"refresh_token\")).toBe(\"refresh-token-preserved\");\n      expect(googleServer.discoveryAuthorizations).toContain(\"Bearer post-callback-sync-access-token\");\n    }),\n    60_000,\n  );\n\n  it.scoped(\"marks provider grants as orphaned when the last referencing source is removed\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const oauthClientId = WorkspaceOauthClientIdSchema.make(`ws_oauth_client_${crypto.randomUUID()}`);\n      const refreshSecretId = \"sec_google_refresh_orphan\";\n\n      yield* runtime.persistence.rows.workspaceOauthClients.upsert({\n        id: oauthClientId,\n        workspaceId: installation.workspaceId,\n        providerKey: \"google_workspace\",\n        label: \"Local Google Workspace Client\",\n        clientId: \"google-client-id\",\n        clientSecretProviderId: null,\n        clientSecretHandle: null,\n        clientMetadataJson: null,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n      yield* upsertLocalSecret(runtime, {\n        id: refreshSecretId,\n        name: \"Google Refresh Token\",\n        purpose: \"oauth_refresh_token\",\n        value: \"refresh-token-orphan\",\n      });\n\n      const grantId = ProviderAuthGrantIdSchema.make(`provider_grant_${crypto.randomUUID()}`);\n      yield* runtime.persistence.rows.providerAuthGrants.upsert({\n        id: grantId,\n        workspaceId: installation.workspaceId,\n        actorAccountId: installation.accountId,\n        providerKey: \"google_workspace\",\n        oauthClientId,\n        tokenEndpoint: \"https://example.test/oauth/token\",\n        clientAuthentication: \"client_secret_post\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        refreshToken: {\n          providerId: \"local\",\n          handle: refreshSecretId,\n        },\n        grantedScopes: [\"scope:drive.readonly\"],\n        lastRefreshedAt: null,\n        orphanedAt: null,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n\n      const source = yield* createPersistedGoogleSource({\n        runtime,\n        name: \"Drive\",\n        namespace: \"google.drive\",\n        service: \"drive\",\n        version: \"v3\",\n        discoveryUrl: \"https://example.test/drive/$discovery/rest?version=v3\",\n        scopes: [\"scope:drive.readonly\"],\n        auth: {\n          kind: \"provider_grant_ref\",\n          grantId,\n          providerKey: \"google_workspace\",\n          requiredScopes: [\"scope:drive.readonly\"],\n          headerName: \"Authorization\",\n          prefix: \"Bearer \",\n        },\n      });\n\n      const removed = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.remove({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId: source.id,\n            },\n          }),\n      );\n\n      expect(removed.removed).toBe(true);\n\n      const storedGrant = yield* runtime.persistence.rows.providerAuthGrants.getById(grantId);\n      assertTrue(Option.isSome(storedGrant));\n      expect(storedGrant.value.orphanedAt).not.toBeNull();\n    }),\n  );\n\n  it.scoped(\"revokes shared provider grants through the API and disconnects linked sources\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const oauthClientId = WorkspaceOauthClientIdSchema.make(`ws_oauth_client_${crypto.randomUUID()}`);\n      const refreshSecretId = \"sec_google_refresh_revoke\";\n\n      yield* runtime.persistence.rows.workspaceOauthClients.upsert({\n        id: oauthClientId,\n        workspaceId: installation.workspaceId,\n        providerKey: \"google_workspace\",\n        label: \"Local Google Workspace Client\",\n        clientId: \"google-client-id\",\n        clientSecretProviderId: null,\n        clientSecretHandle: null,\n        clientMetadataJson: null,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n      yield* upsertLocalSecret(runtime, {\n        id: refreshSecretId,\n        name: \"Google Refresh Token\",\n        purpose: \"oauth_refresh_token\",\n        value: \"refresh-token-revoke\",\n      });\n\n      const grantId = ProviderAuthGrantIdSchema.make(`provider_grant_${crypto.randomUUID()}`);\n      yield* runtime.persistence.rows.providerAuthGrants.upsert({\n        id: grantId,\n        workspaceId: installation.workspaceId,\n        actorAccountId: installation.accountId,\n        providerKey: \"google_workspace\",\n        oauthClientId,\n        tokenEndpoint: \"https://example.test/oauth/token\",\n        clientAuthentication: \"client_secret_post\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        refreshToken: {\n          providerId: \"local\",\n          handle: refreshSecretId,\n        },\n        grantedScopes: [\"scope:drive.readonly\", \"scope:gmail.readonly\"],\n        lastRefreshedAt: null,\n        orphanedAt: null,\n        createdAt: Date.now(),\n        updatedAt: Date.now(),\n      });\n\n      const driveSource = yield* createPersistedGoogleSource({\n        runtime,\n        name: \"Drive\",\n        namespace: \"google.drive\",\n        service: \"drive\",\n        version: \"v3\",\n        discoveryUrl: \"https://example.test/drive/$discovery/rest?version=v3\",\n        scopes: [\"scope:drive.readonly\"],\n        auth: {\n          kind: \"provider_grant_ref\",\n          grantId,\n          providerKey: \"google_workspace\",\n          requiredScopes: [\"scope:drive.readonly\"],\n          headerName: \"Authorization\",\n          prefix: \"Bearer \",\n        },\n      });\n      const gmailSource = yield* createPersistedGoogleSource({\n        runtime,\n        name: \"Gmail\",\n        namespace: \"google.gmail\",\n        service: \"gmail\",\n        version: \"v1\",\n        discoveryUrl: \"https://example.test/gmail/$discovery/rest?version=v1\",\n        scopes: [\"scope:gmail.readonly\"],\n        auth: {\n          kind: \"provider_grant_ref\",\n          grantId,\n          providerKey: \"google_workspace\",\n          requiredScopes: [\"scope:gmail.readonly\"],\n          headerName: \"Authorization\",\n          prefix: \"Bearer \",\n        },\n      });\n\n      const removed = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.removeProviderAuthGrant({\n            path: {\n              workspaceId: installation.workspaceId,\n              grantId,\n            },\n          }),\n      );\n\n      expect(removed.removed).toBe(true);\n\n      const storedGrant = yield* runtime.persistence.rows.providerAuthGrants.getById(grantId);\n      assertTrue(Option.isNone(storedGrant));\n\n      const storedRefreshSecret = yield* runtime.persistence.rows.secretMaterials.getById(\n        SecretMaterialIdSchema.make(refreshSecretId),\n      );\n      assertTrue(Option.isNone(storedRefreshSecret));\n\n      const disconnectedDrive = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.get({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId: driveSource.id,\n            },\n          }),\n      );\n      const disconnectedGmail = yield* withControlPlaneClient(\n        { runtime },\n        (client) =>\n          client.sources.get({\n            path: {\n              workspaceId: installation.workspaceId,\n              sourceId: gmailSource.id,\n            },\n          }),\n      );\n\n      expect(disconnectedDrive.status).toBe(\"auth_required\");\n      expect(disconnectedDrive.auth).toEqual({ kind: \"none\" });\n      expect(disconnectedGmail.status).toBe(\"auth_required\");\n      expect(disconnectedGmail.auth).toEqual({ kind: \"none\" });\n    }),\n  );\n\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class RuntimeEffectError extends Data.TaggedError(\n  \"RuntimeEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const runtimeEffectError = (\n  module: string,\n  message: string,\n) => new RuntimeEffectError({ module, message });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/http.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { makeToolInvokerFromTools } from \"@executor/codemode-core\";\nimport { makeDenoSubprocessExecutor } from \"@executor/runtime-deno-subprocess\";\n\nimport {\n  createControlPlaneRuntime,\n} from \"../index\";\nimport { withControlPlaneClient } from \"./test-http-client\";\n\nconst makeExecutionResolver = () => {\n  const toolInvoker = makeToolInvokerFromTools({\n    tools: {\n      \"math.add\": {\n        description: \"Add two numbers\",\n        inputSchema: Schema.standardSchemaV1(\n          Schema.Struct({\n            a: Schema.optional(Schema.Number),\n            b: Schema.optional(Schema.Number),\n          }),\n        ),\n        execute: ({\n          a,\n          b,\n        }) => ({ sum: (a ?? 0) + (b ?? 0) }),\n      },\n    },\n  });\n\n  return () =>\n    Effect.succeed({\n      executor: makeDenoSubprocessExecutor(),\n      toolInvoker,\n    });\n};\n\nconst makeRuntime = Effect.acquireRelease(\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const workspaceRoot = yield* fs.makeTempDirectory({\n      directory: tmpdir(),\n      prefix: \"executor-execution-http-\",\n    });\n\n    return {\n      workspaceRoot,\n      homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n      homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n    };\n  }).pipe(\n    Effect.provide(NodeFileSystem.layer),\n    Effect.flatMap(({ workspaceRoot, homeConfigPath, homeStateDirectory }) =>\n      createControlPlaneRuntime({\n        localDataDir: \":memory:\",\n        workspaceRoot,\n        homeConfigPath,\n        homeStateDirectory,\n        executionResolver: makeExecutionResolver(),\n      }),\n    ),\n  ),\n  (runtime) => Effect.promise(() => runtime.close()).pipe(Effect.orDie),\n);\n\ndescribe(\"execution-http\", () => {\n  it.scoped(\"creates and persists an execution through the HTTP API\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n\n      const createExecution = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.create({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              code: \"return await tools.math.add({ a: 20, b: 22 });\",\n            },\n          }),\n      );\n\n      expect(createExecution.execution.status).toBe(\"completed\");\n      expect(createExecution.execution.resultJson).toBe(JSON.stringify({ sum: 42 }));\n      expect(createExecution.pendingInteraction).toBeNull();\n\n      const getExecution = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.get({\n            path: {\n              workspaceId: installation.workspaceId,\n              executionId: createExecution.execution.id,\n            },\n          }),\n      );\n\n      expect(getExecution.execution.id).toBe(createExecution.execution.id);\n      expect(getExecution.execution.status).toBe(\"completed\");\n      expect(getExecution.pendingInteraction).toBeNull();\n    }),\n    60_000,\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/ir-execution.ts",
    "content": "import type { AccountId, Source } from \"#schema\";\nimport type { OnElicitation } from \"@executor/codemode-core\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { LoadedSourceCatalogToolIndexEntry } from \"../catalog/source/runtime\";\nimport type { ResolvedSourceAuthMaterial } from \"../auth/source-auth-material\";\nimport { getSourceAdapter } from \"../sources/source-adapters\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nexport const invocationDescriptorFromTool = (input: {\n  tool: LoadedSourceCatalogToolIndexEntry;\n}): {\n  toolPath: string;\n  sourceId: Source[\"id\"];\n  sourceName: Source[\"name\"];\n  sourceKind: Source[\"kind\"];\n  sourceNamespace: string | null;\n  operationKind: \"read\" | \"write\" | \"delete\" | \"execute\" | \"unknown\";\n  interaction: \"auto\" | \"required\";\n  approvalLabel: string | null;\n} => ({\n  toolPath: input.tool.path,\n  sourceId: input.tool.source.id,\n  sourceName: input.tool.source.name,\n  sourceKind: input.tool.source.kind,\n  sourceNamespace: input.tool.source.namespace ?? null,\n  operationKind:\n    input.tool.capability.semantics.effect === \"read\"\n      ? \"read\"\n      : input.tool.capability.semantics.effect === \"write\"\n        ? \"write\"\n        : input.tool.capability.semantics.effect === \"delete\"\n          ? \"delete\"\n          : input.tool.capability.semantics.effect === \"action\"\n            ? \"execute\"\n            : \"unknown\",\n  interaction: input.tool.descriptor.interaction ?? \"auto\",\n  approvalLabel: input.tool.capability.surface.title ?? input.tool.executable.display?.title ?? null,\n});\n\nexport const invokeIrTool = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  accountId: AccountId;\n  tool: LoadedSourceCatalogToolIndexEntry;\n  auth: ResolvedSourceAuthMaterial;\n  args: unknown;\n  onElicitation?: OnElicitation;\n  context?: Record<string, unknown>;\n}) => {\n  const adapter = getSourceAdapter(input.tool.executable.adapterKey);\n  if (adapter.key !== input.tool.source.kind) {\n    return Effect.fail(\n      runtimeEffectError(\"execution/ir-execution\", \n        `Executable ${input.tool.executable.id} expects adapter ${adapter.key}, but source ${input.tool.source.id} is ${input.tool.source.kind}`,\n      ),\n    );\n  }\n\n  return adapter.invoke({\n    source: input.tool.source,\n    capability: input.tool.capability,\n    executable: input.tool.executable,\n    descriptor: input.tool.descriptor,\n    catalog: input.tool.projectedCatalog,\n    args: input.args,\n    auth: input.auth,\n    onElicitation: input.onElicitation,\n    context: input.context,\n  });\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/live.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\n\nimport { sanitizePersistedElicitationResponse } from \"./live\";\n\ndescribe(\"live-execution\", () => {\n  it(\"redacts secret refs from persisted interaction responses\", () => {\n    const sanitized = sanitizePersistedElicitationResponse({\n      action: \"accept\",\n      content: {\n        authKind: \"bearer\",\n        tokenRef: {\n          providerId: \"local\",\n          handle: \"sec_123\",\n        },\n      },\n    });\n\n    expect(sanitized).toEqual({\n      action: \"accept\",\n      content: {\n        authKind: \"bearer\",\n      },\n    });\n  });\n\n  it(\"keeps unrelated interaction response content intact\", () => {\n    const sanitized = sanitizePersistedElicitationResponse({\n      action: \"cancel\",\n      content: {\n        reason: \"User declined\",\n        nested: {\n          keep: true,\n        },\n      },\n    });\n\n    expect(sanitized).toEqual({\n      action: \"cancel\",\n      content: {\n        reason: \"User declined\",\n        nested: {\n          keep: true,\n        },\n      },\n    });\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/live.ts",
    "content": "import type {\n  ElicitationResponse,\n  OnElicitation,\n} from \"@executor/codemode-core\";\nimport { clearMcpConnectionPoolRun } from \"@executor/source-mcp\";\nimport {\n  ExecutionInteractionIdSchema,\n  type Execution,\n  type ExecutionInteraction,\n} from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport type { ControlPlaneStoreShape } from \"../store\";\n\ntype VisibleExecutionState =\n  | \"running\"\n  | \"waiting_for_interaction\"\n  | \"completed\"\n  | \"failed\";\n\ntype LiveRunEntry = {\n  stateWaiters: Array<Deferred.Deferred<VisibleExecutionState>>;\n  currentInteraction: {\n    interactionId: ExecutionInteraction[\"id\"];\n    response: Deferred.Deferred<ElicitationResponse>;\n  } | null;\n};\n\ntype LiveExecutionManagerShape = {\n  publishState: (input: {\n    executionId: Execution[\"id\"];\n    state: VisibleExecutionState;\n  }) => Effect.Effect<void>;\n  registerStateWaiter: (\n    executionId: Execution[\"id\"],\n  ) => Effect.Effect<Deferred.Deferred<VisibleExecutionState>>;\n  createOnElicitation: (input: {\n    rows: ControlPlaneStoreShape;\n    executionId: Execution[\"id\"];\n  }) => OnElicitation;\n  resolveInteraction: (input: {\n    executionId: Execution[\"id\"];\n    response: ElicitationResponse;\n  }) => Effect.Effect<boolean>;\n  finishRun: (input: {\n    executionId: Execution[\"id\"];\n    state: Extract<VisibleExecutionState, \"completed\" | \"failed\">;\n  }) => Effect.Effect<void>;\n  clearRun: (executionId: Execution[\"id\"]) => Effect.Effect<void>;\n};\n\nconst createEmptyRun = (): LiveRunEntry => ({\n  stateWaiters: [],\n  currentInteraction: null,\n});\n\nconst serializeJson = (value: unknown): string | null => {\n  if (value === undefined) {\n    return null;\n  }\n\n  return JSON.stringify(value);\n};\n\nconst SENSITIVE_INTERACTION_CONTENT_KEYS = new Set([\n  \"tokenRef\",\n  \"tokenSecretMaterialId\",\n]);\n\nconst redactSensitiveInteractionContent = (value: unknown): unknown => {\n  if (Array.isArray(value)) {\n    return value.map(redactSensitiveInteractionContent);\n  }\n\n  if (!value || typeof value !== \"object\") {\n    return value;\n  }\n\n  const entries = Object.entries(value as Record<string, unknown>)\n    .filter(([key]) => !SENSITIVE_INTERACTION_CONTENT_KEYS.has(key))\n    .map(([key, entry]) => [key, redactSensitiveInteractionContent(entry)]);\n\n  return Object.fromEntries(entries);\n};\n\nexport const sanitizePersistedElicitationResponse = (\n  response: ElicitationResponse,\n): ElicitationResponse => {\n  if (response.content === undefined) {\n    return response;\n  }\n\n  const redactedContent = redactSensitiveInteractionContent(response.content);\n  return {\n    ...response,\n    content: redactedContent as Record<string, unknown>,\n  };\n};\n\nconst interactionPurposeFromInput = (input: Parameters<OnElicitation>[0]): string => {\n  const explicitPurpose = input.context?.interactionPurpose;\n  if (typeof explicitPurpose === \"string\" && explicitPurpose.length > 0) {\n    return explicitPurpose;\n  }\n\n  if (input.path === \"executor.sources.add\") {\n    return input.elicitation.mode === \"url\"\n      ? \"source_connect_oauth2\"\n      : \"source_connect_secret\";\n  }\n\n  return \"elicitation\";\n};\n\n\nexport const createLiveExecutionManager = () => {\n  const runs = new Map<Execution[\"id\"], LiveRunEntry>();\n\n  const getOrCreateRun = (executionId: Execution[\"id\"]): LiveRunEntry => {\n    const existing = runs.get(executionId);\n    if (existing) {\n      return existing;\n    }\n\n    const created = createEmptyRun();\n    runs.set(executionId, created);\n    return created;\n  };\n\n  const publishState = (input: {\n    executionId: Execution[\"id\"];\n    state: VisibleExecutionState;\n  }): Effect.Effect<void> =>\n    Effect.gen(function* () {\n      const run = getOrCreateRun(input.executionId);\n      const waiters = [...run.stateWaiters];\n      run.stateWaiters = [];\n\n      yield* Effect.forEach(waiters, (waiter) => Deferred.succeed(waiter, input.state), {\n        discard: true,\n      });\n    });\n\n  const manager = {\n    publishState,\n\n    registerStateWaiter: (executionId) =>\n      Effect.gen(function* () {\n        const waiter = yield* Deferred.make<VisibleExecutionState>();\n        const run = getOrCreateRun(executionId);\n        run.stateWaiters.push(waiter);\n        return waiter;\n      }),\n\n    createOnElicitation:\n      ({ rows, executionId }) =>\n      (input) =>\n        Effect.gen(function* () {\n          const run = getOrCreateRun(executionId);\n          const response = yield* Deferred.make<ElicitationResponse>();\n          const now = Date.now();\n          const interaction: ExecutionInteraction = {\n            id: ExecutionInteractionIdSchema.make(`${executionId}:${input.interactionId}`),\n            executionId,\n            status: \"pending\",\n            kind: input.elicitation.mode === \"url\" ? \"url\" : \"form\",\n            purpose: interactionPurposeFromInput(input),\n            payloadJson:\n              serializeJson({\n                path: input.path,\n                sourceKey: input.sourceKey,\n                args: input.args,\n                context: input.context,\n                elicitation: input.elicitation,\n              }) ?? \"{}\",\n            responseJson: null,\n            responsePrivateJson: null,\n            createdAt: now,\n            updatedAt: now,\n          };\n\n          yield* rows.executionInteractions.insert(interaction);\n          yield* rows.executions.update(executionId, {\n            status: \"waiting_for_interaction\",\n            updatedAt: now,\n          });\n\n          run.currentInteraction = {\n            interactionId: interaction.id,\n            response,\n          };\n\n          return yield* Effect.gen(function* () {\n            yield* publishState({\n              executionId,\n              state: \"waiting_for_interaction\",\n            });\n\n            const resolved = yield* Deferred.await(response);\n            const resolvedAt = Date.now();\n\n            yield* rows.executionInteractions.update(interaction.id, {\n              status: resolved.action === \"cancel\" ? \"cancelled\" : \"resolved\",\n              responseJson: serializeJson(sanitizePersistedElicitationResponse(resolved)),\n              responsePrivateJson: serializeJson(resolved),\n              updatedAt: resolvedAt,\n            });\n            yield* rows.executions.update(executionId, {\n              status: \"running\",\n              updatedAt: resolvedAt,\n            });\n            yield* publishState({\n              executionId,\n              state: \"running\",\n            });\n\n            return resolved;\n          }).pipe(\n            Effect.ensuring(\n              Effect.sync(() => {\n                if (run.currentInteraction?.interactionId === interaction.id) {\n                  run.currentInteraction = null;\n                }\n              }),\n            ),\n          );\n        }),\n\n    resolveInteraction: ({ executionId, response }) =>\n      Effect.gen(function* () {\n        const run = runs.get(executionId);\n        const pending = run?.currentInteraction;\n        if (!pending) {\n          return false;\n        }\n\n        yield* Deferred.succeed(pending.response, response);\n        return true;\n      }),\n\n    finishRun: ({ executionId, state }) =>\n      publishState({ executionId, state }).pipe(\n        Effect.zipRight(clearMcpConnectionPoolRun(executionId)),\n        Effect.ensuring(\n          Effect.sync(() => {\n            runs.delete(executionId);\n          }),\n        ),\n      ),\n\n    clearRun: (executionId) =>\n      clearMcpConnectionPoolRun(executionId).pipe(\n        Effect.ensuring(\n          Effect.sync(() => {\n            runs.delete(executionId);\n          }),\n        ),\n      ),\n  } satisfies LiveExecutionManagerShape;\n\n  return manager;\n};\n\nexport type LiveExecutionManager = ReturnType<typeof createLiveExecutionManager>;\n\nexport class LiveExecutionManagerService extends Context.Tag(\n  \"#runtime/LiveExecutionManagerService\",\n)<LiveExecutionManagerService, ReturnType<typeof createLiveExecutionManager>>() {}\n\nexport const LiveExecutionManagerLive = Layer.sync(\n  LiveExecutionManagerService,\n  createLiveExecutionManager,\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/mcp-resume.test.ts",
    "content": "import { randomUUID } from \"node:crypto\";\n\nimport { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { assertTrue } from \"@effect/vitest/utils\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport { z } from \"zod/v4\";\n\nimport { makeToolInvokerFromTools } from \"@executor/codemode-core\";\nimport { discoverMcpToolsFromConnector } from \"@executor/source-mcp\";\nimport { makeDenoSubprocessExecutor } from \"@executor/runtime-deno-subprocess\";\n\nimport {\n  createControlPlaneRuntime,\n  type ResolveExecutionEnvironment,\n} from \"../index\";\nimport { withControlPlaneClient } from \"./test-http-client\";\n\ntype McpFormServer = {\n  endpoint: string;\n  close: () => Promise<void>;\n};\n\nconst registerFormGatedEchoTool = (server: McpServer) => {\n  server.registerTool(\n    \"gated_echo\",\n    {\n      description: \"Asks for approval before echoing\",\n      inputSchema: {\n        value: z.string(),\n      },\n    },\n    async ({ value }: { value: string }) => {\n      const response = await server.server.elicitInput({\n        mode: \"form\",\n        message: `Approve gated echo for ${value}?`,\n        requestedSchema: {\n          type: \"object\",\n          properties: {\n            approve: {\n              type: \"boolean\",\n              title: \"Approve\",\n            },\n          },\n          required: [\"approve\"],\n        },\n      });\n\n      if (\n        response.action !== \"accept\"\n        || !response.content\n        || response.content.approve !== true\n      ) {\n        return {\n          content: [{ type: \"text\", text: \"denied\" }],\n        };\n      }\n\n      return {\n        content: [{ type: \"text\", text: `approved:${value}` }],\n      };\n    },\n  );\n};\n\nconst makeFormElicitationServer = Effect.acquireRelease(\n  Effect.promise<McpFormServer>(\n    () =>\n      new Promise<McpFormServer>((resolve, reject) => {\n        const app = createMcpExpressApp({ host: \"127.0.0.1\" });\n        const transports: Record<string, StreamableHTTPServerTransport> = {};\n        const servers: Record<string, McpServer> = {};\n\n        const createServer = () => {\n          const server = new McpServer(\n            {\n              name: \"control-plane-mcp-form-elicitation-test-server\",\n              version: \"1.0.0\",\n            },\n            {\n              capabilities: {\n                tools: {},\n              },\n            },\n          );\n\n          registerFormGatedEchoTool(server);\n          return server;\n        };\n\n        app.post(\"/mcp\", async (req: any, res: any) => {\n          const sessionIdHeader = req.headers[\"mcp-session-id\"];\n          const sessionId =\n            typeof sessionIdHeader === \"string\"\n              ? sessionIdHeader\n              : Array.isArray(sessionIdHeader)\n                ? sessionIdHeader[0]\n                : undefined;\n\n          try {\n            let transport: StreamableHTTPServerTransport;\n\n            if (sessionId && transports[sessionId]) {\n              transport = transports[sessionId];\n            } else {\n              transport = new StreamableHTTPServerTransport({\n                sessionIdGenerator: () => randomUUID(),\n                onsessioninitialized: (newSessionId) => {\n                  transports[newSessionId] = transport;\n                },\n              });\n\n              transport.onclose = () => {\n                const closedSessionId = transport.sessionId;\n                if (closedSessionId && transports[closedSessionId]) {\n                  delete transports[closedSessionId];\n                }\n                if (closedSessionId && servers[closedSessionId]) {\n                  void servers[closedSessionId].close().catch(() => undefined);\n                  delete servers[closedSessionId];\n                }\n              };\n\n              const server = createServer();\n              await server.connect(transport);\n              const newSessionId = transport.sessionId;\n              if (newSessionId) {\n                servers[newSessionId] = server;\n              }\n            }\n\n            await transport.handleRequest(req, res, req.body);\n          } catch (error) {\n            if (!res.headersSent) {\n              res.status(500).json({\n                jsonrpc: \"2.0\",\n                error: {\n                  code: -32603,\n                  message:\n                    error instanceof Error ? error.message : \"Internal server error\",\n                },\n                id: null,\n              });\n            }\n          }\n        });\n\n        app.get(\"/mcp\", async (req: any, res: any) => {\n          const sessionIdHeader = req.headers[\"mcp-session-id\"];\n          const sessionId =\n            typeof sessionIdHeader === \"string\"\n              ? sessionIdHeader\n              : Array.isArray(sessionIdHeader)\n                ? sessionIdHeader[0]\n                : undefined;\n\n          if (!sessionId || !transports[sessionId]) {\n            res.status(400).send(\"Invalid or missing session ID\");\n            return;\n          }\n\n          await transports[sessionId].handleRequest(req, res);\n        });\n\n        app.delete(\"/mcp\", async (req: any, res: any) => {\n          const sessionIdHeader = req.headers[\"mcp-session-id\"];\n          const sessionId =\n            typeof sessionIdHeader === \"string\"\n              ? sessionIdHeader\n              : Array.isArray(sessionIdHeader)\n                ? sessionIdHeader[0]\n                : undefined;\n\n          if (!sessionId || !transports[sessionId]) {\n            res.status(400).send(\"Invalid or missing session ID\");\n            return;\n          }\n\n          const transport = transports[sessionId];\n          await transport.handleRequest(req, res, req.body);\n          await transport.close();\n          delete transports[sessionId];\n\n          if (servers[sessionId]) {\n            await servers[sessionId].close().catch(() => undefined);\n            delete servers[sessionId];\n          }\n        });\n\n        const listener = app.listen(0, \"127.0.0.1\", () => {\n          const address = listener.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"failed to resolve MCP test server address\"));\n            return;\n          }\n\n          resolve({\n            endpoint: `http://127.0.0.1:${address.port}/mcp`,\n            close: async () => {\n              for (const transport of Object.values(transports)) {\n                await transport.close().catch(() => undefined);\n              }\n\n              for (const server of Object.values(servers)) {\n                await server.close().catch(() => undefined);\n              }\n\n              await new Promise<void>((closeResolve, closeReject) => {\n                listener.close((error: Error | undefined) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n                  closeResolve();\n                });\n              });\n            },\n          });\n        });\n\n        listener.once(\"error\", reject);\n      }),\n  ),\n  (server) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\nconst makeMcpExecutionResolver = (\n  endpoint: string,\n): ResolveExecutionEnvironment =>\n  ({ onElicitation }) =>\n    (Effect.gen(function* () {\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect: Effect.tryPromise({\n          try: async () => {\n            const client = new Client(\n              {\n                name: \"control-plane-mcp-execution-client\",\n                version: \"1.0.0\",\n              },\n              { capabilities: { elicitation: { form: {} } } },\n            );\n            const transport = new StreamableHTTPClientTransport(new URL(endpoint));\n            await client.connect(transport);\n\n            return {\n              client,\n              close: async () => {\n                await client.close();\n              },\n            };\n          },\n          catch: (cause) =>\n            cause instanceof Error ? cause : new Error(String(cause)),\n        }),\n        namespace: \"source.form\",\n        sourceKey: \"mcp.form\",\n      });\n\n        return {\n          executor: makeDenoSubprocessExecutor(),\n          toolInvoker: makeToolInvokerFromTools({\n            tools: discovered.tools,\n            onElicitation,\n          }),\n        };\n    }) as Effect.Effect<\n      {\n        executor: ReturnType<typeof makeDenoSubprocessExecutor>;\n        toolInvoker: ReturnType<typeof makeToolInvokerFromTools>;\n      },\n      unknown\n    >);\n\ndescribe(\"execution-mcp-resume\", () => {\n  it.scoped(\"keeps live form elicitation resumable without replaying the run\", () =>\n    Effect.gen(function* () {\n      const mcpServer = yield* makeFormElicitationServer;\n      const fs = yield* FileSystem.FileSystem;\n      const workspaceRoot = yield* fs.makeTempDirectory({\n        directory: tmpdir(),\n        prefix: \"executor-execution-mcp-resume-\",\n      });\n      const runtime = yield* Effect.acquireRelease(\n        createControlPlaneRuntime({\n          localDataDir: \":memory:\",\n          workspaceRoot,\n          homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n          homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n          executionResolver: makeMcpExecutionResolver(mcpServer.endpoint),\n        }),\n        (runtime) => Effect.promise(() => runtime.close()).pipe(Effect.orDie),\n      );\n\n      const installation = runtime.localInstallation;\n\n      const created = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.create({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              code: 'return await tools.source.form.gated_echo({ value: \"from-control-plane\" });',\n              interactionMode: \"live_form\",\n            },\n          }),\n      );\n\n      expect(created.execution.status).toBe(\"waiting_for_interaction\");\n      expect(created.pendingInteraction).not.toBeNull();\n      if (created.pendingInteraction !== null) {\n        expect(created.pendingInteraction.kind).toBe(\"form\");\n        expect(created.pendingInteraction.payloadJson).toContain(\"Approve gated echo\");\n      }\n\n      const pendingInteraction = yield* runtime.persistence.rows.executionInteractions.getPendingByExecutionId(\n        created.execution.id,\n      );\n\n      assertTrue(Option.isSome(pendingInteraction));\n      if (Option.isSome(pendingInteraction)) {\n        expect(pendingInteraction.value.kind).toBe(\"form\");\n        expect(pendingInteraction.value.payloadJson).toContain(\"Approve gated echo\");\n      }\n\n      const resumed = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.resume({\n            path: {\n              workspaceId: installation.workspaceId,\n              executionId: created.execution.id,\n            },\n            payload: {\n              interactionMode: \"live_form\",\n              responseJson: JSON.stringify({\n                action: \"accept\",\n                content: {\n                  approve: true,\n                },\n              }),\n            },\n          }),\n      );\n      expect(resumed.execution.status).toBe(\"completed\");\n      expect(resumed.pendingInteraction).toBeNull();\n      expect(resumed.execution.resultJson).toContain(\"approved:from-control-plane\");\n\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n    60_000,\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/runtime-config.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  createControlPlaneRuntime,\n} from \"../index\";\nimport { withControlPlaneClient } from \"./test-http-client\";\n\nconst writeProjectConfig = (\n  workspaceRoot: string,\n  config: Record<string, unknown>,\n) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n  const configDirectory = join(workspaceRoot, \".executor\");\n    yield* fs.makeDirectory(configDirectory, { recursive: true });\n    yield* fs.writeFileString(\n      join(configDirectory, \"executor.jsonc\"),\n      `${JSON.stringify(config, null, 2)}\\n`,\n    );\n  });\n\nconst makeRuntime = (config: Record<string, unknown>) => {\n  return Effect.acquireRelease(\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const workspaceRoot = yield* fs.makeTempDirectory({\n        directory: tmpdir(),\n        prefix: \"executor-runtime-config-\",\n      });\n      yield* writeProjectConfig(workspaceRoot, config);\n\n      return yield* createControlPlaneRuntime({\n        workspaceRoot,\n        homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n        homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n      });\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n    (runtime) => Effect.promise(() => runtime.close()).pipe(Effect.orDie),\n  );\n};\n\ndescribe(\"execution runtime config\", () => {\n  it.scoped(\"defaults to QuickJS when no runtime is configured\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime({\n        sources: {},\n      });\n      const installation = runtime.localInstallation;\n\n      const execution = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.create({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              code: 'await fetch(\"https://example.com\"); return 1;',\n            },\n          }),\n      );\n\n      expect(execution.execution.status).toBe(\"failed\");\n      expect(execution.execution.errorText).toContain(\n        \"fetch is disabled in QuickJS executor\",\n      );\n    }),\n    60_000,\n  );\n\n  it.scoped(\"uses the SES runtime when configured in executor.jsonc\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime({\n        runtime: \"ses\",\n        sources: {},\n      });\n      const installation = runtime.localInstallation;\n\n      const execution = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.create({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              code: 'await fetch(\"https://example.com\"); return 1;',\n            },\n          }),\n      );\n\n      expect(execution.execution.status).toBe(\"failed\");\n      expect(execution.execution.errorText).toContain(\n        \"fetch is disabled in SES executor\",\n      );\n    }),\n    60_000,\n  );\n\n  it.scoped(\"uses the Deno runtime when configured in executor.jsonc\", () =>\n    Effect.gen(function* () {\n      const runtime = yield* makeRuntime({\n        runtime: \"deno\",\n        sources: {},\n      });\n      const installation = runtime.localInstallation;\n\n      const execution = yield* withControlPlaneClient(\n        {\n          runtime,\n          accountId: installation.accountId,\n        },\n        (client) =>\n          client.executions.create({\n            path: {\n              workspaceId: installation.workspaceId,\n            },\n            payload: {\n              code: 'return typeof Deno !== \"undefined\";',\n            },\n          }),\n      );\n\n      if (execution.execution.status === \"completed\") {\n        expect(execution.execution.resultJson).toBe(\"true\");\n        return;\n      }\n\n      expect(execution.execution.status).toBe(\"failed\");\n      expect(execution.execution.errorText).toContain(\"Install Deno or set DENO_BIN\");\n    }),\n    60_000,\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/runtime.ts",
    "content": "import type { CodeExecutor } from \"@executor/codemode-core\";\nimport { makeDenoSubprocessExecutor } from \"@executor/runtime-deno-subprocess\";\nimport { makeQuickJsExecutor } from \"@executor/runtime-quickjs\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\nimport type { LocalExecutorConfig, LocalExecutorRuntime } from \"#schema\";\n\nconst DEFAULT_EXECUTION_RUNTIME: LocalExecutorRuntime = \"quickjs\";\n\nexport const resolveConfiguredExecutionRuntime = (\n  config: LocalExecutorConfig | null | undefined,\n): LocalExecutorRuntime => config?.runtime ?? DEFAULT_EXECUTION_RUNTIME;\n\nexport const createCodeExecutorForRuntime = (\n  runtime: LocalExecutorRuntime,\n): CodeExecutor => {\n  switch (runtime) {\n    case \"deno\":\n      return makeDenoSubprocessExecutor();\n    case \"ses\":\n      return makeSesExecutor();\n    case \"quickjs\":\n    default:\n      return makeQuickJsExecutor();\n  }\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/service.ts",
    "content": "import {\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n} from \"../../api/errors\";\nimport type {\n  ElicitationResponse,\n  OnElicitation,\n  ToolInvocationContext,\n  ToolInvoker,\n} from \"@executor/codemode-core\";\nimport type {\n  CreateExecutionPayload,\n  ResumeExecutionPayload,\n} from \"../../api/executions/api\";\nimport {\n  ExecutionIdSchema,\n  ExecutionInteractionIdSchema,\n  ExecutionStepIdSchema,\n  type AccountId,\n  type Execution,\n  type ExecutionEnvelope,\n  type ExecutionId,\n  type ExecutionInteraction,\n  type WorkspaceId,\n} from \"#schema\";\nimport * as Data from \"effect/Data\";\nimport * as Deferred from \"effect/Deferred\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport { type ResolveExecutionEnvironment } from \"./state\";\nimport {\n  LiveExecutionManagerService,\n  sanitizePersistedElicitationResponse,\n  type LiveExecutionManager,\n} from \"./live\";\nimport {\n  getRuntimeLocalWorkspaceOption,\n  provideOptionalRuntimeLocalWorkspace,\n} from \"../local/runtime-context\";\nimport {\n  asOperationErrors,\n  operationErrors,\n  type OperationErrorsLike,\n} from \"../policy/operation-errors\";\nimport {\n  ControlPlaneStore,\n  type ControlPlaneStoreShape,\n} from \"../store\";\nimport { RuntimeExecutionResolverService } from \"./workspace/environment\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nconst executionOps = {\n  create: operationErrors(\"executions.create\"),\n  get: operationErrors(\"executions.get\"),\n  resume: operationErrors(\"executions.resume\"),\n} as const;\n\ntype InteractionMode = NonNullable<CreateExecutionPayload[\"interactionMode\"]>;\n\nconst EXECUTION_SUSPENDED_SENTINEL = \"__EXECUTION_SUSPENDED__\";\n\nconst DEFAULT_INTERACTION_MODE: InteractionMode = \"detach\";\n\nconst serializeJson = (value: unknown): string | null => {\n  if (value === undefined) {\n    return null;\n  }\n\n  return JSON.stringify(value);\n};\n\nconst serializeRequiredJson = (value: unknown): string =>\n  JSON.stringify(value === undefined ? null : value);\n\nconst parseStoredJson = (value: string | null): unknown => {\n  if (value === null) {\n    return undefined;\n  }\n\n  return JSON.parse(value);\n};\n\nconst ElicitationActionSchema = Schema.Literal(\"accept\", \"decline\", \"cancel\");\n\nconst ElicitationResponseSchema = Schema.Struct({\n  action: ElicitationActionSchema,\n  content: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.Unknown,\n    }),\n  ),\n});\n\nconst decodeElicitationResponse = Schema.decodeUnknown(ElicitationResponseSchema);\n\nconst withExecutionInvocationContext = (input: {\n  executionId: Execution[\"id\"];\n  toolInvoker: ToolInvoker;\n}): ToolInvoker => {\n  let sequence = 0;\n\n  return {\n    invoke: ({ path, args, context }) => {\n      sequence += 1;\n\n      return input.toolInvoker.invoke({\n        path,\n        args,\n        context: {\n          ...context,\n          runId: input.executionId,\n          callId:\n            typeof context?.callId === \"string\" && context.callId.length > 0\n              ? context.callId\n              : `call_${String(sequence)}`,\n          executionStepSequence: sequence,\n        },\n      });\n    },\n  };\n};\n\nconst executionStepSequenceFromContext = (\n  context: ToolInvocationContext | undefined,\n): number | null => {\n  const value = context?.executionStepSequence;\n  return typeof value === \"number\" && Number.isSafeInteger(value) && value > 0\n    ? value\n    : null;\n};\n\nconst executionStepIdFor = (\n  executionId: Execution[\"id\"],\n  sequence: number,\n) => ExecutionStepIdSchema.make(`${executionId}:step:${String(sequence)}`);\n\nconst interactionIdSuffixForRequest = (input: {\n  interactionId: string;\n  path: string;\n  context?: ToolInvocationContext;\n}) => {\n  const callId =\n    typeof input.context?.callId === \"string\" && input.context.callId.length > 0\n      ? input.context.callId\n      : null;\n\n  return callId === null ? input.interactionId : `${callId}:${input.path}`;\n};\n\nconst executionInteractionIdForRequest = (input: {\n  executionId: Execution[\"id\"];\n  interactionId: string;\n  path: string;\n  context?: ToolInvocationContext;\n}) => {\n  return ExecutionInteractionIdSchema.make(\n    `${input.executionId}:${interactionIdSuffixForRequest(input)}`,\n  );\n};\n\nconst resolveInteractionMode = (\n  value: CreateExecutionPayload[\"interactionMode\"] | ResumeExecutionPayload[\"interactionMode\"],\n): InteractionMode =>\n  value === \"live\" || value === \"live_form\" ? value : DEFAULT_INTERACTION_MODE;\n\nclass ExecutionSuspendedError extends Data.TaggedError(\n  \"ExecutionSuspendedError\",\n)<{\n  readonly executionId: Execution[\"id\"];\n  readonly interactionId: string;\n  readonly message: string;\n}> {}\n\nconst createExecutionSuspendedError = (input: {\n  executionId: Execution[\"id\"];\n  interactionId: string;\n}): ExecutionSuspendedError =>\n  new ExecutionSuspendedError({\n    executionId: input.executionId,\n    interactionId: input.interactionId,\n    message: `${EXECUTION_SUSPENDED_SENTINEL}:${input.executionId}:${input.interactionId}`,\n  });\n\nconst isExecutionSuspendedValue = (value: unknown): boolean => {\n  if (value instanceof ExecutionSuspendedError) {\n    return true;\n  }\n\n  if (value instanceof Error) {\n    return value.message.includes(EXECUTION_SUSPENDED_SENTINEL);\n  }\n\n  return typeof value === \"string\" && value.includes(EXECUTION_SUSPENDED_SENTINEL);\n};\n\nconst decodeStoredElicitationResponse = (input: {\n  interactionId: string;\n  responseJson: string | null;\n}) =>\n  Effect.try({\n    try: () => {\n      if (input.responseJson === null) {\n        throw new Error(\n          `Interaction ${input.interactionId} has no stored response`,\n        );\n      }\n\n      return JSON.parse(input.responseJson);\n    },\n    catch: (error) =>\n      error instanceof Error ? error : new Error(String(error)),\n  }).pipe(\n    Effect.flatMap((decoded) =>\n      decodeElicitationResponse(decoded).pipe(\n        Effect.mapError((error) => new Error(String(error))),\n      )\n    ),\n  );\n\nconst verifyStoredStepMatches = (input: {\n  executionId: Execution[\"id\"];\n  sequence: number;\n  expectedPath: string;\n  expectedArgsJson: string;\n  actualPath: string;\n  actualArgsJson: string;\n}) => {\n  if (\n    input.expectedPath === input.actualPath\n    && input.expectedArgsJson === input.actualArgsJson\n  ) {\n    return;\n  }\n\n  throw new Error(\n    [\n      `Durable execution mismatch for ${input.executionId} at tool step ${String(input.sequence)}.`,\n      `Expected ${input.expectedPath}(${input.expectedArgsJson}) but replay reached ${input.actualPath}(${input.actualArgsJson}).`,\n    ].join(\" \"),\n  );\n};\n\nconst fetchExecution = (\n  store: ControlPlaneStoreShape,\n  input: {\n    workspaceId: Execution[\"workspaceId\"];\n    executionId: Execution[\"id\"];\n    operation: OperationErrorsLike;\n  },\n): Effect.Effect<Execution, ControlPlaneNotFoundError | ControlPlaneStorageError> =>\n  Effect.gen(function* () {\n    const errors = asOperationErrors(input.operation);\n    const existing = yield* errors.mapStorage(\n      store.executions.getByWorkspaceAndId(input.workspaceId, input.executionId),\n    );\n\n    if (Option.isNone(existing)) {\n      return yield* errors.notFound(\n          \"Execution not found\",\n          `workspaceId=${input.workspaceId} executionId=${input.executionId}`,\n        );\n    }\n\n    return existing.value;\n  });\n\nconst fetchExecutionEnvelope = (\n  store: ControlPlaneStoreShape,\n  input: {\n    workspaceId: Execution[\"workspaceId\"];\n    executionId: Execution[\"id\"];\n    operation: OperationErrorsLike;\n  },\n): Effect.Effect<ExecutionEnvelope, ControlPlaneNotFoundError | ControlPlaneStorageError> =>\n  Effect.gen(function* () {\n    const errors = asOperationErrors(input.operation);\n    const execution = yield* fetchExecution(store, input);\n    const pendingInteraction = yield* errors.child(\"pending_interaction\").mapStorage(\n      store.executionInteractions.getPendingByExecutionId(input.executionId),\n    );\n\n    return {\n      execution,\n      pendingInteraction: Option.isSome(pendingInteraction) ? pendingInteraction.value : null,\n    };\n  });\n\nconst waitForExecutionEnvelopeToSettle = (\n  store: ControlPlaneStoreShape,\n  input: {\n    workspaceId: Execution[\"workspaceId\"];\n    executionId: Execution[\"id\"];\n    operation: OperationErrorsLike;\n    previousPendingInteractionId: ExecutionInteraction[\"id\"] | null;\n    attemptsRemaining: number;\n  },\n): Effect.Effect<ExecutionEnvelope, ControlPlaneNotFoundError | ControlPlaneStorageError, never> =>\n  Effect.gen(function* () {\n    const envelope = yield* fetchExecutionEnvelope(store, input);\n    if (\n      (\n        envelope.execution.status !== \"running\"\n        && !(\n          envelope.execution.status === \"waiting_for_interaction\"\n          && (\n            envelope.pendingInteraction === null\n            || envelope.pendingInteraction.id === input.previousPendingInteractionId\n          )\n        )\n      )\n      || input.attemptsRemaining <= 0\n    ) {\n      return envelope;\n    }\n\n    yield* Effect.promise(\n      () => new Promise<void>((resolve) => setTimeout(resolve, 25)),\n    );\n    return yield* waitForExecutionEnvelopeToSettle(store, {\n      ...input,\n      attemptsRemaining: input.attemptsRemaining - 1,\n    });\n  });\n\nconst suspendExecutionForInteraction = (input: {\n  rows: ControlPlaneStoreShape;\n  executionId: Execution[\"id\"];\n  liveExecutionManager: LiveExecutionManager;\n  request: Parameters<OnElicitation>[0];\n  interactionId: ExecutionEnvelope[\"pendingInteraction\"] extends infer T\n    ? T extends { id: infer I }\n      ? I\n      : never\n    : never;\n}) =>\n  Effect.gen(function* () {\n    const now = Date.now();\n    const existing = yield* input.rows.executionInteractions.getById(input.interactionId);\n    const stepSequence = executionStepSequenceFromContext(input.request.context);\n\n    if (Option.isSome(existing) && existing.value.status !== \"pending\") {\n      return yield* decodeStoredElicitationResponse({\n        interactionId: input.interactionId,\n        responseJson:\n          existing.value.responsePrivateJson ?? existing.value.responseJson,\n      });\n    }\n\n    if (Option.isNone(existing)) {\n      yield* input.rows.executionInteractions.insert({\n        id: ExecutionInteractionIdSchema.make(input.interactionId),\n        executionId: input.executionId,\n        status: \"pending\",\n        kind: input.request.elicitation.mode === \"url\" ? \"url\" : \"form\",\n        purpose: \"elicitation\",\n        payloadJson:\n          serializeJson({\n            path: input.request.path,\n            sourceKey: input.request.sourceKey,\n            args: input.request.args,\n            context: input.request.context,\n            elicitation: input.request.elicitation,\n          }) ?? \"{}\",\n        responseJson: null,\n        responsePrivateJson: null,\n        createdAt: now,\n        updatedAt: now,\n      });\n    }\n\n    if (stepSequence !== null) {\n      yield* input.rows.executionSteps.updateByExecutionAndSequence(\n        input.executionId,\n        stepSequence,\n        {\n          status: \"waiting\",\n          interactionId: ExecutionInteractionIdSchema.make(input.interactionId),\n          updatedAt: now,\n        },\n      );\n    }\n\n    yield* input.rows.executions.update(input.executionId, {\n      status: \"waiting_for_interaction\",\n      updatedAt: now,\n    });\n    yield* input.liveExecutionManager.publishState({\n      executionId: input.executionId,\n      state: \"waiting_for_interaction\",\n    });\n\n    return yield* createExecutionSuspendedError({\n        executionId: input.executionId,\n        interactionId: input.interactionId,\n      });\n  });\n\nconst createHybridOnElicitation = (input: {\n  rows: ControlPlaneStoreShape;\n  executionId: Execution[\"id\"];\n  liveExecutionManager: LiveExecutionManager;\n  interactionMode: InteractionMode;\n}): OnElicitation => {\n  const liveOnElicitation = input.liveExecutionManager.createOnElicitation({\n    rows: input.rows,\n    executionId: input.executionId,\n  });\n\n  return (request) =>\n    Effect.gen(function* () {\n      const interactionIdSuffix = interactionIdSuffixForRequest({\n        interactionId: request.interactionId,\n        path: request.path,\n        context: request.context,\n      });\n      const interactionId = executionInteractionIdForRequest({\n        executionId: input.executionId,\n        interactionId: request.interactionId,\n        path: request.path,\n        context: request.context,\n      });\n      const existing = yield* input.rows.executionInteractions.getById(interactionId);\n\n      if (Option.isSome(existing) && existing.value.status !== \"pending\") {\n        return yield* decodeStoredElicitationResponse({\n          interactionId,\n          responseJson:\n            existing.value.responsePrivateJson ?? existing.value.responseJson,\n        });\n      }\n\n      const allowLiveWait =\n        input.interactionMode === \"live\"\n        || (input.interactionMode === \"live_form\" && request.elicitation.mode !== \"url\");\n\n      if (Option.isNone(existing) && allowLiveWait) {\n        const stepSequence = executionStepSequenceFromContext(request.context);\n        if (stepSequence !== null) {\n          yield* input.rows.executionSteps.updateByExecutionAndSequence(\n            input.executionId,\n            stepSequence,\n            {\n              status: \"waiting\",\n              interactionId: ExecutionInteractionIdSchema.make(interactionId),\n              updatedAt: Date.now(),\n            },\n          );\n        }\n\n        return yield* liveOnElicitation({\n          ...request,\n          interactionId: interactionIdSuffix,\n        });\n      }\n\n      return yield* suspendExecutionForInteraction({\n        rows: input.rows,\n        executionId: input.executionId,\n        liveExecutionManager: input.liveExecutionManager,\n        request,\n        interactionId,\n      });\n    });\n};\n\nconst createReplayToolInvoker = (input: {\n  rows: ControlPlaneStoreShape;\n  executionId: Execution[\"id\"];\n  toolInvoker: ToolInvoker;\n}): ToolInvoker => ({\n  invoke: ({ path, args, context }) =>\n    Effect.gen(function* () {\n      const stepSequence = executionStepSequenceFromContext(context);\n      if (stepSequence === null) {\n        return yield* input.toolInvoker.invoke({ path, args, context });\n      }\n\n      const argsJson = serializeRequiredJson(args);\n      const existing = yield* input.rows.executionSteps.getByExecutionAndSequence(\n        input.executionId,\n        stepSequence,\n      );\n\n      if (Option.isSome(existing)) {\n        verifyStoredStepMatches({\n          executionId: input.executionId,\n          sequence: stepSequence,\n          expectedPath: existing.value.path,\n          expectedArgsJson: existing.value.argsJson,\n          actualPath: path,\n          actualArgsJson: argsJson,\n        });\n\n        if (existing.value.status === \"completed\") {\n          return parseStoredJson(existing.value.resultJson);\n        }\n\n        if (existing.value.status === \"failed\") {\n          return yield* runtimeEffectError(\"execution/service\", \n              existing.value.errorText\n                ?? `Stored tool step ${String(stepSequence)} failed`,\n            );\n        }\n      } else {\n        const now = Date.now();\n        yield* input.rows.executionSteps.insert({\n          id: executionStepIdFor(input.executionId, stepSequence),\n          executionId: input.executionId,\n          sequence: stepSequence,\n          kind: \"tool_call\",\n          status: \"pending\",\n          path,\n          argsJson,\n          resultJson: null,\n          errorText: null,\n          interactionId: null,\n          createdAt: now,\n          updatedAt: now,\n        });\n      }\n\n      try {\n        const value = yield* input.toolInvoker.invoke({ path, args, context });\n        const updatedAt = Date.now();\n\n        yield* input.rows.executionSteps.updateByExecutionAndSequence(\n          input.executionId,\n          stepSequence,\n          {\n            status: \"completed\",\n            resultJson: serializeJson(value),\n            errorText: null,\n            updatedAt,\n          },\n        );\n\n        return value;\n      } catch (error) {\n        const updatedAt = Date.now();\n\n        if (isExecutionSuspendedValue(error)) {\n          yield* input.rows.executionSteps.updateByExecutionAndSequence(\n            input.executionId,\n            stepSequence,\n            {\n              status: \"waiting\",\n              updatedAt,\n            },\n          );\n\n          return yield* Effect.fail(error);\n        }\n\n        yield* input.rows.executionSteps.updateByExecutionAndSequence(\n          input.executionId,\n          stepSequence,\n          {\n            status: \"failed\",\n            errorText: error instanceof Error ? error.message : String(error),\n            updatedAt,\n          },\n        );\n\n        return yield* Effect.fail(error);\n      }\n    }),\n});\n\nconst persistExecutionOutcome = (input: {\n  rows: ControlPlaneStoreShape;\n  liveExecutionManager: LiveExecutionManager;\n  executionId: Execution[\"id\"];\n  outcome: {\n    result: unknown;\n    error?: string;\n    logs?: string[];\n  };\n}) =>\n  Effect.gen(function* () {\n    if (isExecutionSuspendedValue(input.outcome.error)) {\n      return;\n    }\n\n    if (input.outcome.error) {\n      const [execution, pendingInteraction] = yield* Effect.all([\n        input.rows.executions.getById(input.executionId),\n        input.rows.executionInteractions.getPendingByExecutionId(input.executionId),\n      ]);\n\n      if (\n        Option.isSome(execution)\n        && execution.value.status === \"waiting_for_interaction\"\n        && Option.isSome(pendingInteraction)\n      ) {\n        return;\n      }\n    }\n\n    const completedAt = Date.now();\n    const updated = yield* input.rows.executions.update(input.executionId, {\n      status: input.outcome.error ? \"failed\" : \"completed\",\n      resultJson: serializeJson(input.outcome.result),\n      errorText: input.outcome.error ?? null,\n      logsJson: serializeJson(input.outcome.logs ?? null),\n      completedAt,\n      updatedAt: completedAt,\n    });\n\n    if (Option.isNone(updated)) {\n      yield* input.liveExecutionManager.clearRun(input.executionId);\n      return;\n    }\n\n    yield* input.liveExecutionManager.finishRun({\n      executionId: input.executionId,\n      state: updated.value.status === \"completed\" ? \"completed\" : \"failed\",\n    });\n\n    yield* input.rows.executionSteps.deleteByExecutionId(input.executionId);\n  });\n\nconst persistExecutionFailure = (input: {\n  rows: ControlPlaneStoreShape;\n  liveExecutionManager: LiveExecutionManager;\n  executionId: Execution[\"id\"];\n  error: string;\n}) =>\n  Effect.gen(function* () {\n    const completedAt = Date.now();\n    const updated = yield* input.rows.executions.update(input.executionId, {\n      status: \"failed\",\n      errorText: input.error,\n      completedAt,\n      updatedAt: completedAt,\n    });\n\n    if (Option.isNone(updated)) {\n      yield* input.liveExecutionManager.clearRun(input.executionId);\n      return;\n    }\n\n    yield* input.liveExecutionManager.finishRun({\n      executionId: input.executionId,\n      state: \"failed\",\n    });\n\n    yield* input.rows.executionSteps.deleteByExecutionId(input.executionId);\n  });\n\nconst runExecutionAttemptWithDependencies = (\n  store: ControlPlaneStoreShape,\n  executionResolver: ResolveExecutionEnvironment,\n  liveExecutionManager: LiveExecutionManager,\n  execution: Execution,\n  interactionMode: InteractionMode,\n) =>\n  executionResolver({\n    workspaceId: execution.workspaceId,\n    accountId: execution.createdByAccountId,\n    executionId: execution.id,\n    onElicitation: createHybridOnElicitation({\n      rows: store,\n      executionId: execution.id,\n      liveExecutionManager,\n      interactionMode,\n    }),\n  }).pipe(\n    Effect.map((environment) => ({\n      executor: environment.executor,\n      toolInvoker: withExecutionInvocationContext({\n        executionId: execution.id,\n        toolInvoker: createReplayToolInvoker({\n          rows: store,\n          executionId: execution.id,\n          toolInvoker: environment.toolInvoker,\n        }),\n      }),\n    })),\n    Effect.flatMap(({ executor, toolInvoker }) =>\n      executor.execute(execution.code, toolInvoker)\n    ),\n    Effect.flatMap((outcome) =>\n      persistExecutionOutcome({\n        rows: store,\n        liveExecutionManager,\n        executionId: execution.id,\n        outcome,\n      })\n    ),\n    Effect.catchAll((error) =>\n      persistExecutionFailure({\n        rows: store,\n        liveExecutionManager,\n        executionId: execution.id,\n        error: error instanceof Error ? error.message : String(error),\n      }).pipe(\n        Effect.catchAll(() => liveExecutionManager.clearRun(execution.id)),\n      )\n    ),\n  );\n\nconst forkExecutionAttemptWithDependencies = (\n  store: ControlPlaneStoreShape,\n  executionResolver: ResolveExecutionEnvironment,\n  liveExecutionManager: LiveExecutionManager,\n  execution: Execution,\n  interactionMode: InteractionMode,\n) =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* getRuntimeLocalWorkspaceOption();\n\n    yield* Effect.sync(() => {\n      const effect = runExecutionAttemptWithDependencies(\n        store,\n        executionResolver,\n        liveExecutionManager,\n        execution,\n        interactionMode,\n      );\n\n      Effect.runFork(\n        provideOptionalRuntimeLocalWorkspace(effect, runtimeLocalWorkspace),\n      );\n    });\n  });\n\nconst submitExecutionInteractionResponseWithDependencies = (\n  store: ControlPlaneStoreShape,\n  executionResolver: ResolveExecutionEnvironment,\n  liveExecutionManager: LiveExecutionManager,\n  input: {\n    executionId: ExecutionId;\n    response: ElicitationResponse;\n    interactionMode: InteractionMode;\n  },\n) =>\n  Effect.gen(function* () {\n    const execution = yield* store.executions.getById(input.executionId);\n    if (Option.isNone(execution)) {\n      return false;\n    }\n\n    const pendingInteraction = yield* store.executionInteractions.getPendingByExecutionId(\n      input.executionId,\n    );\n    if (Option.isNone(pendingInteraction)) {\n      return false;\n    }\n\n    if (\n      execution.value.status !== \"waiting_for_interaction\"\n      && execution.value.status !== \"failed\"\n    ) {\n      return false;\n    }\n\n    const now = Date.now();\n    const steps = yield* store.executionSteps.listByExecutionId(input.executionId);\n    const waitingStep = [...steps]\n      .reverse()\n      .find((step) => step.interactionId === pendingInteraction.value.id);\n\n    if (waitingStep) {\n      yield* store.executionSteps.updateByExecutionAndSequence(\n        input.executionId,\n        waitingStep.sequence,\n        {\n          status: \"waiting\",\n          errorText: null,\n          updatedAt: now,\n        },\n      );\n    }\n\n    yield* store.executionInteractions.update(pendingInteraction.value.id, {\n      status: input.response.action === \"cancel\" ? \"cancelled\" : \"resolved\",\n      responseJson: serializeJson(\n        sanitizePersistedElicitationResponse(input.response),\n      ),\n      responsePrivateJson: serializeJson(input.response),\n      updatedAt: now,\n    });\n\n    const updated = yield* store.executions.update(input.executionId, {\n      status: \"running\",\n      updatedAt: now,\n    });\n    if (Option.isNone(updated)) {\n      return false;\n    }\n\n    yield* forkExecutionAttemptWithDependencies(\n      store,\n      executionResolver,\n      liveExecutionManager,\n      updated.value,\n      input.interactionMode,\n    );\n\n    return true;\n  });\n\nconst createExecutionWithDependencies = (\n  store: ControlPlaneStoreShape,\n  executionResolver: ResolveExecutionEnvironment,\n  liveExecutionManager: LiveExecutionManager,\n  input: {\n    workspaceId: WorkspaceId;\n    payload: CreateExecutionPayload;\n    createdByAccountId: AccountId;\n  },\n) =>\n  Effect.gen(function* () {\n    const code = input.payload.code;\n    const now = Date.now();\n    const execution: Execution = {\n      id: ExecutionIdSchema.make(`exec_${crypto.randomUUID()}`),\n      workspaceId: input.workspaceId,\n      createdByAccountId: input.createdByAccountId,\n      status: \"pending\",\n      code,\n      resultJson: null,\n      errorText: null,\n      logsJson: null,\n      startedAt: null,\n      completedAt: null,\n      createdAt: now,\n      updatedAt: now,\n    };\n\n    yield* executionOps.create.child(\"insert\").mapStorage(\n      store.executions.insert(execution),\n    );\n\n    const running = yield* executionOps.create.child(\"mark_running\").mapStorage(\n      store.executions.update(execution.id, {\n        status: \"running\",\n        startedAt: now,\n        updatedAt: now,\n      }),\n    );\n\n    if (Option.isNone(running)) {\n      return yield* executionOps.create.notFound(\n          \"Execution not found after insert\",\n          `executionId=${execution.id}`,\n        );\n    }\n\n    const nextState = yield* liveExecutionManager.registerStateWaiter(execution.id);\n\n    yield* forkExecutionAttemptWithDependencies(\n      store,\n      executionResolver,\n      liveExecutionManager,\n      running.value,\n      resolveInteractionMode(input.payload.interactionMode),\n    );\n\n    yield* Deferred.await(nextState);\n\n    return yield* fetchExecutionEnvelope(store, {\n      workspaceId: input.workspaceId,\n      executionId: execution.id,\n      operation: executionOps.create,\n    });\n  });\n\nexport const createExecution = (input: {\n  workspaceId: WorkspaceId;\n  payload: CreateExecutionPayload;\n  createdByAccountId: AccountId;\n}) =>\n  Effect.gen(function* () {\n    const store = yield* ControlPlaneStore;\n    const executionResolver = yield* RuntimeExecutionResolverService;\n    const liveExecutionManager = yield* LiveExecutionManagerService;\n\n    return yield* createExecutionWithDependencies(\n      store,\n      executionResolver,\n      liveExecutionManager,\n      input,\n    );\n  });\n\nexport const getExecution = (input: {\n  workspaceId: WorkspaceId;\n  executionId: ExecutionId;\n}) =>\n  Effect.flatMap(ControlPlaneStore, (store) =>\n    fetchExecutionEnvelope(store, {\n      workspaceId: input.workspaceId,\n      executionId: input.executionId,\n      operation: executionOps.get,\n    })\n  );\n\nexport const submitExecutionInteractionResponse = (input: {\n  executionId: ExecutionId;\n  response: ElicitationResponse;\n  interactionMode?: InteractionMode;\n}) =>\n  Effect.gen(function* () {\n    const store = yield* ControlPlaneStore;\n    const executionResolver = yield* RuntimeExecutionResolverService;\n    const liveExecutionManager = yield* LiveExecutionManagerService;\n\n    return yield* submitExecutionInteractionResponseWithDependencies(\n      store,\n      executionResolver,\n        liveExecutionManager,\n        {\n          ...input,\n          interactionMode: input.interactionMode ?? DEFAULT_INTERACTION_MODE,\n        },\n      );\n  });\n\nexport const resumeExecution = (input: {\n  workspaceId: WorkspaceId;\n  executionId: ExecutionId;\n  payload: ResumeExecutionPayload;\n  resumedByAccountId: AccountId;\n}) =>\n  Effect.gen(function* () {\n    const store = yield* ControlPlaneStore;\n    const executionResolver = yield* RuntimeExecutionResolverService;\n    const liveExecutionManager = yield* LiveExecutionManagerService;\n\n    const existing = yield* fetchExecutionEnvelope(store, {\n      workspaceId: input.workspaceId,\n      executionId: input.executionId,\n      operation: \"executions.resume\",\n    });\n\n    if (\n      existing.execution.status !== \"waiting_for_interaction\"\n      && !(\n        existing.execution.status === \"failed\"\n        && existing.pendingInteraction !== null\n      )\n    ) {\n      return yield* executionOps.resume.badRequest(\n          \"Execution is not waiting for interaction\",\n          `executionId=${input.executionId} status=${existing.execution.status}`,\n        );\n    }\n\n    const responseJson = input.payload.responseJson;\n    const response =\n      responseJson === undefined\n        ? { action: \"accept\" as const }\n        : yield* Effect.try({\n            try: () => JSON.parse(responseJson),\n            catch: (error) =>\n              executionOps.resume.badRequest(\n                \"Invalid responseJson\",\n                error instanceof Error ? error.message : String(error),\n              ),\n          }).pipe(\n            Effect.flatMap((decoded) =>\n              decodeElicitationResponse(decoded).pipe(\n                Effect.mapError((error) =>\n                  executionOps.resume.badRequest(\n                    \"Invalid responseJson\",\n                    String(error),\n                  ),\n                ),\n              )\n            ),\n          );\n\n    const resumedLive = yield* liveExecutionManager.resolveInteraction({\n      executionId: input.executionId,\n      response,\n    });\n\n    if (!resumedLive) {\n      const resumed = yield* executionOps.resume.child(\"submit_interaction\").mapStorage(\n        submitExecutionInteractionResponseWithDependencies(\n          store,\n          executionResolver,\n          liveExecutionManager,\n          {\n            executionId: input.executionId,\n            response,\n            interactionMode: resolveInteractionMode(input.payload.interactionMode),\n          },\n        ),\n      );\n\n      if (!resumed) {\n        return yield* executionOps.resume.badRequest(\n            \"Resume is unavailable for this execution\",\n            `executionId=${input.executionId}`,\n          );\n      }\n    }\n\n    return yield* waitForExecutionEnvelopeToSettle(store, {\n      workspaceId: input.workspaceId,\n      executionId: input.executionId,\n      operation: executionOps.resume,\n      previousPendingInteractionId: existing.pendingInteraction?.id ?? null,\n      attemptsRemaining: 400,\n    });\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/state.ts",
    "content": "import type {\n  CodeExecutor,\n  OnElicitation,\n  ToolCatalog,\n  ToolInvoker,\n} from \"@executor/codemode-core\";\nimport type { AccountId, ExecutionId, WorkspaceId } from \"#schema\";\nimport * as Data from \"effect/Data\";\nimport type * as Effect from \"effect/Effect\";\n\nexport type ExecutionEnvironment = {\n  executor: CodeExecutor;\n  toolInvoker: ToolInvoker;\n  catalog?: ToolCatalog;\n};\n\nexport type ResolveExecutionEnvironment = (input: {\n  workspaceId: WorkspaceId;\n  accountId: AccountId;\n  executionId: ExecutionId;\n  onElicitation?: OnElicitation;\n}) => Effect.Effect<ExecutionEnvironment, unknown>;\n\nexport class ResumeUnsupportedError extends Data.TaggedError(\n  \"ResumeUnsupportedError\",\n)<{\n  executionId: ExecutionId;\n}> {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/test-http-client.ts",
    "content": "import {\n  HttpApiBuilder,\n  HttpApiClient,\n} from \"@effect/platform\";\nimport { NodeHttpServer } from \"@effect/platform-node\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  ControlPlaneApi,\n  createControlPlaneApiLayer,\n} from \"#api\";\n\nimport {\n  type ControlPlaneRuntime,\n} from \"../index\";\n\nconst createClientLayer = (runtime: ControlPlaneRuntime) => {\n  const apiLayer = createControlPlaneApiLayer(runtime.runtimeLayer);\n\n  return HttpApiBuilder.serve().pipe(\n    Layer.provide(apiLayer),\n    Layer.provideMerge(NodeHttpServer.layerTest),\n  );\n};\n\nconst createControlPlaneClient = () =>\n  HttpApiClient.make(ControlPlaneApi, {\n  });\n\ntype ControlPlaneClient = Effect.Effect.Success<\n  ReturnType<typeof createControlPlaneClient>\n>;\n\nexport const withControlPlaneClient = <A, E>(\n  input: {\n    runtime: ControlPlaneRuntime;\n    accountId?: string;\n  },\n  f: (client: ControlPlaneClient) => Effect.Effect<A, E, never>,\n): Effect.Effect<A, E, never> =>\n  Effect.gen(function* () {\n    const client = yield* createControlPlaneClient();\n    return yield* f(client);\n  }).pipe(Effect.provide(createClientLayer(input.runtime).pipe(Layer.orDie)));\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/workspace/authorization.ts",
    "content": "import { type ToolPath, makeToolInvokerFromTools } from \"@executor/codemode-core\";\nimport type { Source } from \"#schema\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { LoadedSourceCatalogToolIndexEntry } from \"../../catalog/source/runtime\";\nimport type { SecretMaterialResolveContext } from \"../../local/secret-material-providers\";\nimport type { WorkspaceStorageServices } from \"../../local/storage\";\nimport { invocationDescriptorFromTool } from \"../ir-execution\";\nimport { evaluateInvocationPolicy } from \"../../policy/invocation-policy-engine\";\nimport { loadRuntimeLocalWorkspacePolicies } from \"../../policy/policies-operations\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst approvalSchema = {\n  type: \"object\",\n  properties: {\n    approve: {\n      type: \"boolean\",\n      description: \"Whether to approve this tool execution\",\n    },\n  },\n  required: [\"approve\"],\n  additionalProperties: false,\n} satisfies Record<string, unknown>;\n\nconst approvalMessageForInvocation = (\n  descriptor: ReturnType<typeof invocationDescriptorFromTool>,\n): string => {\n  if (descriptor.approvalLabel) {\n    return `Allow ${descriptor.approvalLabel}?`;\n  }\n\n  return `Allow tool call: ${descriptor.toolPath}?`;\n};\n\nconst SecretResolutionContextEnvelopeSchema = Schema.Struct({\n  params: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nconst decodeSecretResolutionContextEnvelope = Schema.decodeUnknownEither(\n  SecretResolutionContextEnvelopeSchema,\n);\n\nexport const toSecretResolutionContext = (\n  value: unknown,\n): SecretMaterialResolveContext | undefined => {\n  const decoded = decodeSecretResolutionContextEnvelope(value);\n  if (Either.isLeft(decoded) || decoded.right.params === undefined) {\n    return undefined;\n  }\n\n  return {\n    params: decoded.right.params,\n  };\n};\n\ntype WorkspaceToolElicitation = Parameters<\n  typeof makeToolInvokerFromTools\n>[0][\"onElicitation\"];\n\nexport const authorizePersistedToolInvocation = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  tool: LoadedSourceCatalogToolIndexEntry;\n  args: unknown;\n  context?: Record<string, unknown>;\n  onElicitation?: WorkspaceToolElicitation;\n}): Effect.Effect<void, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    const descriptor = invocationDescriptorFromTool({\n      tool: input.tool,\n    });\n    const localWorkspacePolicies = yield* loadRuntimeLocalWorkspacePolicies(\n      input.workspaceId,\n    ).pipe(\n      Effect.mapError((cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n      ),\n    );\n\n    const decision = evaluateInvocationPolicy({\n      descriptor,\n      args: input.args,\n      policies: localWorkspacePolicies.policies,\n      context: {\n        workspaceId: input.workspaceId,\n      },\n    });\n\n    if (decision.kind === \"allow\") {\n      return;\n    }\n\n    if (decision.kind === \"deny\") {\n      return yield* runtimeEffectError(\"execution/workspace/authorization\", decision.reason);\n    }\n\n    if (!input.onElicitation) {\n      return yield* runtimeEffectError(\"execution/workspace/authorization\", \n          `Approval required for ${descriptor.toolPath}, but no elicitation-capable host is available`,\n        );\n    }\n\n    const interactionId =\n      typeof input.context?.callId === \"string\" &&\n      input.context.callId.length > 0\n        ? `tool_execution_gate:${input.context.callId}`\n        : `tool_execution_gate:${crypto.randomUUID()}`;\n    const response = yield* input\n      .onElicitation({\n        interactionId,\n        path: asToolPath(descriptor.toolPath),\n        sourceKey: input.tool.source.id,\n        args: input.args,\n        context: {\n          ...input.context,\n          interactionPurpose: \"tool_execution_gate\",\n          interactionReason: decision.reason,\n          invocationDescriptor: {\n            operationKind: descriptor.operationKind,\n            interaction: descriptor.interaction,\n            approvalLabel: descriptor.approvalLabel,\n            sourceId: input.tool.source.id,\n            sourceName: input.tool.source.name,\n          },\n        },\n        elicitation: {\n          mode: \"form\",\n          message: approvalMessageForInvocation(descriptor),\n          requestedSchema: approvalSchema,\n        },\n      })\n      .pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n        ),\n      );\n\n    if (response.action !== \"accept\") {\n      return yield* runtimeEffectError(\"execution/workspace/authorization\", \n          `Tool invocation not approved for ${descriptor.toolPath}`,\n        );\n    }\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/workspace/environment.ts",
    "content": "import {\n  createToolCatalogFromTools,\n  makeToolInvokerFromTools,\n} from \"@executor/codemode-core\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport type {\n  ExecutionEnvironment,\n  ResolveExecutionEnvironment,\n} from \"../state\";\nimport {\n  createCodeExecutorForRuntime,\n  resolveConfiguredExecutionRuntime,\n} from \"../runtime\";\nimport { createWorkspaceToolInvoker } from \"./tool-invoker\";\nimport {\n  RuntimeSourceAuthServiceTag,\n} from \"../../sources/source-auth-service\";\nimport {\n  RuntimeSourceCatalogStoreService,\n} from \"../../catalog/source/runtime\";\nimport { RuntimeSourceAuthMaterialService } from \"../../auth/source-auth-material\";\nimport {\n  getRuntimeLocalWorkspaceOption,\n} from \"../../local/runtime-context\";\nimport {\n  LocalToolRuntimeLoaderService,\n  type LocalToolRuntimeLoaderShape,\n  type LocalToolRuntime,\n} from \"../../local/tools\";\nimport {\n  SourceArtifactStore,\n  type SourceArtifactStoreShape,\n  WorkspaceConfigStore,\n  type WorkspaceConfigStoreShape,\n  WorkspaceStateStore,\n  type WorkspaceStateStoreShape,\n} from \"../../local/storage\";\nexport {\n  createCodeExecutorForRuntime,\n  resolveConfiguredExecutionRuntime,\n} from \"../runtime\";\n\nconst createEmptyLocalToolRuntime = (): LocalToolRuntime => ({\n  tools: {},\n  catalog: createToolCatalogFromTools({ tools: {} }),\n  toolInvoker: makeToolInvokerFromTools({ tools: {} }),\n  toolPaths: new Set<string>(),\n});\n\nexport const createWorkspaceExecutionEnvironmentResolver = (input: {\n  sourceAuthMaterialService: Effect.Effect.Success<typeof RuntimeSourceAuthMaterialService>;\n  sourceAuthService: Effect.Effect.Success<typeof RuntimeSourceAuthServiceTag>;\n  sourceCatalogStore: Effect.Effect.Success<typeof RuntimeSourceCatalogStoreService>;\n  localToolRuntimeLoader: LocalToolRuntimeLoaderShape;\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n}): ResolveExecutionEnvironment =>\n  ({ workspaceId, accountId, onElicitation }) =>\n    Effect.gen(function* () {\n      const runtimeLocalWorkspace = yield* getRuntimeLocalWorkspaceOption();\n      const loadedConfig =\n        runtimeLocalWorkspace === null\n          ? null\n          : yield* input.workspaceConfigStore.load(runtimeLocalWorkspace.context);\n      const localToolRuntime =\n        runtimeLocalWorkspace === null\n          ? createEmptyLocalToolRuntime()\n          : yield* input.localToolRuntimeLoader.load(runtimeLocalWorkspace.context);\n      const { catalog, toolInvoker } = createWorkspaceToolInvoker({\n        workspaceId,\n        accountId,\n        sourceCatalogStore: input.sourceCatalogStore,\n        workspaceConfigStore: input.workspaceConfigStore,\n        workspaceStateStore: input.workspaceStateStore,\n        sourceArtifactStore: input.sourceArtifactStore,\n        sourceAuthMaterialService: input.sourceAuthMaterialService,\n        sourceAuthService: input.sourceAuthService,\n        runtimeLocalWorkspace,\n        localToolRuntime,\n        onElicitation,\n      });\n\n      const executor = createCodeExecutorForRuntime(\n        resolveConfiguredExecutionRuntime(loadedConfig?.config),\n      );\n\n      return {\n        executor,\n        toolInvoker,\n        catalog,\n      } satisfies ExecutionEnvironment;\n    });\n\nexport class RuntimeExecutionResolverService extends Context.Tag(\n  \"#runtime/RuntimeExecutionResolverService\",\n)<\n  RuntimeExecutionResolverService,\n  ReturnType<typeof createWorkspaceExecutionEnvironmentResolver>\n>() {}\n\nexport const RuntimeExecutionResolverLive = (\n  input: {\n    executionResolver?: ResolveExecutionEnvironment;\n  } = {},\n) =>\n  input.executionResolver\n    ? Layer.succeed(RuntimeExecutionResolverService, input.executionResolver)\n      : Layer.effect(\n        RuntimeExecutionResolverService,\n        Effect.gen(function* () {\n          const sourceAuthMaterialService = yield* RuntimeSourceAuthMaterialService;\n          const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n          const sourceCatalogStore = yield* RuntimeSourceCatalogStoreService;\n          const localToolRuntimeLoader = yield* LocalToolRuntimeLoaderService;\n          const workspaceConfigStore = yield* WorkspaceConfigStore;\n          const workspaceStateStore = yield* WorkspaceStateStore;\n          const sourceArtifactStore = yield* SourceArtifactStore;\n\n          return createWorkspaceExecutionEnvironmentResolver({\n            sourceAuthService,\n            sourceAuthMaterialService,\n            sourceCatalogStore,\n            localToolRuntimeLoader,\n            workspaceConfigStore,\n            workspaceStateStore,\n            sourceArtifactStore,\n          });\n        }),\n      );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/workspace/local.ts",
    "content": "import * as Effect from \"effect/Effect\";\n\nimport {\n  provideOptionalRuntimeLocalWorkspace,\n  type RuntimeLocalWorkspaceState,\n} from \"../../local/runtime-context\";\n\nexport const provideRuntimeLocalWorkspace = <A, E, R>(\n  effect: Effect.Effect<A, E, R>,\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState | null,\n): Effect.Effect<A, E, R> =>\n  provideOptionalRuntimeLocalWorkspace(effect, runtimeLocalWorkspace);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/workspace/source-catalog.ts",
    "content": "import {\n  createToolCatalogFromEntries,\n  type ToolCatalog,\n} from \"@executor/codemode-core\";\nimport type { AccountId, Source } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  RuntimeSourceCatalogStoreService,\n  type LoadedSourceCatalogToolIndexEntry,\n  catalogToolCatalogEntry,\n} from \"../../catalog/source/runtime\";\nimport type { RuntimeLocalWorkspaceState } from \"../../local/runtime-context\";\nimport {\n  makeWorkspaceStorageLayer,\n  type SourceArtifactStoreShape,\n  type WorkspaceConfigStoreShape,\n  type WorkspaceStateStoreShape,\n  type WorkspaceStorageServices,\n} from \"../../local/storage\";\nimport { provideRuntimeLocalWorkspace } from \"./local\";\n\nconst tokenize = (value: string): string[] =>\n  value\n    .trim()\n    .toLowerCase()\n    .split(/[^a-z0-9]+/)\n    .filter(Boolean);\n\nconst LOW_SIGNAL_QUERY_TOKENS = new Set([\n  \"a\",\n  \"an\",\n  \"the\",\n  \"am\",\n  \"as\",\n  \"for\",\n  \"from\",\n  \"get\",\n  \"i\",\n  \"in\",\n  \"is\",\n  \"list\",\n  \"me\",\n  \"my\",\n  \"of\",\n  \"on\",\n  \"or\",\n  \"signed\",\n  \"to\",\n  \"who\",\n]);\n\nconst singularizeToken = (value: string): string =>\n  value.length > 3 && value.endsWith(\"s\") ? value.slice(0, -1) : value;\n\nconst tokenEquals = (left: string, right: string): boolean =>\n  left === right || singularizeToken(left) === singularizeToken(right);\n\nconst hasTokenMatch = (\n  tokens: readonly string[],\n  queryToken: string,\n): boolean => tokens.some((token) => tokenEquals(token, queryToken));\n\nconst hasSubstringMatch = (value: string, queryToken: string): boolean => {\n  if (value.includes(queryToken)) {\n    return true;\n  }\n\n  const singular = singularizeToken(queryToken);\n  return singular !== queryToken && value.includes(singular);\n};\n\nconst queryTokenWeight = (token: string): number =>\n  LOW_SIGNAL_QUERY_TOKENS.has(token) ? 0.25 : 1;\n\nexport const loadWorkspaceCatalogTools = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  accountId: AccountId;\n  sourceCatalogStore: Effect.Effect.Success<typeof RuntimeSourceCatalogStoreService>;\n  includeSchemas: boolean;\n}): Effect.Effect<\n  readonly LoadedSourceCatalogToolIndexEntry[],\n  Error,\n  WorkspaceStorageServices\n> =>\n  Effect.map(\n    input.sourceCatalogStore.loadWorkspaceSourceCatalogToolIndex({\n      workspaceId: input.workspaceId,\n      actorAccountId: input.accountId,\n      includeSchemas: input.includeSchemas,\n    }),\n    (tools) =>\n      tools.filter(\n        (tool) => tool.source.enabled && tool.source.status === \"connected\",\n      ),\n  );\n\nexport const loadWorkspaceCatalogToolByPath = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  accountId: AccountId;\n  sourceCatalogStore: Effect.Effect.Success<typeof RuntimeSourceCatalogStoreService>;\n  path: string;\n  includeSchemas: boolean;\n}): Effect.Effect<\n  LoadedSourceCatalogToolIndexEntry | null,\n  Error,\n  WorkspaceStorageServices\n> =>\n  input.sourceCatalogStore.loadWorkspaceSourceCatalogToolByPath({\n    workspaceId: input.workspaceId,\n    path: input.path,\n    actorAccountId: input.accountId,\n    includeSchemas: input.includeSchemas,\n  }).pipe(\n    Effect.map((tool) =>\n      tool && tool.source.enabled && tool.source.status === \"connected\"\n        ? tool\n        : null,\n    ),\n  );\n\nconst scoreCatalogTool = (\n  queryTokens: readonly string[],\n  tool: LoadedSourceCatalogToolIndexEntry,\n): number => {\n  const pathText = tool.path.toLowerCase();\n  const namespaceText = tool.searchNamespace.toLowerCase();\n  const toolIdText = tool.path.split(\".\").at(-1)?.toLowerCase() ?? \"\";\n  const titleText = tool.capability.surface.title?.toLowerCase() ?? \"\";\n  const descriptionText =\n    tool.capability.surface.summary?.toLowerCase()\n    ?? tool.capability.surface.description?.toLowerCase()\n    ?? \"\";\n  const templateText = [\n    tool.executable.display?.pathTemplate,\n    tool.executable.display?.operationId,\n    tool.executable.display?.leaf,\n  ]\n    .filter((part): part is string => typeof part === \"string\" && part.length > 0)\n    .join(\" \")\n    .toLowerCase();\n\n  const pathTokens = tokenize(`${tool.path} ${toolIdText}`);\n  const namespaceTokens = tokenize(tool.searchNamespace);\n  const titleTokens = tokenize(tool.capability.surface.title ?? \"\");\n  const templateTokens = tokenize(templateText);\n\n  let score = 0;\n  let structuralHits = 0;\n  let namespaceHits = 0;\n  let pathHits = 0;\n\n  for (const token of queryTokens) {\n    const weight = queryTokenWeight(token);\n\n    if (hasTokenMatch(pathTokens, token)) {\n      score += 12 * weight;\n      structuralHits += 1;\n      pathHits += 1;\n      continue;\n    }\n\n    if (hasTokenMatch(namespaceTokens, token)) {\n      score += 11 * weight;\n      structuralHits += 1;\n      namespaceHits += 1;\n      continue;\n    }\n\n    if (hasTokenMatch(titleTokens, token)) {\n      score += 9 * weight;\n      structuralHits += 1;\n      continue;\n    }\n\n    if (hasTokenMatch(templateTokens, token)) {\n      score += 8 * weight;\n      structuralHits += 1;\n      continue;\n    }\n\n    if (\n      hasSubstringMatch(pathText, token) ||\n      hasSubstringMatch(toolIdText, token)\n    ) {\n      score += 6 * weight;\n      structuralHits += 1;\n      pathHits += 1;\n      continue;\n    }\n\n    if (hasSubstringMatch(namespaceText, token)) {\n      score += 5 * weight;\n      structuralHits += 1;\n      namespaceHits += 1;\n      continue;\n    }\n\n    if (\n      hasSubstringMatch(titleText, token) ||\n      hasSubstringMatch(templateText, token)\n    ) {\n      score += 4 * weight;\n      structuralHits += 1;\n      continue;\n    }\n\n    if (hasSubstringMatch(descriptionText, token)) {\n      score += 0.5 * weight;\n    }\n  }\n\n  const strongTokens = queryTokens.filter(\n    (token) => queryTokenWeight(token) >= 1,\n  );\n  if (strongTokens.length >= 2) {\n    for (let index = 0; index < strongTokens.length - 1; index += 1) {\n      const current = strongTokens[index]!;\n      const next = strongTokens[index + 1]!;\n      const phrases = [\n        `${current}-${next}`,\n        `${current}.${next}`,\n        `${current}/${next}`,\n      ];\n\n      if (\n        phrases.some(\n          (phrase) =>\n            pathText.includes(phrase) || templateText.includes(phrase),\n        )\n      ) {\n        score += 10;\n      }\n    }\n  }\n\n  if (namespaceHits > 0 && pathHits > 0) {\n    score += 8;\n  }\n\n  if (structuralHits === 0 && score > 0) {\n    score *= 0.25;\n  }\n\n  return score;\n};\n\nexport const createWorkspaceSourceCatalog = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  accountId: AccountId;\n  sourceCatalogStore: Effect.Effect.Success<typeof RuntimeSourceCatalogStoreService>;\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState | null;\n}): ToolCatalog => {\n  const workspaceStorageLayer = makeWorkspaceStorageLayer({\n    workspaceConfigStore: input.workspaceConfigStore,\n    workspaceStateStore: input.workspaceStateStore,\n    sourceArtifactStore: input.sourceArtifactStore,\n  });\n  const provideWorkspaceStorage = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n    effect.pipe(Effect.provide(workspaceStorageLayer));\n\n  const createSharedCatalog = (includeSchemas: boolean): Effect.Effect<ToolCatalog, Error, never> =>\n    provideWorkspaceStorage(Effect.gen(function* () {\n      const catalogTools = yield* loadWorkspaceCatalogTools({\n        workspaceId: input.workspaceId,\n        accountId: input.accountId,\n        sourceCatalogStore: input.sourceCatalogStore,\n        includeSchemas,\n      });\n\n      return createToolCatalogFromEntries({\n        entries: catalogTools.map((tool) =>\n          catalogToolCatalogEntry({\n            tool,\n            score: (queryTokens) => scoreCatalogTool(queryTokens, tool),\n          }),\n        ),\n      });\n    }));\n\n  return {\n    listNamespaces: ({ limit }) =>\n      provideRuntimeLocalWorkspace(\n        Effect.flatMap(createSharedCatalog(false), (catalog) =>\n          catalog.listNamespaces({ limit }),\n        ),\n        input.runtimeLocalWorkspace,\n      ),\n\n    listTools: ({ namespace, query, limit, includeSchemas = false }) =>\n      provideRuntimeLocalWorkspace(\n        Effect.flatMap(createSharedCatalog(includeSchemas), (catalog) =>\n          catalog.listTools({\n            ...(namespace !== undefined ? { namespace } : {}),\n            ...(query !== undefined ? { query } : {}),\n            limit,\n            includeSchemas,\n          }),\n        ),\n        input.runtimeLocalWorkspace,\n      ),\n\n    getToolByPath: ({ path, includeSchemas }) =>\n      provideRuntimeLocalWorkspace(\n        Effect.flatMap(createSharedCatalog(includeSchemas), (catalog) =>\n          catalog.getToolByPath({ path, includeSchemas }),\n        ),\n        input.runtimeLocalWorkspace,\n      ),\n\n    searchTools: ({ query, namespace, limit }) =>\n      provideRuntimeLocalWorkspace(\n        Effect.flatMap(createSharedCatalog(false), (catalog) =>\n          catalog.searchTools({\n            query,\n            ...(namespace !== undefined ? { namespace } : {}),\n            limit,\n          }),\n        ),\n        input.runtimeLocalWorkspace,\n      ),\n  } satisfies ToolCatalog;\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/execution/workspace/tool-invoker.ts",
    "content": "import {\n  createSystemToolMap,\n  createToolCatalogFromTools,\n  makeToolInvokerFromTools,\n  mergeToolCatalogs,\n  mergeToolMaps,\n  type ToolCatalog,\n  type ToolInvoker,\n} from \"@executor/codemode-core\";\nimport type { AccountId, Source } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport { RuntimeSourceAuthMaterialService } from \"../../auth/source-auth-material\";\nimport { RuntimeSourceCatalogStoreService } from \"../../catalog/source/runtime\";\nimport type { RuntimeLocalWorkspaceState } from \"../../local/runtime-context\";\nimport {\n  type LocalToolRuntime,\n} from \"../../local/tools\";\nimport {\n  makeWorkspaceStorageLayer,\n  type SourceArtifactStoreShape,\n  type WorkspaceConfigStoreShape,\n  type WorkspaceStateStoreShape,\n} from \"../../local/storage\";\nimport {\n  RuntimeSourceAuthService,\n} from \"../../sources/source-auth-service\";\nimport { createExecutorToolMap } from \"../../sources/executor-tools\";\nimport { invokeIrTool } from \"../ir-execution\";\nimport {\n  authorizePersistedToolInvocation,\n  toSecretResolutionContext,\n} from \"./authorization\";\nimport { provideRuntimeLocalWorkspace } from \"./local\";\nimport {\n  createWorkspaceSourceCatalog,\n  loadWorkspaceCatalogToolByPath,\n} from \"./source-catalog\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\nexport const createWorkspaceToolInvoker = (input: {\n  workspaceId: Source[\"workspaceId\"];\n  accountId: AccountId;\n  sourceCatalogStore: Effect.Effect.Success<typeof RuntimeSourceCatalogStoreService>;\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n  sourceAuthMaterialService: Effect.Effect.Success<typeof RuntimeSourceAuthMaterialService>;\n  sourceAuthService: RuntimeSourceAuthService;\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState | null;\n  localToolRuntime: LocalToolRuntime;\n  onElicitation?: Parameters<\n    typeof makeToolInvokerFromTools\n  >[0][\"onElicitation\"];\n}): {\n  catalog: ToolCatalog;\n  toolInvoker: ToolInvoker;\n} => {\n  const workspaceStorageLayer = makeWorkspaceStorageLayer({\n    workspaceConfigStore: input.workspaceConfigStore,\n    workspaceStateStore: input.workspaceStateStore,\n    sourceArtifactStore: input.sourceArtifactStore,\n  });\n  const provideWorkspaceStorage = <A, E, R>(effect: Effect.Effect<A, E, R>) =>\n    effect.pipe(Effect.provide(workspaceStorageLayer));\n\n  const executorTools = createExecutorToolMap({\n    workspaceId: input.workspaceId,\n    accountId: input.accountId,\n    sourceAuthService: input.sourceAuthService,\n    runtimeLocalWorkspace: input.runtimeLocalWorkspace,\n  });\n  const sourceCatalog = createWorkspaceSourceCatalog({\n    workspaceId: input.workspaceId,\n    accountId: input.accountId,\n    sourceCatalogStore: input.sourceCatalogStore,\n    workspaceConfigStore: input.workspaceConfigStore,\n    workspaceStateStore: input.workspaceStateStore,\n    sourceArtifactStore: input.sourceArtifactStore,\n    runtimeLocalWorkspace: input.runtimeLocalWorkspace,\n  });\n  let catalog: ToolCatalog | null = null;\n  const systemTools = createSystemToolMap({\n    getCatalog: () => {\n      if (catalog === null) {\n        throw new Error(\"Workspace tool catalog has not been initialized\");\n      }\n\n      return catalog;\n    },\n  });\n  const authoredTools = mergeToolMaps([\n    systemTools,\n    executorTools,\n    input.localToolRuntime.tools,\n  ]);\n  const authoredCatalog = createToolCatalogFromTools({\n    tools: authoredTools,\n  });\n  catalog = mergeToolCatalogs({\n    catalogs: [authoredCatalog, sourceCatalog],\n  });\n  const authoredToolPaths = new Set(Object.keys(authoredTools));\n  const authoredInvoker = makeToolInvokerFromTools({\n    tools: authoredTools,\n    onElicitation: input.onElicitation,\n  });\n\n  const invokePersistedTool = (invocation: {\n    path: string;\n    args: unknown;\n    context?: Record<string, unknown>;\n  }) =>\n    provideRuntimeLocalWorkspace(\n      provideWorkspaceStorage(Effect.gen(function* () {\n        const catalogTool = yield* loadWorkspaceCatalogToolByPath({\n          workspaceId: input.workspaceId,\n          accountId: input.accountId,\n          sourceCatalogStore: input.sourceCatalogStore,\n          path: invocation.path,\n          includeSchemas: false,\n        });\n        if (!catalogTool) {\n          return yield* runtimeEffectError(\"execution/workspace/tool-invoker\", `Unknown tool path: ${invocation.path}`);\n        }\n\n        yield* authorizePersistedToolInvocation({\n          workspaceId: input.workspaceId,\n          tool: catalogTool,\n          args: invocation.args,\n          context: invocation.context,\n          onElicitation: input.onElicitation,\n        });\n\n        const auth = yield* input.sourceAuthMaterialService.resolve({\n          source: catalogTool.source,\n          actorAccountId: input.accountId,\n          context: toSecretResolutionContext(invocation.context),\n        });\n        return yield* invokeIrTool({\n          workspaceId: input.workspaceId,\n          accountId: input.accountId,\n          tool: catalogTool,\n          auth,\n          args: invocation.args,\n          onElicitation: input.onElicitation,\n          context: invocation.context,\n        });\n      })),\n      input.runtimeLocalWorkspace,\n    );\n\n  return {\n    catalog,\n    toolInvoker: {\n      invoke: ({ path, args, context }) =>\n        provideRuntimeLocalWorkspace(\n          authoredToolPaths.has(path)\n            ? authoredInvoker.invoke({ path, args, context })\n            : invokePersistedTool({ path, args, context }),\n          input.runtimeLocalWorkspace,\n        ),\n    },\n  };\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/fixtures/google-sheets-discovery.json",
    "content": "{\n  \"servicePath\": \"\",\n  \"id\": \"sheets:v4\",\n  \"rootUrl\": \"https://sheets.googleapis.com/\",\n  \"basePath\": \"\",\n  \"resources\": {\n    \"spreadsheets\": {\n      \"resources\": {\n        \"values\": {\n          \"methods\": {\n            \"update\": {\n              \"description\": \"Sets values in a range of a spreadsheet. The caller must specify the spreadsheet ID, range, and a valueInputOption.\",\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values/{range}\",\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values/{range}\",\n              \"parameterOrder\": [\n                \"spreadsheetId\",\n                \"range\"\n              ],\n              \"httpMethod\": \"PUT\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"parameters\": {\n                \"valueInputOption\": {\n                  \"location\": \"query\",\n                  \"description\": \"How the input data should be interpreted.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Default input value. This value must not be used.\",\n                    \"The values the user has entered will not be parsed and will be stored as-is.\",\n                    \"The values will be parsed as if the user typed them into the UI. Numbers will stay as numbers, but strings may be converted to numbers, dates, etc. following the same rules that are applied when entering text into a cell via the Google Sheets UI.\"\n                  ],\n                  \"enum\": [\n                    \"INPUT_VALUE_OPTION_UNSPECIFIED\",\n                    \"RAW\",\n                    \"USER_ENTERED\"\n                  ]\n                },\n                \"includeValuesInResponse\": {\n                  \"description\": \"Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values. If the range to write was larger than the range actually written, the response includes all values in the requested range (excluding trailing empty rows and columns).\",\n                  \"location\": \"query\",\n                  \"type\": \"boolean\"\n                },\n                \"spreadsheetId\": {\n                  \"required\": true,\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\"\n                },\n                \"responseValueRenderOption\": {\n                  \"location\": \"query\",\n                  \"enum\": [\n                    \"FORMATTED_VALUE\",\n                    \"UNFORMATTED_VALUE\",\n                    \"FORMULA\"\n                  ],\n                  \"description\": \"Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n                    \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n                    \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n                  ]\n                },\n                \"range\": {\n                  \"required\": true,\n                  \"description\": \"The [A1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell) of the values to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\"\n                },\n                \"responseDateTimeRenderOption\": {\n                  \"enum\": [\n                    \"SERIAL_NUMBER\",\n                    \"FORMATTED_STRING\"\n                  ],\n                  \"description\": \"Determines how dates, times, and durations in the response should be rendered. This is ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n                    \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n                  ],\n                  \"location\": \"query\"\n                }\n              },\n              \"request\": {\n                \"$ref\": \"ValueRange\"\n              },\n              \"response\": {\n                \"$ref\": \"UpdateValuesResponse\"\n              },\n              \"id\": \"sheets.spreadsheets.values.update\"\n            },\n            \"clear\": {\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"parameterOrder\": [\n                \"spreadsheetId\",\n                \"range\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values/{range}:clear\",\n              \"description\": \"Clears values from a spreadsheet. The caller must specify the spreadsheet ID and range. Only values are cleared -- all other properties of the cell (such as formatting, data validation, etc..) are kept.\",\n              \"id\": \"sheets.spreadsheets.values.clear\",\n              \"response\": {\n                \"$ref\": \"ClearValuesResponse\"\n              },\n              \"request\": {\n                \"$ref\": \"ClearValuesRequest\"\n              },\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                },\n                \"range\": {\n                  \"description\": \"The [A1 notation or R1C1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell) of the values to clear.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              }\n            },\n            \"batchClear\": {\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"required\": true,\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\"\n                }\n              },\n              \"request\": {\n                \"$ref\": \"BatchClearValuesRequest\"\n              },\n              \"response\": {\n                \"$ref\": \"BatchClearValuesResponse\"\n              },\n              \"id\": \"sheets.spreadsheets.values.batchClear\",\n              \"description\": \"Clears one or more ranges of values from a spreadsheet. The caller must specify the spreadsheet ID and one or more ranges. Only values are cleared -- all other properties of the cell (such as formatting and data validation) are kept.\",\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values:batchClear\",\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ]\n            },\n            \"batchGetByDataFilter\": {\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n              \"description\": \"Returns one or more ranges of values that match the specified data filters. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata). The caller must specify the spreadsheet ID and one or more DataFilters. Ranges that match any of the data filters in the request will be returned.\",\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values:batchGetByDataFilter\",\n              \"request\": {\n                \"$ref\": \"BatchGetValuesByDataFilterRequest\"\n              },\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to retrieve data from.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              },\n              \"id\": \"sheets.spreadsheets.values.batchGetByDataFilter\",\n              \"response\": {\n                \"$ref\": \"BatchGetValuesByDataFilterResponse\"\n              }\n            },\n            \"batchUpdateByDataFilter\": {\n              \"id\": \"sheets.spreadsheets.values.batchUpdateByDataFilter\",\n              \"response\": {\n                \"$ref\": \"BatchUpdateValuesByDataFilterResponse\"\n              },\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"required\": true,\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\"\n                }\n              },\n              \"request\": {\n                \"$ref\": \"BatchUpdateValuesByDataFilterRequest\"\n              },\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values:batchUpdateByDataFilter\",\n              \"description\": \"Sets values in one or more ranges of a spreadsheet. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata). The caller must specify the spreadsheet ID, a valueInputOption, and one or more DataFilterValueRanges.\"\n            },\n            \"append\": {\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n              \"parameterOrder\": [\n                \"spreadsheetId\",\n                \"range\"\n              ],\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values/{range}:append\",\n              \"description\": \"Appends values to a spreadsheet. The input range is used to search for existing data and find a \\\"table\\\" within that range. Values will be appended to the next row of the table, starting with the first column of the table. See the [guide](https://developers.google.com/workspace/sheets/api/guides/values#appending_values) and [sample code](https://developers.google.com/workspace/sheets/api/samples/writing#append_values) for specific details of how tables are detected and data is appended. The caller must specify the spreadsheet ID, range, and a valueInputOption. The `valueInputOption` only controls how the input data will be added to the sheet (column-wise or row-wise), it does not influence what cell the data starts being written to.\",\n              \"id\": \"sheets.spreadsheets.values.append\",\n              \"response\": {\n                \"$ref\": \"AppendValuesResponse\"\n              },\n              \"parameters\": {\n                \"insertDataOption\": {\n                  \"enum\": [\n                    \"OVERWRITE\",\n                    \"INSERT_ROWS\"\n                  ],\n                  \"description\": \"How the input data should be inserted.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"The new data overwrites existing data in the areas it is written. (Note: adding data to the end of the sheet will still insert new rows or columns so the data can be written.)\",\n                    \"Rows are inserted for the new data.\"\n                  ],\n                  \"location\": \"query\"\n                },\n                \"responseValueRenderOption\": {\n                  \"description\": \"Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n                    \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n                    \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n                  ],\n                  \"enum\": [\n                    \"FORMATTED_VALUE\",\n                    \"UNFORMATTED_VALUE\",\n                    \"FORMULA\"\n                  ],\n                  \"location\": \"query\"\n                },\n                \"range\": {\n                  \"description\": \"The [A1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell) of a range to search for a logical table of data. Values are appended after the last row of the table.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                },\n                \"responseDateTimeRenderOption\": {\n                  \"location\": \"query\",\n                  \"description\": \"Determines how dates, times, and durations in the response should be rendered. This is ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n                    \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n                  ],\n                  \"enum\": [\n                    \"SERIAL_NUMBER\",\n                    \"FORMATTED_STRING\"\n                  ]\n                },\n                \"valueInputOption\": {\n                  \"description\": \"How the input data should be interpreted.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Default input value. This value must not be used.\",\n                    \"The values the user has entered will not be parsed and will be stored as-is.\",\n                    \"The values will be parsed as if the user typed them into the UI. Numbers will stay as numbers, but strings may be converted to numbers, dates, etc. following the same rules that are applied when entering text into a cell via the Google Sheets UI.\"\n                  ],\n                  \"enum\": [\n                    \"INPUT_VALUE_OPTION_UNSPECIFIED\",\n                    \"RAW\",\n                    \"USER_ENTERED\"\n                  ],\n                  \"location\": \"query\"\n                },\n                \"includeValuesInResponse\": {\n                  \"description\": \"Determines if the update response should include the values of the cells that were appended. By default, responses do not include the updated values.\",\n                  \"location\": \"query\",\n                  \"type\": \"boolean\"\n                },\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              },\n              \"request\": {\n                \"$ref\": \"ValueRange\"\n              }\n            },\n            \"get\": {\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values/{range}\",\n              \"description\": \"Returns a range of values from a spreadsheet. The caller must specify the spreadsheet ID and a range.\",\n              \"httpMethod\": \"GET\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/drive.readonly\",\n                \"https://www.googleapis.com/auth/spreadsheets\",\n                \"https://www.googleapis.com/auth/spreadsheets.readonly\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values/{range}\",\n              \"parameterOrder\": [\n                \"spreadsheetId\",\n                \"range\"\n              ],\n              \"parameters\": {\n                \"dateTimeRenderOption\": {\n                  \"description\": \"How dates, times, and durations should be represented in the output. This is ignored if value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n                    \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n                  ],\n                  \"enum\": [\n                    \"SERIAL_NUMBER\",\n                    \"FORMATTED_STRING\"\n                  ],\n                  \"location\": \"query\"\n                },\n                \"majorDimension\": {\n                  \"enum\": [\n                    \"DIMENSION_UNSPECIFIED\",\n                    \"ROWS\",\n                    \"COLUMNS\"\n                  ],\n                  \"description\": \"The major dimension that results should use. For example, if the spreadsheet data in Sheet1 is: `A1=1,B1=2,A2=3,B2=4`, then requesting `range=Sheet1!A1:B2?majorDimension=ROWS` returns `[[1,2],[3,4]]`, whereas requesting `range=Sheet1!A1:B2?majorDimension=COLUMNS` returns `[[1,3],[2,4]]`.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"The default value, do not use.\",\n                    \"Operates on the rows of a sheet.\",\n                    \"Operates on the columns of a sheet.\"\n                  ],\n                  \"location\": \"query\"\n                },\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to retrieve data from.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                },\n                \"valueRenderOption\": {\n                  \"description\": \"How values should be represented in the output. The default render option is FORMATTED_VALUE.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n                    \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n                    \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n                  ],\n                  \"enum\": [\n                    \"FORMATTED_VALUE\",\n                    \"UNFORMATTED_VALUE\",\n                    \"FORMULA\"\n                  ],\n                  \"location\": \"query\"\n                },\n                \"range\": {\n                  \"description\": \"The [A1 notation or R1C1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell) of the range to retrieve values from.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              },\n              \"id\": \"sheets.spreadsheets.values.get\",\n              \"response\": {\n                \"$ref\": \"ValueRange\"\n              }\n            },\n            \"batchGet\": {\n              \"response\": {\n                \"$ref\": \"BatchGetValuesResponse\"\n              },\n              \"id\": \"sheets.spreadsheets.values.batchGet\",\n              \"parameters\": {\n                \"majorDimension\": {\n                  \"location\": \"query\",\n                  \"enum\": [\n                    \"DIMENSION_UNSPECIFIED\",\n                    \"ROWS\",\n                    \"COLUMNS\"\n                  ],\n                  \"description\": \"The major dimension that results should use. For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting `ranges=[\\\"A1:B2\\\"],majorDimension=ROWS` returns `[[1,2],[3,4]]`, whereas requesting `ranges=[\\\"A1:B2\\\"],majorDimension=COLUMNS` returns `[[1,3],[2,4]]`.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"The default value, do not use.\",\n                    \"Operates on the rows of a sheet.\",\n                    \"Operates on the columns of a sheet.\"\n                  ]\n                },\n                \"spreadsheetId\": {\n                  \"required\": true,\n                  \"description\": \"The ID of the spreadsheet to retrieve data from.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\"\n                },\n                \"valueRenderOption\": {\n                  \"location\": \"query\",\n                  \"description\": \"How values should be represented in the output. The default render option is ValueRenderOption.FORMATTED_VALUE.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n                    \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n                    \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n                  ],\n                  \"enum\": [\n                    \"FORMATTED_VALUE\",\n                    \"UNFORMATTED_VALUE\",\n                    \"FORMULA\"\n                  ]\n                },\n                \"ranges\": {\n                  \"description\": \"The [A1 notation or R1C1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell) of the range to retrieve values from.\",\n                  \"location\": \"query\",\n                  \"repeated\": true,\n                  \"type\": \"string\"\n                },\n                \"dateTimeRenderOption\": {\n                  \"enum\": [\n                    \"SERIAL_NUMBER\",\n                    \"FORMATTED_STRING\"\n                  ],\n                  \"description\": \"How dates, times, and durations should be represented in the output. This is ignored if value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n                  \"type\": \"string\",\n                  \"enumDescriptions\": [\n                    \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n                    \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n                  ],\n                  \"location\": \"query\"\n                }\n              },\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values:batchGet\",\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"httpMethod\": \"GET\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/drive.readonly\",\n                \"https://www.googleapis.com/auth/spreadsheets\",\n                \"https://www.googleapis.com/auth/spreadsheets.readonly\"\n              ],\n              \"description\": \"Returns one or more ranges of values from a spreadsheet. The caller must specify the spreadsheet ID and one or more ranges.\",\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values:batchGet\"\n            },\n            \"batchUpdate\": {\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values:batchUpdate\",\n              \"description\": \"Sets values in one or more ranges of a spreadsheet. The caller must specify the spreadsheet ID, a valueInputOption, and one or more ValueRanges.\",\n              \"id\": \"sheets.spreadsheets.values.batchUpdate\",\n              \"response\": {\n                \"$ref\": \"BatchUpdateValuesResponse\"\n              },\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              },\n              \"request\": {\n                \"$ref\": \"BatchUpdateValuesRequest\"\n              }\n            },\n            \"batchClearByDataFilter\": {\n              \"id\": \"sheets.spreadsheets.values.batchClearByDataFilter\",\n              \"response\": {\n                \"$ref\": \"BatchClearValuesByDataFilterResponse\"\n              },\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to update.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              },\n              \"request\": {\n                \"$ref\": \"BatchClearValuesByDataFilterRequest\"\n              },\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/values:batchClearByDataFilter\",\n              \"description\": \"Clears one or more ranges of values from a spreadsheet. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata). The caller must specify the spreadsheet ID and one or more DataFilters. Ranges matching any of the specified data filters will be cleared. Only values are cleared -- all other properties of the cell (such as formatting, data validation, etc.) are kept.\"\n            }\n          }\n        },\n        \"developerMetadata\": {\n          \"methods\": {\n            \"get\": {\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n              \"description\": \"Returns the developer metadata with the specified ID. The caller must specify the spreadsheet ID and the developer metadata's unique metadataId. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata).\",\n              \"httpMethod\": \"GET\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"parameterOrder\": [\n                \"spreadsheetId\",\n                \"metadataId\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/developerMetadata/{metadataId}\",\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to retrieve metadata from.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                },\n                \"metadataId\": {\n                  \"description\": \"The ID of the developer metadata to retrieve.\",\n                  \"type\": \"integer\",\n                  \"location\": \"path\",\n                  \"required\": true,\n                  \"format\": \"int32\"\n                }\n              },\n              \"id\": \"sheets.spreadsheets.developerMetadata.get\",\n              \"response\": {\n                \"$ref\": \"DeveloperMetadata\"\n              }\n            },\n            \"search\": {\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n              \"description\": \"Returns all developer metadata matching the specified DataFilter. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata). If the provided DataFilter represents a DeveloperMetadataLookup object, this will return all DeveloperMetadata entries selected by it. If the DataFilter represents a location in a spreadsheet, this will return all developer metadata associated with locations intersecting that region.\",\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/developerMetadata:search\",\n              \"parameterOrder\": [\n                \"spreadsheetId\"\n              ],\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet to retrieve metadata from.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                }\n              },\n              \"request\": {\n                \"$ref\": \"SearchDeveloperMetadataRequest\"\n              },\n              \"id\": \"sheets.spreadsheets.developerMetadata.search\",\n              \"response\": {\n                \"$ref\": \"SearchDeveloperMetadataResponse\"\n              }\n            }\n          }\n        },\n        \"sheets\": {\n          \"methods\": {\n            \"copyTo\": {\n              \"response\": {\n                \"$ref\": \"SheetProperties\"\n              },\n              \"id\": \"sheets.spreadsheets.sheets.copyTo\",\n              \"request\": {\n                \"$ref\": \"CopySheetToAnotherSpreadsheetRequest\"\n              },\n              \"parameters\": {\n                \"spreadsheetId\": {\n                  \"description\": \"The ID of the spreadsheet containing the sheet to copy.\",\n                  \"location\": \"path\",\n                  \"type\": \"string\",\n                  \"required\": true\n                },\n                \"sheetId\": {\n                  \"location\": \"path\",\n                  \"required\": true,\n                  \"format\": \"int32\",\n                  \"description\": \"The ID of the sheet to copy.\",\n                  \"type\": \"integer\"\n                }\n              },\n              \"parameterOrder\": [\n                \"spreadsheetId\",\n                \"sheetId\"\n              ],\n              \"path\": \"v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\",\n              \"httpMethod\": \"POST\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/drive\",\n                \"https://www.googleapis.com/auth/drive.file\",\n                \"https://www.googleapis.com/auth/spreadsheets\"\n              ],\n              \"description\": \"Copies a single sheet from a spreadsheet to another spreadsheet. Returns the properties of the newly created sheet.\",\n              \"flatPath\": \"v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo\"\n            }\n          }\n        }\n      },\n      \"methods\": {\n        \"get\": {\n          \"id\": \"sheets.spreadsheets.get\",\n          \"response\": {\n            \"$ref\": \"Spreadsheet\"\n          },\n          \"parameters\": {\n            \"ranges\": {\n              \"description\": \"The ranges to retrieve from the spreadsheet.\",\n              \"location\": \"query\",\n              \"repeated\": true,\n              \"type\": \"string\"\n            },\n            \"includeGridData\": {\n              \"description\": \"True if grid data should be returned. This parameter is ignored if a field mask was set in the request.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            },\n            \"spreadsheetId\": {\n              \"description\": \"The spreadsheet to request.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            },\n            \"excludeTablesInBandedRanges\": {\n              \"description\": \"True if tables should be excluded in the banded ranges. False if not set.\",\n              \"location\": \"query\",\n              \"type\": \"boolean\"\n            }\n          },\n          \"httpMethod\": \"GET\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/drive\",\n            \"https://www.googleapis.com/auth/drive.file\",\n            \"https://www.googleapis.com/auth/drive.readonly\",\n            \"https://www.googleapis.com/auth/spreadsheets\",\n            \"https://www.googleapis.com/auth/spreadsheets.readonly\"\n          ],\n          \"parameterOrder\": [\n            \"spreadsheetId\"\n          ],\n          \"path\": \"v4/spreadsheets/{spreadsheetId}\",\n          \"flatPath\": \"v4/spreadsheets/{spreadsheetId}\",\n          \"description\": \"Returns the spreadsheet at the given ID. The caller must specify the spreadsheet ID. By default, data within grids is not returned. You can include grid data in one of 2 ways: * Specify a [field mask](https://developers.google.com/workspace/sheets/api/guides/field-masks) listing your desired fields using the `fields` URL parameter in HTTP * Set the includeGridData URL parameter to true. If a field mask is set, the `includeGridData` parameter is ignored For large spreadsheets, as a best practice, retrieve only the specific spreadsheet fields that you want. To retrieve only subsets of spreadsheet data, use the ranges URL parameter. Ranges are specified using [A1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell). You can define a single cell (for example, `A1`) or multiple cells (for example, `A1:D5`). You can also get cells from other sheets within the same spreadsheet (for example, `Sheet2!A1:C4`) or retrieve multiple ranges at once (for example, `?ranges=A1:D5&ranges=Sheet2!A1:C4`). Limiting the range returns only the portions of the spreadsheet that intersect the requested ranges.\"\n        },\n        \"batchUpdate\": {\n          \"parameterOrder\": [\n            \"spreadsheetId\"\n          ],\n          \"path\": \"v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n          \"httpMethod\": \"POST\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/drive\",\n            \"https://www.googleapis.com/auth/drive.file\",\n            \"https://www.googleapis.com/auth/spreadsheets\"\n          ],\n          \"description\": \"Applies one or more updates to the spreadsheet. Each request is validated before being applied. If any request is not valid then the entire request will fail and nothing will be applied. Some requests have replies to give you some information about how they are applied. The replies will mirror the requests. For example, if you applied 4 updates and the 3rd one had a reply, then the response will have 2 empty replies, the actual reply, and another empty reply, in that order. Due to the collaborative nature of spreadsheets, it is not guaranteed that the spreadsheet will reflect exactly your changes after this completes, however it is guaranteed that the updates in the request will be applied together atomically. Your changes may be altered with respect to collaborator changes. If there are no collaborators, the spreadsheet should reflect your changes.\",\n          \"flatPath\": \"v4/spreadsheets/{spreadsheetId}:batchUpdate\",\n          \"response\": {\n            \"$ref\": \"BatchUpdateSpreadsheetResponse\"\n          },\n          \"id\": \"sheets.spreadsheets.batchUpdate\",\n          \"request\": {\n            \"$ref\": \"BatchUpdateSpreadsheetRequest\"\n          },\n          \"parameters\": {\n            \"spreadsheetId\": {\n              \"description\": \"The spreadsheet to apply the updates to.\",\n              \"location\": \"path\",\n              \"type\": \"string\",\n              \"required\": true\n            }\n          }\n        },\n        \"getByDataFilter\": {\n          \"description\": \"Returns the spreadsheet at the given ID. The caller must specify the spreadsheet ID. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata). This method differs from GetSpreadsheet in that it allows selecting which subsets of spreadsheet data to return by specifying a dataFilters parameter. Multiple DataFilters can be specified. Specifying one or more data filters returns the portions of the spreadsheet that intersect ranges matched by any of the filters. By default, data within grids is not returned. You can include grid data in one of two ways: * Specify a [field mask](https://developers.google.com/workspace/sheets/api/guides/field-masks) listing your desired fields using the `fields` URL parameter in HTTP. * Set the includeGridData parameter to `true`. If a field mask is set, the `includeGridData` parameter is ignored. For large spreadsheets, as a best practice, retrieve only the specific spreadsheet fields that you want.\",\n          \"flatPath\": \"v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n          \"parameterOrder\": [\n            \"spreadsheetId\"\n          ],\n          \"path\": \"v4/spreadsheets/{spreadsheetId}:getByDataFilter\",\n          \"httpMethod\": \"POST\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/drive\",\n            \"https://www.googleapis.com/auth/drive.file\",\n            \"https://www.googleapis.com/auth/spreadsheets\"\n          ],\n          \"request\": {\n            \"$ref\": \"GetSpreadsheetByDataFilterRequest\"\n          },\n          \"parameters\": {\n            \"spreadsheetId\": {\n              \"required\": true,\n              \"description\": \"The spreadsheet to request.\",\n              \"location\": \"path\",\n              \"type\": \"string\"\n            }\n          },\n          \"response\": {\n            \"$ref\": \"Spreadsheet\"\n          },\n          \"id\": \"sheets.spreadsheets.getByDataFilter\"\n        },\n        \"create\": {\n          \"parameterOrder\": [],\n          \"path\": \"v4/spreadsheets\",\n          \"httpMethod\": \"POST\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/drive\",\n            \"https://www.googleapis.com/auth/drive.file\",\n            \"https://www.googleapis.com/auth/spreadsheets\"\n          ],\n          \"description\": \"Creates a spreadsheet, returning the newly created spreadsheet.\",\n          \"flatPath\": \"v4/spreadsheets\",\n          \"response\": {\n            \"$ref\": \"Spreadsheet\"\n          },\n          \"id\": \"sheets.spreadsheets.create\",\n          \"request\": {\n            \"$ref\": \"Spreadsheet\"\n          },\n          \"parameters\": {}\n        }\n      }\n    }\n  },\n  \"ownerName\": \"Google\",\n  \"kind\": \"discovery#restDescription\",\n  \"discoveryVersion\": \"v1\",\n  \"documentationLink\": \"https://developers.google.com/workspace/sheets/\",\n  \"version\": \"v4\",\n  \"schemas\": {\n    \"DuplicateFilterViewRequest\": {\n      \"id\": \"DuplicateFilterViewRequest\",\n      \"description\": \"Duplicates a particular filter view.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filterId\": {\n          \"description\": \"The ID of the filter being duplicated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"RandomizeRangeRequest\": {\n      \"id\": \"RandomizeRangeRequest\",\n      \"description\": \"Randomizes the order of the rows in a range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range to randomize.\",\n          \"$ref\": \"GridRange\"\n        }\n      }\n    },\n    \"DataSourceSheetDimensionRange\": {\n      \"description\": \"A range along a single dimension on a DATA_SOURCE sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the data source sheet the range is on.\",\n          \"type\": \"integer\"\n        },\n        \"columnReferences\": {\n          \"items\": {\n            \"$ref\": \"DataSourceColumnReference\"\n          },\n          \"description\": \"The columns on the data source sheet.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"DataSourceSheetDimensionRange\"\n    },\n    \"FilterSpec\": {\n      \"id\": \"FilterSpec\",\n      \"description\": \"The filter criteria associated with a specific column.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceColumnReference\": {\n          \"description\": \"Reference to a data source column.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"columnIndex\": {\n          \"description\": \"The zero-based column index.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"filterCriteria\": {\n          \"description\": \"The criteria for the column.\",\n          \"$ref\": \"FilterCriteria\"\n        }\n      }\n    },\n    \"TextFormatRun\": {\n      \"description\": \"A run of a text format. The format of this run continues until the start index of the next run. When updating, all fields must be set.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"startIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based character index where this run starts, in UTF-16 code units.\",\n          \"type\": \"integer\"\n        },\n        \"format\": {\n          \"description\": \"The format of this run. Absent values inherit the cell's format.\",\n          \"$ref\": \"TextFormat\"\n        }\n      },\n      \"id\": \"TextFormatRun\"\n    },\n    \"IterativeCalculationSettings\": {\n      \"id\": \"IterativeCalculationSettings\",\n      \"description\": \"Settings to control how circular dependencies are resolved with iterative calculation.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"convergenceThreshold\": {\n          \"format\": \"double\",\n          \"description\": \"When iterative calculation is enabled and successive results differ by less than this threshold value, the calculation rounds stop.\",\n          \"type\": \"number\"\n        },\n        \"maxIterations\": {\n          \"format\": \"int32\",\n          \"description\": \"When iterative calculation is enabled, the maximum number of calculation rounds to perform.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"UpdateDeveloperMetadataResponse\": {\n      \"id\": \"UpdateDeveloperMetadataResponse\",\n      \"description\": \"The response from updating developer metadata.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"developerMetadata\": {\n          \"items\": {\n            \"$ref\": \"DeveloperMetadata\"\n          },\n          \"description\": \"The updated developer metadata.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"SearchDeveloperMetadataResponse\": {\n      \"id\": \"SearchDeveloperMetadataResponse\",\n      \"description\": \"A reply to a developer metadata search request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"matchedDeveloperMetadata\": {\n          \"items\": {\n            \"$ref\": \"MatchedDeveloperMetadata\"\n          },\n          \"description\": \"The metadata matching the criteria of the search request.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"DimensionGroup\": {\n      \"id\": \"DimensionGroup\",\n      \"description\": \"A group over an interval of rows or columns on a sheet, which can contain or be contained within other groups. A group can be collapsed or expanded as a unit on the sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range over which this group exists.\",\n          \"$ref\": \"DimensionRange\"\n        },\n        \"depth\": {\n          \"format\": \"int32\",\n          \"description\": \"The depth of the group, representing how many groups have a range that wholly contains the range of this group.\",\n          \"type\": \"integer\"\n        },\n        \"collapsed\": {\n          \"description\": \"This field is true if this group is collapsed. A collapsed group remains collapsed if an overlapping group at a shallower depth is expanded. A true value does not imply that all dimensions within the group are hidden, since a dimension's visibility can change independently from this group property. However, when this property is updated, all dimensions within it are set to hidden if this field is true, or set to visible if this field is false.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"AddDimensionGroupRequest\": {\n      \"description\": \"Creates a group over the specified range. If the requested range is a superset of the range of an existing group G, then the depth of G is incremented and this new group G' has the depth of that group. For example, a group [C:D, depth 1] + [B:E] results in groups [B:E, depth 1] and [C:D, depth 2]. If the requested range is a subset of the range of an existing group G, then the depth of the new group G' becomes one greater than the depth of G. For example, a group [B:E, depth 1] + [C:D] results in groups [B:E, depth 1] and [C:D, depth 2]. If the requested range starts before and ends within, or starts within and ends after, the range of an existing group G, then the range of the existing group G becomes the union of the ranges, and the new group G' has depth one greater than the depth of G and range as the intersection of the ranges. For example, a group [B:D, depth 1] + [C:E] results in groups [B:E, depth 1] and [C:D, depth 2].\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range over which to create a group.\",\n          \"$ref\": \"DimensionRange\"\n        }\n      },\n      \"id\": \"AddDimensionGroupRequest\"\n    },\n    \"CancelDataSourceRefreshResponse\": {\n      \"id\": \"CancelDataSourceRefreshResponse\",\n      \"description\": \"The response from cancelling one or multiple data source object refreshes.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"statuses\": {\n          \"description\": \"The cancellation statuses of refreshes of all data source objects specified in the request. If is_all is specified, the field contains only those in failure status. Refreshing and canceling refresh the same data source object is also not allowed in the same `batchUpdate`.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"CancelDataSourceRefreshStatus\"\n          }\n        }\n      }\n    },\n    \"BatchGetValuesResponse\": {\n      \"description\": \"The response when retrieving more than one range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The ID of the spreadsheet the data was retrieved from.\",\n          \"type\": \"string\"\n        },\n        \"valueRanges\": {\n          \"items\": {\n            \"$ref\": \"ValueRange\"\n          },\n          \"description\": \"The requested values. The order of the ValueRanges is the same as the order of the requested ranges.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"BatchGetValuesResponse\"\n    },\n    \"RefreshDataSourceObjectExecutionStatus\": {\n      \"id\": \"RefreshDataSourceObjectExecutionStatus\",\n      \"description\": \"The execution status of refreshing one data source object.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"reference\": {\n          \"description\": \"Reference to a data source object being refreshed.\",\n          \"$ref\": \"DataSourceObjectReference\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"The data execution status.\",\n          \"$ref\": \"DataExecutionStatus\"\n        }\n      }\n    },\n    \"DimensionRange\": {\n      \"id\": \"DimensionRange\",\n      \"description\": \"A range along a single dimension on a sheet. All indexes are zero-based. Indexes are half open: the start index is inclusive and the end index is exclusive. Missing indexes indicate the range is unbounded on that side.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimension\": {\n          \"description\": \"The dimension of the span.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ],\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ]\n        },\n        \"endIndex\": {\n          \"description\": \"The end (exclusive) of the span, or not set if unbounded.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"startIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The start (inclusive) of the span, or not set if unbounded.\",\n          \"type\": \"integer\"\n        },\n        \"sheetId\": {\n          \"description\": \"The sheet this span is on.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"InsertDimensionRequest\": {\n      \"id\": \"InsertDimensionRequest\",\n      \"description\": \"Inserts rows or columns in a sheet at a particular index.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The dimensions to insert. Both the start and end indexes must be bounded.\",\n          \"$ref\": \"DimensionRange\"\n        },\n        \"inheritFromBefore\": {\n          \"description\": \"Whether dimension properties should be extended from the dimensions before or after the newly inserted dimensions. True to inherit from the dimensions before (in which case the start index must be greater than 0), and false to inherit from the dimensions after. For example, if row index 0 has red background and row index 1 has a green background, then inserting 2 rows at index 1 can inherit either the green or red background. If `inheritFromBefore` is true, the two new rows will be red (because the row before the insertion point was red), whereas if `inheritFromBefore` is false, the two new rows will be green (because the row after the insertion point was green).\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"AddDimensionGroupResponse\": {\n      \"id\": \"AddDimensionGroupResponse\",\n      \"description\": \"The result of adding a group.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimensionGroups\": {\n          \"items\": {\n            \"$ref\": \"DimensionGroup\"\n          },\n          \"description\": \"All groups of a dimension after adding a group to that dimension.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"DataExecutionStatus\": {\n      \"description\": \"The data execution status. A data execution is created to sync a data source object with the latest data from a DataSource. It is usually scheduled to run at background, you can check its state to tell if an execution completes There are several scenarios where a data execution is triggered to run: * Adding a data source creates an associated data source sheet as well as a data execution to sync the data from the data source to the sheet. * Updating a data source creates a data execution to refresh the associated data source sheet similarly. * You can send refresh request to explicitly refresh one or multiple data source objects.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"errorCode\": {\n          \"enum\": [\n            \"DATA_EXECUTION_ERROR_CODE_UNSPECIFIED\",\n            \"TIMED_OUT\",\n            \"TOO_MANY_ROWS\",\n            \"TOO_MANY_COLUMNS\",\n            \"TOO_MANY_CELLS\",\n            \"ENGINE\",\n            \"PARAMETER_INVALID\",\n            \"UNSUPPORTED_DATA_TYPE\",\n            \"DUPLICATE_COLUMN_NAMES\",\n            \"INTERRUPTED\",\n            \"CONCURRENT_QUERY\",\n            \"OTHER\",\n            \"TOO_MANY_CHARS_PER_CELL\",\n            \"DATA_NOT_FOUND\",\n            \"PERMISSION_DENIED\",\n            \"MISSING_COLUMN_ALIAS\",\n            \"OBJECT_NOT_FOUND\",\n            \"OBJECT_IN_ERROR_STATE\",\n            \"OBJECT_SPEC_INVALID\",\n            \"DATA_EXECUTION_CANCELLED\"\n          ],\n          \"description\": \"The error code.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The data execution timed out.\",\n            \"The data execution returns more rows than the limit.\",\n            \"The data execution returns more columns than the limit.\",\n            \"The data execution returns more cells than the limit.\",\n            \"Error is received from the backend data execution engine (e.g. BigQuery). Check error_message for details.\",\n            \"One or some of the provided data source parameters are invalid.\",\n            \"The data execution returns an unsupported data type.\",\n            \"The data execution returns duplicate column names or aliases.\",\n            \"The data execution is interrupted. Please refresh later.\",\n            \"The data execution is currently in progress, can not be refreshed until it completes.\",\n            \"Other errors.\",\n            \"The data execution returns values that exceed the maximum characters allowed in a single cell.\",\n            \"The database referenced by the data source is not found. */\",\n            \"The user does not have access to the database referenced by the data source.\",\n            \"The data execution returns columns with missing aliases.\",\n            \"The data source object does not exist.\",\n            \"The data source object is currently in error state. To force refresh, set force in RefreshDataSourceRequest.\",\n            \"The data source object specification is invalid.\",\n            \"The data execution has been cancelled.\"\n          ]\n        },\n        \"state\": {\n          \"description\": \"The state of the data execution.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The data execution has not started.\",\n            \"The data execution has started and is running.\",\n            \"The data execution is currently being cancelled.\",\n            \"The data execution has completed successfully.\",\n            \"The data execution has completed with errors.\"\n          ],\n          \"enum\": [\n            \"DATA_EXECUTION_STATE_UNSPECIFIED\",\n            \"NOT_STARTED\",\n            \"RUNNING\",\n            \"CANCELLING\",\n            \"SUCCEEDED\",\n            \"FAILED\"\n          ]\n        },\n        \"errorMessage\": {\n          \"description\": \"The error message, which may be empty.\",\n          \"type\": \"string\"\n        },\n        \"lastRefreshTime\": {\n          \"format\": \"google-datetime\",\n          \"description\": \"Gets the time the data last successfully refreshed.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"DataExecutionStatus\"\n    },\n    \"HistogramSeries\": {\n      \"id\": \"HistogramSeries\",\n      \"description\": \"A histogram series containing the series color and data.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"description\": \"The data for this histogram series.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"barColor\": {\n          \"description\": \"The color of the column representing this series in each bucket. This field is optional. Deprecated: Use bar_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"barColorStyle\": {\n          \"description\": \"The color of the column representing this series in each bucket. This field is optional. If bar_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      }\n    },\n    \"ExtendedValue\": {\n      \"id\": \"ExtendedValue\",\n      \"description\": \"The kinds of value that a cell in a spreadsheet can have.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"numberValue\": {\n          \"format\": \"double\",\n          \"description\": \"Represents a double value. Note: Dates, Times and DateTimes are represented as doubles in SERIAL_NUMBER format.\",\n          \"type\": \"number\"\n        },\n        \"stringValue\": {\n          \"description\": \"Represents a string value. Leading single quotes are not included. For example, if the user typed `'123` into the UI, this would be represented as a `stringValue` of `\\\"123\\\"`.\",\n          \"type\": \"string\"\n        },\n        \"errorValue\": {\n          \"description\": \"Represents an error. This field is read-only.\",\n          \"$ref\": \"ErrorValue\"\n        },\n        \"formulaValue\": {\n          \"description\": \"Represents a formula.\",\n          \"type\": \"string\"\n        },\n        \"boolValue\": {\n          \"description\": \"Represents a boolean value.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"DeleteRangeRequest\": {\n      \"description\": \"Deletes a range of cells, shifting other cells into the deleted area.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range of cells to delete.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"shiftDimension\": {\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ],\n          \"description\": \"The dimension from which deleted cells will be replaced with. If ROWS, existing cells will be shifted upward to replace the deleted cells. If COLUMNS, existing cells will be shifted left to replace the deleted cells.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ]\n        }\n      },\n      \"id\": \"DeleteRangeRequest\"\n    },\n    \"ConditionValue\": {\n      \"id\": \"ConditionValue\",\n      \"description\": \"The value of the condition.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"userEnteredValue\": {\n          \"description\": \"A value the condition is based on. The value is parsed as if the user typed into a cell. Formulas are supported (and must begin with an `=` or a '+').\",\n          \"type\": \"string\"\n        },\n        \"relativeDate\": {\n          \"enum\": [\n            \"RELATIVE_DATE_UNSPECIFIED\",\n            \"PAST_YEAR\",\n            \"PAST_MONTH\",\n            \"PAST_WEEK\",\n            \"YESTERDAY\",\n            \"TODAY\",\n            \"TOMORROW\"\n          ],\n          \"description\": \"A relative date (based on the current date). Valid only if the type is DATE_BEFORE, DATE_AFTER, DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER. Relative dates are not supported in data validation. They are supported only in conditional formatting and conditional filters.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The value is one year before today.\",\n            \"The value is one month before today.\",\n            \"The value is one week before today.\",\n            \"The value is yesterday.\",\n            \"The value is today.\",\n            \"The value is tomorrow.\"\n          ]\n        }\n      }\n    },\n    \"BasicFilter\": {\n      \"id\": \"BasicFilter\",\n      \"description\": \"The default filter associated with a sheet. For more information, see [Manage data visibility with filters](https://developers.google.com/workspace/sheets/api/guides/filters).\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range the filter covers.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"sortSpecs\": {\n          \"description\": \"The sort order per column. Later specifications are used when values are equal in the earlier specifications.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"SortSpec\"\n          }\n        },\n        \"criteria\": {\n          \"description\": \"The criteria for showing/hiding values per column. The map's key is the column index, and the value is the criteria for that column. This field is deprecated in favor of filter_specs.\",\n          \"deprecated\": true,\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"FilterCriteria\"\n          }\n        },\n        \"filterSpecs\": {\n          \"items\": {\n            \"$ref\": \"FilterSpec\"\n          },\n          \"description\": \"The filter criteria per column. Both criteria and filter_specs are populated in responses. If both fields are specified in an update request, this field takes precedence.\",\n          \"type\": \"array\"\n        },\n        \"tableId\": {\n          \"description\": \"The table this filter is backed by, if any. When writing, only one of range or table_id may be set.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"DeleteSheetRequest\": {\n      \"id\": \"DeleteSheetRequest\",\n      \"description\": \"Deletes the requested sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the sheet to delete. If the sheet is of DATA_SOURCE type, the associated DataSource is also deleted.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"DataSourceFormula\": {\n      \"description\": \"A data source formula.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"The ID of the data source the formula is associated with.\",\n          \"type\": \"string\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"Output only. The data execution status.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataExecutionStatus\"\n        }\n      },\n      \"id\": \"DataSourceFormula\"\n    },\n    \"EmbeddedChart\": {\n      \"id\": \"EmbeddedChart\",\n      \"description\": \"A chart embedded in a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spec\": {\n          \"description\": \"The specification of the chart.\",\n          \"$ref\": \"ChartSpec\"\n        },\n        \"border\": {\n          \"description\": \"The border of the chart.\",\n          \"$ref\": \"EmbeddedObjectBorder\"\n        },\n        \"position\": {\n          \"description\": \"The position of the chart.\",\n          \"$ref\": \"EmbeddedObjectPosition\"\n        },\n        \"chartId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the chart.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"UpdateEmbeddedObjectPositionRequest\": {\n      \"description\": \"Update an embedded object's position (such as a moving or resizing a chart or image).\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"newPosition\": {\n          \"description\": \"An explicit position to move the embedded object to. If newPosition.sheetId is set, a new sheet with that ID will be created. If newPosition.newSheet is set to true, a new sheet will be created with an ID that will be chosen for you.\",\n          \"$ref\": \"EmbeddedObjectPosition\"\n        },\n        \"objectId\": {\n          \"description\": \"The ID of the object to moved.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"The fields of OverlayPosition that should be updated when setting a new position. Used only if newPosition.overlayPosition is set, in which case at least one field must be specified. The root `newPosition.overlayPosition` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"UpdateEmbeddedObjectPositionRequest\"\n    },\n    \"GetSpreadsheetByDataFilterRequest\": {\n      \"description\": \"The request for retrieving a Spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"excludeTablesInBandedRanges\": {\n          \"description\": \"True if tables should be excluded in the banded ranges. False if not set.\",\n          \"type\": \"boolean\"\n        },\n        \"dataFilters\": {\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          },\n          \"description\": \"The DataFilters used to select which ranges to retrieve from the spreadsheet.\",\n          \"type\": \"array\"\n        },\n        \"includeGridData\": {\n          \"description\": \"True if grid data should be returned. This parameter is ignored if a field mask was set in the request.\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"GetSpreadsheetByDataFilterRequest\"\n    },\n    \"AddProtectedRangeResponse\": {\n      \"id\": \"AddProtectedRangeResponse\",\n      \"description\": \"The result of adding a new protected range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"protectedRange\": {\n          \"description\": \"The newly added protected range.\",\n          \"$ref\": \"ProtectedRange\"\n        }\n      }\n    },\n    \"ChartCustomNumberFormatOptions\": {\n      \"id\": \"ChartCustomNumberFormatOptions\",\n      \"description\": \"Custom number formatting options for chart attributes.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"prefix\": {\n          \"description\": \"Custom prefix to be prepended to the chart attribute. This field is optional.\",\n          \"type\": \"string\"\n        },\n        \"suffix\": {\n          \"description\": \"Custom suffix to be appended to the chart attribute. This field is optional.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"BasicChartDomain\": {\n      \"id\": \"BasicChartDomain\",\n      \"description\": \"The domain of a chart. For example, if charting stock prices over time, this would be the date.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"domain\": {\n          \"description\": \"The data of the domain. For example, if charting stock prices over time, this is the data representing the dates.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"reversed\": {\n          \"description\": \"True to reverse the order of the domain values (horizontal axis).\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"SheetProperties\": {\n      \"id\": \"SheetProperties\",\n      \"description\": \"Properties of a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheetType\": {\n          \"description\": \"The type of sheet. Defaults to GRID. This field cannot be changed once set.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The sheet is a grid.\",\n            \"The sheet has no grid and instead has an object like a chart or image.\",\n            \"The sheet connects with an external DataSource and shows the preview of data.\"\n          ],\n          \"enum\": [\n            \"SHEET_TYPE_UNSPECIFIED\",\n            \"GRID\",\n            \"OBJECT\",\n            \"DATA_SOURCE\"\n          ]\n        },\n        \"index\": {\n          \"format\": \"int32\",\n          \"description\": \"The index of the sheet within the spreadsheet. When adding or updating sheet properties, if this field is excluded then the sheet is added or moved to the end of the sheet list. When updating sheet indices or inserting sheets, movement is considered in \\\"before the move\\\" indexes. For example, if there were three sheets (S1, S2, S3) in order to move S1 ahead of S2 the index would have to be set to 2. A sheet index update request is ignored if the requested index is identical to the sheets current index or if the requested new index is equal to the current sheet index + 1.\",\n          \"type\": \"integer\"\n        },\n        \"hidden\": {\n          \"description\": \"True if the sheet is hidden in the UI, false if it's visible.\",\n          \"type\": \"boolean\"\n        },\n        \"gridProperties\": {\n          \"description\": \"Additional properties of the sheet if this sheet is a grid. (If the sheet is an object sheet, containing a chart or image, then this field will be absent.) When writing it is an error to set any grid properties on non-grid sheets. If this sheet is a DATA_SOURCE sheet, this field is output only but contains the properties that reflect how a data source sheet is rendered in the UI, e.g. row_count.\",\n          \"$ref\": \"GridProperties\"\n        },\n        \"tabColorStyle\": {\n          \"description\": \"The color of the tab in the UI. If tab_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"rightToLeft\": {\n          \"description\": \"True if the sheet is an RTL sheet instead of an LTR sheet.\",\n          \"type\": \"boolean\"\n        },\n        \"dataSourceSheetProperties\": {\n          \"description\": \"Output only. If present, the field contains DATA_SOURCE sheet specific properties.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataSourceSheetProperties\"\n        },\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the sheet. Must be non-negative. This field cannot be changed once set.\",\n          \"type\": \"integer\"\n        },\n        \"title\": {\n          \"description\": \"The name of the sheet.\",\n          \"type\": \"string\"\n        },\n        \"tabColor\": {\n          \"description\": \"The color of the tab in the UI. Deprecated: Use tab_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        }\n      }\n    },\n    \"UpdateBandingRequest\": {\n      \"id\": \"UpdateBandingRequest\",\n      \"description\": \"Updates properties of the supplied banded range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bandedRange\": {\n          \"description\": \"The banded range to update with the new properties.\",\n          \"$ref\": \"BandedRange\"\n        },\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `bandedRange` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"UpdateFilterViewRequest\": {\n      \"description\": \"Updates properties of the filter view.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `filter` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        },\n        \"filter\": {\n          \"description\": \"The new properties of the filter view.\",\n          \"$ref\": \"FilterView\"\n        }\n      },\n      \"id\": \"UpdateFilterViewRequest\"\n    },\n    \"DataSource\": {\n      \"id\": \"DataSource\",\n      \"description\": \"Information about an external data source in the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"The spreadsheet-scoped unique ID that identifies the data source. Example: 1080547365.\",\n          \"type\": \"string\"\n        },\n        \"calculatedColumns\": {\n          \"items\": {\n            \"$ref\": \"DataSourceColumn\"\n          },\n          \"description\": \"All calculated columns in the data source.\",\n          \"type\": \"array\"\n        },\n        \"sheetId\": {\n          \"description\": \"The ID of the Sheet connected with the data source. The field cannot be changed once set. When creating a data source, an associated DATA_SOURCE sheet is also created, if the field is not specified, the ID of the created sheet will be randomly generated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"spec\": {\n          \"description\": \"The DataSourceSpec for the data source connected with this spreadsheet.\",\n          \"$ref\": \"DataSourceSpec\"\n        }\n      }\n    },\n    \"AddDataSourceRequest\": {\n      \"id\": \"AddDataSourceRequest\",\n      \"description\": \"Adds a data source. After the data source is added successfully, an associated DATA_SOURCE sheet is created and an execution is triggered to refresh the sheet to read data from the data source. The request requires an additional `bigquery.readonly` OAuth scope if you are adding a BigQuery data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSource\": {\n          \"description\": \"The data source to add.\",\n          \"$ref\": \"DataSource\"\n        }\n      }\n    },\n    \"DeleteFilterViewRequest\": {\n      \"description\": \"Deletes a particular filter view.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filterId\": {\n          \"description\": \"The ID of the filter to delete.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"id\": \"DeleteFilterViewRequest\"\n    },\n    \"UpdateEmbeddedObjectPositionResponse\": {\n      \"description\": \"The result of updating an embedded object's position.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"position\": {\n          \"description\": \"The new position of the embedded object.\",\n          \"$ref\": \"EmbeddedObjectPosition\"\n        }\n      },\n      \"id\": \"UpdateEmbeddedObjectPositionResponse\"\n    },\n    \"DataSourceSpec\": {\n      \"id\": \"DataSourceSpec\",\n      \"description\": \"This specifies the details of the data source. For example, for BigQuery, this specifies information about the BigQuery source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"parameters\": {\n          \"items\": {\n            \"$ref\": \"DataSourceParameter\"\n          },\n          \"description\": \"The parameters of the data source, used when querying the data source.\",\n          \"type\": \"array\"\n        },\n        \"bigQuery\": {\n          \"description\": \"A BigQueryDataSourceSpec.\",\n          \"$ref\": \"BigQueryDataSourceSpec\"\n        },\n        \"looker\": {\n          \"description\": \"A LookerDatasourceSpec.\",\n          \"$ref\": \"LookerDataSourceSpec\"\n        }\n      }\n    },\n    \"MatchedValueRange\": {\n      \"id\": \"MatchedValueRange\",\n      \"description\": \"A value range that was matched by one or more data filers.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilters\": {\n          \"description\": \"The DataFilters from the request that matched the range of values.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          }\n        },\n        \"valueRange\": {\n          \"description\": \"The values matched by the DataFilter.\",\n          \"$ref\": \"ValueRange\"\n        }\n      }\n    },\n    \"UpdateValuesByDataFilterResponse\": {\n      \"id\": \"UpdateValuesByDataFilterResponse\",\n      \"description\": \"The response when updating a range of values by a data filter in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"updatedColumns\": {\n          \"description\": \"The number of columns where at least one cell in the column was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"dataFilter\": {\n          \"description\": \"The data filter that selected the range that was updated.\",\n          \"$ref\": \"DataFilter\"\n        },\n        \"updatedCells\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of cells updated.\",\n          \"type\": \"integer\"\n        },\n        \"updatedRange\": {\n          \"description\": \"The range (in [A1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell)) that updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"updatedRows\": {\n          \"description\": \"The number of rows where at least one cell in the row was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"updatedData\": {\n          \"description\": \"The values of the cells in the range matched by the dataFilter after all updates were applied. This is only included if the request's `includeValuesInResponse` field was `true`.\",\n          \"$ref\": \"ValueRange\"\n        }\n      }\n    },\n    \"DeveloperMetadata\": {\n      \"id\": \"DeveloperMetadata\",\n      \"description\": \"Developer metadata associated with a location or object in a spreadsheet. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata). Developer metadata may be used to associate arbitrary data with various parts of a spreadsheet and it will remain associated at those locations as they move around and the spreadsheet is edited. For example, if developer metadata is associated with row 5 and another row is then subsequently inserted above row 5, that original metadata is still associated with the row it was first associated with (what is now row 6). If the associated object is deleted then its metadata is deleted too.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"metadataKey\": {\n          \"description\": \"The metadata key. There may be multiple metadata in a spreadsheet with the same key. Developer metadata must always have a key specified.\",\n          \"type\": \"string\"\n        },\n        \"visibility\": {\n          \"description\": \"The metadata visibility. Developer metadata must always have visibility specified.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value.\",\n            \"Document-visible metadata is accessible from any developer project with access to the document.\",\n            \"Project-visible metadata is only visible to and accessible by the developer project that created the metadata.\"\n          ],\n          \"enum\": [\n            \"DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED\",\n            \"DOCUMENT\",\n            \"PROJECT\"\n          ]\n        },\n        \"metadataValue\": {\n          \"description\": \"Data associated with the metadata's key.\",\n          \"type\": \"string\"\n        },\n        \"location\": {\n          \"description\": \"The location where the metadata is associated.\",\n          \"$ref\": \"DeveloperMetadataLocation\"\n        },\n        \"metadataId\": {\n          \"format\": \"int32\",\n          \"description\": \"The spreadsheet-scoped unique ID that identifies the metadata. IDs may be specified when metadata is created, otherwise one will be randomly generated and assigned. Must be positive.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"SearchDeveloperMetadataRequest\": {\n      \"description\": \"A request to retrieve all developer metadata matching the set of specified criteria.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilters\": {\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          },\n          \"description\": \"The data filters describing the criteria used to determine which DeveloperMetadata entries to return. DeveloperMetadata matching any of the specified filters are included in the response.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"SearchDeveloperMetadataRequest\"\n    },\n    \"Interval\": {\n      \"description\": \"Represents a time interval, encoded as a Timestamp start (inclusive) and a Timestamp end (exclusive). The start must be less than or equal to the end. When the start equals the end, the interval is empty (matches no time). When both start and end are unspecified, the interval matches any time.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"startTime\": {\n          \"description\": \"Optional. Inclusive start of the interval. If specified, a Timestamp matching this interval will have to be the same or after the start.\",\n          \"type\": \"string\",\n          \"format\": \"google-datetime\"\n        },\n        \"endTime\": {\n          \"format\": \"google-datetime\",\n          \"description\": \"Optional. Exclusive end of the interval. If specified, a Timestamp matching this interval will have to be before the end.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"Interval\"\n    },\n    \"UpdateSpreadsheetPropertiesRequest\": {\n      \"id\": \"UpdateSpreadsheetPropertiesRequest\",\n      \"description\": \"Updates properties of a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"properties\": {\n          \"description\": \"The properties to update.\",\n          \"$ref\": \"SpreadsheetProperties\"\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root 'properties' is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        }\n      }\n    },\n    \"ChartDateTimeRule\": {\n      \"description\": \"Allows you to organize the date-time values in a source data column into buckets based on selected parts of their date or time values.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"description\": \"The type of date-time grouping to apply.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default type, do not use.\",\n            \"Group dates by second, from 0 to 59.\",\n            \"Group dates by minute, from 0 to 59.\",\n            \"Group dates by hour using a 24-hour system, from 0 to 23.\",\n            \"Group dates by hour and minute using a 24-hour system, for example 19:45.\",\n            \"Group dates by hour and minute using a 12-hour system, for example 7:45 PM. The AM/PM designation is translated based on the spreadsheet locale.\",\n            \"Group dates by day of week, for example Sunday. The days of the week will be translated based on the spreadsheet locale.\",\n            \"Group dates by day of year, from 1 to 366. Note that dates after Feb. 29 fall in different buckets in leap years than in non-leap years.\",\n            \"Group dates by day of month, from 1 to 31.\",\n            \"Group dates by day and month, for example 22-Nov. The month is translated based on the spreadsheet locale.\",\n            \"Group dates by month, for example Nov. The month is translated based on the spreadsheet locale.\",\n            \"Group dates by quarter, for example Q1 (which represents Jan-Mar).\",\n            \"Group dates by year, for example 2008.\",\n            \"Group dates by year and month, for example 2008-Nov. The month is translated based on the spreadsheet locale.\",\n            \"Group dates by year and quarter, for example 2008 Q4.\",\n            \"Group dates by year, month, and day, for example 2008-11-22.\"\n          ],\n          \"enum\": [\n            \"CHART_DATE_TIME_RULE_TYPE_UNSPECIFIED\",\n            \"SECOND\",\n            \"MINUTE\",\n            \"HOUR\",\n            \"HOUR_MINUTE\",\n            \"HOUR_MINUTE_AMPM\",\n            \"DAY_OF_WEEK\",\n            \"DAY_OF_YEAR\",\n            \"DAY_OF_MONTH\",\n            \"DAY_MONTH\",\n            \"MONTH\",\n            \"QUARTER\",\n            \"YEAR\",\n            \"YEAR_MONTH\",\n            \"YEAR_QUARTER\",\n            \"YEAR_MONTH_DAY\"\n          ]\n        }\n      },\n      \"id\": \"ChartDateTimeRule\"\n    },\n    \"ChartAxisViewWindowOptions\": {\n      \"description\": \"The options that define a \\\"view window\\\" for a chart (such as the visible values in an axis).\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"viewWindowMax\": {\n          \"description\": \"The maximum numeric value to be shown in this view window. If unset, will automatically determine a maximum value that looks good for the data.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"viewWindowMin\": {\n          \"description\": \"The minimum numeric value to be shown in this view window. If unset, will automatically determine a minimum value that looks good for the data.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"viewWindowMode\": {\n          \"enum\": [\n            \"DEFAULT_VIEW_WINDOW_MODE\",\n            \"VIEW_WINDOW_MODE_UNSUPPORTED\",\n            \"EXPLICIT\",\n            \"PRETTY\"\n          ],\n          \"description\": \"The view window's mode.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default view window mode used in the Sheets editor for this chart type. In most cases, if set, the default mode is equivalent to `PRETTY`.\",\n            \"Do not use. Represents that the currently set mode is not supported by the API.\",\n            \"Follows the min and max exactly if specified. If a value is unspecified, it will fall back to the `PRETTY` value.\",\n            \"Chooses a min and max that make the chart look good. Both min and max are ignored in this mode.\"\n          ]\n        }\n      },\n      \"id\": \"ChartAxisViewWindowOptions\"\n    },\n    \"AddProtectedRangeRequest\": {\n      \"description\": \"Adds a new protected range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"protectedRange\": {\n          \"description\": \"The protected range to be added. The protectedRangeId field is optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of a range that already exists.)\",\n          \"$ref\": \"ProtectedRange\"\n        }\n      },\n      \"id\": \"AddProtectedRangeRequest\"\n    },\n    \"HistogramRule\": {\n      \"description\": \"Allows you to organize the numeric values in a source data column into buckets of a constant size. All values from HistogramRule.start to HistogramRule.end are placed into groups of size HistogramRule.interval. In addition, all values below HistogramRule.start are placed in one group, and all values above HistogramRule.end are placed in another. Only HistogramRule.interval is required, though if HistogramRule.start and HistogramRule.end are both provided, HistogramRule.start must be less than HistogramRule.end. For example, a pivot table showing average purchase amount by age that has 50+ rows: +-----+-------------------+ | Age | AVERAGE of Amount | +-----+-------------------+ | 16 | $27.13 | | 17 | $5.24 | | 18 | $20.15 | ... +-----+-------------------+ could be turned into a pivot table that looks like the one below by applying a histogram group rule with a HistogramRule.start of 25, an HistogramRule.interval of 20, and an HistogramRule.end of 65. +-------------+-------------------+ | Grouped Age | AVERAGE of Amount | +-------------+-------------------+ | \\u003c 25 | $19.34 | | 25-45 | $31.43 | | 45-65 | $35.87 | | \\u003e 65 | $27.55 | +-------------+-------------------+ | Grand Total | $29.12 | +-------------+-------------------+\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"interval\": {\n          \"format\": \"double\",\n          \"description\": \"The size of the buckets that are created. Must be positive.\",\n          \"type\": \"number\"\n        },\n        \"start\": {\n          \"description\": \"The minimum value at which items are placed into buckets of constant size. Values below start are lumped into a single bucket. This field is optional.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"end\": {\n          \"description\": \"The maximum value at which items are placed into buckets of constant size. Values above end are lumped into a single bucket. This field is optional.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        }\n      },\n      \"id\": \"HistogramRule\"\n    },\n    \"BooleanRule\": {\n      \"description\": \"A rule that may or may not match, depending on the condition.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"condition\": {\n          \"description\": \"The condition of the rule. If the condition evaluates to true, the format is applied.\",\n          \"$ref\": \"BooleanCondition\"\n        },\n        \"format\": {\n          \"description\": \"The format to apply. Conditional formatting can only apply a subset of formatting: bold, italic, strikethrough, foreground color and, background color.\",\n          \"$ref\": \"CellFormat\"\n        }\n      },\n      \"id\": \"BooleanRule\"\n    },\n    \"Table\": {\n      \"description\": \"A table.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"description\": \"The table name. This is unique to all tables in the same spreadsheet.\",\n          \"type\": \"string\"\n        },\n        \"range\": {\n          \"description\": \"The table range.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"columnProperties\": {\n          \"items\": {\n            \"$ref\": \"TableColumnProperties\"\n          },\n          \"description\": \"The table column properties.\",\n          \"type\": \"array\"\n        },\n        \"rowsProperties\": {\n          \"description\": \"The table rows properties.\",\n          \"$ref\": \"TableRowsProperties\"\n        },\n        \"tableId\": {\n          \"description\": \"The id of the table.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"Table\"\n    },\n    \"Padding\": {\n      \"description\": \"The amount of padding around the cell, in pixels. When updating padding, every field must be specified.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"top\": {\n          \"description\": \"The top padding of the cell.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"right\": {\n          \"format\": \"int32\",\n          \"description\": \"The right padding of the cell.\",\n          \"type\": \"integer\"\n        },\n        \"bottom\": {\n          \"format\": \"int32\",\n          \"description\": \"The bottom padding of the cell.\",\n          \"type\": \"integer\"\n        },\n        \"left\": {\n          \"description\": \"The left padding of the cell.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"id\": \"Padding\"\n    },\n    \"OrgChartSpec\": {\n      \"description\": \"An org chart. Org charts require a unique set of labels in labels and may optionally include parent_labels and tooltips. parent_labels contain, for each node, the label identifying the parent node. tooltips contain, for each node, an optional tooltip. For example, to describe an OrgChart with Alice as the CEO, Bob as the President (reporting to Alice) and Cathy as VP of Sales (also reporting to Alice), have labels contain \\\"Alice\\\", \\\"Bob\\\", \\\"Cathy\\\", parent_labels contain \\\"\\\", \\\"Alice\\\", \\\"Alice\\\" and tooltips contain \\\"CEO\\\", \\\"President\\\", \\\"VP Sales\\\".\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"nodeColorStyle\": {\n          \"description\": \"The color of the org chart nodes. If node_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"selectedNodeColor\": {\n          \"description\": \"The color of the selected org chart nodes. Deprecated: Use selected_node_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"parentLabels\": {\n          \"description\": \"The data containing the label of the parent for the corresponding node. A blank value indicates that the node has no parent and is a top-level node. This field is optional.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"nodeSize\": {\n          \"description\": \"The size of the org chart nodes.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The small org chart node size.\",\n            \"The medium org chart node size.\",\n            \"The large org chart node size.\"\n          ],\n          \"enum\": [\n            \"ORG_CHART_LABEL_SIZE_UNSPECIFIED\",\n            \"SMALL\",\n            \"MEDIUM\",\n            \"LARGE\"\n          ]\n        },\n        \"nodeColor\": {\n          \"description\": \"The color of the org chart nodes. Deprecated: Use node_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"labels\": {\n          \"description\": \"The data containing the labels for all the nodes in the chart. Labels must be unique.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"selectedNodeColorStyle\": {\n          \"description\": \"The color of the selected org chart nodes. If selected_node_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"tooltips\": {\n          \"description\": \"The data containing the tooltip for the corresponding node. A blank value results in no tooltip being displayed for the node. This field is optional.\",\n          \"$ref\": \"ChartData\"\n        }\n      },\n      \"id\": \"OrgChartSpec\"\n    },\n    \"EmbeddedObjectBorder\": {\n      \"description\": \"A border along an embedded object.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"color\": {\n          \"description\": \"The color of the border. Deprecated: Use color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"colorStyle\": {\n          \"description\": \"The color of the border. If color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      },\n      \"id\": \"EmbeddedObjectBorder\"\n    },\n    \"DeleteDuplicatesResponse\": {\n      \"description\": \"The result of removing duplicates in a range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"duplicatesRemovedCount\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of duplicate rows removed.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"DeleteDuplicatesResponse\"\n    },\n    \"DataSourceTable\": {\n      \"id\": \"DataSourceTable\",\n      \"description\": \"A data source table, which allows the user to import a static table of data from the DataSource into Sheets. This is also known as \\\"Extract\\\" in the Sheets editor.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"The ID of the data source the data source table is associated with.\",\n          \"type\": \"string\"\n        },\n        \"columnSelectionType\": {\n          \"description\": \"The type to select columns for the data source table. Defaults to SELECTED.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default column selection type, do not use.\",\n            \"Select columns specified by columns field.\",\n            \"Sync all current and future columns in the data source. If set, the data source table fetches all the columns in the data source at the time of refresh.\"\n          ],\n          \"enum\": [\n            \"DATA_SOURCE_TABLE_COLUMN_SELECTION_TYPE_UNSPECIFIED\",\n            \"SELECTED\",\n            \"SYNC_ALL\"\n          ]\n        },\n        \"sortSpecs\": {\n          \"description\": \"Sort specifications in the data source table. The result of the data source table is sorted based on the sort specifications in order.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"SortSpec\"\n          }\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"Output only. The data execution status.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataExecutionStatus\"\n        },\n        \"filterSpecs\": {\n          \"items\": {\n            \"$ref\": \"FilterSpec\"\n          },\n          \"description\": \"Filter specifications in the data source table.\",\n          \"type\": \"array\"\n        },\n        \"columns\": {\n          \"items\": {\n            \"$ref\": \"DataSourceColumnReference\"\n          },\n          \"description\": \"Columns selected for the data source table. The column_selection_type must be SELECTED.\",\n          \"type\": \"array\"\n        },\n        \"rowLimit\": {\n          \"description\": \"The limit of rows to return. If not set, a default limit is applied. Please refer to the Sheets editor for the default and max limit.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"BandedRange\": {\n      \"description\": \"A banded (alternating colors) range in a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bandedRangeId\": {\n          \"description\": \"The ID of the banded range. If unset, refer to banded_range_reference.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"rowProperties\": {\n          \"description\": \"Properties for row bands. These properties are applied on a row-by-row basis throughout all the rows in the range. At least one of row_properties or column_properties must be specified.\",\n          \"$ref\": \"BandingProperties\"\n        },\n        \"range\": {\n          \"description\": \"The range over which these properties are applied.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"bandedRangeReference\": {\n          \"description\": \"Output only. The reference of the banded range, used to identify the ID that is not supported by the banded_range_id.\",\n          \"readOnly\": true,\n          \"type\": \"string\"\n        },\n        \"columnProperties\": {\n          \"description\": \"Properties for column bands. These properties are applied on a column- by-column basis throughout all the columns in the range. At least one of row_properties or column_properties must be specified.\",\n          \"$ref\": \"BandingProperties\"\n        }\n      },\n      \"id\": \"BandedRange\"\n    },\n    \"DeleteProtectedRangeRequest\": {\n      \"id\": \"DeleteProtectedRangeRequest\",\n      \"description\": \"Deletes the protected range with the given ID.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"protectedRangeId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the protected range to delete.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"PivotGroupLimit\": {\n      \"description\": \"The count limit on rows or columns in the pivot group.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"countLimit\": {\n          \"description\": \"The count limit.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"applyOrder\": {\n          \"format\": \"int32\",\n          \"description\": \"The order in which the group limit is applied to the pivot table. Pivot group limits are applied from lower to higher order number. Order numbers are normalized to consecutive integers from 0. For write request, to fully customize the applying orders, all pivot group limits should have this field set with an unique number. Otherwise, the order is determined by the index in the PivotTable.rows list and then the PivotTable.columns list.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"PivotGroupLimit\"\n    },\n    \"BatchUpdateValuesByDataFilterRequest\": {\n      \"id\": \"BatchUpdateValuesByDataFilterRequest\",\n      \"description\": \"The request for updating more than one range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"responseValueRenderOption\": {\n          \"description\": \"Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n            \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n            \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n          ],\n          \"enum\": [\n            \"FORMATTED_VALUE\",\n            \"UNFORMATTED_VALUE\",\n            \"FORMULA\"\n          ]\n        },\n        \"data\": {\n          \"description\": \"The new values to apply to the spreadsheet. If more than one range is matched by the specified DataFilter the specified values are applied to all of those ranges.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataFilterValueRange\"\n          }\n        },\n        \"responseDateTimeRenderOption\": {\n          \"description\": \"Determines how dates, times, and durations in the response should be rendered. This is ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n            \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n          ],\n          \"enum\": [\n            \"SERIAL_NUMBER\",\n            \"FORMATTED_STRING\"\n          ]\n        },\n        \"valueInputOption\": {\n          \"enum\": [\n            \"INPUT_VALUE_OPTION_UNSPECIFIED\",\n            \"RAW\",\n            \"USER_ENTERED\"\n          ],\n          \"description\": \"How the input data should be interpreted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default input value. This value must not be used.\",\n            \"The values the user has entered will not be parsed and will be stored as-is.\",\n            \"The values will be parsed as if the user typed them into the UI. Numbers will stay as numbers, but strings may be converted to numbers, dates, etc. following the same rules that are applied when entering text into a cell via the Google Sheets UI.\"\n          ]\n        },\n        \"includeValuesInResponse\": {\n          \"description\": \"Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values. The `updatedData` field within each of the BatchUpdateValuesResponse.responses contains the updated values. If the range to write was larger than the range actually written, the response includes all values in the requested range (excluding trailing empty rows and columns).\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"UpdateNamedRangeRequest\": {\n      \"id\": \"UpdateNamedRangeRequest\",\n      \"description\": \"Updates properties of the named range with the specified namedRangeId.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"namedRange\": {\n          \"description\": \"The named range to update with the new properties.\",\n          \"$ref\": \"NamedRange\"\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `namedRange` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        }\n      }\n    },\n    \"DeleteConditionalFormatRuleResponse\": {\n      \"id\": \"DeleteConditionalFormatRuleResponse\",\n      \"description\": \"The result of deleting a conditional format rule.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rule\": {\n          \"description\": \"The rule that was deleted.\",\n          \"$ref\": \"ConditionalFormatRule\"\n        }\n      }\n    },\n    \"TrimWhitespaceRequest\": {\n      \"description\": \"Trims the whitespace (such as spaces, tabs, or new lines) in every cell in the specified range. This request removes all whitespace from the start and end of each cell's text, and reduces any subsequence of remaining whitespace characters to a single space. If the resulting trimmed text starts with a '+' or '=' character, the text remains as a string value and isn't interpreted as a formula.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range whose cells to trim.\",\n          \"$ref\": \"GridRange\"\n        }\n      },\n      \"id\": \"TrimWhitespaceRequest\"\n    },\n    \"AddSlicerResponse\": {\n      \"id\": \"AddSlicerResponse\",\n      \"description\": \"The result of adding a slicer to a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"slicer\": {\n          \"description\": \"The newly added slicer.\",\n          \"$ref\": \"Slicer\"\n        }\n      }\n    },\n    \"GradientRule\": {\n      \"id\": \"GradientRule\",\n      \"description\": \"A rule that applies a gradient color scale format, based on the interpolation points listed. The format of a cell will vary based on its contents as compared to the values of the interpolation points.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"minpoint\": {\n          \"description\": \"The starting interpolation point.\",\n          \"$ref\": \"InterpolationPoint\"\n        },\n        \"midpoint\": {\n          \"description\": \"An optional midway interpolation point.\",\n          \"$ref\": \"InterpolationPoint\"\n        },\n        \"maxpoint\": {\n          \"description\": \"The final interpolation point.\",\n          \"$ref\": \"InterpolationPoint\"\n        }\n      }\n    },\n    \"BubbleChartSpec\": {\n      \"id\": \"BubbleChartSpec\",\n      \"description\": \"A bubble chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bubbleLabels\": {\n          \"description\": \"The data containing the bubble labels. These do not need to be unique.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"domain\": {\n          \"description\": \"The data containing the bubble x-values. These values locate the bubbles in the chart horizontally.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"series\": {\n          \"description\": \"The data containing the bubble y-values. These values locate the bubbles in the chart vertically.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"bubbleSizes\": {\n          \"description\": \"The data containing the bubble sizes. Bubble sizes are used to draw the bubbles at different sizes relative to each other. If specified, group_ids must also be specified. This field is optional.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"bubbleOpacity\": {\n          \"description\": \"The opacity of the bubbles between 0 and 1.0. 0 is fully transparent and 1 is fully opaque.\",\n          \"type\": \"number\",\n          \"format\": \"float\"\n        },\n        \"bubbleBorderColorStyle\": {\n          \"description\": \"The bubble border color. If bubble_border_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"bubbleMaxRadiusSize\": {\n          \"description\": \"The max radius size of the bubbles, in pixels. If specified, the field must be a positive value.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"bubbleBorderColor\": {\n          \"description\": \"The bubble border color. Deprecated: Use bubble_border_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"bubbleTextStyle\": {\n          \"description\": \"The format of the text inside the bubbles. Strikethrough, underline, and link are not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"bubbleMinRadiusSize\": {\n          \"format\": \"int32\",\n          \"description\": \"The minimum radius size of the bubbles, in pixels. If specific, the field must be a positive value.\",\n          \"type\": \"integer\"\n        },\n        \"groupIds\": {\n          \"description\": \"The data containing the bubble group IDs. All bubbles with the same group ID are drawn in the same color. If bubble_sizes is specified then this field must also be specified but may contain blank values. This field is optional.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"legendPosition\": {\n          \"description\": \"Where the legend of the chart should be drawn.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The legend is rendered on the bottom of the chart.\",\n            \"The legend is rendered on the left of the chart.\",\n            \"The legend is rendered on the right of the chart.\",\n            \"The legend is rendered on the top of the chart.\",\n            \"No legend is rendered.\",\n            \"The legend is rendered inside the chart area.\"\n          ],\n          \"enum\": [\n            \"BUBBLE_CHART_LEGEND_POSITION_UNSPECIFIED\",\n            \"BOTTOM_LEGEND\",\n            \"LEFT_LEGEND\",\n            \"RIGHT_LEGEND\",\n            \"TOP_LEGEND\",\n            \"NO_LEGEND\",\n            \"INSIDE_LEGEND\"\n          ]\n        }\n      }\n    },\n    \"DataFilter\": {\n      \"description\": \"Filter that describes what data should be selected or returned from a request. For more information, see [Read, write, and search metadata](https://developers.google.com/workspace/sheets/api/guides/metadata).\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"gridRange\": {\n          \"description\": \"Selects data that matches the range described by the GridRange.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"a1Range\": {\n          \"description\": \"Selects data that matches the specified A1 range.\",\n          \"type\": \"string\"\n        },\n        \"developerMetadataLookup\": {\n          \"description\": \"Selects data associated with the developer metadata matching the criteria described by this DeveloperMetadataLookup.\",\n          \"$ref\": \"DeveloperMetadataLookup\"\n        }\n      },\n      \"id\": \"DataFilter\"\n    },\n    \"CreateDeveloperMetadataResponse\": {\n      \"id\": \"CreateDeveloperMetadataResponse\",\n      \"description\": \"The response from creating developer metadata.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"developerMetadata\": {\n          \"description\": \"The developer metadata that was created.\",\n          \"$ref\": \"DeveloperMetadata\"\n        }\n      }\n    },\n    \"CellFormat\": {\n      \"description\": \"The format of a cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"textFormat\": {\n          \"description\": \"The format of the text in the cell (unless overridden by a format run). Setting a cell-level link here clears the cell's existing links. Setting the link field in a TextFormatRun takes precedence over the cell-level link.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"numberFormat\": {\n          \"description\": \"A format describing how number values should be represented to the user.\",\n          \"$ref\": \"NumberFormat\"\n        },\n        \"borders\": {\n          \"description\": \"The borders of the cell.\",\n          \"$ref\": \"Borders\"\n        },\n        \"padding\": {\n          \"description\": \"The padding of the cell.\",\n          \"$ref\": \"Padding\"\n        },\n        \"hyperlinkDisplayType\": {\n          \"description\": \"If one exists, how a hyperlink should be displayed in the cell.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value: the hyperlink is rendered. Do not use this.\",\n            \"A hyperlink should be explicitly rendered.\",\n            \"A hyperlink should not be rendered.\"\n          ],\n          \"enum\": [\n            \"HYPERLINK_DISPLAY_TYPE_UNSPECIFIED\",\n            \"LINKED\",\n            \"PLAIN_TEXT\"\n          ]\n        },\n        \"backgroundColorStyle\": {\n          \"description\": \"The background color of the cell. If background_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"wrapStrategy\": {\n          \"enum\": [\n            \"WRAP_STRATEGY_UNSPECIFIED\",\n            \"OVERFLOW_CELL\",\n            \"LEGACY_WRAP\",\n            \"CLIP\",\n            \"WRAP\"\n          ],\n          \"description\": \"The wrap strategy for the value in the cell.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Lines that are longer than the cell width will be written in the next cell over, so long as that cell is empty. If the next cell over is non-empty, this behaves the same as `CLIP`. The text will never wrap to the next line unless the user manually inserts a new line. Example: | First sentence. | | Manual newline that is very long. \\u003c- Text continues into next cell | Next newline. |\",\n            \"This wrap strategy represents the old Google Sheets wrap strategy where words that are longer than a line are clipped rather than broken. This strategy is not supported on all platforms and is being phased out. Example: | Cell has a | | loooooooooo| \\u003c- Word is clipped. | word. |\",\n            \"Lines that are longer than the cell width will be clipped. The text will never wrap to the next line unless the user manually inserts a new line. Example: | First sentence. | | Manual newline t| \\u003c- Text is clipped | Next newline. |\",\n            \"Words that are longer than a line are wrapped at the character level rather than clipped. Example: | Cell has a | | loooooooooo| \\u003c- Word is broken. | ong word. |\"\n          ]\n        },\n        \"horizontalAlignment\": {\n          \"description\": \"The horizontal alignment of the value in the cell.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The horizontal alignment is not specified. Do not use this.\",\n            \"The text is explicitly aligned to the left of the cell.\",\n            \"The text is explicitly aligned to the center of the cell.\",\n            \"The text is explicitly aligned to the right of the cell.\"\n          ],\n          \"enum\": [\n            \"HORIZONTAL_ALIGN_UNSPECIFIED\",\n            \"LEFT\",\n            \"CENTER\",\n            \"RIGHT\"\n          ]\n        },\n        \"textDirection\": {\n          \"description\": \"The direction of the text in the cell.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The text direction is not specified. Do not use this.\",\n            \"The text direction of left-to-right was set by the user.\",\n            \"The text direction of right-to-left was set by the user.\"\n          ],\n          \"enum\": [\n            \"TEXT_DIRECTION_UNSPECIFIED\",\n            \"LEFT_TO_RIGHT\",\n            \"RIGHT_TO_LEFT\"\n          ]\n        },\n        \"textRotation\": {\n          \"description\": \"The rotation applied to text in the cell.\",\n          \"$ref\": \"TextRotation\"\n        },\n        \"backgroundColor\": {\n          \"description\": \"The background color of the cell. Deprecated: Use background_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"verticalAlignment\": {\n          \"description\": \"The vertical alignment of the value in the cell.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The vertical alignment is not specified. Do not use this.\",\n            \"The text is explicitly aligned to the top of the cell.\",\n            \"The text is explicitly aligned to the middle of the cell.\",\n            \"The text is explicitly aligned to the bottom of the cell.\"\n          ],\n          \"enum\": [\n            \"VERTICAL_ALIGN_UNSPECIFIED\",\n            \"TOP\",\n            \"MIDDLE\",\n            \"BOTTOM\"\n          ]\n        }\n      },\n      \"id\": \"CellFormat\"\n    },\n    \"CandlestickDomain\": {\n      \"description\": \"The domain of a CandlestickChart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"reversed\": {\n          \"description\": \"True to reverse the order of the domain values (horizontal axis).\",\n          \"type\": \"boolean\"\n        },\n        \"data\": {\n          \"description\": \"The data of the CandlestickDomain.\",\n          \"$ref\": \"ChartData\"\n        }\n      },\n      \"id\": \"CandlestickDomain\"\n    },\n    \"LookerDataSourceSpec\": {\n      \"id\": \"LookerDataSourceSpec\",\n      \"description\": \"The specification of a Looker data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"explore\": {\n          \"description\": \"Name of a Looker model explore.\",\n          \"type\": \"string\"\n        },\n        \"model\": {\n          \"description\": \"Name of a Looker model.\",\n          \"type\": \"string\"\n        },\n        \"instanceUri\": {\n          \"description\": \"A Looker instance URL.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"WaterfallChartSeries\": {\n      \"id\": \"WaterfallChartSeries\",\n      \"description\": \"A single series of data for a waterfall chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"subtotalColumnsStyle\": {\n          \"description\": \"Styles for all subtotal columns in this series.\",\n          \"$ref\": \"WaterfallChartColumnStyle\"\n        },\n        \"data\": {\n          \"description\": \"The data being visualized in this series.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"positiveColumnsStyle\": {\n          \"description\": \"Styles for all columns in this series with positive values.\",\n          \"$ref\": \"WaterfallChartColumnStyle\"\n        },\n        \"hideTrailingSubtotal\": {\n          \"description\": \"True to hide the subtotal column from the end of the series. By default, a subtotal column will appear at the end of each series. Setting this field to true will hide that subtotal column for this series.\",\n          \"type\": \"boolean\"\n        },\n        \"dataLabel\": {\n          \"description\": \"Information about the data labels for this series.\",\n          \"$ref\": \"DataLabel\"\n        },\n        \"customSubtotals\": {\n          \"description\": \"Custom subtotal columns appearing in this series. The order in which subtotals are defined is not significant. Only one subtotal may be defined for each data point.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"WaterfallChartCustomSubtotal\"\n          }\n        },\n        \"negativeColumnsStyle\": {\n          \"description\": \"Styles for all columns in this series with negative values.\",\n          \"$ref\": \"WaterfallChartColumnStyle\"\n        }\n      }\n    },\n    \"BandingProperties\": {\n      \"id\": \"BandingProperties\",\n      \"description\": \"Properties referring a single dimension (either row or column). If both BandedRange.row_properties and BandedRange.column_properties are set, the fill colors are applied to cells according to the following rules: * header_color and footer_color take priority over band colors. * first_band_color takes priority over second_band_color. * row_properties takes priority over column_properties. For example, the first row color takes priority over the first column color, but the first column color takes priority over the second row color. Similarly, the row header takes priority over the column header in the top left cell, but the column header takes priority over the first row color if the row header is not set.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"headerColorStyle\": {\n          \"description\": \"The color of the first row or column. If this field is set, the first row or column is filled with this color and the colors alternate between first_band_color and second_band_color starting from the second row or column. Otherwise, the first row or column is filled with first_band_color and the colors proceed to alternate as they normally would. If header_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"headerColor\": {\n          \"description\": \"The color of the first row or column. If this field is set, the first row or column is filled with this color and the colors alternate between first_band_color and second_band_color starting from the second row or column. Otherwise, the first row or column is filled with first_band_color and the colors proceed to alternate as they normally would. Deprecated: Use header_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"secondBandColor\": {\n          \"description\": \"The second color that is alternating. (Required) Deprecated: Use second_band_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"firstBandColor\": {\n          \"description\": \"The first color that is alternating. (Required) Deprecated: Use first_band_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"footerColor\": {\n          \"description\": \"The color of the last row or column. If this field is not set, the last row or column is filled with either first_band_color or second_band_color, depending on the color of the previous row or column. Deprecated: Use footer_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"footerColorStyle\": {\n          \"description\": \"The color of the last row or column. If this field is not set, the last row or column is filled with either first_band_color or second_band_color, depending on the color of the previous row or column. If footer_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"firstBandColorStyle\": {\n          \"description\": \"The first color that is alternating. (Required) If first_band_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"secondBandColorStyle\": {\n          \"description\": \"The second color that is alternating. (Required) If second_band_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      }\n    },\n    \"SetDataValidationRequest\": {\n      \"id\": \"SetDataValidationRequest\",\n      \"description\": \"Sets a data validation rule to every cell in the range. To clear validation in a range, call this with no rule specified.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filteredRowsIncluded\": {\n          \"description\": \"Optional. If true, the data validation rule will be applied to the filtered rows as well.\",\n          \"type\": \"boolean\"\n        },\n        \"range\": {\n          \"description\": \"The range the data validation rule should apply to.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"rule\": {\n          \"description\": \"The data validation rule to set on each cell in the range, or empty to clear the data validation in the range.\",\n          \"$ref\": \"DataValidationRule\"\n        }\n      }\n    },\n    \"BatchUpdateValuesResponse\": {\n      \"description\": \"The response when updating a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"responses\": {\n          \"items\": {\n            \"$ref\": \"UpdateValuesResponse\"\n          },\n          \"description\": \"One UpdateValuesResponse per requested range, in the same order as the requests appeared.\",\n          \"type\": \"array\"\n        },\n        \"totalUpdatedCells\": {\n          \"description\": \"The total number of cells updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"totalUpdatedSheets\": {\n          \"format\": \"int32\",\n          \"description\": \"The total number of sheets where at least one cell in the sheet was updated.\",\n          \"type\": \"integer\"\n        },\n        \"totalUpdatedRows\": {\n          \"description\": \"The total number of rows where at least one cell in the row was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"totalUpdatedColumns\": {\n          \"format\": \"int32\",\n          \"description\": \"The total number of columns where at least one cell in the column was updated.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"BatchUpdateValuesResponse\"\n    },\n    \"AddBandingResponse\": {\n      \"description\": \"The result of adding a banded range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bandedRange\": {\n          \"description\": \"The banded range that was added.\",\n          \"$ref\": \"BandedRange\"\n        }\n      },\n      \"id\": \"AddBandingResponse\"\n    },\n    \"TableRowsProperties\": {\n      \"description\": \"The table row properties.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"secondBandColorStyle\": {\n          \"description\": \"The second color that is alternating. If this field is set, the second banded row is filled with the specified color. Otherwise, the second banded row is filled with a default color.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"firstBandColorStyle\": {\n          \"description\": \"The first color that is alternating. If this field is set, the first banded row is filled with the specified color. Otherwise, the first banded row is filled with a default color.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"headerColorStyle\": {\n          \"description\": \"The color of the header row. If this field is set, the header row is filled with the specified color. Otherwise, the header row is filled with a default color.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"footerColorStyle\": {\n          \"description\": \"The color of the last row. If this field is not set a footer is not added, the last row is filled with either first_band_color_style or second_band_color_style, depending on the color of the previous row. If updating an existing table without a footer to have a footer, the range will be expanded by 1 row. If updating an existing table with a footer and removing a footer, the range will be shrunk by 1 row.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      },\n      \"id\": \"TableRowsProperties\"\n    },\n    \"PivotTable\": {\n      \"description\": \"A pivot table.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"items\": {\n            \"$ref\": \"PivotValue\"\n          },\n          \"description\": \"A list of values to include in the pivot table.\",\n          \"type\": \"array\"\n        },\n        \"criteria\": {\n          \"description\": \"An optional mapping of filters per source column offset. The filters are applied before aggregating data into the pivot table. The map's key is the column offset of the source range that you want to filter, and the value is the criteria for that column. For example, if the source was `C10:E15`, a key of `0` will have the filter for column `C`, whereas the key `1` is for column `D`. This field is deprecated in favor of filter_specs.\",\n          \"deprecated\": true,\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"PivotFilterCriteria\"\n          }\n        },\n        \"valueLayout\": {\n          \"enum\": [\n            \"HORIZONTAL\",\n            \"VERTICAL\"\n          ],\n          \"description\": \"Whether values should be listed horizontally (as columns) or vertically (as rows).\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Values are laid out horizontally (as columns).\",\n            \"Values are laid out vertically (as rows).\"\n          ]\n        },\n        \"filterSpecs\": {\n          \"description\": \"The filters applied to the source columns before aggregating data for the pivot table. Both criteria and filter_specs are populated in responses. If both fields are specified in an update request, this field takes precedence.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"PivotFilterSpec\"\n          }\n        },\n        \"source\": {\n          \"description\": \"The range the pivot table is reading data from.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"columns\": {\n          \"items\": {\n            \"$ref\": \"PivotGroup\"\n          },\n          \"description\": \"Each column grouping in the pivot table.\",\n          \"type\": \"array\"\n        },\n        \"dataSourceId\": {\n          \"description\": \"The ID of the data source the pivot table is reading data from.\",\n          \"type\": \"string\"\n        },\n        \"rows\": {\n          \"items\": {\n            \"$ref\": \"PivotGroup\"\n          },\n          \"description\": \"Each row grouping in the pivot table.\",\n          \"type\": \"array\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"Output only. The data execution status for data source pivot tables.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataExecutionStatus\"\n        }\n      },\n      \"id\": \"PivotTable\"\n    },\n    \"DataSourceObjectReferences\": {\n      \"id\": \"DataSourceObjectReferences\",\n      \"description\": \"A list of references to data source objects.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"references\": {\n          \"description\": \"The references.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataSourceObjectReference\"\n          }\n        }\n      }\n    },\n    \"BatchUpdateValuesRequest\": {\n      \"id\": \"BatchUpdateValuesRequest\",\n      \"description\": \"The request for updating more than one range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"responseValueRenderOption\": {\n          \"description\": \"Determines how values in the response should be rendered. The default render option is FORMATTED_VALUE.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n            \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n            \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n          ],\n          \"enum\": [\n            \"FORMATTED_VALUE\",\n            \"UNFORMATTED_VALUE\",\n            \"FORMULA\"\n          ]\n        },\n        \"data\": {\n          \"items\": {\n            \"$ref\": \"ValueRange\"\n          },\n          \"description\": \"The new values to apply to the spreadsheet.\",\n          \"type\": \"array\"\n        },\n        \"responseDateTimeRenderOption\": {\n          \"enum\": [\n            \"SERIAL_NUMBER\",\n            \"FORMATTED_STRING\"\n          ],\n          \"description\": \"Determines how dates, times, and durations in the response should be rendered. This is ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n            \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n          ]\n        },\n        \"valueInputOption\": {\n          \"description\": \"How the input data should be interpreted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default input value. This value must not be used.\",\n            \"The values the user has entered will not be parsed and will be stored as-is.\",\n            \"The values will be parsed as if the user typed them into the UI. Numbers will stay as numbers, but strings may be converted to numbers, dates, etc. following the same rules that are applied when entering text into a cell via the Google Sheets UI.\"\n          ],\n          \"enum\": [\n            \"INPUT_VALUE_OPTION_UNSPECIFIED\",\n            \"RAW\",\n            \"USER_ENTERED\"\n          ]\n        },\n        \"includeValuesInResponse\": {\n          \"description\": \"Determines if the update response should include the values of the cells that were updated. By default, responses do not include the updated values. The `updatedData` field within each of the BatchUpdateValuesResponse.responses contains the updated values. If the range to write was larger than the range actually written, the response includes all values in the requested range (excluding trailing empty rows and columns).\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"DataSourceRefreshSchedule\": {\n      \"id\": \"DataSourceRefreshSchedule\",\n      \"description\": \"Schedule for refreshing the data source. Data sources in the spreadsheet are refreshed within a time interval. You can specify the start time by clicking the Scheduled Refresh button in the Sheets editor, but the interval is fixed at 4 hours. For example, if you specify a start time of 8 AM , the refresh will take place between 8 AM and 12 PM every day.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"refreshScope\": {\n          \"description\": \"The scope of the refresh. Must be ALL_DATA_SOURCES.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Refreshes all data sources and their associated data source objects in the spreadsheet.\"\n          ],\n          \"enum\": [\n            \"DATA_SOURCE_REFRESH_SCOPE_UNSPECIFIED\",\n            \"ALL_DATA_SOURCES\"\n          ]\n        },\n        \"enabled\": {\n          \"description\": \"True if the refresh schedule is enabled, or false otherwise.\",\n          \"type\": \"boolean\"\n        },\n        \"weeklySchedule\": {\n          \"description\": \"Weekly refresh schedule.\",\n          \"$ref\": \"DataSourceRefreshWeeklySchedule\"\n        },\n        \"monthlySchedule\": {\n          \"description\": \"Monthly refresh schedule.\",\n          \"$ref\": \"DataSourceRefreshMonthlySchedule\"\n        },\n        \"dailySchedule\": {\n          \"description\": \"Daily refresh schedule.\",\n          \"$ref\": \"DataSourceRefreshDailySchedule\"\n        },\n        \"nextRun\": {\n          \"description\": \"Output only. The time interval of the next run.\",\n          \"readOnly\": true,\n          \"$ref\": \"Interval\"\n        }\n      }\n    },\n    \"InterpolationPoint\": {\n      \"id\": \"InterpolationPoint\",\n      \"description\": \"A single interpolation point on a gradient conditional format. These pin the gradient color scale according to the color, type and value chosen.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"color\": {\n          \"description\": \"The color this interpolation point should use. Deprecated: Use color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"colorStyle\": {\n          \"description\": \"The color this interpolation point should use. If color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"type\": {\n          \"enum\": [\n            \"INTERPOLATION_POINT_TYPE_UNSPECIFIED\",\n            \"MIN\",\n            \"MAX\",\n            \"NUMBER\",\n            \"PERCENT\",\n            \"PERCENTILE\"\n          ],\n          \"description\": \"How the value should be interpreted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"The interpolation point uses the minimum value in the cells over the range of the conditional format.\",\n            \"The interpolation point uses the maximum value in the cells over the range of the conditional format.\",\n            \"The interpolation point uses exactly the value in InterpolationPoint.value.\",\n            \"The interpolation point is the given percentage over all the cells in the range of the conditional format. This is equivalent to `NUMBER` if the value was: `=(MAX(FLATTEN(range)) * (value / 100)) + (MIN(FLATTEN(range)) * (1 - (value / 100)))` (where errors in the range are ignored when flattening).\",\n            \"The interpolation point is the given percentile over all the cells in the range of the conditional format. This is equivalent to `NUMBER` if the value was: `=PERCENTILE(FLATTEN(range), value / 100)` (where errors in the range are ignored when flattening).\"\n          ]\n        },\n        \"value\": {\n          \"description\": \"The value this interpolation point uses. May be a formula. Unused if type is MIN or MAX.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"PivotValue\": {\n      \"description\": \"The definition of how a value in a pivot table should be calculated.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"calculatedDisplayType\": {\n          \"description\": \"If specified, indicates that pivot values should be displayed as the result of a calculation with another pivot value. For example, if calculated_display_type is specified as PERCENT_OF_GRAND_TOTAL, all the pivot values are displayed as the percentage of the grand total. In the Sheets editor, this is referred to as \\\"Show As\\\" in the value section of a pivot table.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Shows the pivot values as percentage of the row total values.\",\n            \"Shows the pivot values as percentage of the column total values.\",\n            \"Shows the pivot values as percentage of the grand total values.\"\n          ],\n          \"enum\": [\n            \"PIVOT_VALUE_CALCULATED_DISPLAY_TYPE_UNSPECIFIED\",\n            \"PERCENT_OF_ROW_TOTAL\",\n            \"PERCENT_OF_COLUMN_TOTAL\",\n            \"PERCENT_OF_GRAND_TOTAL\"\n          ]\n        },\n        \"formula\": {\n          \"description\": \"A custom formula to calculate the value. The formula must start with an `=` character.\",\n          \"type\": \"string\"\n        },\n        \"name\": {\n          \"description\": \"A name to use for the value.\",\n          \"type\": \"string\"\n        },\n        \"sourceColumnOffset\": {\n          \"description\": \"The column offset of the source range that this value reads from. For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this value refers to column `C`, whereas the offset `1` would refer to column `D`.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"dataSourceColumnReference\": {\n          \"description\": \"The reference to the data source column that this value reads from.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"summarizeFunction\": {\n          \"description\": \"A function to summarize the value. If formula is set, the only supported values are SUM and CUSTOM. If sourceColumnOffset is set, then `CUSTOM` is not supported.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default, do not use.\",\n            \"Corresponds to the `SUM` function.\",\n            \"Corresponds to the `COUNTA` function.\",\n            \"Corresponds to the `COUNT` function.\",\n            \"Corresponds to the `COUNTUNIQUE` function.\",\n            \"Corresponds to the `AVERAGE` function.\",\n            \"Corresponds to the `MAX` function.\",\n            \"Corresponds to the `MIN` function.\",\n            \"Corresponds to the `MEDIAN` function.\",\n            \"Corresponds to the `PRODUCT` function.\",\n            \"Corresponds to the `STDEV` function.\",\n            \"Corresponds to the `STDEVP` function.\",\n            \"Corresponds to the `VAR` function.\",\n            \"Corresponds to the `VARP` function.\",\n            \"Indicates the formula should be used as-is. Only valid if PivotValue.formula was set.\",\n            \"Indicates that the value is already summarized, and the summarization function is not explicitly specified. Used for Looker data source pivot tables where the value is already summarized.\"\n          ],\n          \"enum\": [\n            \"PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED\",\n            \"SUM\",\n            \"COUNTA\",\n            \"COUNT\",\n            \"COUNTUNIQUE\",\n            \"AVERAGE\",\n            \"MAX\",\n            \"MIN\",\n            \"MEDIAN\",\n            \"PRODUCT\",\n            \"STDEV\",\n            \"STDEVP\",\n            \"VAR\",\n            \"VARP\",\n            \"CUSTOM\",\n            \"NONE\"\n          ]\n        }\n      },\n      \"id\": \"PivotValue\"\n    },\n    \"AddChartResponse\": {\n      \"id\": \"AddChartResponse\",\n      \"description\": \"The result of adding a chart to a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"chart\": {\n          \"description\": \"The newly added chart.\",\n          \"$ref\": \"EmbeddedChart\"\n        }\n      }\n    },\n    \"GridRange\": {\n      \"id\": \"GridRange\",\n      \"description\": \"A range on a sheet. All indexes are zero-based. Indexes are half open, i.e. the start index is inclusive and the end index is exclusive -- [start_index, end_index). Missing indexes indicate the range is unbounded on that side. For example, if `\\\"Sheet1\\\"` is sheet ID 123456, then: `Sheet1!A1:A1 == sheet_id: 123456, start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: 1` `Sheet1!A3:B4 == sheet_id: 123456, start_row_index: 2, end_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1!A:B == sheet_id: 123456, start_column_index: 0, end_column_index: 2` `Sheet1!A5:B == sheet_id: 123456, start_row_index: 4, start_column_index: 0, end_column_index: 2` `Sheet1 == sheet_id: 123456` The start index must always be less than or equal to the end index. If the start index equals the end index, then the range is empty. Empty ranges are typically not meaningful and are usually rendered in the UI as `#REF!`.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheetId\": {\n          \"description\": \"The sheet this range is on.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"endRowIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The end row (exclusive) of the range, or not set if unbounded.\",\n          \"type\": \"integer\"\n        },\n        \"startColumnIndex\": {\n          \"description\": \"The start column (inclusive) of the range, or not set if unbounded.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"startRowIndex\": {\n          \"description\": \"The start row (inclusive) of the range, or not set if unbounded.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"endColumnIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The end column (exclusive) of the range, or not set if unbounded.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"DataSourceParameter\": {\n      \"id\": \"DataSourceParameter\",\n      \"description\": \"A parameter in a data source's query. The parameter allows the user to pass in values from the spreadsheet into a query.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"namedRangeId\": {\n          \"description\": \"ID of a NamedRange. Its size must be 1x1.\",\n          \"type\": \"string\"\n        },\n        \"range\": {\n          \"description\": \"A range that contains the value of the parameter. Its size must be 1x1.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"name\": {\n          \"description\": \"Named parameter. Must be a legitimate identifier for the DataSource that supports it. For example, [BigQuery identifier](https://cloud.google.com/bigquery/docs/reference/standard-sql/lexical#identifiers).\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"ChartHistogramRule\": {\n      \"description\": \"Allows you to organize numeric values in a source data column into buckets of constant size.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"intervalSize\": {\n          \"format\": \"double\",\n          \"description\": \"The size of the buckets that are created. Must be positive.\",\n          \"type\": \"number\"\n        },\n        \"minValue\": {\n          \"description\": \"The minimum value at which items are placed into buckets. Values that are less than the minimum are grouped into a single bucket. If omitted, it is determined by the minimum item value.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        },\n        \"maxValue\": {\n          \"format\": \"double\",\n          \"description\": \"The maximum value at which items are placed into buckets. Values greater than the maximum are grouped into a single bucket. If omitted, it is determined by the maximum item value.\",\n          \"type\": \"number\"\n        }\n      },\n      \"id\": \"ChartHistogramRule\"\n    },\n    \"TreemapChartColorScale\": {\n      \"description\": \"A color scale for a treemap chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"maxValueColor\": {\n          \"description\": \"The background color for cells with a color value greater than or equal to maxValue. Defaults to #109618 if not specified. Deprecated: Use max_value_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"noDataColor\": {\n          \"description\": \"The background color for cells that have no color data associated with them. Defaults to #000000 if not specified. Deprecated: Use no_data_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"minValueColor\": {\n          \"description\": \"The background color for cells with a color value less than or equal to minValue. Defaults to #dc3912 if not specified. Deprecated: Use min_value_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"minValueColorStyle\": {\n          \"description\": \"The background color for cells with a color value less than or equal to minValue. Defaults to #dc3912 if not specified. If min_value_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"maxValueColorStyle\": {\n          \"description\": \"The background color for cells with a color value greater than or equal to maxValue. Defaults to #109618 if not specified. If max_value_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"noDataColorStyle\": {\n          \"description\": \"The background color for cells that have no color data associated with them. Defaults to #000000 if not specified. If no_data_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"midValueColor\": {\n          \"description\": \"The background color for cells with a color value at the midpoint between minValue and maxValue. Defaults to #efe6dc if not specified. Deprecated: Use mid_value_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"midValueColorStyle\": {\n          \"description\": \"The background color for cells with a color value at the midpoint between minValue and maxValue. Defaults to #efe6dc if not specified. If mid_value_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      },\n      \"id\": \"TreemapChartColorScale\"\n    },\n    \"PivotFilterCriteria\": {\n      \"description\": \"Criteria for showing/hiding rows in a pivot table.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"condition\": {\n          \"description\": \"A condition that must be true for values to be shown. (`visibleValues` does not override this -- even if a value is listed there, it is still hidden if it does not meet the condition.) Condition values that refer to ranges in A1-notation are evaluated relative to the pivot table sheet. References are treated absolutely, so are not filled down the pivot table. For example, a condition value of `=A1` on \\\"Pivot Table 1\\\" is treated as `'Pivot Table 1'!$A$1`. The source data of the pivot table can be referenced by column header name. For example, if the source data has columns named \\\"Revenue\\\" and \\\"Cost\\\" and a condition is applied to the \\\"Revenue\\\" column with type `NUMBER_GREATER` and value `=Cost`, then only columns where \\\"Revenue\\\" \\u003e \\\"Cost\\\" are included.\",\n          \"$ref\": \"BooleanCondition\"\n        },\n        \"visibleValues\": {\n          \"description\": \"Values that should be included. Values not listed here are excluded.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"visibleByDefault\": {\n          \"description\": \"Whether values are visible by default. If true, the visible_values are ignored, all values that meet condition (if specified) are shown. If false, values that are both in visible_values and meet condition are shown.\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"PivotFilterCriteria\"\n    },\n    \"TextToColumnsRequest\": {\n      \"id\": \"TextToColumnsRequest\",\n      \"description\": \"Splits a column of text into multiple columns, based on a delimiter in each cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"delimiterType\": {\n          \"enum\": [\n            \"DELIMITER_TYPE_UNSPECIFIED\",\n            \"COMMA\",\n            \"SEMICOLON\",\n            \"PERIOD\",\n            \"SPACE\",\n            \"CUSTOM\",\n            \"AUTODETECT\"\n          ],\n          \"description\": \"The delimiter type to use.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value. This value must not be used.\",\n            \"\\\",\\\"\",\n            \"\\\";\\\"\",\n            \"\\\".\\\"\",\n            \"\\\" \\\"\",\n            \"A custom value as defined in delimiter.\",\n            \"Automatically detect columns.\"\n          ]\n        },\n        \"source\": {\n          \"description\": \"The source data range. This must span exactly one column.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"delimiter\": {\n          \"description\": \"The delimiter to use. Used only if delimiterType is CUSTOM.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"Request\": {\n      \"id\": \"Request\",\n      \"description\": \"A single kind of update to apply to a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"deleteNamedRange\": {\n          \"description\": \"Deletes a named range.\",\n          \"$ref\": \"DeleteNamedRangeRequest\"\n        },\n        \"refreshDataSource\": {\n          \"description\": \"Refreshes one or multiple data sources and associated dbobjects.\",\n          \"$ref\": \"RefreshDataSourceRequest\"\n        },\n        \"updateCells\": {\n          \"description\": \"Updates many cells at once.\",\n          \"$ref\": \"UpdateCellsRequest\"\n        },\n        \"updateNamedRange\": {\n          \"description\": \"Updates a named range.\",\n          \"$ref\": \"UpdateNamedRangeRequest\"\n        },\n        \"setBasicFilter\": {\n          \"description\": \"Sets the basic filter on a sheet.\",\n          \"$ref\": \"SetBasicFilterRequest\"\n        },\n        \"updateSpreadsheetProperties\": {\n          \"description\": \"Updates the spreadsheet's properties.\",\n          \"$ref\": \"UpdateSpreadsheetPropertiesRequest\"\n        },\n        \"cancelDataSourceRefresh\": {\n          \"description\": \"Cancels refreshes of one or multiple data sources and associated dbobjects.\",\n          \"$ref\": \"CancelDataSourceRefreshRequest\"\n        },\n        \"updateDimensionProperties\": {\n          \"description\": \"Updates dimensions' properties.\",\n          \"$ref\": \"UpdateDimensionPropertiesRequest\"\n        },\n        \"updateTable\": {\n          \"description\": \"Updates a table.\",\n          \"$ref\": \"UpdateTableRequest\"\n        },\n        \"updateSheetProperties\": {\n          \"description\": \"Updates a sheet's properties.\",\n          \"$ref\": \"UpdateSheetPropertiesRequest\"\n        },\n        \"duplicateFilterView\": {\n          \"description\": \"Duplicates a filter view.\",\n          \"$ref\": \"DuplicateFilterViewRequest\"\n        },\n        \"deleteBanding\": {\n          \"description\": \"Removes a banded range\",\n          \"$ref\": \"DeleteBandingRequest\"\n        },\n        \"deleteDuplicates\": {\n          \"description\": \"Removes rows containing duplicate values in specified columns of a cell range.\",\n          \"$ref\": \"DeleteDuplicatesRequest\"\n        },\n        \"deleteSheet\": {\n          \"description\": \"Deletes a sheet.\",\n          \"$ref\": \"DeleteSheetRequest\"\n        },\n        \"createDeveloperMetadata\": {\n          \"description\": \"Creates new developer metadata\",\n          \"$ref\": \"CreateDeveloperMetadataRequest\"\n        },\n        \"addDimensionGroup\": {\n          \"description\": \"Creates a group over the specified range.\",\n          \"$ref\": \"AddDimensionGroupRequest\"\n        },\n        \"updateEmbeddedObjectBorder\": {\n          \"description\": \"Updates an embedded object's border.\",\n          \"$ref\": \"UpdateEmbeddedObjectBorderRequest\"\n        },\n        \"deleteDimensionGroup\": {\n          \"description\": \"Deletes a group over the specified range.\",\n          \"$ref\": \"DeleteDimensionGroupRequest\"\n        },\n        \"addSheet\": {\n          \"description\": \"Adds a sheet.\",\n          \"$ref\": \"AddSheetRequest\"\n        },\n        \"addDataSource\": {\n          \"description\": \"Adds a data source.\",\n          \"$ref\": \"AddDataSourceRequest\"\n        },\n        \"updateConditionalFormatRule\": {\n          \"description\": \"Updates an existing conditional format rule.\",\n          \"$ref\": \"UpdateConditionalFormatRuleRequest\"\n        },\n        \"randomizeRange\": {\n          \"description\": \"Randomizes the order of the rows in a range.\",\n          \"$ref\": \"RandomizeRangeRequest\"\n        },\n        \"repeatCell\": {\n          \"description\": \"Repeats a single cell across a range.\",\n          \"$ref\": \"RepeatCellRequest\"\n        },\n        \"insertDimension\": {\n          \"description\": \"Inserts new rows or columns in a sheet.\",\n          \"$ref\": \"InsertDimensionRequest\"\n        },\n        \"setDataValidation\": {\n          \"description\": \"Sets data validation for one or more cells.\",\n          \"$ref\": \"SetDataValidationRequest\"\n        },\n        \"addSlicer\": {\n          \"description\": \"Adds a slicer.\",\n          \"$ref\": \"AddSlicerRequest\"\n        },\n        \"updateEmbeddedObjectPosition\": {\n          \"description\": \"Updates an embedded object's (e.g. chart, image) position.\",\n          \"$ref\": \"UpdateEmbeddedObjectPositionRequest\"\n        },\n        \"updateChartSpec\": {\n          \"description\": \"Updates a chart's specifications.\",\n          \"$ref\": \"UpdateChartSpecRequest\"\n        },\n        \"addConditionalFormatRule\": {\n          \"description\": \"Adds a new conditional format rule.\",\n          \"$ref\": \"AddConditionalFormatRuleRequest\"\n        },\n        \"addProtectedRange\": {\n          \"description\": \"Adds a protected range.\",\n          \"$ref\": \"AddProtectedRangeRequest\"\n        },\n        \"insertRange\": {\n          \"description\": \"Inserts new cells in a sheet, shifting the existing cells.\",\n          \"$ref\": \"InsertRangeRequest\"\n        },\n        \"updateProtectedRange\": {\n          \"description\": \"Updates a protected range.\",\n          \"$ref\": \"UpdateProtectedRangeRequest\"\n        },\n        \"addChart\": {\n          \"description\": \"Adds a chart.\",\n          \"$ref\": \"AddChartRequest\"\n        },\n        \"updateDimensionGroup\": {\n          \"description\": \"Updates the state of the specified group.\",\n          \"$ref\": \"UpdateDimensionGroupRequest\"\n        },\n        \"addTable\": {\n          \"description\": \"Adds a table.\",\n          \"$ref\": \"AddTableRequest\"\n        },\n        \"updateFilterView\": {\n          \"description\": \"Updates the properties of a filter view.\",\n          \"$ref\": \"UpdateFilterViewRequest\"\n        },\n        \"updateSlicerSpec\": {\n          \"description\": \"Updates a slicer's specifications.\",\n          \"$ref\": \"UpdateSlicerSpecRequest\"\n        },\n        \"deleteFilterView\": {\n          \"description\": \"Deletes a filter view from a sheet.\",\n          \"$ref\": \"DeleteFilterViewRequest\"\n        },\n        \"deleteProtectedRange\": {\n          \"description\": \"Deletes a protected range.\",\n          \"$ref\": \"DeleteProtectedRangeRequest\"\n        },\n        \"deleteRange\": {\n          \"description\": \"Deletes a range of cells from a sheet, shifting the remaining cells.\",\n          \"$ref\": \"DeleteRangeRequest\"\n        },\n        \"textToColumns\": {\n          \"description\": \"Converts a column of text into many columns of text.\",\n          \"$ref\": \"TextToColumnsRequest\"\n        },\n        \"findReplace\": {\n          \"description\": \"Finds and replaces occurrences of some text with other text.\",\n          \"$ref\": \"FindReplaceRequest\"\n        },\n        \"copyPaste\": {\n          \"description\": \"Copies data from one area and pastes it to another.\",\n          \"$ref\": \"CopyPasteRequest\"\n        },\n        \"updateDataSource\": {\n          \"description\": \"Updates a data source.\",\n          \"$ref\": \"UpdateDataSourceRequest\"\n        },\n        \"clearBasicFilter\": {\n          \"description\": \"Clears the basic filter on a sheet.\",\n          \"$ref\": \"ClearBasicFilterRequest\"\n        },\n        \"appendDimension\": {\n          \"description\": \"Appends dimensions to the end of a sheet.\",\n          \"$ref\": \"AppendDimensionRequest\"\n        },\n        \"updateBorders\": {\n          \"description\": \"Updates the borders in a range of cells.\",\n          \"$ref\": \"UpdateBordersRequest\"\n        },\n        \"mergeCells\": {\n          \"description\": \"Merges cells together.\",\n          \"$ref\": \"MergeCellsRequest\"\n        },\n        \"duplicateSheet\": {\n          \"description\": \"Duplicates a sheet.\",\n          \"$ref\": \"DuplicateSheetRequest\"\n        },\n        \"updateBanding\": {\n          \"description\": \"Updates a banded range\",\n          \"$ref\": \"UpdateBandingRequest\"\n        },\n        \"autoFill\": {\n          \"description\": \"Automatically fills in more data based on existing data.\",\n          \"$ref\": \"AutoFillRequest\"\n        },\n        \"deleteDeveloperMetadata\": {\n          \"description\": \"Deletes developer metadata\",\n          \"$ref\": \"DeleteDeveloperMetadataRequest\"\n        },\n        \"autoResizeDimensions\": {\n          \"description\": \"Automatically resizes one or more dimensions based on the contents of the cells in that dimension.\",\n          \"$ref\": \"AutoResizeDimensionsRequest\"\n        },\n        \"appendCells\": {\n          \"description\": \"Appends cells after the last row with data in a sheet.\",\n          \"$ref\": \"AppendCellsRequest\"\n        },\n        \"sortRange\": {\n          \"description\": \"Sorts data in a range.\",\n          \"$ref\": \"SortRangeRequest\"\n        },\n        \"unmergeCells\": {\n          \"description\": \"Unmerges merged cells.\",\n          \"$ref\": \"UnmergeCellsRequest\"\n        },\n        \"moveDimension\": {\n          \"description\": \"Moves rows or columns to another location in a sheet.\",\n          \"$ref\": \"MoveDimensionRequest\"\n        },\n        \"deleteTable\": {\n          \"description\": \"A request for deleting a table.\",\n          \"$ref\": \"DeleteTableRequest\"\n        },\n        \"addNamedRange\": {\n          \"description\": \"Adds a named range.\",\n          \"$ref\": \"AddNamedRangeRequest\"\n        },\n        \"deleteDimension\": {\n          \"description\": \"Deletes rows or columns in a sheet.\",\n          \"$ref\": \"DeleteDimensionRequest\"\n        },\n        \"deleteEmbeddedObject\": {\n          \"description\": \"Deletes an embedded object (e.g, chart, image) in a sheet.\",\n          \"$ref\": \"DeleteEmbeddedObjectRequest\"\n        },\n        \"addFilterView\": {\n          \"description\": \"Adds a filter view.\",\n          \"$ref\": \"AddFilterViewRequest\"\n        },\n        \"cutPaste\": {\n          \"description\": \"Cuts data from one area and pastes it to another.\",\n          \"$ref\": \"CutPasteRequest\"\n        },\n        \"trimWhitespace\": {\n          \"description\": \"Trims cells of whitespace (such as spaces, tabs, or new lines).\",\n          \"$ref\": \"TrimWhitespaceRequest\"\n        },\n        \"pasteData\": {\n          \"description\": \"Pastes data (HTML or delimited) into a sheet.\",\n          \"$ref\": \"PasteDataRequest\"\n        },\n        \"addBanding\": {\n          \"description\": \"Adds a new banded range\",\n          \"$ref\": \"AddBandingRequest\"\n        },\n        \"deleteDataSource\": {\n          \"description\": \"Deletes a data source.\",\n          \"$ref\": \"DeleteDataSourceRequest\"\n        },\n        \"updateDeveloperMetadata\": {\n          \"description\": \"Updates an existing developer metadata entry\",\n          \"$ref\": \"UpdateDeveloperMetadataRequest\"\n        },\n        \"deleteConditionalFormatRule\": {\n          \"description\": \"Deletes an existing conditional format rule.\",\n          \"$ref\": \"DeleteConditionalFormatRuleRequest\"\n        }\n      }\n    },\n    \"LineStyle\": {\n      \"id\": \"LineStyle\",\n      \"description\": \"Properties that describe the style of a line.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"description\": \"The dash type of the line.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"No dash type, which is equivalent to a non-visible line.\",\n            \"A custom dash for a line. Modifying the exact custom dash style is currently unsupported.\",\n            \"A solid line.\",\n            \"A dotted line.\",\n            \"A dashed line where the dashes have \\\"medium\\\" length.\",\n            \"A line that alternates between a \\\"medium\\\" dash and a dot.\",\n            \"A dashed line where the dashes have \\\"long\\\" length.\",\n            \"A line that alternates between a \\\"long\\\" dash and a dot.\"\n          ],\n          \"enum\": [\n            \"LINE_DASH_TYPE_UNSPECIFIED\",\n            \"INVISIBLE\",\n            \"CUSTOM\",\n            \"SOLID\",\n            \"DOTTED\",\n            \"MEDIUM_DASHED\",\n            \"MEDIUM_DASHED_DOTTED\",\n            \"LONG_DASHED\",\n            \"LONG_DASHED_DOTTED\"\n          ]\n        },\n        \"width\": {\n          \"description\": \"The thickness of the line, in px.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"WaterfallChartDomain\": {\n      \"description\": \"The domain of a waterfall chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"reversed\": {\n          \"description\": \"True to reverse the order of the domain values (horizontal axis).\",\n          \"type\": \"boolean\"\n        },\n        \"data\": {\n          \"description\": \"The data of the WaterfallChartDomain.\",\n          \"$ref\": \"ChartData\"\n        }\n      },\n      \"id\": \"WaterfallChartDomain\"\n    },\n    \"DataSourceSheetProperties\": {\n      \"id\": \"DataSourceSheetProperties\",\n      \"description\": \"Additional properties of a DATA_SOURCE sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"ID of the DataSource the sheet is connected to.\",\n          \"type\": \"string\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"The data execution status.\",\n          \"$ref\": \"DataExecutionStatus\"\n        },\n        \"columns\": {\n          \"description\": \"The columns displayed on the sheet, corresponding to the values in RowData.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataSourceColumn\"\n          }\n        }\n      }\n    },\n    \"ChartGroupRule\": {\n      \"description\": \"An optional setting on the ChartData of the domain of a data source chart that defines buckets for the values in the domain rather than breaking out each individual value. For example, when plotting a data source chart, you can specify a histogram rule on the domain (it should only contain numeric values), grouping its values into buckets. Any values of a chart series that fall into the same bucket are aggregated based on the aggregate_type.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dateTimeRule\": {\n          \"description\": \"A ChartDateTimeRule.\",\n          \"$ref\": \"ChartDateTimeRule\"\n        },\n        \"histogramRule\": {\n          \"description\": \"A ChartHistogramRule\",\n          \"$ref\": \"ChartHistogramRule\"\n        }\n      },\n      \"id\": \"ChartGroupRule\"\n    },\n    \"DeleteDimensionRequest\": {\n      \"description\": \" Deletes the dimensions from the sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The dimensions to delete from the sheet.\",\n          \"$ref\": \"DimensionRange\"\n        }\n      },\n      \"id\": \"DeleteDimensionRequest\"\n    },\n    \"UpdateDataSourceRequest\": {\n      \"description\": \"Updates a data source. After the data source is updated successfully, an execution is triggered to refresh the associated DATA_SOURCE sheet to read data from the updated data source. The request requires an additional `bigquery.readonly` OAuth scope if you are updating a BigQuery data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSource\": {\n          \"description\": \"The data source to update.\",\n          \"$ref\": \"DataSource\"\n        },\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `dataSource` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"UpdateDataSourceRequest\"\n    },\n    \"UpdateBordersRequest\": {\n      \"description\": \"Updates the borders of a range. If a field is not set in the request, that means the border remains as-is. For example, with two subsequent UpdateBordersRequest: 1. range: A1:A5 `{ top: RED, bottom: WHITE }` 2. range: A1:A5 `{ left: BLUE }` That would result in A1:A5 having a borders of `{ top: RED, bottom: WHITE, left: BLUE }`. If you want to clear a border, explicitly set the style to NONE.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"right\": {\n          \"description\": \"The border to put at the right of the range.\",\n          \"$ref\": \"Border\"\n        },\n        \"innerHorizontal\": {\n          \"description\": \"The horizontal border to put within the range.\",\n          \"$ref\": \"Border\"\n        },\n        \"bottom\": {\n          \"description\": \"The border to put at the bottom of the range.\",\n          \"$ref\": \"Border\"\n        },\n        \"range\": {\n          \"description\": \"The range whose borders should be updated.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"top\": {\n          \"description\": \"The border to put at the top of the range.\",\n          \"$ref\": \"Border\"\n        },\n        \"innerVertical\": {\n          \"description\": \"The vertical border to put within the range.\",\n          \"$ref\": \"Border\"\n        },\n        \"left\": {\n          \"description\": \"The border to put at the left of the range.\",\n          \"$ref\": \"Border\"\n        }\n      },\n      \"id\": \"UpdateBordersRequest\"\n    },\n    \"BatchClearValuesByDataFilterResponse\": {\n      \"description\": \"The response when clearing a range of values selected with DataFilters in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"clearedRanges\": {\n          \"description\": \"The ranges that were cleared, in [A1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell). If the requests are for an unbounded range or a range larger than the bounds of the sheet, this is the actual ranges that were cleared, bounded to the sheet's limits.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      },\n      \"id\": \"BatchClearValuesByDataFilterResponse\"\n    },\n    \"DataValidationRule\": {\n      \"id\": \"DataValidationRule\",\n      \"description\": \"A data validation rule.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"inputMessage\": {\n          \"description\": \"A message to show the user when adding data to the cell.\",\n          \"type\": \"string\"\n        },\n        \"strict\": {\n          \"description\": \"True if invalid data should be rejected.\",\n          \"type\": \"boolean\"\n        },\n        \"showCustomUi\": {\n          \"description\": \"True if the UI should be customized based on the kind of condition. If true, \\\"List\\\" conditions will show a dropdown.\",\n          \"type\": \"boolean\"\n        },\n        \"condition\": {\n          \"description\": \"The condition that data in the cell must match.\",\n          \"$ref\": \"BooleanCondition\"\n        }\n      }\n    },\n    \"SlicerSpec\": {\n      \"id\": \"SlicerSpec\",\n      \"description\": \"The specifications of a slicer.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataRange\": {\n          \"description\": \"The data range of the slicer.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"title\": {\n          \"description\": \"The title of the slicer.\",\n          \"type\": \"string\"\n        },\n        \"filterCriteria\": {\n          \"description\": \"The filtering criteria of the slicer.\",\n          \"$ref\": \"FilterCriteria\"\n        },\n        \"textFormat\": {\n          \"description\": \"The text format of title in the slicer. The link field is not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"columnIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based column index in the data table on which the filter is applied to.\",\n          \"type\": \"integer\"\n        },\n        \"backgroundColor\": {\n          \"description\": \"The background color of the slicer. Deprecated: Use background_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"applyToPivotTables\": {\n          \"description\": \"True if the filter should apply to pivot tables. If not set, default to `True`.\",\n          \"type\": \"boolean\"\n        },\n        \"horizontalAlignment\": {\n          \"enum\": [\n            \"HORIZONTAL_ALIGN_UNSPECIFIED\",\n            \"LEFT\",\n            \"CENTER\",\n            \"RIGHT\"\n          ],\n          \"description\": \"The horizontal alignment of title in the slicer. If unspecified, defaults to `LEFT`\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The horizontal alignment is not specified. Do not use this.\",\n            \"The text is explicitly aligned to the left of the cell.\",\n            \"The text is explicitly aligned to the center of the cell.\",\n            \"The text is explicitly aligned to the right of the cell.\"\n          ]\n        },\n        \"backgroundColorStyle\": {\n          \"description\": \"The background color of the slicer. If background_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      }\n    },\n    \"DuplicateSheetRequest\": {\n      \"id\": \"DuplicateSheetRequest\",\n      \"description\": \"Duplicates the contents of a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sourceSheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The sheet to duplicate. If the source sheet is of DATA_SOURCE type, its backing DataSource is also duplicated and associated with the new copy of the sheet. No data execution is triggered, the grid data of this sheet is also copied over but only available after the batch request completes.\",\n          \"type\": \"integer\"\n        },\n        \"insertSheetIndex\": {\n          \"description\": \"The zero-based index where the new sheet should be inserted. The index of all sheets after this are incremented.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"newSheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"If set, the ID of the new sheet. If not set, an ID is chosen. If set, the ID must not conflict with any existing sheet ID. If set, it must be non-negative.\",\n          \"type\": \"integer\"\n        },\n        \"newSheetName\": {\n          \"description\": \"The name of the new sheet. If empty, a new name is chosen for you.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"DuplicateFilterViewResponse\": {\n      \"description\": \"The result of a filter view being duplicated.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filter\": {\n          \"description\": \"The newly created filter.\",\n          \"$ref\": \"FilterView\"\n        }\n      },\n      \"id\": \"DuplicateFilterViewResponse\"\n    },\n    \"PointStyle\": {\n      \"description\": \"The style of a point on the chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"size\": {\n          \"format\": \"double\",\n          \"description\": \"The point size. If empty, a default size is used.\",\n          \"type\": \"number\"\n        },\n        \"shape\": {\n          \"enum\": [\n            \"POINT_SHAPE_UNSPECIFIED\",\n            \"CIRCLE\",\n            \"DIAMOND\",\n            \"HEXAGON\",\n            \"PENTAGON\",\n            \"SQUARE\",\n            \"STAR\",\n            \"TRIANGLE\",\n            \"X_MARK\"\n          ],\n          \"description\": \"The point shape. If empty or unspecified, a default shape is used.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value.\",\n            \"A circle shape.\",\n            \"A diamond shape.\",\n            \"A hexagon shape.\",\n            \"A pentagon shape.\",\n            \"A square shape.\",\n            \"A star shape.\",\n            \"A triangle shape.\",\n            \"An x-mark shape.\"\n          ]\n        }\n      },\n      \"id\": \"PointStyle\"\n    },\n    \"AddConditionalFormatRuleRequest\": {\n      \"id\": \"AddConditionalFormatRuleRequest\",\n      \"description\": \"Adds a new conditional format rule at the given index. All subsequent rules' indexes are incremented.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"index\": {\n          \"description\": \"The zero-based index where the rule should be inserted.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"rule\": {\n          \"description\": \"The rule to add.\",\n          \"$ref\": \"ConditionalFormatRule\"\n        }\n      }\n    },\n    \"PasteDataRequest\": {\n      \"id\": \"PasteDataRequest\",\n      \"description\": \"Inserts data into the spreadsheet starting at the specified coordinate.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"delimiter\": {\n          \"description\": \"The delimiter in the data.\",\n          \"type\": \"string\"\n        },\n        \"data\": {\n          \"description\": \"The data to insert.\",\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"description\": \"How the data should be pasted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Paste values, formulas, formats, and merges.\",\n            \"Paste the values ONLY without formats, formulas, or merges.\",\n            \"Paste the format and data validation only.\",\n            \"Like `PASTE_NORMAL` but without borders.\",\n            \"Paste the formulas only.\",\n            \"Paste the data validation only.\",\n            \"Paste the conditional formatting rules only.\"\n          ],\n          \"enum\": [\n            \"PASTE_NORMAL\",\n            \"PASTE_VALUES\",\n            \"PASTE_FORMAT\",\n            \"PASTE_NO_BORDERS\",\n            \"PASTE_FORMULA\",\n            \"PASTE_DATA_VALIDATION\",\n            \"PASTE_CONDITIONAL_FORMATTING\"\n          ]\n        },\n        \"html\": {\n          \"description\": \"True if the data is HTML.\",\n          \"type\": \"boolean\"\n        },\n        \"coordinate\": {\n          \"description\": \"The coordinate at which the data should start being inserted.\",\n          \"$ref\": \"GridCoordinate\"\n        }\n      }\n    },\n    \"DeleteNamedRangeRequest\": {\n      \"description\": \"Removes the named range with the given ID from the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"namedRangeId\": {\n          \"description\": \"The ID of the named range to delete.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"DeleteNamedRangeRequest\"\n    },\n    \"RepeatCellRequest\": {\n      \"description\": \"Updates all cells in the range to the values in the given Cell object. Only the fields listed in the fields field are updated; others are unchanged. If writing a cell with a formula, the formula's ranges will automatically increment for each field in the range. For example, if writing a cell with formula `=A1` into range B2:C4, B2 would be `=A1`, B3 would be `=A2`, B4 would be `=A3`, C2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`. To keep the formula's ranges static, use the `$` indicator. For example, use the formula `=$A$1` to prevent both the row and the column from incrementing.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `cell` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        },\n        \"range\": {\n          \"description\": \"The range to repeat the cell in.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"cell\": {\n          \"description\": \"The data to write.\",\n          \"$ref\": \"CellData\"\n        }\n      },\n      \"id\": \"RepeatCellRequest\"\n    },\n    \"NamedRange\": {\n      \"description\": \"A named range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"description\": \"The name of the named range.\",\n          \"type\": \"string\"\n        },\n        \"namedRangeId\": {\n          \"description\": \"The ID of the named range.\",\n          \"type\": \"string\"\n        },\n        \"range\": {\n          \"description\": \"The range this represents.\",\n          \"$ref\": \"GridRange\"\n        }\n      },\n      \"id\": \"NamedRange\"\n    },\n    \"UpdateSheetPropertiesRequest\": {\n      \"description\": \"Updates properties of the sheet with the specified sheetId.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"properties\": {\n          \"description\": \"The properties to update.\",\n          \"$ref\": \"SheetProperties\"\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `properties` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        }\n      },\n      \"id\": \"UpdateSheetPropertiesRequest\"\n    },\n    \"ColorStyle\": {\n      \"id\": \"ColorStyle\",\n      \"description\": \"A color value.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rgbColor\": {\n          \"description\": \"RGB color. The [`alpha`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/other#Color.FIELDS.alpha) value in the [`Color`](https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/other#color) object isn't generally supported.\",\n          \"$ref\": \"Color\"\n        },\n        \"themeColor\": {\n          \"enum\": [\n            \"THEME_COLOR_TYPE_UNSPECIFIED\",\n            \"TEXT\",\n            \"BACKGROUND\",\n            \"ACCENT1\",\n            \"ACCENT2\",\n            \"ACCENT3\",\n            \"ACCENT4\",\n            \"ACCENT5\",\n            \"ACCENT6\",\n            \"LINK\"\n          ],\n          \"description\": \"Theme color.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Unspecified theme color\",\n            \"Represents the primary text color\",\n            \"Represents the primary background color\",\n            \"Represents the first accent color\",\n            \"Represents the second accent color\",\n            \"Represents the third accent color\",\n            \"Represents the fourth accent color\",\n            \"Represents the fifth accent color\",\n            \"Represents the sixth accent color\",\n            \"Represents the color to use for hyperlinks\"\n          ]\n        }\n      }\n    },\n    \"InsertRangeRequest\": {\n      \"description\": \"Inserts cells into a range, shifting the existing cells over or down.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"shiftDimension\": {\n          \"description\": \"The dimension which will be shifted when inserting cells. If ROWS, existing cells will be shifted down. If COLUMNS, existing cells will be shifted right.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ],\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ]\n        },\n        \"range\": {\n          \"description\": \"The range to insert new cells into. The range is constrained to the current sheet boundaries.\",\n          \"$ref\": \"GridRange\"\n        }\n      },\n      \"id\": \"InsertRangeRequest\"\n    },\n    \"AppendCellsRequest\": {\n      \"id\": \"AppendCellsRequest\",\n      \"description\": \"Adds new cells after the last row with data in a sheet, inserting new rows into the sheet if necessary.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheetId\": {\n          \"description\": \"The sheet ID to append the data to.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"fields\": {\n          \"description\": \"The fields of CellData that should be updated. At least one field must be specified. The root is the CellData; 'row.values.' should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        },\n        \"tableId\": {\n          \"description\": \"The ID of the table to append data to. The data will be only appended to the table body. This field also takes precedence over the `sheet_id` field.\",\n          \"type\": \"string\"\n        },\n        \"rows\": {\n          \"items\": {\n            \"$ref\": \"RowData\"\n          },\n          \"description\": \"The data to append.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"ClearBasicFilterRequest\": {\n      \"id\": \"ClearBasicFilterRequest\",\n      \"description\": \"Clears the basic filter, if any exists on the sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The sheet ID on which the basic filter should be cleared.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"BooleanCondition\": {\n      \"id\": \"BooleanCondition\",\n      \"description\": \"A condition that can evaluate to true or false. BooleanConditions are used by conditional formatting, data validation, and the criteria in filters.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"description\": \"The values of the condition. The number of supported values depends on the condition type. Some support zero values, others one or two values, and ConditionType.ONE_OF_LIST supports an arbitrary number of values.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"ConditionValue\"\n          }\n        },\n        \"type\": {\n          \"enum\": [\n            \"CONDITION_TYPE_UNSPECIFIED\",\n            \"NUMBER_GREATER\",\n            \"NUMBER_GREATER_THAN_EQ\",\n            \"NUMBER_LESS\",\n            \"NUMBER_LESS_THAN_EQ\",\n            \"NUMBER_EQ\",\n            \"NUMBER_NOT_EQ\",\n            \"NUMBER_BETWEEN\",\n            \"NUMBER_NOT_BETWEEN\",\n            \"TEXT_CONTAINS\",\n            \"TEXT_NOT_CONTAINS\",\n            \"TEXT_STARTS_WITH\",\n            \"TEXT_ENDS_WITH\",\n            \"TEXT_EQ\",\n            \"TEXT_IS_EMAIL\",\n            \"TEXT_IS_URL\",\n            \"DATE_EQ\",\n            \"DATE_BEFORE\",\n            \"DATE_AFTER\",\n            \"DATE_ON_OR_BEFORE\",\n            \"DATE_ON_OR_AFTER\",\n            \"DATE_BETWEEN\",\n            \"DATE_NOT_BETWEEN\",\n            \"DATE_IS_VALID\",\n            \"ONE_OF_RANGE\",\n            \"ONE_OF_LIST\",\n            \"BLANK\",\n            \"NOT_BLANK\",\n            \"CUSTOM_FORMULA\",\n            \"BOOLEAN\",\n            \"TEXT_NOT_EQ\",\n            \"DATE_NOT_EQ\",\n            \"FILTER_EXPRESSION\"\n          ],\n          \"description\": \"The type of condition.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"The cell's value must be greater than the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must be greater than or equal to the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must be less than the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must be less than or equal to the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must be equal to the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue for data validation, conditional formatting, and filters on non-data source objects and at least one ConditionValue for filters on data source objects.\",\n            \"The cell's value must be not equal to the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue for data validation, conditional formatting, and filters on non-data source objects and at least one ConditionValue for filters on data source objects.\",\n            \"The cell's value must be between the two condition values. Supported by data validation, conditional formatting and filters. Requires exactly two ConditionValues.\",\n            \"The cell's value must not be between the two condition values. Supported by data validation, conditional formatting and filters. Requires exactly two ConditionValues.\",\n            \"The cell's value must contain the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must not contain the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must start with the condition's value. Supported by conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must end with the condition's value. Supported by conditional formatting and filters. Requires a single ConditionValue.\",\n            \"The cell's value must be exactly the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue for data validation, conditional formatting, and filters on non-data source objects and at least one ConditionValue for filters on data source objects.\",\n            \"The cell's value must be a valid email address. Supported by data validation. Requires no ConditionValues.\",\n            \"The cell's value must be a valid URL. Supported by data validation. Requires no ConditionValues.\",\n            \"The cell's value must be the same date as the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue for data validation, conditional formatting, and filters on non-data source objects and at least one ConditionValue for filters on data source objects.\",\n            \"The cell's value must be before the date of the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue that may be a relative date.\",\n            \"The cell's value must be after the date of the condition's value. Supported by data validation, conditional formatting and filters. Requires a single ConditionValue that may be a relative date.\",\n            \"The cell's value must be on or before the date of the condition's value. Supported by data validation. Requires a single ConditionValue that may be a relative date.\",\n            \"The cell's value must be on or after the date of the condition's value. Supported by data validation. Requires a single ConditionValue that may be a relative date.\",\n            \"The cell's value must be between the dates of the two condition values. Supported by data validation. Requires exactly two ConditionValues.\",\n            \"The cell's value must be outside the dates of the two condition values. Supported by data validation. Requires exactly two ConditionValues.\",\n            \"The cell's value must be a date. Supported by data validation. Requires no ConditionValues.\",\n            \"The cell's value must be listed in the grid in condition value's range. Supported by data validation. Requires a single ConditionValue, and the value must be a valid range in A1 notation.\",\n            \"The cell's value must be in the list of condition values. Supported by data validation. Supports any number of condition values, one per item in the list. Formulas are not supported in the values.\",\n            \"The cell's value must be empty. Supported by conditional formatting and filters. Requires no ConditionValues.\",\n            \"The cell's value must not be empty. Supported by conditional formatting and filters. Requires no ConditionValues.\",\n            \"The condition's formula must evaluate to true. Supported by data validation, conditional formatting and filters. Not supported by data source sheet filters. Requires a single ConditionValue.\",\n            \"The cell's value must be TRUE/FALSE or in the list of condition values. Supported by data validation. Renders as a cell checkbox. Supports zero, one or two ConditionValues. No values indicates the cell must be TRUE or FALSE, where TRUE renders as checked and FALSE renders as unchecked. One value indicates the cell will render as checked when it contains that value and unchecked when it is blank. Two values indicate that the cell will render as checked when it contains the first value and unchecked when it contains the second value. For example, [\\\"Yes\\\",\\\"No\\\"] indicates that the cell will render a checked box when it has the value \\\"Yes\\\" and an unchecked box when it has the value \\\"No\\\".\",\n            \"The cell's value must be exactly not the condition's value. Supported by filters on data source objects. Requires at least one ConditionValue.\",\n            \"The cell's value must be exactly not the condition's value. Supported by filters on data source objects. Requires at least one ConditionValue.\",\n            \"The cell's value must follow the pattern specified. Requires a single ConditionValue.\"\n          ]\n        }\n      }\n    },\n    \"DataSourceChartProperties\": {\n      \"id\": \"DataSourceChartProperties\",\n      \"description\": \"Properties of a data source chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"ID of the data source that the chart is associated with.\",\n          \"type\": \"string\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"Output only. The data execution status.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataExecutionStatus\"\n        }\n      }\n    },\n    \"ThemeColorPair\": {\n      \"description\": \"A pair mapping a spreadsheet theme color type to the concrete color it represents.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"colorType\": {\n          \"enum\": [\n            \"THEME_COLOR_TYPE_UNSPECIFIED\",\n            \"TEXT\",\n            \"BACKGROUND\",\n            \"ACCENT1\",\n            \"ACCENT2\",\n            \"ACCENT3\",\n            \"ACCENT4\",\n            \"ACCENT5\",\n            \"ACCENT6\",\n            \"LINK\"\n          ],\n          \"description\": \"The type of the spreadsheet theme color.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Unspecified theme color\",\n            \"Represents the primary text color\",\n            \"Represents the primary background color\",\n            \"Represents the first accent color\",\n            \"Represents the second accent color\",\n            \"Represents the third accent color\",\n            \"Represents the fourth accent color\",\n            \"Represents the fifth accent color\",\n            \"Represents the sixth accent color\",\n            \"Represents the color to use for hyperlinks\"\n          ]\n        },\n        \"color\": {\n          \"description\": \"The concrete color corresponding to the theme color type.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      },\n      \"id\": \"ThemeColorPair\"\n    },\n    \"DeleteDuplicatesRequest\": {\n      \"description\": \"Removes rows within this range that contain values in the specified columns that are duplicates of values in any previous row. Rows with identical values but different letter cases, formatting, or formulas are considered to be duplicates. This request also removes duplicate rows hidden from view (for example, due to a filter). When removing duplicates, the first instance of each duplicate row scanning from the top downwards is kept in the resulting range. Content outside of the specified range isn't removed, and rows considered duplicates do not have to be adjacent to each other in the range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"comparisonColumns\": {\n          \"items\": {\n            \"$ref\": \"DimensionRange\"\n          },\n          \"description\": \"The columns in the range to analyze for duplicate values. If no columns are selected then all columns are analyzed for duplicates.\",\n          \"type\": \"array\"\n        },\n        \"range\": {\n          \"description\": \"The range to remove duplicates rows from.\",\n          \"$ref\": \"GridRange\"\n        }\n      },\n      \"id\": \"DeleteDuplicatesRequest\"\n    },\n    \"FilterView\": {\n      \"description\": \"A filter view. For more information, see [Manage data visibility with filters](https://developers.google.com/workspace/sheets/api/guides/filters).\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sortSpecs\": {\n          \"description\": \"The sort order per column. Later specifications are used when values are equal in the earlier specifications.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"SortSpec\"\n          }\n        },\n        \"criteria\": {\n          \"description\": \"The criteria for showing/hiding values per column. The map's key is the column index, and the value is the criteria for that column. This field is deprecated in favor of filter_specs.\",\n          \"deprecated\": true,\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"$ref\": \"FilterCriteria\"\n          }\n        },\n        \"title\": {\n          \"description\": \"The name of the filter view.\",\n          \"type\": \"string\"\n        },\n        \"range\": {\n          \"description\": \"The range this filter view covers. When writing, only one of range, named_range_id, or table_id may be set.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"tableId\": {\n          \"description\": \"The table this filter view is backed by, if any. When writing, only one of range, named_range_id, or table_id may be set.\",\n          \"type\": \"string\"\n        },\n        \"filterViewId\": {\n          \"description\": \"The ID of the filter view.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"namedRangeId\": {\n          \"description\": \"The named range this filter view is backed by, if any. When writing, only one of range, named_range_id, or table_id may be set.\",\n          \"type\": \"string\"\n        },\n        \"filterSpecs\": {\n          \"items\": {\n            \"$ref\": \"FilterSpec\"\n          },\n          \"description\": \"The filter criteria for showing or hiding values per column. Both criteria and filter_specs are populated in responses. If both fields are specified in an update request, this field takes precedence.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"FilterView\"\n    },\n    \"DeleteConditionalFormatRuleRequest\": {\n      \"description\": \"Deletes a conditional format rule at the given index. All subsequent rules' indexes are decremented.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"index\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based index of the rule to be deleted.\",\n          \"type\": \"integer\"\n        },\n        \"sheetId\": {\n          \"description\": \"The sheet the rule is being deleted from.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"id\": \"DeleteConditionalFormatRuleRequest\"\n    },\n    \"GridData\": {\n      \"id\": \"GridData\",\n      \"description\": \"Data in the grid, as well as metadata about the dimensions.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rowMetadata\": {\n          \"description\": \"Metadata about the requested rows in the grid, starting with the row in start_row.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DimensionProperties\"\n          }\n        },\n        \"startRow\": {\n          \"description\": \"The first row this GridData refers to, zero-based.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"startColumn\": {\n          \"description\": \"The first column this GridData refers to, zero-based.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"rowData\": {\n          \"description\": \"The data in the grid, one entry per row, starting with the row in startRow. The values in RowData will correspond to columns starting at start_column.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"RowData\"\n          }\n        },\n        \"columnMetadata\": {\n          \"description\": \"Metadata about the requested columns in the grid, starting with the column in start_column.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DimensionProperties\"\n          }\n        }\n      }\n    },\n    \"BatchUpdateValuesByDataFilterResponse\": {\n      \"id\": \"BatchUpdateValuesByDataFilterResponse\",\n      \"description\": \"The response when updating a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"responses\": {\n          \"description\": \"The response for each range updated.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"UpdateValuesByDataFilterResponse\"\n          }\n        },\n        \"totalUpdatedSheets\": {\n          \"description\": \"The total number of sheets where at least one cell in the sheet was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"totalUpdatedCells\": {\n          \"format\": \"int32\",\n          \"description\": \"The total number of cells updated.\",\n          \"type\": \"integer\"\n        },\n        \"totalUpdatedColumns\": {\n          \"format\": \"int32\",\n          \"description\": \"The total number of columns where at least one cell in the column was updated.\",\n          \"type\": \"integer\"\n        },\n        \"totalUpdatedRows\": {\n          \"description\": \"The total number of rows where at least one cell in the row was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"RichLinkProperties\": {\n      \"id\": \"RichLinkProperties\",\n      \"description\": \"Properties of a link to a Google resource (such as a file in Drive, a YouTube video, a Maps address, or a Calendar event). Only Drive files can be written as chips. All other rich link types are read only. URIs cannot exceed 2000 bytes when writing. NOTE: Writing Drive file chips requires at least one of the `drive.file`, `drive.readonly`, or `drive` OAuth scopes.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"uri\": {\n          \"description\": \"Required. The URI to the link. This is always present.\",\n          \"type\": \"string\"\n        },\n        \"mimeType\": {\n          \"description\": \"Output only. The [MIME type](https://developers.google.com/drive/api/v3/mime-types) of the link, if there's one (for example, when it's a file in Drive).\",\n          \"readOnly\": true,\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"UpdateCellsRequest\": {\n      \"description\": \"Updates all cells in a range with new data.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"fields\": {\n          \"description\": \"The fields of CellData that should be updated. At least one field must be specified. The root is the CellData; 'row.values.' should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        },\n        \"range\": {\n          \"description\": \"The range to write data to. If the data in rows does not cover the entire requested range, the fields matching those set in fields will be cleared.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"rows\": {\n          \"items\": {\n            \"$ref\": \"RowData\"\n          },\n          \"description\": \"The data to write.\",\n          \"type\": \"array\"\n        },\n        \"start\": {\n          \"description\": \"The coordinate to start writing data at. Any number of rows and columns (including a different number of columns per row) may be written.\",\n          \"$ref\": \"GridCoordinate\"\n        }\n      },\n      \"id\": \"UpdateCellsRequest\"\n    },\n    \"DataSourceColumn\": {\n      \"id\": \"DataSourceColumn\",\n      \"description\": \"A column in a data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"reference\": {\n          \"description\": \"The column reference.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"formula\": {\n          \"description\": \"The formula of the calculated column.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"GridProperties\": {\n      \"description\": \"Properties of a grid.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"frozenColumnCount\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of columns that are frozen in the grid.\",\n          \"type\": \"integer\"\n        },\n        \"hideGridlines\": {\n          \"description\": \"True if the grid isn't showing gridlines in the UI.\",\n          \"type\": \"boolean\"\n        },\n        \"columnCount\": {\n          \"description\": \"The number of columns in the grid.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"columnGroupControlAfter\": {\n          \"description\": \"True if the column grouping control toggle is shown after the group.\",\n          \"type\": \"boolean\"\n        },\n        \"rowCount\": {\n          \"description\": \"The number of rows in the grid.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"frozenRowCount\": {\n          \"description\": \"The number of rows that are frozen in the grid.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"rowGroupControlAfter\": {\n          \"description\": \"True if the row grouping control toggle is shown after the group.\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"GridProperties\"\n    },\n    \"TextPosition\": {\n      \"id\": \"TextPosition\",\n      \"description\": \"Position settings for text.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"horizontalAlignment\": {\n          \"enum\": [\n            \"HORIZONTAL_ALIGN_UNSPECIFIED\",\n            \"LEFT\",\n            \"CENTER\",\n            \"RIGHT\"\n          ],\n          \"description\": \"Horizontal alignment setting for the piece of text.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The horizontal alignment is not specified. Do not use this.\",\n            \"The text is explicitly aligned to the left of the cell.\",\n            \"The text is explicitly aligned to the center of the cell.\",\n            \"The text is explicitly aligned to the right of the cell.\"\n          ]\n        }\n      }\n    },\n    \"AddSheetResponse\": {\n      \"description\": \"The result of adding a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"properties\": {\n          \"description\": \"The properties of the newly added sheet.\",\n          \"$ref\": \"SheetProperties\"\n        }\n      },\n      \"id\": \"AddSheetResponse\"\n    },\n    \"RefreshDataSourceRequest\": {\n      \"id\": \"RefreshDataSourceRequest\",\n      \"description\": \"Refreshes one or multiple data source objects in the spreadsheet by the specified references. The request requires an additional `bigquery.readonly` OAuth scope if you are refreshing a BigQuery data source. If there are multiple refresh requests referencing the same data source objects in one batch, only the last refresh request is processed, and all those requests will have the same response accordingly.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"Reference to a DataSource. If specified, refreshes all associated data source objects for the data source.\",\n          \"type\": \"string\"\n        },\n        \"references\": {\n          \"description\": \"References to data source objects to refresh.\",\n          \"$ref\": \"DataSourceObjectReferences\"\n        },\n        \"force\": {\n          \"description\": \"Refreshes the data source objects regardless of the current state. If not set and a referenced data source object was in error state, the refresh will fail immediately.\",\n          \"type\": \"boolean\"\n        },\n        \"isAll\": {\n          \"description\": \"Refreshes all existing data source objects in the spreadsheet.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"CopySheetToAnotherSpreadsheetRequest\": {\n      \"description\": \"The request to copy a sheet across spreadsheets.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"destinationSpreadsheetId\": {\n          \"description\": \"The ID of the spreadsheet to copy the sheet to.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"CopySheetToAnotherSpreadsheetRequest\"\n    },\n    \"PivotGroupSortValueBucket\": {\n      \"id\": \"PivotGroupSortValueBucket\",\n      \"description\": \"Information about which values in a pivot group should be used for sorting.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"valuesIndex\": {\n          \"description\": \"The offset in the PivotTable.values list which the values in this grouping should be sorted by.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"buckets\": {\n          \"description\": \"Determines the bucket from which values are chosen to sort. For example, in a pivot table with one row group & two column groups, the row group can list up to two values. The first value corresponds to a value within the first column group, and the second value corresponds to a value in the second column group. If no values are listed, this would indicate that the row should be sorted according to the \\\"Grand Total\\\" over the column groups. If a single value is listed, this would correspond to using the \\\"Total\\\" of that bucket.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"ExtendedValue\"\n          }\n        }\n      }\n    },\n    \"DataSourceRefreshWeeklySchedule\": {\n      \"id\": \"DataSourceRefreshWeeklySchedule\",\n      \"description\": \"A weekly schedule for data to refresh on specific days in a given time interval.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"startTime\": {\n          \"description\": \"The start time of a time interval in which a data source refresh is scheduled. Only `hours` part is used. The time interval size defaults to that in the Sheets editor.\",\n          \"$ref\": \"TimeOfDay\"\n        },\n        \"daysOfWeek\": {\n          \"description\": \"Days of the week to refresh. At least one day must be specified.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"enum\": [\n              \"DAY_OF_WEEK_UNSPECIFIED\",\n              \"MONDAY\",\n              \"TUESDAY\",\n              \"WEDNESDAY\",\n              \"THURSDAY\",\n              \"FRIDAY\",\n              \"SATURDAY\",\n              \"SUNDAY\"\n            ],\n            \"type\": \"string\",\n            \"enumDescriptions\": [\n              \"The day of the week is unspecified.\",\n              \"Monday\",\n              \"Tuesday\",\n              \"Wednesday\",\n              \"Thursday\",\n              \"Friday\",\n              \"Saturday\",\n              \"Sunday\"\n            ]\n          }\n        }\n      }\n    },\n    \"ClearValuesResponse\": {\n      \"id\": \"ClearValuesResponse\",\n      \"description\": \"The response when clearing a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"clearedRange\": {\n          \"description\": \"The range (in A1 notation) that was cleared. (If the request was for an unbounded range or a range larger than the bounds of the sheet, this will be the actual range that was cleared, bounded to the sheet's limits.)\",\n          \"type\": \"string\"\n        },\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"WaterfallChartSpec\": {\n      \"description\": \"A waterfall chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"domain\": {\n          \"description\": \"The domain data (horizontal axis) for the waterfall chart.\",\n          \"$ref\": \"WaterfallChartDomain\"\n        },\n        \"firstValueIsTotal\": {\n          \"description\": \"True to interpret the first value as a total.\",\n          \"type\": \"boolean\"\n        },\n        \"totalDataLabel\": {\n          \"description\": \"Controls whether to display additional data labels on stacked charts which sum the total value of all stacked values at each value along the domain axis. stacked_type must be STACKED and neither CUSTOM nor placement can be set on the total_data_label.\",\n          \"$ref\": \"DataLabel\"\n        },\n        \"hideConnectorLines\": {\n          \"description\": \"True to hide connector lines between columns.\",\n          \"type\": \"boolean\"\n        },\n        \"stackedType\": {\n          \"enum\": [\n            \"WATERFALL_STACKED_TYPE_UNSPECIFIED\",\n            \"STACKED\",\n            \"SEQUENTIAL\"\n          ],\n          \"description\": \"The stacked type.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Values corresponding to the same domain (horizontal axis) value will be stacked vertically.\",\n            \"Series will spread out along the horizontal axis.\"\n          ]\n        },\n        \"series\": {\n          \"items\": {\n            \"$ref\": \"WaterfallChartSeries\"\n          },\n          \"description\": \"The data this waterfall chart is visualizing.\",\n          \"type\": \"array\"\n        },\n        \"connectorLineStyle\": {\n          \"description\": \"The line style for the connector lines.\",\n          \"$ref\": \"LineStyle\"\n        }\n      },\n      \"id\": \"WaterfallChartSpec\"\n    },\n    \"ChartData\": {\n      \"description\": \"The data included in a domain or series.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"groupRule\": {\n          \"description\": \"The rule to group the data by if the ChartData backs the domain of a data source chart. Only supported for data source charts.\",\n          \"$ref\": \"ChartGroupRule\"\n        },\n        \"columnReference\": {\n          \"description\": \"The reference to the data source column that the data reads from.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"aggregateType\": {\n          \"enum\": [\n            \"CHART_AGGREGATE_TYPE_UNSPECIFIED\",\n            \"AVERAGE\",\n            \"COUNT\",\n            \"MAX\",\n            \"MEDIAN\",\n            \"MIN\",\n            \"SUM\"\n          ],\n          \"description\": \"The aggregation type for the series of a data source chart. Only supported for data source charts.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Average aggregate function.\",\n            \"Count aggregate function.\",\n            \"Maximum aggregate function.\",\n            \"Median aggregate function.\",\n            \"Minimum aggregate function.\",\n            \"Sum aggregate function.\"\n          ]\n        },\n        \"sourceRange\": {\n          \"description\": \"The source ranges of the data.\",\n          \"$ref\": \"ChartSourceRange\"\n        }\n      },\n      \"id\": \"ChartData\"\n    },\n    \"CancelDataSourceRefreshRequest\": {\n      \"id\": \"CancelDataSourceRefreshRequest\",\n      \"description\": \"Cancels one or multiple refreshes of data source objects in the spreadsheet by the specified references. The request requires an additional `bigquery.readonly` OAuth scope if you are cancelling a refresh on a BigQuery data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"Reference to a DataSource. If specified, cancels all associated data source object refreshes for this data source.\",\n          \"type\": \"string\"\n        },\n        \"references\": {\n          \"description\": \"References to data source objects whose refreshes are to be cancelled.\",\n          \"$ref\": \"DataSourceObjectReferences\"\n        },\n        \"isAll\": {\n          \"description\": \"Cancels all existing data source object refreshes for all data sources in the spreadsheet.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"AddSheetRequest\": {\n      \"description\": \"Adds a new sheet. When a sheet is added at a given index, all subsequent sheets' indexes are incremented. To add an object sheet, use AddChartRequest instead and specify EmbeddedObjectPosition.sheetId or EmbeddedObjectPosition.newSheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"properties\": {\n          \"description\": \"The properties the new sheet should have. All properties are optional. The sheetId field is optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of a sheet that already exists.)\",\n          \"$ref\": \"SheetProperties\"\n        }\n      },\n      \"id\": \"AddSheetRequest\"\n    },\n    \"BatchClearValuesRequest\": {\n      \"description\": \"The request for clearing more than one range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"ranges\": {\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The ranges to clear, in [A1 notation or R1C1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell).\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"BatchClearValuesRequest\"\n    },\n    \"AddChartRequest\": {\n      \"description\": \"Adds a chart to a sheet in the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"chart\": {\n          \"description\": \"The chart that should be added to the spreadsheet, including the position where it should be placed. The chartId field is optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of an embedded object that already exists.)\",\n          \"$ref\": \"EmbeddedChart\"\n        }\n      },\n      \"id\": \"AddChartRequest\"\n    },\n    \"DataSourceRefreshMonthlySchedule\": {\n      \"description\": \"A monthly schedule for data to refresh on specific days in the month in a given time interval.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"startTime\": {\n          \"description\": \"The start time of a time interval in which a data source refresh is scheduled. Only `hours` part is used. The time interval size defaults to that in the Sheets editor.\",\n          \"$ref\": \"TimeOfDay\"\n        },\n        \"daysOfMonth\": {\n          \"description\": \"Days of the month to refresh. Only 1-28 are supported, mapping to the 1st to the 28th day. At least one day must be specified.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          }\n        }\n      },\n      \"id\": \"DataSourceRefreshMonthlySchedule\"\n    },\n    \"FilterCriteria\": {\n      \"description\": \"Criteria for showing or hiding rows in a filter or filter view.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"visibleBackgroundColorStyle\": {\n          \"description\": \"The background fill color to filter by; only cells with this fill color are shown. This field is mutually exclusive with visible_foreground_color, and must be set to an RGB-type color. If visible_background_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"visibleForegroundColor\": {\n          \"description\": \"The foreground color to filter by; only cells with this foreground color are shown. Mutually exclusive with visible_background_color. Deprecated: Use visible_foreground_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"hiddenValues\": {\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Values that should be hidden.\",\n          \"type\": \"array\"\n        },\n        \"condition\": {\n          \"description\": \"A condition that must be `true` for values to be shown. (This does not override hidden_values -- if a value is listed there, it will still be hidden.)\",\n          \"$ref\": \"BooleanCondition\"\n        },\n        \"visibleBackgroundColor\": {\n          \"description\": \"The background fill color to filter by; only cells with this fill color are shown. Mutually exclusive with visible_foreground_color. Deprecated: Use visible_background_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"visibleForegroundColorStyle\": {\n          \"description\": \"The foreground color to filter by; only cells with this foreground color are shown. This field is mutually exclusive with visible_background_color, and must be set to an RGB-type color. If visible_foreground_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      },\n      \"id\": \"FilterCriteria\"\n    },\n    \"BatchUpdateSpreadsheetRequest\": {\n      \"description\": \"The request for updating any aspect of a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"requests\": {\n          \"description\": \"A list of updates to apply to the spreadsheet. Requests will be applied in the order they are specified. If any request is not valid, no requests will be applied.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"Request\"\n          }\n        },\n        \"includeSpreadsheetInResponse\": {\n          \"description\": \"Determines if the update response should include the spreadsheet resource.\",\n          \"type\": \"boolean\"\n        },\n        \"responseIncludeGridData\": {\n          \"description\": \"True if grid data should be returned. Meaningful only if include_spreadsheet_in_response is 'true'. This parameter is ignored if a field mask was set in the request.\",\n          \"type\": \"boolean\"\n        },\n        \"responseRanges\": {\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Limits the ranges included in the response spreadsheet. Meaningful only if include_spreadsheet_in_response is 'true'.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"BatchUpdateSpreadsheetRequest\"\n    },\n    \"PivotGroupValueMetadata\": {\n      \"description\": \"Metadata about a value in a pivot grouping.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"collapsed\": {\n          \"description\": \"True if the data corresponding to the value is collapsed.\",\n          \"type\": \"boolean\"\n        },\n        \"value\": {\n          \"description\": \"The calculated value the metadata corresponds to. (Note that formulaValue is not valid, because the values will be calculated.)\",\n          \"$ref\": \"ExtendedValue\"\n        }\n      },\n      \"id\": \"PivotGroupValueMetadata\"\n    },\n    \"BaselineValueFormat\": {\n      \"description\": \"Formatting options for baseline value.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"comparisonType\": {\n          \"description\": \"The comparison type of key value with baseline value.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Use absolute difference between key and baseline value.\",\n            \"Use percentage difference between key and baseline value.\"\n          ],\n          \"enum\": [\n            \"COMPARISON_TYPE_UNDEFINED\",\n            \"ABSOLUTE_DIFFERENCE\",\n            \"PERCENTAGE_DIFFERENCE\"\n          ]\n        },\n        \"negativeColor\": {\n          \"description\": \"Color to be used, in case baseline value represents a negative change for key value. This field is optional. Deprecated: Use negative_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"negativeColorStyle\": {\n          \"description\": \"Color to be used, in case baseline value represents a negative change for key value. This field is optional. If negative_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"description\": {\n          \"description\": \"Description which is appended after the baseline value. This field is optional.\",\n          \"type\": \"string\"\n        },\n        \"positiveColor\": {\n          \"description\": \"Color to be used, in case baseline value represents a positive change for key value. This field is optional. Deprecated: Use positive_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"positiveColorStyle\": {\n          \"description\": \"Color to be used, in case baseline value represents a positive change for key value. This field is optional. If positive_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"textFormat\": {\n          \"description\": \"Text formatting options for baseline value. The link field is not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"position\": {\n          \"description\": \"Specifies the horizontal text positioning of baseline value. This field is optional. If not specified, default positioning is used.\",\n          \"$ref\": \"TextPosition\"\n        }\n      },\n      \"id\": \"BaselineValueFormat\"\n    },\n    \"UpdateDataSourceResponse\": {\n      \"description\": \"The response from updating data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSource\": {\n          \"description\": \"The updated data source.\",\n          \"$ref\": \"DataSource\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"The data execution status.\",\n          \"$ref\": \"DataExecutionStatus\"\n        }\n      },\n      \"id\": \"UpdateDataSourceResponse\"\n    },\n    \"DimensionProperties\": {\n      \"description\": \"Properties about a dimension.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"hiddenByUser\": {\n          \"description\": \"True if this dimension is explicitly hidden.\",\n          \"type\": \"boolean\"\n        },\n        \"developerMetadata\": {\n          \"description\": \"The developer metadata associated with a single row or column.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DeveloperMetadata\"\n          }\n        },\n        \"dataSourceColumnReference\": {\n          \"description\": \"Output only. If set, this is a column in a data source sheet.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"hiddenByFilter\": {\n          \"description\": \"True if this dimension is being filtered. This field is read-only.\",\n          \"type\": \"boolean\"\n        },\n        \"pixelSize\": {\n          \"format\": \"int32\",\n          \"description\": \"The height (if a row) or width (if a column) of the dimension in pixels.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"DimensionProperties\"\n    },\n    \"ChipRun\": {\n      \"id\": \"ChipRun\",\n      \"description\": \"The run of a chip. The chip continues until the start index of the next run.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"startIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"Required. The zero-based character index where this run starts, in UTF-16 code units.\",\n          \"type\": \"integer\"\n        },\n        \"chip\": {\n          \"description\": \"Optional. The chip of this run.\",\n          \"$ref\": \"Chip\"\n        }\n      }\n    },\n    \"UpdateDeveloperMetadataRequest\": {\n      \"id\": \"UpdateDeveloperMetadataRequest\",\n      \"description\": \"A request to update properties of developer metadata. Updates the properties of the developer metadata selected by the filters to the values provided in the DeveloperMetadata resource. Callers must specify the properties they wish to update in the fields parameter, as well as specify at least one DataFilter matching the metadata they wish to update.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilters\": {\n          \"description\": \"The filters matching the developer metadata entries to update.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          }\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `developerMetadata` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        },\n        \"developerMetadata\": {\n          \"description\": \"The value that all metadata matched by the data filters will be updated to.\",\n          \"$ref\": \"DeveloperMetadata\"\n        }\n      }\n    },\n    \"UpdateTableRequest\": {\n      \"id\": \"UpdateTableRequest\",\n      \"description\": \"Updates a table in the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"table\": {\n          \"description\": \"Required. The table to update.\",\n          \"$ref\": \"Table\"\n        },\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"Required. The fields that should be updated. At least one field must be specified. The root `table` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"CancelDataSourceRefreshStatus\": {\n      \"description\": \"The status of cancelling a single data source object refresh.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"refreshCancellationStatus\": {\n          \"description\": \"The cancellation status.\",\n          \"$ref\": \"RefreshCancellationStatus\"\n        },\n        \"reference\": {\n          \"description\": \"Reference to the data source object whose refresh is being cancelled.\",\n          \"$ref\": \"DataSourceObjectReference\"\n        }\n      },\n      \"id\": \"CancelDataSourceRefreshStatus\"\n    },\n    \"SortSpec\": {\n      \"description\": \"A sort order associated with a specific column or row.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimensionIndex\": {\n          \"description\": \"The dimension the sort should be applied to.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"sortOrder\": {\n          \"enum\": [\n            \"SORT_ORDER_UNSPECIFIED\",\n            \"ASCENDING\",\n            \"DESCENDING\"\n          ],\n          \"description\": \"The order data should be sorted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use this.\",\n            \"Sort ascending.\",\n            \"Sort descending.\"\n          ]\n        },\n        \"backgroundColor\": {\n          \"description\": \"The background fill color to sort by; cells with this fill color are sorted to the top. Mutually exclusive with foreground_color. Deprecated: Use background_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"foregroundColorStyle\": {\n          \"description\": \"The foreground color to sort by; cells with this foreground color are sorted to the top. Mutually exclusive with background_color, and must be an RGB-type color. If foreground_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"backgroundColorStyle\": {\n          \"description\": \"The background fill color to sort by; cells with this fill color are sorted to the top. Mutually exclusive with foreground_color, and must be an RGB-type color. If background_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"dataSourceColumnReference\": {\n          \"description\": \"Reference to a data source column.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"foregroundColor\": {\n          \"description\": \"The foreground color to sort by; cells with this foreground color are sorted to the top. Mutually exclusive with background_color. Deprecated: Use foreground_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        }\n      },\n      \"id\": \"SortSpec\"\n    },\n    \"DeleteEmbeddedObjectRequest\": {\n      \"id\": \"DeleteEmbeddedObjectRequest\",\n      \"description\": \"Deletes the embedded object with the given ID.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"objectId\": {\n          \"description\": \"The ID of the embedded object to delete.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"WaterfallChartCustomSubtotal\": {\n      \"description\": \"A custom subtotal column for a waterfall chart series.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"subtotalIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based index of a data point within the series. If data_is_subtotal is true, the data point at this index is the subtotal. Otherwise, the subtotal appears after the data point with this index. A series can have multiple subtotals at arbitrary indices, but subtotals do not affect the indices of the data points. For example, if a series has three data points, their indices will always be 0, 1, and 2, regardless of how many subtotals exist on the series or what data points they are associated with.\",\n          \"type\": \"integer\"\n        },\n        \"dataIsSubtotal\": {\n          \"description\": \"True if the data point at subtotal_index is the subtotal. If false, the subtotal will be computed and appear after the data point.\",\n          \"type\": \"boolean\"\n        },\n        \"label\": {\n          \"description\": \"A label for the subtotal column.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"WaterfallChartCustomSubtotal\"\n    },\n    \"AddNamedRangeRequest\": {\n      \"description\": \"Adds a named range to the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"namedRange\": {\n          \"description\": \"The named range to add. The namedRangeId field is optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of a range that already exists.)\",\n          \"$ref\": \"NamedRange\"\n        }\n      },\n      \"id\": \"AddNamedRangeRequest\"\n    },\n    \"SpreadsheetProperties\": {\n      \"id\": \"SpreadsheetProperties\",\n      \"description\": \"Properties of a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"defaultFormat\": {\n          \"description\": \"The default format of all cells in the spreadsheet. CellData.effectiveFormat will not be set if the cell's format is equal to this default format. This field is read-only.\",\n          \"$ref\": \"CellFormat\"\n        },\n        \"title\": {\n          \"description\": \"The title of the spreadsheet.\",\n          \"type\": \"string\"\n        },\n        \"spreadsheetTheme\": {\n          \"description\": \"Theme applied to the spreadsheet.\",\n          \"$ref\": \"SpreadsheetTheme\"\n        },\n        \"timeZone\": {\n          \"description\": \"The time zone of the spreadsheet, in CLDR format such as `America/New_York`. If the time zone isn't recognized, this may be a custom time zone such as `GMT-07:00`.\",\n          \"type\": \"string\"\n        },\n        \"locale\": {\n          \"description\": \"The locale of the spreadsheet in one of the following formats: * an ISO 639-1 language code such as `en` * an ISO 639-2 language code such as `fil`, if no 639-1 code exists * a combination of the ISO language code and country code, such as `en_US` Note: when updating this field, not all locales/languages are supported.\",\n          \"type\": \"string\"\n        },\n        \"autoRecalc\": {\n          \"description\": \"The amount of time to wait before volatile functions are recalculated.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value. This value must not be used.\",\n            \"Volatile functions are updated on every change.\",\n            \"Volatile functions are updated on every change and every minute.\",\n            \"Volatile functions are updated on every change and hourly.\"\n          ],\n          \"enum\": [\n            \"RECALCULATION_INTERVAL_UNSPECIFIED\",\n            \"ON_CHANGE\",\n            \"MINUTE\",\n            \"HOUR\"\n          ]\n        },\n        \"iterativeCalculationSettings\": {\n          \"description\": \"Determines whether and how circular references are resolved with iterative calculation. Absence of this field means that circular references result in calculation errors.\",\n          \"$ref\": \"IterativeCalculationSettings\"\n        },\n        \"importFunctionsExternalUrlAccessAllowed\": {\n          \"description\": \"Whether to allow external URL access for image and import functions. Read only when true. When false, you can set to true. This value will be bypassed and always return true if the admin has enabled the [allowlisting feature](https://support.google.com/a?p=url_allowlist).\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"AddDataSourceResponse\": {\n      \"description\": \"The result of adding a data source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSource\": {\n          \"description\": \"The data source that was created.\",\n          \"$ref\": \"DataSource\"\n        },\n        \"dataExecutionStatus\": {\n          \"description\": \"The data execution status.\",\n          \"$ref\": \"DataExecutionStatus\"\n        }\n      },\n      \"id\": \"AddDataSourceResponse\"\n    },\n    \"ScorecardChartSpec\": {\n      \"description\": \"A scorecard chart. Scorecard charts are used to highlight key performance indicators, known as KPIs, on the spreadsheet. A scorecard chart can represent things like total sales, average cost, or a top selling item. You can specify a single data value, or aggregate over a range of data. Percentage or absolute difference from a baseline value can be highlighted, like changes over time.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"baselineValueData\": {\n          \"description\": \"The data for scorecard baseline value. This field is optional.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"baselineValueFormat\": {\n          \"description\": \"Formatting options for baseline value. This field is needed only if baseline_value_data is specified.\",\n          \"$ref\": \"BaselineValueFormat\"\n        },\n        \"numberFormatSource\": {\n          \"enum\": [\n            \"CHART_NUMBER_FORMAT_SOURCE_UNDEFINED\",\n            \"FROM_DATA\",\n            \"CUSTOM\"\n          ],\n          \"description\": \"The number format source used in the scorecard chart. This field is optional.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Inherit number formatting from data.\",\n            \"Apply custom formatting as specified by ChartCustomNumberFormatOptions.\"\n          ]\n        },\n        \"aggregateType\": {\n          \"enum\": [\n            \"CHART_AGGREGATE_TYPE_UNSPECIFIED\",\n            \"AVERAGE\",\n            \"COUNT\",\n            \"MAX\",\n            \"MEDIAN\",\n            \"MIN\",\n            \"SUM\"\n          ],\n          \"description\": \"The aggregation type for key and baseline chart data in scorecard chart. This field is not supported for data source charts. Use the ChartData.aggregateType field of the key_value_data or baseline_value_data instead for data source charts. This field is optional.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Average aggregate function.\",\n            \"Count aggregate function.\",\n            \"Maximum aggregate function.\",\n            \"Median aggregate function.\",\n            \"Minimum aggregate function.\",\n            \"Sum aggregate function.\"\n          ]\n        },\n        \"keyValueFormat\": {\n          \"description\": \"Formatting options for key value.\",\n          \"$ref\": \"KeyValueFormat\"\n        },\n        \"customFormatOptions\": {\n          \"description\": \"Custom formatting options for numeric key/baseline values in scorecard chart. This field is used only when number_format_source is set to CUSTOM. This field is optional.\",\n          \"$ref\": \"ChartCustomNumberFormatOptions\"\n        },\n        \"keyValueData\": {\n          \"description\": \"The data for scorecard key value.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"scaleFactor\": {\n          \"format\": \"double\",\n          \"description\": \"Value to scale scorecard key and baseline value. For example, a factor of 10 can be used to divide all values in the chart by 10. This field is optional.\",\n          \"type\": \"number\"\n        }\n      },\n      \"id\": \"ScorecardChartSpec\"\n    },\n    \"BatchGetValuesByDataFilterResponse\": {\n      \"id\": \"BatchGetValuesByDataFilterResponse\",\n      \"description\": \"The response when retrieving more than one range of values in a spreadsheet selected by DataFilters.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The ID of the spreadsheet the data was retrieved from.\",\n          \"type\": \"string\"\n        },\n        \"valueRanges\": {\n          \"description\": \"The requested values with the list of data filters that matched them.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"MatchedValueRange\"\n          }\n        }\n      }\n    },\n    \"ChartSpec\": {\n      \"description\": \"The specifications of a chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"backgroundColorStyle\": {\n          \"description\": \"The background color of the entire chart. Not applicable to Org charts. If background_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"candlestickChart\": {\n          \"description\": \"A candlestick chart specification.\",\n          \"$ref\": \"CandlestickChartSpec\"\n        },\n        \"subtitleTextFormat\": {\n          \"description\": \"The subtitle text format. Strikethrough, underline, and link are not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"pieChart\": {\n          \"description\": \"A pie chart specification.\",\n          \"$ref\": \"PieChartSpec\"\n        },\n        \"scorecardChart\": {\n          \"description\": \"A scorecard chart specification.\",\n          \"$ref\": \"ScorecardChartSpec\"\n        },\n        \"subtitleTextPosition\": {\n          \"description\": \"The subtitle text position. This field is optional.\",\n          \"$ref\": \"TextPosition\"\n        },\n        \"subtitle\": {\n          \"description\": \"The subtitle of the chart.\",\n          \"type\": \"string\"\n        },\n        \"treemapChart\": {\n          \"description\": \"A treemap chart specification.\",\n          \"$ref\": \"TreemapChartSpec\"\n        },\n        \"basicChart\": {\n          \"description\": \"A basic chart specification, can be one of many kinds of charts. See BasicChartType for the list of all charts this supports.\",\n          \"$ref\": \"BasicChartSpec\"\n        },\n        \"hiddenDimensionStrategy\": {\n          \"enum\": [\n            \"CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED\",\n            \"SKIP_HIDDEN_ROWS_AND_COLUMNS\",\n            \"SKIP_HIDDEN_ROWS\",\n            \"SKIP_HIDDEN_COLUMNS\",\n            \"SHOW_ALL\"\n          ],\n          \"description\": \"Determines how the charts will use hidden rows or columns.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Charts will skip hidden rows and columns.\",\n            \"Charts will skip hidden rows only.\",\n            \"Charts will skip hidden columns only.\",\n            \"Charts will not skip any hidden rows or columns.\"\n          ]\n        },\n        \"filterSpecs\": {\n          \"description\": \"The filters applied to the source data of the chart. Only supported for data source charts.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"FilterSpec\"\n          }\n        },\n        \"titleTextFormat\": {\n          \"description\": \"The title text format. Strikethrough, underline, and link are not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"dataSourceChartProperties\": {\n          \"description\": \"If present, the field contains data source chart specific properties.\",\n          \"$ref\": \"DataSourceChartProperties\"\n        },\n        \"backgroundColor\": {\n          \"description\": \"The background color of the entire chart. Not applicable to Org charts. Deprecated: Use background_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"bubbleChart\": {\n          \"description\": \"A bubble chart specification.\",\n          \"$ref\": \"BubbleChartSpec\"\n        },\n        \"fontName\": {\n          \"description\": \"The name of the font to use by default for all chart text (e.g. title, axis labels, legend). If a font is specified for a specific part of the chart it will override this font name.\",\n          \"type\": \"string\"\n        },\n        \"histogramChart\": {\n          \"description\": \"A histogram chart specification.\",\n          \"$ref\": \"HistogramChartSpec\"\n        },\n        \"waterfallChart\": {\n          \"description\": \"A waterfall chart specification.\",\n          \"$ref\": \"WaterfallChartSpec\"\n        },\n        \"title\": {\n          \"description\": \"The title of the chart.\",\n          \"type\": \"string\"\n        },\n        \"sortSpecs\": {\n          \"description\": \"The order to sort the chart data by. Only a single sort spec is supported. Only supported for data source charts.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"SortSpec\"\n          }\n        },\n        \"orgChart\": {\n          \"description\": \"An org chart specification.\",\n          \"$ref\": \"OrgChartSpec\"\n        },\n        \"altText\": {\n          \"description\": \"The alternative text that describes the chart. This is often used for accessibility.\",\n          \"type\": \"string\"\n        },\n        \"titleTextPosition\": {\n          \"description\": \"The title text position. This field is optional.\",\n          \"$ref\": \"TextPosition\"\n        },\n        \"maximized\": {\n          \"description\": \"True to make a chart fill the entire space in which it's rendered with minimum padding. False to use the default padding. (Not applicable to Geo and Org charts.)\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"ChartSpec\"\n    },\n    \"TrimWhitespaceResponse\": {\n      \"id\": \"TrimWhitespaceResponse\",\n      \"description\": \"The result of trimming whitespace in cells.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"cellsChangedCount\": {\n          \"description\": \"The number of cells that were trimmed of whitespace.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"Spreadsheet\": {\n      \"id\": \"Spreadsheet\",\n      \"description\": \"Resource that represents a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sheets\": {\n          \"items\": {\n            \"$ref\": \"Sheet\"\n          },\n          \"description\": \"The sheets that are part of a spreadsheet.\",\n          \"type\": \"array\"\n        },\n        \"developerMetadata\": {\n          \"items\": {\n            \"$ref\": \"DeveloperMetadata\"\n          },\n          \"description\": \"The developer metadata associated with a spreadsheet.\",\n          \"type\": \"array\"\n        },\n        \"dataSources\": {\n          \"description\": \"A list of external data sources connected with the spreadsheet.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataSource\"\n          }\n        },\n        \"spreadsheetUrl\": {\n          \"description\": \"The url of the spreadsheet. This field is read-only.\",\n          \"type\": \"string\"\n        },\n        \"properties\": {\n          \"description\": \"Overall properties of a spreadsheet.\",\n          \"$ref\": \"SpreadsheetProperties\"\n        },\n        \"namedRanges\": {\n          \"description\": \"The named ranges defined in a spreadsheet.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"NamedRange\"\n          }\n        },\n        \"dataSourceSchedules\": {\n          \"items\": {\n            \"$ref\": \"DataSourceRefreshSchedule\"\n          },\n          \"description\": \"Output only. A list of data source refresh schedules.\",\n          \"readOnly\": true,\n          \"type\": \"array\"\n        },\n        \"spreadsheetId\": {\n          \"description\": \"The ID of the spreadsheet. This field is read-only.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"FindReplaceRequest\": {\n      \"id\": \"FindReplaceRequest\",\n      \"description\": \"Finds and replaces data in cells over a range, sheet, or all sheets.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"allSheets\": {\n          \"description\": \"True to find/replace over all sheets.\",\n          \"type\": \"boolean\"\n        },\n        \"searchByRegex\": {\n          \"description\": \"True if the find value is a regex. The regular expression and replacement should follow Java regex rules at https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html. The replacement string is allowed to refer to capturing groups. For example, if one cell has the contents `\\\"Google Sheets\\\"` and another has `\\\"Google Docs\\\"`, then searching for `\\\"o.* (.*)\\\"` with a replacement of `\\\"$1 Rocks\\\"` would change the contents of the cells to `\\\"GSheets Rocks\\\"` and `\\\"GDocs Rocks\\\"` respectively.\",\n          \"type\": \"boolean\"\n        },\n        \"replacement\": {\n          \"description\": \"The value to use as the replacement.\",\n          \"type\": \"string\"\n        },\n        \"range\": {\n          \"description\": \"The range to find/replace over.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"find\": {\n          \"description\": \"The value to search.\",\n          \"type\": \"string\"\n        },\n        \"matchCase\": {\n          \"description\": \"True if the search is case sensitive.\",\n          \"type\": \"boolean\"\n        },\n        \"matchEntireCell\": {\n          \"description\": \"True if the find value should match the entire cell.\",\n          \"type\": \"boolean\"\n        },\n        \"sheetId\": {\n          \"description\": \"The sheet to find/replace over.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"includeFormulas\": {\n          \"description\": \"True if the search should include cells with formulas. False to skip cells with formulas.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"TimeOfDay\": {\n      \"id\": \"TimeOfDay\",\n      \"description\": \"Represents a time of day. The date and time zone are either not significant or are specified elsewhere. An API may choose to allow leap seconds. Related types are google.type.Date and `google.protobuf.Timestamp`.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"seconds\": {\n          \"format\": \"int32\",\n          \"description\": \"Seconds of a minute. Must be greater than or equal to 0 and typically must be less than or equal to 59. An API may allow the value 60 if it allows leap-seconds.\",\n          \"type\": \"integer\"\n        },\n        \"minutes\": {\n          \"format\": \"int32\",\n          \"description\": \"Minutes of an hour. Must be greater than or equal to 0 and less than or equal to 59.\",\n          \"type\": \"integer\"\n        },\n        \"hours\": {\n          \"format\": \"int32\",\n          \"description\": \"Hours of a day in 24 hour format. Must be greater than or equal to 0 and typically must be less than or equal to 23. An API may choose to allow the value \\\"24:00:00\\\" for scenarios like business closing time.\",\n          \"type\": \"integer\"\n        },\n        \"nanos\": {\n          \"format\": \"int32\",\n          \"description\": \"Fractions of seconds, in nanoseconds. Must be greater than or equal to 0 and less than or equal to 999,999,999.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"WaterfallChartColumnStyle\": {\n      \"description\": \"Styles for a waterfall chart column.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"label\": {\n          \"description\": \"The label of the column's legend.\",\n          \"type\": \"string\"\n        },\n        \"color\": {\n          \"description\": \"The color of the column. Deprecated: Use color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"colorStyle\": {\n          \"description\": \"The color of the column. If color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        }\n      },\n      \"id\": \"WaterfallChartColumnStyle\"\n    },\n    \"UpdateProtectedRangeRequest\": {\n      \"description\": \"Updates an existing protected range with the specified protectedRangeId.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"protectedRange\": {\n          \"description\": \"The protected range to update with the new properties.\",\n          \"$ref\": \"ProtectedRange\"\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `protectedRange` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        }\n      },\n      \"id\": \"UpdateProtectedRangeRequest\"\n    },\n    \"PersonProperties\": {\n      \"id\": \"PersonProperties\",\n      \"description\": \"Properties specific to a linked person.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"email\": {\n          \"description\": \"Required. The email address linked to this person. This field is always present.\",\n          \"type\": \"string\"\n        },\n        \"displayFormat\": {\n          \"enum\": [\n            \"DISPLAY_FORMAT_UNSPECIFIED\",\n            \"DEFAULT\",\n            \"LAST_NAME_COMMA_FIRST_NAME\",\n            \"EMAIL\"\n          ],\n          \"description\": \"Optional. The display format of the person chip. If not set, the default display format is used.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Default display format.\",\n            \"Last name, first name display format.\",\n            \"Email display format.\"\n          ]\n        }\n      }\n    },\n    \"BigQueryTableSpec\": {\n      \"description\": \"Specifies a BigQuery table definition. Only [native tables](https://cloud.google.com/bigquery/docs/tables-intro) are allowed.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"tableId\": {\n          \"description\": \"The BigQuery table id.\",\n          \"type\": \"string\"\n        },\n        \"tableProjectId\": {\n          \"description\": \"The ID of a BigQuery project the table belongs to. If not specified, the project_id is assumed.\",\n          \"type\": \"string\"\n        },\n        \"datasetId\": {\n          \"description\": \"The BigQuery dataset id.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"BigQueryTableSpec\"\n    },\n    \"TextFormat\": {\n      \"description\": \"The format of a run of text in a cell. Absent values indicate that the field isn't specified.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"strikethrough\": {\n          \"description\": \"True if the text has a strikethrough.\",\n          \"type\": \"boolean\"\n        },\n        \"link\": {\n          \"description\": \"The link destination of the text, if any. Setting the link field in a TextFormatRun will clear the cell's existing links or a cell-level link set in the same request. When a link is set, the text foreground color will be set to the default link color and the text will be underlined. If these fields are modified in the same request, those values will be used instead of the link defaults.\",\n          \"$ref\": \"Link\"\n        },\n        \"fontFamily\": {\n          \"description\": \"The font family.\",\n          \"type\": \"string\"\n        },\n        \"foregroundColorStyle\": {\n          \"description\": \"The foreground color of the text. If foreground_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"fontSize\": {\n          \"format\": \"int32\",\n          \"description\": \"The size of the font.\",\n          \"type\": \"integer\"\n        },\n        \"bold\": {\n          \"description\": \"True if the text is bold.\",\n          \"type\": \"boolean\"\n        },\n        \"italic\": {\n          \"description\": \"True if the text is italicized.\",\n          \"type\": \"boolean\"\n        },\n        \"foregroundColor\": {\n          \"description\": \"The foreground color of the text. Deprecated: Use foreground_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"underline\": {\n          \"description\": \"True if the text is underlined.\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"TextFormat\"\n    },\n    \"ErrorValue\": {\n      \"description\": \"An error in a cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"enum\": [\n            \"ERROR_TYPE_UNSPECIFIED\",\n            \"ERROR\",\n            \"NULL_VALUE\",\n            \"DIVIDE_BY_ZERO\",\n            \"VALUE\",\n            \"REF\",\n            \"NAME\",\n            \"NUM\",\n            \"N_A\",\n            \"LOADING\"\n          ],\n          \"description\": \"The type of error.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default error type, do not use this.\",\n            \"Corresponds to the `#ERROR!` error.\",\n            \"Corresponds to the `#NULL!` error.\",\n            \"Corresponds to the `#DIV/0` error.\",\n            \"Corresponds to the `#VALUE!` error.\",\n            \"Corresponds to the `#REF!` error.\",\n            \"Corresponds to the `#NAME?` error.\",\n            \"Corresponds to the `#NUM!` error.\",\n            \"Corresponds to the `#N/A` error.\",\n            \"Corresponds to the `Loading...` state.\"\n          ]\n        },\n        \"message\": {\n          \"description\": \"A message with more information about the error (in the spreadsheet's locale).\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"ErrorValue\"\n    },\n    \"ConditionalFormatRule\": {\n      \"id\": \"ConditionalFormatRule\",\n      \"description\": \"A rule describing a conditional format.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"ranges\": {\n          \"items\": {\n            \"$ref\": \"GridRange\"\n          },\n          \"description\": \"The ranges that are formatted if the condition is true. All the ranges must be on the same grid.\",\n          \"type\": \"array\"\n        },\n        \"booleanRule\": {\n          \"description\": \"The formatting is either \\\"on\\\" or \\\"off\\\" according to the rule.\",\n          \"$ref\": \"BooleanRule\"\n        },\n        \"gradientRule\": {\n          \"description\": \"The formatting will vary based on the gradients in the rule.\",\n          \"$ref\": \"GradientRule\"\n        }\n      }\n    },\n    \"BasicSeriesDataPointStyleOverride\": {\n      \"description\": \"Style override settings for a single series data point.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"index\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based index of the series data point.\",\n          \"type\": \"integer\"\n        },\n        \"colorStyle\": {\n          \"description\": \"Color of the series data point. If empty, the series default is used. If color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"pointStyle\": {\n          \"description\": \"Point style of the series data point. Valid only if the chartType is AREA, LINE, or SCATTER. COMBO charts are also supported if the series chart type is AREA, LINE, or SCATTER. If empty, the series default is used.\",\n          \"$ref\": \"PointStyle\"\n        },\n        \"color\": {\n          \"description\": \"Color of the series data point. If empty, the series default is used. Deprecated: Use color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        }\n      },\n      \"id\": \"BasicSeriesDataPointStyleOverride\"\n    },\n    \"ManualRuleGroup\": {\n      \"description\": \"A group name and a list of items from the source data that should be placed in the group with this name.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"items\": {\n          \"description\": \"The items in the source data that should be placed into this group. Each item may be a string, number, or boolean. Items may appear in at most one group within a given ManualRule. Items that do not appear in any group will appear on their own.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"ExtendedValue\"\n          }\n        },\n        \"groupName\": {\n          \"description\": \"The group name, which must be a string. Each group in a given ManualRule must have a unique group name.\",\n          \"$ref\": \"ExtendedValue\"\n        }\n      },\n      \"id\": \"ManualRuleGroup\"\n    },\n    \"DeveloperMetadataLocation\": {\n      \"id\": \"DeveloperMetadataLocation\",\n      \"description\": \"A location where metadata may be associated in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimensionRange\": {\n          \"description\": \"Represents the row or column when metadata is associated with a dimension. The specified DimensionRange must represent a single row or column. It cannot be unbounded or span multiple rows or columns.\",\n          \"$ref\": \"DimensionRange\"\n        },\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the sheet when metadata is associated with an entire sheet.\",\n          \"type\": \"integer\"\n        },\n        \"locationType\": {\n          \"description\": \"The type of location this object represents. This field is read-only.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value.\",\n            \"Developer metadata associated on an entire row dimension.\",\n            \"Developer metadata associated on an entire column dimension.\",\n            \"Developer metadata associated on an entire sheet.\",\n            \"Developer metadata associated on the entire spreadsheet.\"\n          ],\n          \"enum\": [\n            \"DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED\",\n            \"ROW\",\n            \"COLUMN\",\n            \"SHEET\",\n            \"SPREADSHEET\"\n          ]\n        },\n        \"spreadsheet\": {\n          \"description\": \"True when metadata is associated with an entire spreadsheet.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"PivotGroupRule\": {\n      \"id\": \"PivotGroupRule\",\n      \"description\": \"An optional setting on a PivotGroup that defines buckets for the values in the source data column rather than breaking out each individual value. Only one PivotGroup with a group rule may be added for each column in the source data, though on any given column you may add both a PivotGroup that has a rule and a PivotGroup that does not.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dateTimeRule\": {\n          \"description\": \"A DateTimeRule.\",\n          \"$ref\": \"DateTimeRule\"\n        },\n        \"manualRule\": {\n          \"description\": \"A ManualRule.\",\n          \"$ref\": \"ManualRule\"\n        },\n        \"histogramRule\": {\n          \"description\": \"A HistogramRule.\",\n          \"$ref\": \"HistogramRule\"\n        }\n      }\n    },\n    \"BasicChartSeries\": {\n      \"description\": \"A single series of data in a chart. For example, if charting stock prices over time, multiple series may exist, one for the \\\"Open Price\\\", \\\"High Price\\\", \\\"Low Price\\\" and \\\"Close Price\\\".\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"targetAxis\": {\n          \"description\": \"The minor axis that will specify the range of values for this series. For example, if charting stocks over time, the \\\"Volume\\\" series may want to be pinned to the right with the prices pinned to the left, because the scale of trading volume is different than the scale of prices. It is an error to specify an axis that isn't a valid minor axis for the chart's type.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The axis rendered at the bottom of a chart. For most charts, this is the standard major axis. For bar charts, this is a minor axis.\",\n            \"The axis rendered at the left of a chart. For most charts, this is a minor axis. For bar charts, this is the standard major axis.\",\n            \"The axis rendered at the right of a chart. For most charts, this is a minor axis. For bar charts, this is an unusual major axis.\"\n          ],\n          \"enum\": [\n            \"BASIC_CHART_AXIS_POSITION_UNSPECIFIED\",\n            \"BOTTOM_AXIS\",\n            \"LEFT_AXIS\",\n            \"RIGHT_AXIS\"\n          ]\n        },\n        \"color\": {\n          \"description\": \"The color for elements (such as bars, lines, and points) associated with this series. If empty, a default color is used. Deprecated: Use color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"pointStyle\": {\n          \"description\": \"The style for points associated with this series. Valid only if the chartType is AREA, LINE, or SCATTER. COMBO charts are also supported if the series chart type is AREA, LINE, or SCATTER. If empty, a default point style is used.\",\n          \"$ref\": \"PointStyle\"\n        },\n        \"styleOverrides\": {\n          \"description\": \"Style override settings for series data points.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"BasicSeriesDataPointStyleOverride\"\n          }\n        },\n        \"type\": {\n          \"enum\": [\n            \"BASIC_CHART_TYPE_UNSPECIFIED\",\n            \"BAR\",\n            \"LINE\",\n            \"AREA\",\n            \"COLUMN\",\n            \"SCATTER\",\n            \"COMBO\",\n            \"STEPPED_AREA\"\n          ],\n          \"description\": \"The type of this series. Valid only if the chartType is COMBO. Different types will change the way the series is visualized. Only LINE, AREA, and COLUMN are supported.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"A bar chart.\",\n            \"A line chart.\",\n            \"An area chart.\",\n            \"A column chart.\",\n            \"A scatter chart.\",\n            \"A combo chart.\",\n            \"A stepped area chart.\"\n          ]\n        },\n        \"lineStyle\": {\n          \"description\": \"The line style of this series. Valid only if the chartType is AREA, LINE, or SCATTER. COMBO charts are also supported if the series chart type is AREA or LINE.\",\n          \"$ref\": \"LineStyle\"\n        },\n        \"colorStyle\": {\n          \"description\": \"The color for elements (such as bars, lines, and points) associated with this series. If empty, a default color is used. If color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"dataLabel\": {\n          \"description\": \"Information about the data labels for this series.\",\n          \"$ref\": \"DataLabel\"\n        },\n        \"series\": {\n          \"description\": \"The data being visualized in this chart series.\",\n          \"$ref\": \"ChartData\"\n        }\n      },\n      \"id\": \"BasicChartSeries\"\n    },\n    \"CandlestickChartSpec\": {\n      \"description\": \"A candlestick chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"items\": {\n            \"$ref\": \"CandlestickData\"\n          },\n          \"description\": \"The Candlestick chart data. Only one CandlestickData is supported.\",\n          \"type\": \"array\"\n        },\n        \"domain\": {\n          \"description\": \"The domain data (horizontal axis) for the candlestick chart. String data will be treated as discrete labels, other data will be treated as continuous values.\",\n          \"$ref\": \"CandlestickDomain\"\n        }\n      },\n      \"id\": \"CandlestickChartSpec\"\n    },\n    \"MoveDimensionRequest\": {\n      \"id\": \"MoveDimensionRequest\",\n      \"description\": \"Moves one or more rows or columns.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"source\": {\n          \"description\": \"The source dimensions to move.\",\n          \"$ref\": \"DimensionRange\"\n        },\n        \"destinationIndex\": {\n          \"description\": \"The zero-based start index of where to move the source data to, based on the coordinates *before* the source data is removed from the grid. Existing data will be shifted down or right (depending on the dimension) to make room for the moved dimensions. The source dimensions are removed from the grid, so the the data may end up in a different index than specified. For example, given `A1..A5` of `0, 1, 2, 3, 4` and wanting to move `\\\"1\\\"` and `\\\"2\\\"` to between `\\\"3\\\"` and `\\\"4\\\"`, the source would be `ROWS [1..3)`,and the destination index would be `\\\"4\\\"` (the zero-based index of row 5). The end result would be `A1..A5` of `0, 3, 1, 2, 4`.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"PieChartSpec\": {\n      \"description\": \"A pie chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"legendPosition\": {\n          \"enum\": [\n            \"PIE_CHART_LEGEND_POSITION_UNSPECIFIED\",\n            \"BOTTOM_LEGEND\",\n            \"LEFT_LEGEND\",\n            \"RIGHT_LEGEND\",\n            \"TOP_LEGEND\",\n            \"NO_LEGEND\",\n            \"LABELED_LEGEND\"\n          ],\n          \"description\": \"Where the legend of the pie chart should be drawn.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The legend is rendered on the bottom of the chart.\",\n            \"The legend is rendered on the left of the chart.\",\n            \"The legend is rendered on the right of the chart.\",\n            \"The legend is rendered on the top of the chart.\",\n            \"No legend is rendered.\",\n            \"Each pie slice has a label attached to it.\"\n          ]\n        },\n        \"series\": {\n          \"description\": \"The data that covers the one and only series of the pie chart.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"threeDimensional\": {\n          \"description\": \"True if the pie is three dimensional.\",\n          \"type\": \"boolean\"\n        },\n        \"domain\": {\n          \"description\": \"The data that covers the domain of the pie chart.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"pieHole\": {\n          \"description\": \"The size of the hole in the pie chart.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        }\n      },\n      \"id\": \"PieChartSpec\"\n    },\n    \"DeleteDataSourceRequest\": {\n      \"id\": \"DeleteDataSourceRequest\",\n      \"description\": \"Deletes a data source. The request also deletes the associated data source sheet, and unlinks all associated data source objects.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceId\": {\n          \"description\": \"The ID of the data source to delete.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"Response\": {\n      \"description\": \"A single response from an update.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"createDeveloperMetadata\": {\n          \"description\": \"A reply from creating a developer metadata entry.\",\n          \"$ref\": \"CreateDeveloperMetadataResponse\"\n        },\n        \"addNamedRange\": {\n          \"description\": \"A reply from adding a named range.\",\n          \"$ref\": \"AddNamedRangeResponse\"\n        },\n        \"addDimensionGroup\": {\n          \"description\": \"A reply from adding a dimension group.\",\n          \"$ref\": \"AddDimensionGroupResponse\"\n        },\n        \"trimWhitespace\": {\n          \"description\": \"A reply from trimming whitespace.\",\n          \"$ref\": \"TrimWhitespaceResponse\"\n        },\n        \"addSheet\": {\n          \"description\": \"A reply from adding a sheet.\",\n          \"$ref\": \"AddSheetResponse\"\n        },\n        \"addFilterView\": {\n          \"description\": \"A reply from adding a filter view.\",\n          \"$ref\": \"AddFilterViewResponse\"\n        },\n        \"addDataSource\": {\n          \"description\": \"A reply from adding a data source.\",\n          \"$ref\": \"AddDataSourceResponse\"\n        },\n        \"deleteDimensionGroup\": {\n          \"description\": \"A reply from deleting a dimension group.\",\n          \"$ref\": \"DeleteDimensionGroupResponse\"\n        },\n        \"updateConditionalFormatRule\": {\n          \"description\": \"A reply from updating a conditional format rule.\",\n          \"$ref\": \"UpdateConditionalFormatRuleResponse\"\n        },\n        \"addProtectedRange\": {\n          \"description\": \"A reply from adding a protected range.\",\n          \"$ref\": \"AddProtectedRangeResponse\"\n        },\n        \"updateDeveloperMetadata\": {\n          \"description\": \"A reply from updating a developer metadata entry.\",\n          \"$ref\": \"UpdateDeveloperMetadataResponse\"\n        },\n        \"deleteConditionalFormatRule\": {\n          \"description\": \"A reply from deleting a conditional format rule.\",\n          \"$ref\": \"DeleteConditionalFormatRuleResponse\"\n        },\n        \"addChart\": {\n          \"description\": \"A reply from adding a chart.\",\n          \"$ref\": \"AddChartResponse\"\n        },\n        \"updateEmbeddedObjectPosition\": {\n          \"description\": \"A reply from updating an embedded object's position.\",\n          \"$ref\": \"UpdateEmbeddedObjectPositionResponse\"\n        },\n        \"addBanding\": {\n          \"description\": \"A reply from adding a banded range.\",\n          \"$ref\": \"AddBandingResponse\"\n        },\n        \"addSlicer\": {\n          \"description\": \"A reply from adding a slicer.\",\n          \"$ref\": \"AddSlicerResponse\"\n        },\n        \"refreshDataSource\": {\n          \"description\": \"A reply from refreshing data source objects.\",\n          \"$ref\": \"RefreshDataSourceResponse\"\n        },\n        \"addTable\": {\n          \"description\": \"A reply from adding a table.\",\n          \"$ref\": \"AddTableResponse\"\n        },\n        \"updateDataSource\": {\n          \"description\": \"A reply from updating a data source.\",\n          \"$ref\": \"UpdateDataSourceResponse\"\n        },\n        \"findReplace\": {\n          \"description\": \"A reply from doing a find/replace.\",\n          \"$ref\": \"FindReplaceResponse\"\n        },\n        \"cancelDataSourceRefresh\": {\n          \"description\": \"A reply from cancelling data source object refreshes.\",\n          \"$ref\": \"CancelDataSourceRefreshResponse\"\n        },\n        \"deleteDeveloperMetadata\": {\n          \"description\": \"A reply from deleting a developer metadata entry.\",\n          \"$ref\": \"DeleteDeveloperMetadataResponse\"\n        },\n        \"deleteDuplicates\": {\n          \"description\": \"A reply from removing rows containing duplicate values.\",\n          \"$ref\": \"DeleteDuplicatesResponse\"\n        },\n        \"duplicateSheet\": {\n          \"description\": \"A reply from duplicating a sheet.\",\n          \"$ref\": \"DuplicateSheetResponse\"\n        },\n        \"duplicateFilterView\": {\n          \"description\": \"A reply from duplicating a filter view.\",\n          \"$ref\": \"DuplicateFilterViewResponse\"\n        }\n      },\n      \"id\": \"Response\"\n    },\n    \"BatchGetValuesByDataFilterRequest\": {\n      \"id\": \"BatchGetValuesByDataFilterRequest\",\n      \"description\": \"The request for retrieving a range of values in a spreadsheet selected by a set of DataFilters.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilters\": {\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          },\n          \"description\": \"The data filters used to match the ranges of values to retrieve. Ranges that match any of the specified data filters are included in the response.\",\n          \"type\": \"array\"\n        },\n        \"majorDimension\": {\n          \"description\": \"The major dimension that results should use. For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then a request that selects that range and sets `majorDimension=ROWS` returns `[[1,2],[3,4]]`, whereas a request that sets `majorDimension=COLUMNS` returns `[[1,3],[2,4]]`.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ],\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ]\n        },\n        \"valueRenderOption\": {\n          \"description\": \"How values should be represented in the output. The default render option is FORMATTED_VALUE.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Values will be calculated & formatted in the response according to the cell's formatting. Formatting is based on the spreadsheet's locale, not the requesting user's locale. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return `\\\"$1.23\\\"`.\",\n            \"Values will be calculated, but not formatted in the reply. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then `A2` would return the number `1.23`.\",\n            \"Values will not be calculated. The reply will include the formulas. For example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency, then A2 would return `\\\"=A1\\\"`. Sheets treats date and time values as decimal values. This lets you perform arithmetic on them in formulas. For more information on interpreting date and time values, see [About date & time values](https://developers.google.com/workspace/sheets/api/guides/formats#about_date_time_values).\"\n          ],\n          \"enum\": [\n            \"FORMATTED_VALUE\",\n            \"UNFORMATTED_VALUE\",\n            \"FORMULA\"\n          ]\n        },\n        \"dateTimeRenderOption\": {\n          \"description\": \"How dates, times, and durations should be represented in the output. This is ignored if value_render_option is FORMATTED_VALUE. The default dateTime render option is SERIAL_NUMBER.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Instructs date, time, datetime, and duration fields to be output as doubles in \\\"serial number\\\" format, as popularized by Lotus 1-2-3. The whole number portion of the value (left of the decimal) counts the days since December 30th 1899. The fractional portion (right of the decimal) counts the time as a fraction of the day. For example, January 1st 1900 at noon would be 2.5, 2 because it's 2 days after December 30th 1899, and .5 because noon is half a day. February 1st 1900 at 3pm would be 33.625. This correctly treats the year 1900 as not a leap year.\",\n            \"Instructs date, time, datetime, and duration fields to be output as strings in their given number format (which depends on the spreadsheet locale).\"\n          ],\n          \"enum\": [\n            \"SERIAL_NUMBER\",\n            \"FORMATTED_STRING\"\n          ]\n        }\n      }\n    },\n    \"AddTableRequest\": {\n      \"description\": \"Adds a new table to the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"table\": {\n          \"description\": \"Required. The table to add.\",\n          \"$ref\": \"Table\"\n        }\n      },\n      \"id\": \"AddTableRequest\"\n    },\n    \"DuplicateSheetResponse\": {\n      \"id\": \"DuplicateSheetResponse\",\n      \"description\": \"The result of duplicating a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"properties\": {\n          \"description\": \"The properties of the duplicate sheet.\",\n          \"$ref\": \"SheetProperties\"\n        }\n      }\n    },\n    \"BasicChartSpec\": {\n      \"description\": \"The specification for a basic chart. See BasicChartType for the list of charts this supports.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"lineSmoothing\": {\n          \"description\": \"Gets whether all lines should be rendered smooth or straight by default. Applies to Line charts.\",\n          \"type\": \"boolean\"\n        },\n        \"totalDataLabel\": {\n          \"description\": \"Controls whether to display additional data labels on stacked charts which sum the total value of all stacked values at each value along the domain axis. These data labels can only be set when chart_type is one of AREA, BAR, COLUMN, COMBO or STEPPED_AREA and stacked_type is either STACKED or PERCENT_STACKED. In addition, for COMBO, this will only be supported if there is only one type of stackable series type or one type has more series than the others and each of the other types have no more than one series. For example, if a chart has two stacked bar series and one area series, the total data labels will be supported. If it has three bar series and two area series, total data labels are not allowed. Neither CUSTOM nor placement can be set on the total_data_label.\",\n          \"$ref\": \"DataLabel\"\n        },\n        \"chartType\": {\n          \"enum\": [\n            \"BASIC_CHART_TYPE_UNSPECIFIED\",\n            \"BAR\",\n            \"LINE\",\n            \"AREA\",\n            \"COLUMN\",\n            \"SCATTER\",\n            \"COMBO\",\n            \"STEPPED_AREA\"\n          ],\n          \"description\": \"The type of the chart.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"A bar chart.\",\n            \"A line chart.\",\n            \"An area chart.\",\n            \"A column chart.\",\n            \"A scatter chart.\",\n            \"A combo chart.\",\n            \"A stepped area chart.\"\n          ]\n        },\n        \"legendPosition\": {\n          \"description\": \"The position of the chart legend.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The legend is rendered on the bottom of the chart.\",\n            \"The legend is rendered on the left of the chart.\",\n            \"The legend is rendered on the right of the chart.\",\n            \"The legend is rendered on the top of the chart.\",\n            \"No legend is rendered.\"\n          ],\n          \"enum\": [\n            \"BASIC_CHART_LEGEND_POSITION_UNSPECIFIED\",\n            \"BOTTOM_LEGEND\",\n            \"LEFT_LEGEND\",\n            \"RIGHT_LEGEND\",\n            \"TOP_LEGEND\",\n            \"NO_LEGEND\"\n          ]\n        },\n        \"headerCount\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of rows or columns in the data that are \\\"headers\\\". If not set, Google Sheets will guess how many rows are headers based on the data. (Note that BasicChartAxis.title may override the axis title inferred from the header values.)\",\n          \"type\": \"integer\"\n        },\n        \"threeDimensional\": {\n          \"description\": \"True to make the chart 3D. Applies to Bar and Column charts.\",\n          \"type\": \"boolean\"\n        },\n        \"stackedType\": {\n          \"enum\": [\n            \"BASIC_CHART_STACKED_TYPE_UNSPECIFIED\",\n            \"NOT_STACKED\",\n            \"STACKED\",\n            \"PERCENT_STACKED\"\n          ],\n          \"description\": \"The stacked type for charts that support vertical stacking. Applies to Area, Bar, Column, Combo, and Stepped Area charts.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Series are not stacked.\",\n            \"Series values are stacked, each value is rendered vertically beginning from the top of the value below it.\",\n            \"Vertical stacks are stretched to reach the top of the chart, with values laid out as percentages of each other.\"\n          ]\n        },\n        \"compareMode\": {\n          \"description\": \"The behavior of tooltips and data highlighting when hovering on data and chart area.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Only the focused data element is highlighted and shown in the tooltip.\",\n            \"All data elements with the same category (e.g., domain value) are highlighted and shown in the tooltip.\"\n          ],\n          \"enum\": [\n            \"BASIC_CHART_COMPARE_MODE_UNSPECIFIED\",\n            \"DATUM\",\n            \"CATEGORY\"\n          ]\n        },\n        \"axis\": {\n          \"description\": \"The axis on the chart.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"BasicChartAxis\"\n          }\n        },\n        \"domains\": {\n          \"description\": \"The domain of data this is charting. Only a single domain is supported.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"BasicChartDomain\"\n          }\n        },\n        \"series\": {\n          \"description\": \"The data this chart is visualizing.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"BasicChartSeries\"\n          }\n        },\n        \"interpolateNulls\": {\n          \"description\": \"If some values in a series are missing, gaps may appear in the chart (e.g, segments of lines in a line chart will be missing). To eliminate these gaps set this to true. Applies to Line, Area, and Combo charts.\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"BasicChartSpec\"\n    },\n    \"UpdateSlicerSpecRequest\": {\n      \"id\": \"UpdateSlicerSpecRequest\",\n      \"description\": \"Updates a slicer's specifications. (This does not move or resize a slicer. To move or resize a slicer use UpdateEmbeddedObjectPositionRequest.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"slicerId\": {\n          \"description\": \"The id of the slicer to update.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"spec\": {\n          \"description\": \"The specification to apply to the slicer.\",\n          \"$ref\": \"SlicerSpec\"\n        },\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `SlicerSpec` is implied and should not be specified. A single \\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"AppendValuesResponse\": {\n      \"description\": \"The response when updating a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"tableRange\": {\n          \"description\": \"The range (in A1 notation) of the table that values are being appended to (before the values were appended). Empty if no table was found.\",\n          \"type\": \"string\"\n        },\n        \"updates\": {\n          \"description\": \"Information about the updates that were applied.\",\n          \"$ref\": \"UpdateValuesResponse\"\n        }\n      },\n      \"id\": \"AppendValuesResponse\"\n    },\n    \"Borders\": {\n      \"id\": \"Borders\",\n      \"description\": \"The borders of the cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bottom\": {\n          \"description\": \"The bottom border of the cell.\",\n          \"$ref\": \"Border\"\n        },\n        \"left\": {\n          \"description\": \"The left border of the cell.\",\n          \"$ref\": \"Border\"\n        },\n        \"top\": {\n          \"description\": \"The top border of the cell.\",\n          \"$ref\": \"Border\"\n        },\n        \"right\": {\n          \"description\": \"The right border of the cell.\",\n          \"$ref\": \"Border\"\n        }\n      }\n    },\n    \"Editors\": {\n      \"id\": \"Editors\",\n      \"description\": \"The editors of a protected range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"groups\": {\n          \"description\": \"The email addresses of groups with edit access to the protected range.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        },\n        \"users\": {\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The email addresses of users with edit access to the protected range.\",\n          \"type\": \"array\"\n        },\n        \"domainUsersCanEdit\": {\n          \"description\": \"True if anyone in the document's domain has edit access to the protected range. Domain protection is only supported on documents within a domain.\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"TableColumnDataValidationRule\": {\n      \"description\": \"A data validation rule for a column in a table.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"condition\": {\n          \"description\": \"The condition that data in the cell must match. Valid only if the [BooleanCondition.type] is ONE_OF_LIST.\",\n          \"$ref\": \"BooleanCondition\"\n        }\n      },\n      \"id\": \"TableColumnDataValidationRule\"\n    },\n    \"Chip\": {\n      \"description\": \"The Smart Chip.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"personProperties\": {\n          \"description\": \"Properties of a linked person.\",\n          \"$ref\": \"PersonProperties\"\n        },\n        \"richLinkProperties\": {\n          \"description\": \"Properties of a rich link.\",\n          \"$ref\": \"RichLinkProperties\"\n        }\n      },\n      \"id\": \"Chip\"\n    },\n    \"SourceAndDestination\": {\n      \"id\": \"SourceAndDestination\",\n      \"description\": \"A combination of a source range and how to extend that source.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"source\": {\n          \"description\": \"The location of the data to use as the source of the autofill.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"dimension\": {\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ],\n          \"description\": \"The dimension that data should be filled into.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ]\n        },\n        \"fillLength\": {\n          \"description\": \"The number of rows or columns that data should be filled into. Positive numbers expand beyond the last row or last column of the source. Negative numbers expand before the first row or first column of the source.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"UnmergeCellsRequest\": {\n      \"description\": \"Unmerges cells in the given range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range within which all cells should be unmerged. If the range spans multiple merges, all will be unmerged. The range must not partially span any merge.\",\n          \"$ref\": \"GridRange\"\n        }\n      },\n      \"id\": \"UnmergeCellsRequest\"\n    },\n    \"CellData\": {\n      \"description\": \"Data about a specific cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"hyperlink\": {\n          \"description\": \"A hyperlink this cell points to, if any. If the cell contains multiple hyperlinks, this field will be empty. This field is read-only. To set it, use a `=HYPERLINK` formula in the userEnteredValue.formulaValue field. A cell-level link can also be set from the userEnteredFormat.textFormat field. Alternatively, set a hyperlink in the textFormatRun.format.link field that spans the entire cell.\",\n          \"type\": \"string\"\n        },\n        \"userEnteredFormat\": {\n          \"description\": \"The format the user entered for the cell. When writing, the new format will be merged with the existing format.\",\n          \"$ref\": \"CellFormat\"\n        },\n        \"chipRuns\": {\n          \"items\": {\n            \"$ref\": \"ChipRun\"\n          },\n          \"description\": \"Optional. Runs of chips applied to subsections of the cell. Properties of a run start at a specific index in the text and continue until the next run. When reading, all chipped and non-chipped runs are included. Non-chipped runs will have an empty Chip. When writing, only runs with chips are included. Runs containing chips are of length 1 and are represented in the user-entered text by an “@” placeholder symbol. New runs will overwrite any prior runs. Writing a new user_entered_value will erase previous runs.\",\n          \"type\": \"array\"\n        },\n        \"formattedValue\": {\n          \"description\": \"The formatted value of the cell. This is the value as it's shown to the user. This field is read-only.\",\n          \"type\": \"string\"\n        },\n        \"pivotTable\": {\n          \"description\": \"A pivot table anchored at this cell. The size of pivot table itself is computed dynamically based on its data, grouping, filters, values, etc. Only the top-left cell of the pivot table contains the pivot table definition. The other cells will contain the calculated values of the results of the pivot in their effective_value fields.\",\n          \"$ref\": \"PivotTable\"\n        },\n        \"dataSourceFormula\": {\n          \"description\": \"Output only. Information about a data source formula on the cell. The field is set if user_entered_value is a formula referencing some DATA_SOURCE sheet, e.g. `=SUM(DataSheet!Column)`.\",\n          \"readOnly\": true,\n          \"$ref\": \"DataSourceFormula\"\n        },\n        \"effectiveValue\": {\n          \"description\": \"The effective value of the cell. For cells with formulas, this is the calculated value. For cells with literals, this is the same as the user_entered_value. This field is read-only.\",\n          \"$ref\": \"ExtendedValue\"\n        },\n        \"userEnteredValue\": {\n          \"description\": \"The value the user entered in the cell. e.g., `1234`, `'Hello'`, or `=NOW()` Note: Dates, Times and DateTimes are represented as doubles in serial number format.\",\n          \"$ref\": \"ExtendedValue\"\n        },\n        \"textFormatRuns\": {\n          \"description\": \"Runs of rich text applied to subsections of the cell. Runs are only valid on user entered strings, not formulas, bools, or numbers. Properties of a run start at a specific index in the text and continue until the next run. Runs will inherit the properties of the cell unless explicitly changed. When writing, the new runs will overwrite any prior runs. When writing a new user_entered_value, previous runs are erased.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"TextFormatRun\"\n          }\n        },\n        \"dataValidation\": {\n          \"description\": \"A data validation rule on the cell, if any. When writing, the new data validation rule will overwrite any prior rule.\",\n          \"$ref\": \"DataValidationRule\"\n        },\n        \"dataSourceTable\": {\n          \"description\": \"A data source table anchored at this cell. The size of data source table itself is computed dynamically based on its configuration. Only the first cell of the data source table contains the data source table definition. The other cells will contain the display values of the data source table result in their effective_value fields.\",\n          \"$ref\": \"DataSourceTable\"\n        },\n        \"effectiveFormat\": {\n          \"description\": \"The effective format being used by the cell. This includes the results of applying any conditional formatting and, if the cell contains a formula, the computed number format. If the effective format is the default format, effective format will not be written. This field is read-only.\",\n          \"$ref\": \"CellFormat\"\n        },\n        \"note\": {\n          \"description\": \"Any note on the cell.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"CellData\"\n    },\n    \"TableColumnProperties\": {\n      \"id\": \"TableColumnProperties\",\n      \"description\": \"The table column.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"columnType\": {\n          \"enum\": [\n            \"COLUMN_TYPE_UNSPECIFIED\",\n            \"DOUBLE\",\n            \"CURRENCY\",\n            \"PERCENT\",\n            \"DATE\",\n            \"TIME\",\n            \"DATE_TIME\",\n            \"TEXT\",\n            \"BOOLEAN\",\n            \"DROPDOWN\",\n            \"FILES_CHIP\",\n            \"PEOPLE_CHIP\",\n            \"FINANCE_CHIP\",\n            \"PLACE_CHIP\",\n            \"RATINGS_CHIP\"\n          ],\n          \"description\": \"The column type.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"An unspecified column type.\",\n            \"The number column type.\",\n            \"The currency column type.\",\n            \"The percent column type.\",\n            \"The date column type.\",\n            \"The time column type.\",\n            \"The date and time column type.\",\n            \"The text column type.\",\n            \"The boolean column type.\",\n            \"The dropdown column type.\",\n            \"The files chip column type\",\n            \"The people chip column type\",\n            \"The finance chip column type\",\n            \"The place chip column type\",\n            \"The ratings chip column type\"\n          ]\n        },\n        \"columnIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The 0-based column index. This index is relative to its position in the table and is not necessarily the same as the column index in the sheet.\",\n          \"type\": \"integer\"\n        },\n        \"columnName\": {\n          \"description\": \"The column name.\",\n          \"type\": \"string\"\n        },\n        \"dataValidationRule\": {\n          \"description\": \"The column data validation rule. Only set for dropdown column type.\",\n          \"$ref\": \"TableColumnDataValidationRule\"\n        }\n      }\n    },\n    \"BatchClearValuesResponse\": {\n      \"description\": \"The response when clearing a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"clearedRanges\": {\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The ranges that were cleared, in A1 notation. If the requests are for an unbounded range or a range larger than the bounds of the sheet, this is the actual ranges that were cleared, bounded to the sheet's limits.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"BatchClearValuesResponse\"\n    },\n    \"ClearValuesRequest\": {\n      \"description\": \"The request for clearing a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {},\n      \"id\": \"ClearValuesRequest\"\n    },\n    \"Color\": {\n      \"description\": \"Represents a color in the RGBA color space. This representation is designed for simplicity of conversion to and from color representations in various languages over compactness. For example, the fields of this representation can be trivially provided to the constructor of `java.awt.Color` in Java; it can also be trivially provided to UIColor's `+colorWithRed:green:blue:alpha` method in iOS; and, with just a little work, it can be easily formatted into a CSS `rgba()` string in JavaScript. This reference page doesn't have information about the absolute color space that should be used to interpret the RGB value—for example, sRGB, Adobe RGB, DCI-P3, and BT.2020. By default, applications should assume the sRGB color space. When color equality needs to be decided, implementations, unless documented otherwise, treat two colors as equal if all their red, green, blue, and alpha values each differ by at most `1e-5`. Example (Java): import com.google.type.Color; // ... public static java.awt.Color fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ? protocolor.getAlpha().getValue() : 1.0; return new java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); } public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float green = (float) color.getGreen(); float blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder = Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) .setBlue(blue / denominator); int alpha = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float) alpha) / denominator) .build()); } return resultBuilder.build(); } // ... Example (iOS / Obj-C): // ... static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green = [protocolor green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return [UIColor colorWithRed:red green:green blue:blue alpha:alpha]; } static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha; if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) { return nil; } Color* result = [[Color alloc] init]; [result setRed:red]; [result setGreen:green]; [result setBlue:blue]; if (alpha \\u003c= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result autorelease]; return result; } // ... Example (JavaScript): // ... var protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green || 0.0; var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green = Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255); if (!('alpha' in rgb_color)) { return rgbToCssColor(red, green, blue); } var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red, green, blue].join(','); return ['rgba(', rgbParams, ',', alphaFrac, ')'].join(''); }; var rgbToCssColor = function(red, green, blue) { var rgbNumber = new Number((red \\u003c\\u003c 16) | (green \\u003c\\u003c 8) | blue); var hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; var resultBuilder = ['#']; for (var i = 0; i \\u003c missingZeros; i++) { resultBuilder.push('0'); } resultBuilder.push(hexString); return resultBuilder.join(''); }; // ...\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"green\": {\n          \"description\": \"The amount of green in the color as a value in the interval [0, 1].\",\n          \"type\": \"number\",\n          \"format\": \"float\"\n        },\n        \"red\": {\n          \"description\": \"The amount of red in the color as a value in the interval [0, 1].\",\n          \"type\": \"number\",\n          \"format\": \"float\"\n        },\n        \"blue\": {\n          \"format\": \"float\",\n          \"description\": \"The amount of blue in the color as a value in the interval [0, 1].\",\n          \"type\": \"number\"\n        },\n        \"alpha\": {\n          \"format\": \"float\",\n          \"description\": \"The fraction of this color that should be applied to the pixel. That is, the final pixel color is defined by the equation: `pixel color = alpha * (this color) + (1.0 - alpha) * (background color)` This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a completely transparent color. This uses a wrapper message rather than a simple float scalar so that it is possible to distinguish between a default value and the value being unset. If omitted, this color object is rendered as a solid color (as if the alpha value had been explicitly given a value of 1.0).\",\n          \"type\": \"number\"\n        }\n      },\n      \"id\": \"Color\"\n    },\n    \"Slicer\": {\n      \"id\": \"Slicer\",\n      \"description\": \"A slicer in a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spec\": {\n          \"description\": \"The specification of the slicer.\",\n          \"$ref\": \"SlicerSpec\"\n        },\n        \"slicerId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the slicer.\",\n          \"type\": \"integer\"\n        },\n        \"position\": {\n          \"description\": \"The position of the slicer. Note that slicer can be positioned only on existing sheet. Also, width and height of slicer can be automatically adjusted to keep it within permitted limits.\",\n          \"$ref\": \"EmbeddedObjectPosition\"\n        }\n      }\n    },\n    \"DataSourceRefreshDailySchedule\": {\n      \"id\": \"DataSourceRefreshDailySchedule\",\n      \"description\": \"A schedule for data to refresh every day in a given time interval.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"startTime\": {\n          \"description\": \"The start time of a time interval in which a data source refresh is scheduled. Only `hours` part is used. The time interval size defaults to that in the Sheets editor.\",\n          \"$ref\": \"TimeOfDay\"\n        }\n      }\n    },\n    \"UpdateConditionalFormatRuleRequest\": {\n      \"description\": \"Updates a conditional format rule at the given index, or moves a conditional format rule to another index.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rule\": {\n          \"description\": \"The rule that should replace the rule at the given index.\",\n          \"$ref\": \"ConditionalFormatRule\"\n        },\n        \"index\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based index of the rule that should be replaced or moved.\",\n          \"type\": \"integer\"\n        },\n        \"sheetId\": {\n          \"description\": \"The sheet of the rule to move. Required if new_index is set, unused otherwise.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"newIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The zero-based new index the rule should end up at.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"UpdateConditionalFormatRuleRequest\"\n    },\n    \"AddTableResponse\": {\n      \"description\": \"The result of adding a table.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"table\": {\n          \"description\": \"Output only. The table that was added.\",\n          \"readOnly\": true,\n          \"$ref\": \"Table\"\n        }\n      },\n      \"id\": \"AddTableResponse\"\n    },\n    \"DataSourceColumnReference\": {\n      \"id\": \"DataSourceColumnReference\",\n      \"description\": \"An unique identifier that references a data source column.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"description\": \"The display name of the column. It should be unique within a data source.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"ManualRule\": {\n      \"description\": \"Allows you to manually organize the values in a source data column into buckets with names of your choosing. For example, a pivot table that aggregates population by state: +-------+-------------------+ | State | SUM of Population | +-------+-------------------+ | AK | 0.7 | | AL | 4.8 | | AR | 2.9 | ... +-------+-------------------+ could be turned into a pivot table that aggregates population by time zone by providing a list of groups (for example, groupName = 'Central', items = ['AL', 'AR', 'IA', ...]) to a manual group rule. Note that a similar effect could be achieved by adding a time zone column to the source data and adjusting the pivot table. +-----------+-------------------+ | Time Zone | SUM of Population | +-----------+-------------------+ | Central | 106.3 | | Eastern | 151.9 | | Mountain | 17.4 | ... +-----------+-------------------+\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"groups\": {\n          \"description\": \"The list of group names and the corresponding items from the source data that map to each group name.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"ManualRuleGroup\"\n          }\n        }\n      },\n      \"id\": \"ManualRule\"\n    },\n    \"MergeCellsRequest\": {\n      \"description\": \"Merges all cells in the range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range of cells to merge.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"mergeType\": {\n          \"enum\": [\n            \"MERGE_ALL\",\n            \"MERGE_COLUMNS\",\n            \"MERGE_ROWS\"\n          ],\n          \"description\": \"How the cells should be merged.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Create a single merge from the range\",\n            \"Create a merge for each column in the range\",\n            \"Create a merge for each row in the range\"\n          ]\n        }\n      },\n      \"id\": \"MergeCellsRequest\"\n    },\n    \"BatchUpdateSpreadsheetResponse\": {\n      \"description\": \"The reply for batch updating a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"updatedSpreadsheet\": {\n          \"description\": \"The spreadsheet after updates were applied. This is only set if BatchUpdateSpreadsheetRequest.include_spreadsheet_in_response is `true`.\",\n          \"$ref\": \"Spreadsheet\"\n        },\n        \"replies\": {\n          \"items\": {\n            \"$ref\": \"Response\"\n          },\n          \"description\": \"The reply of the updates. This maps 1:1 with the updates, although replies to some requests may be empty.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"BatchUpdateSpreadsheetResponse\"\n    },\n    \"AddNamedRangeResponse\": {\n      \"description\": \"The result of adding a named range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"namedRange\": {\n          \"description\": \"The named range to add.\",\n          \"$ref\": \"NamedRange\"\n        }\n      },\n      \"id\": \"AddNamedRangeResponse\"\n    },\n    \"CreateDeveloperMetadataRequest\": {\n      \"id\": \"CreateDeveloperMetadataRequest\",\n      \"description\": \"A request to create developer metadata.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"developerMetadata\": {\n          \"description\": \"The developer metadata to create.\",\n          \"$ref\": \"DeveloperMetadata\"\n        }\n      }\n    },\n    \"AutoResizeDimensionsRequest\": {\n      \"description\": \"Automatically resizes one or more dimensions based on the contents of the cells in that dimension.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceSheetDimensions\": {\n          \"description\": \"The dimensions on a data source sheet to automatically resize.\",\n          \"$ref\": \"DataSourceSheetDimensionRange\"\n        },\n        \"dimensions\": {\n          \"description\": \"The dimensions to automatically resize.\",\n          \"$ref\": \"DimensionRange\"\n        }\n      },\n      \"id\": \"AutoResizeDimensionsRequest\"\n    },\n    \"ChartSourceRange\": {\n      \"description\": \"Source ranges for a chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sources\": {\n          \"description\": \"The ranges of data for a series or domain. Exactly one dimension must have a length of 1, and all sources in the list must have the same dimension with length 1. The domain (if it exists) & all series must have the same number of source ranges. If using more than one source range, then the source range at a given offset must be in order and contiguous across the domain and series. For example, these are valid configurations: domain sources: A1:A5 series1 sources: B1:B5 series2 sources: D6:D10 domain sources: A1:A5, C10:C12 series1 sources: B1:B5, D10:D12 series2 sources: C1:C5, E10:E12\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"GridRange\"\n          }\n        }\n      },\n      \"id\": \"ChartSourceRange\"\n    },\n    \"NumberFormat\": {\n      \"description\": \"The number format of a cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"enum\": [\n            \"NUMBER_FORMAT_TYPE_UNSPECIFIED\",\n            \"TEXT\",\n            \"NUMBER\",\n            \"PERCENT\",\n            \"CURRENCY\",\n            \"DATE\",\n            \"TIME\",\n            \"DATE_TIME\",\n            \"SCIENTIFIC\"\n          ],\n          \"description\": \"The type of the number format. When writing, this field must be set.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The number format is not specified and is based on the contents of the cell. Do not explicitly use this.\",\n            \"Text formatting, e.g `1000.12`\",\n            \"Number formatting, e.g, `1,000.12`\",\n            \"Percent formatting, e.g `10.12%`\",\n            \"Currency formatting, e.g `$1,000.12`\",\n            \"Date formatting, e.g `9/26/2008`\",\n            \"Time formatting, e.g `3:59:00 PM`\",\n            \"Date+Time formatting, e.g `9/26/08 15:59:00`\",\n            \"Scientific number formatting, e.g `1.01E+03`\"\n          ]\n        },\n        \"pattern\": {\n          \"description\": \"Pattern string used for formatting. If not set, a default pattern based on the spreadsheet's locale will be used if necessary for the given type. See the [Date and Number Formats guide](https://developers.google.com/workspace/sheets/api/guides/formats) for more information about the supported patterns.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"NumberFormat\"\n    },\n    \"KeyValueFormat\": {\n      \"id\": \"KeyValueFormat\",\n      \"description\": \"Formatting options for key value.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"textFormat\": {\n          \"description\": \"Text formatting options for key value. The link field is not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"position\": {\n          \"description\": \"Specifies the horizontal text positioning of key value. This field is optional. If not specified, default positioning is used.\",\n          \"$ref\": \"TextPosition\"\n        }\n      }\n    },\n    \"CopyPasteRequest\": {\n      \"description\": \"Copies data from the source to the destination.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"destination\": {\n          \"description\": \"The location to paste to. If the range covers a span that's a multiple of the source's height or width, then the data will be repeated to fill in the destination range. If the range is smaller than the source range, the entire source data will still be copied (beyond the end of the destination range).\",\n          \"$ref\": \"GridRange\"\n        },\n        \"source\": {\n          \"description\": \"The source range to copy.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"pasteType\": {\n          \"description\": \"What kind of data to paste.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Paste values, formulas, formats, and merges.\",\n            \"Paste the values ONLY without formats, formulas, or merges.\",\n            \"Paste the format and data validation only.\",\n            \"Like `PASTE_NORMAL` but without borders.\",\n            \"Paste the formulas only.\",\n            \"Paste the data validation only.\",\n            \"Paste the conditional formatting rules only.\"\n          ],\n          \"enum\": [\n            \"PASTE_NORMAL\",\n            \"PASTE_VALUES\",\n            \"PASTE_FORMAT\",\n            \"PASTE_NO_BORDERS\",\n            \"PASTE_FORMULA\",\n            \"PASTE_DATA_VALIDATION\",\n            \"PASTE_CONDITIONAL_FORMATTING\"\n          ]\n        },\n        \"pasteOrientation\": {\n          \"description\": \"How that data should be oriented when pasting.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Paste normally.\",\n            \"Paste transposed, where all rows become columns and vice versa.\"\n          ],\n          \"enum\": [\n            \"NORMAL\",\n            \"TRANSPOSE\"\n          ]\n        }\n      },\n      \"id\": \"CopyPasteRequest\"\n    },\n    \"UpdateDimensionGroupRequest\": {\n      \"id\": \"UpdateDimensionGroupRequest\",\n      \"description\": \"Updates the state of the specified group.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimensionGroup\": {\n          \"description\": \"The group whose state should be updated. The range and depth of the group should specify a valid group on the sheet, and all other fields updated.\",\n          \"$ref\": \"DimensionGroup\"\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `dimensionGroup` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        }\n      }\n    },\n    \"DeveloperMetadataLookup\": {\n      \"description\": \"Selects DeveloperMetadata that matches all of the specified fields. For example, if only a metadata ID is specified this considers the DeveloperMetadata with that particular unique ID. If a metadata key is specified, this considers all developer metadata with that key. If a key, visibility, and location type are all specified, this considers all developer metadata with that key and visibility that are associated with a location of that type. In general, this selects all DeveloperMetadata that match the intersection of all the specified fields; any field or combination of fields may be specified.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"metadataId\": {\n          \"format\": \"int32\",\n          \"description\": \"Limits the selected developer metadata to that which has a matching DeveloperMetadata.metadata_id.\",\n          \"type\": \"integer\"\n        },\n        \"locationMatchingStrategy\": {\n          \"description\": \"Determines how this lookup matches the location. If this field is specified as EXACT, only developer metadata associated on the exact location specified is matched. If this field is specified to INTERSECTING, developer metadata associated on intersecting locations is also matched. If left unspecified, this field assumes a default value of INTERSECTING. If this field is specified, a metadataLocation must also be specified.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value. This value must not be used.\",\n            \"Indicates that a specified location should be matched exactly. For example, if row three were specified as a location this matching strategy would only match developer metadata also associated on row three. Metadata associated on other locations would not be considered.\",\n            \"Indicates that a specified location should match that exact location as well as any intersecting locations. For example, if row three were specified as a location this matching strategy would match developer metadata associated on row three as well as metadata associated on locations that intersect row three. If, for instance, there was developer metadata associated on column B, this matching strategy would also match that location because column B intersects row three.\"\n          ],\n          \"enum\": [\n            \"DEVELOPER_METADATA_LOCATION_MATCHING_STRATEGY_UNSPECIFIED\",\n            \"EXACT_LOCATION\",\n            \"INTERSECTING_LOCATION\"\n          ]\n        },\n        \"metadataLocation\": {\n          \"description\": \"Limits the selected developer metadata to those entries associated with the specified location. This field either matches exact locations or all intersecting locations according the specified locationMatchingStrategy.\",\n          \"$ref\": \"DeveloperMetadataLocation\"\n        },\n        \"metadataValue\": {\n          \"description\": \"Limits the selected developer metadata to that which has a matching DeveloperMetadata.metadata_value.\",\n          \"type\": \"string\"\n        },\n        \"locationType\": {\n          \"enum\": [\n            \"DEVELOPER_METADATA_LOCATION_TYPE_UNSPECIFIED\",\n            \"ROW\",\n            \"COLUMN\",\n            \"SHEET\",\n            \"SPREADSHEET\"\n          ],\n          \"description\": \"Limits the selected developer metadata to those entries which are associated with locations of the specified type. For example, when this field is specified as ROW this lookup only considers developer metadata associated on rows. If the field is left unspecified, all location types are considered. This field cannot be specified as SPREADSHEET when the locationMatchingStrategy is specified as INTERSECTING or when the metadataLocation is specified as a non-spreadsheet location. Spreadsheet metadata cannot intersect any other developer metadata location. This field also must be left unspecified when the locationMatchingStrategy is specified as EXACT.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value.\",\n            \"Developer metadata associated on an entire row dimension.\",\n            \"Developer metadata associated on an entire column dimension.\",\n            \"Developer metadata associated on an entire sheet.\",\n            \"Developer metadata associated on the entire spreadsheet.\"\n          ]\n        },\n        \"metadataKey\": {\n          \"description\": \"Limits the selected developer metadata to that which has a matching DeveloperMetadata.metadata_key.\",\n          \"type\": \"string\"\n        },\n        \"visibility\": {\n          \"enum\": [\n            \"DEVELOPER_METADATA_VISIBILITY_UNSPECIFIED\",\n            \"DOCUMENT\",\n            \"PROJECT\"\n          ],\n          \"description\": \"Limits the selected developer metadata to that which has a matching DeveloperMetadata.visibility. If left unspecified, all developer metadata visible to the requesting project is considered.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value.\",\n            \"Document-visible metadata is accessible from any developer project with access to the document.\",\n            \"Project-visible metadata is only visible to and accessible by the developer project that created the metadata.\"\n          ]\n        }\n      },\n      \"id\": \"DeveloperMetadataLookup\"\n    },\n    \"ValueRange\": {\n      \"id\": \"ValueRange\",\n      \"description\": \"Data within a range of the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range the values cover, in [A1 notation](https://developers.google.com/workspace/sheets/api/guides/concepts#cell). For output, this range indicates the entire requested range, even though the values will exclude trailing rows and columns. When appending values, this field represents the range to search for a table, after which values will be appended.\",\n          \"type\": \"string\"\n        },\n        \"values\": {\n          \"items\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"any\"\n            }\n          },\n          \"description\": \"The data that was read or to be written. This is an array of arrays, the outer array representing all the data and each inner array representing a major dimension. Each item in the inner array corresponds with one cell. For output, empty trailing rows and columns will not be included. For input, supported value types are: bool, string, and double. Null values will be skipped. To set a cell to an empty value, set the string value to an empty string.\",\n          \"type\": \"array\"\n        },\n        \"majorDimension\": {\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ],\n          \"description\": \"The major dimension of the values. For output, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting `range=A1:B2,majorDimension=ROWS` will return `[[1,2],[3,4]]`, whereas requesting `range=A1:B2,majorDimension=COLUMNS` will return `[[1,3],[2,4]]`. For input, with `range=A1:B2,majorDimension=ROWS` then `[[1,2],[3,4]]` will set `A1=1,B1=2,A2=3,B2=4`. With `range=A1:B2,majorDimension=COLUMNS` then `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`. When writing, if this field is not set, it defaults to ROWS.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ]\n        }\n      }\n    },\n    \"AddFilterViewResponse\": {\n      \"description\": \"The result of adding a filter view.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filter\": {\n          \"description\": \"The newly added filter view.\",\n          \"$ref\": \"FilterView\"\n        }\n      },\n      \"id\": \"AddFilterViewResponse\"\n    },\n    \"DeleteDeveloperMetadataResponse\": {\n      \"id\": \"DeleteDeveloperMetadataResponse\",\n      \"description\": \"The response from deleting developer metadata.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"deletedDeveloperMetadata\": {\n          \"items\": {\n            \"$ref\": \"DeveloperMetadata\"\n          },\n          \"description\": \"The metadata that was deleted.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"CutPasteRequest\": {\n      \"description\": \"Moves data from the source to the destination.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"source\": {\n          \"description\": \"The source data to cut.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"pasteType\": {\n          \"enum\": [\n            \"PASTE_NORMAL\",\n            \"PASTE_VALUES\",\n            \"PASTE_FORMAT\",\n            \"PASTE_NO_BORDERS\",\n            \"PASTE_FORMULA\",\n            \"PASTE_DATA_VALIDATION\",\n            \"PASTE_CONDITIONAL_FORMATTING\"\n          ],\n          \"description\": \"What kind of data to paste. All the source data will be cut, regardless of what is pasted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Paste values, formulas, formats, and merges.\",\n            \"Paste the values ONLY without formats, formulas, or merges.\",\n            \"Paste the format and data validation only.\",\n            \"Like `PASTE_NORMAL` but without borders.\",\n            \"Paste the formulas only.\",\n            \"Paste the data validation only.\",\n            \"Paste the conditional formatting rules only.\"\n          ]\n        },\n        \"destination\": {\n          \"description\": \"The top-left coordinate where the data should be pasted.\",\n          \"$ref\": \"GridCoordinate\"\n        }\n      },\n      \"id\": \"CutPasteRequest\"\n    },\n    \"AppendDimensionRequest\": {\n      \"id\": \"AppendDimensionRequest\",\n      \"description\": \"Appends rows or columns to the end of a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimension\": {\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ],\n          \"description\": \"Whether rows or columns should be appended.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ]\n        },\n        \"length\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of rows or columns to append.\",\n          \"type\": \"integer\"\n        },\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The sheet to append rows or columns to.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"DataSourceObjectReference\": {\n      \"description\": \"Reference to a data source object.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataSourceFormulaCell\": {\n          \"description\": \"References to a cell containing DataSourceFormula.\",\n          \"$ref\": \"GridCoordinate\"\n        },\n        \"sheetId\": {\n          \"description\": \"References to a DATA_SOURCE sheet.\",\n          \"type\": \"string\"\n        },\n        \"chartId\": {\n          \"format\": \"int32\",\n          \"description\": \"References to a data source chart.\",\n          \"type\": \"integer\"\n        },\n        \"dataSourcePivotTableAnchorCell\": {\n          \"description\": \"References to a data source PivotTable anchored at the cell.\",\n          \"$ref\": \"GridCoordinate\"\n        },\n        \"dataSourceTableAnchorCell\": {\n          \"description\": \"References to a DataSourceTable anchored at the cell.\",\n          \"$ref\": \"GridCoordinate\"\n        }\n      },\n      \"id\": \"DataSourceObjectReference\"\n    },\n    \"RowData\": {\n      \"description\": \"Data about each cell in a row.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"values\": {\n          \"description\": \"The values in the row, one per column.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"CellData\"\n          }\n        }\n      },\n      \"id\": \"RowData\"\n    },\n    \"EmbeddedObjectPosition\": {\n      \"description\": \"The position of an embedded object such as a chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"overlayPosition\": {\n          \"description\": \"The position at which the object is overlaid on top of a grid.\",\n          \"$ref\": \"OverlayPosition\"\n        },\n        \"newSheet\": {\n          \"description\": \"If true, the embedded object is put on a new sheet whose ID is chosen for you. Used only when writing.\",\n          \"type\": \"boolean\"\n        },\n        \"sheetId\": {\n          \"description\": \"The sheet this is on. Set only if the embedded object is on its own sheet. Must be non-negative.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"id\": \"EmbeddedObjectPosition\"\n    },\n    \"PivotGroup\": {\n      \"description\": \"A single grouping (either row or column) in a pivot table.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sourceColumnOffset\": {\n          \"description\": \"The column offset of the source range that this grouping is based on. For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this group refers to column `C`, whereas the offset `1` would refer to column `D`.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"groupLimit\": {\n          \"description\": \"The count limit on rows or columns to apply to this pivot group.\",\n          \"$ref\": \"PivotGroupLimit\"\n        },\n        \"label\": {\n          \"description\": \"The labels to use for the row/column groups which can be customized. For example, in the following pivot table, the row label is `Region` (which could be renamed to `State`) and the column label is `Product` (which could be renamed `Item`). Pivot tables created before December 2017 do not have header labels. If you'd like to add header labels to an existing pivot table, please delete the existing pivot table and then create a new pivot table with same parameters. +--------------+---------+-------+ | SUM of Units | Product | | | Region | Pen | Paper | +--------------+---------+-------+ | New York | 345 | 98 | | Oregon | 234 | 123 | | Tennessee | 531 | 415 | +--------------+---------+-------+ | Grand Total | 1110 | 636 | +--------------+---------+-------+\",\n          \"type\": \"string\"\n        },\n        \"showTotals\": {\n          \"description\": \"True if the pivot table should include the totals for this grouping.\",\n          \"type\": \"boolean\"\n        },\n        \"groupRule\": {\n          \"description\": \"The group rule to apply to this row/column group.\",\n          \"$ref\": \"PivotGroupRule\"\n        },\n        \"dataSourceColumnReference\": {\n          \"description\": \"The reference to the data source column this grouping is based on.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"valueMetadata\": {\n          \"description\": \"Metadata about values in the grouping.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"PivotGroupValueMetadata\"\n          }\n        },\n        \"valueBucket\": {\n          \"description\": \"The bucket of the opposite pivot group to sort by. If not specified, sorting is alphabetical by this group's values.\",\n          \"$ref\": \"PivotGroupSortValueBucket\"\n        },\n        \"sortOrder\": {\n          \"description\": \"The order the values in this group should be sorted.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use this.\",\n            \"Sort ascending.\",\n            \"Sort descending.\"\n          ],\n          \"enum\": [\n            \"SORT_ORDER_UNSPECIFIED\",\n            \"ASCENDING\",\n            \"DESCENDING\"\n          ]\n        },\n        \"repeatHeadings\": {\n          \"description\": \"True if the headings in this pivot group should be repeated. This is only valid for row groupings and is ignored by columns. By default, we minimize repetition of headings by not showing higher level headings where they are the same. For example, even though the third row below corresponds to \\\"Q1 Mar\\\", \\\"Q1\\\" is not shown because it is redundant with previous rows. Setting repeat_headings to true would cause \\\"Q1\\\" to be repeated for \\\"Feb\\\" and \\\"Mar\\\". +--------------+ | Q1 | Jan | | | Feb | | | Mar | +--------+-----+ | Q1 Total | +--------------+\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"PivotGroup\"\n    },\n    \"MatchedDeveloperMetadata\": {\n      \"description\": \"A developer metadata entry and the data filters specified in the original request that matched it.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilters\": {\n          \"description\": \"All filters matching the returned developer metadata.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          }\n        },\n        \"developerMetadata\": {\n          \"description\": \"The developer metadata matching the specified filters.\",\n          \"$ref\": \"DeveloperMetadata\"\n        }\n      },\n      \"id\": \"MatchedDeveloperMetadata\"\n    },\n    \"SetBasicFilterRequest\": {\n      \"description\": \"Sets the basic filter associated with a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filter\": {\n          \"description\": \"The filter to set.\",\n          \"$ref\": \"BasicFilter\"\n        }\n      },\n      \"id\": \"SetBasicFilterRequest\"\n    },\n    \"SpreadsheetTheme\": {\n      \"id\": \"SpreadsheetTheme\",\n      \"description\": \"Represents spreadsheet theme\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"primaryFontFamily\": {\n          \"description\": \"Name of the primary font family.\",\n          \"type\": \"string\"\n        },\n        \"themeColors\": {\n          \"items\": {\n            \"$ref\": \"ThemeColorPair\"\n          },\n          \"description\": \"The spreadsheet theme color pairs. To update you must provide all theme color pairs.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"Border\": {\n      \"description\": \"A border along a cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"colorStyle\": {\n          \"description\": \"The color of the border. If color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"width\": {\n          \"description\": \"The width of the border, in pixels. Deprecated; the width is determined by the \\\"style\\\" field.\",\n          \"deprecated\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"color\": {\n          \"description\": \"The color of the border. Deprecated: Use color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"style\": {\n          \"enum\": [\n            \"STYLE_UNSPECIFIED\",\n            \"DOTTED\",\n            \"DASHED\",\n            \"SOLID\",\n            \"SOLID_MEDIUM\",\n            \"SOLID_THICK\",\n            \"NONE\",\n            \"DOUBLE\"\n          ],\n          \"description\": \"The style of the border.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The style is not specified. Do not use this.\",\n            \"The border is dotted.\",\n            \"The border is dashed.\",\n            \"The border is a thin solid line.\",\n            \"The border is a medium solid line.\",\n            \"The border is a thick solid line.\",\n            \"No border. Used only when updating a border in order to erase it.\",\n            \"The border is two solid lines.\"\n          ]\n        }\n      },\n      \"id\": \"Border\"\n    },\n    \"TextRotation\": {\n      \"id\": \"TextRotation\",\n      \"description\": \"The rotation applied to text in a cell.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"angle\": {\n          \"description\": \"The angle between the standard orientation and the desired orientation. Measured in degrees. Valid values are between -90 and 90. Positive angles are angled upwards, negative are angled downwards. Note: For LTR text direction positive angles are in the counterclockwise direction, whereas for RTL they are in the clockwise direction\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"vertical\": {\n          \"description\": \"If true, text reads top to bottom, but the orientation of individual characters is unchanged. For example: | V | | e | | r | | t | | i | | c | | a | | l |\",\n          \"type\": \"boolean\"\n        }\n      }\n    },\n    \"UpdateChartSpecRequest\": {\n      \"id\": \"UpdateChartSpecRequest\",\n      \"description\": \"Updates a chart's specifications. (This does not move or resize a chart. To move or resize a chart, use UpdateEmbeddedObjectPositionRequest.)\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"spec\": {\n          \"description\": \"The specification to apply to the chart.\",\n          \"$ref\": \"ChartSpec\"\n        },\n        \"chartId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the chart to update.\",\n          \"type\": \"integer\"\n        }\n      }\n    },\n    \"DeleteTableRequest\": {\n      \"id\": \"DeleteTableRequest\",\n      \"description\": \"Removes the table with the given ID from the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"tableId\": {\n          \"description\": \"The ID of the table to delete.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"CandlestickData\": {\n      \"id\": \"CandlestickData\",\n      \"description\": \"The Candlestick chart data, each containing the low, open, close, and high values for a series.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"closeSeries\": {\n          \"description\": \"The range data (vertical axis) for the close/final value for each candle. This is the top of the candle body. If greater than the open value the candle will be filled. Otherwise the candle will be hollow.\",\n          \"$ref\": \"CandlestickSeries\"\n        },\n        \"lowSeries\": {\n          \"description\": \"The range data (vertical axis) for the low/minimum value for each candle. This is the bottom of the candle's center line.\",\n          \"$ref\": \"CandlestickSeries\"\n        },\n        \"highSeries\": {\n          \"description\": \"The range data (vertical axis) for the high/maximum value for each candle. This is the top of the candle's center line.\",\n          \"$ref\": \"CandlestickSeries\"\n        },\n        \"openSeries\": {\n          \"description\": \"The range data (vertical axis) for the open/initial value for each candle. This is the bottom of the candle body. If less than the close value the candle will be filled. Otherwise the candle will be hollow.\",\n          \"$ref\": \"CandlestickSeries\"\n        }\n      }\n    },\n    \"TreemapChartSpec\": {\n      \"id\": \"TreemapChartSpec\",\n      \"description\": \"A Treemap chart.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"hideTooltips\": {\n          \"description\": \"True to hide tooltips.\",\n          \"type\": \"boolean\"\n        },\n        \"textFormat\": {\n          \"description\": \"The text format for all labels on the chart. The link field is not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"labels\": {\n          \"description\": \"The data that contains the treemap cell labels.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"colorData\": {\n          \"description\": \"The data that determines the background color of each treemap data cell. This field is optional. If not specified, size_data is used to determine background colors. If specified, the data is expected to be numeric. color_scale will determine how the values in this data map to data cell background colors.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"hintedLevels\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of additional data levels beyond the labeled levels to be shown on the treemap chart. These levels are not interactive and are shown without their labels. Defaults to 0 if not specified.\",\n          \"type\": \"integer\"\n        },\n        \"colorScale\": {\n          \"description\": \"The color scale for data cells in the treemap chart. Data cells are assigned colors based on their color values. These color values come from color_data, or from size_data if color_data is not specified. Cells with color values less than or equal to min_value will have minValueColor as their background color. Cells with color values greater than or equal to max_value will have maxValueColor as their background color. Cells with color values between min_value and max_value will have background colors on a gradient between minValueColor and maxValueColor, the midpoint of the gradient being midValueColor. Cells with missing or non-numeric color values will have noDataColor as their background color.\",\n          \"$ref\": \"TreemapChartColorScale\"\n        },\n        \"parentLabels\": {\n          \"description\": \"The data the contains the treemap cells' parent labels.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"headerColorStyle\": {\n          \"description\": \"The background color for header cells. If header_color is also set, this field takes precedence.\",\n          \"$ref\": \"ColorStyle\"\n        },\n        \"sizeData\": {\n          \"description\": \"The data that determines the size of each treemap data cell. This data is expected to be numeric. The cells corresponding to non-numeric or missing data will not be rendered. If color_data is not specified, this data is used to determine data cell background colors as well.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"maxValue\": {\n          \"format\": \"double\",\n          \"description\": \"The maximum possible data value. Cells with values greater than this will have the same color as cells with this value. If not specified, defaults to the actual maximum value from color_data, or the maximum value from size_data if color_data is not specified.\",\n          \"type\": \"number\"\n        },\n        \"headerColor\": {\n          \"description\": \"The background color for header cells. Deprecated: Use header_color_style.\",\n          \"deprecated\": true,\n          \"$ref\": \"Color\"\n        },\n        \"levels\": {\n          \"description\": \"The number of data levels to show on the treemap chart. These levels are interactive and are shown with their labels. Defaults to 2 if not specified.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"minValue\": {\n          \"description\": \"The minimum possible data value. Cells with values less than this will have the same color as cells with this value. If not specified, defaults to the actual minimum value from color_data, or the minimum value from size_data if color_data is not specified.\",\n          \"type\": \"number\",\n          \"format\": \"double\"\n        }\n      }\n    },\n    \"UpdateConditionalFormatRuleResponse\": {\n      \"description\": \"The result of updating a conditional format rule.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"newRule\": {\n          \"description\": \"The new rule that replaced the old rule (if replacing), or the rule that was moved (if moved)\",\n          \"$ref\": \"ConditionalFormatRule\"\n        },\n        \"oldIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The old index of the rule. Not set if a rule was replaced (because it is the same as new_index).\",\n          \"type\": \"integer\"\n        },\n        \"newIndex\": {\n          \"description\": \"The index of the new rule.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"oldRule\": {\n          \"description\": \"The old (deleted) rule. Not set if a rule was moved (because it is the same as new_rule).\",\n          \"$ref\": \"ConditionalFormatRule\"\n        }\n      },\n      \"id\": \"UpdateConditionalFormatRuleResponse\"\n    },\n    \"UpdateDimensionPropertiesRequest\": {\n      \"id\": \"UpdateDimensionPropertiesRequest\",\n      \"description\": \"Updates properties of dimensions within the specified range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The rows or columns to update.\",\n          \"$ref\": \"DimensionRange\"\n        },\n        \"dataSourceSheetRange\": {\n          \"description\": \"The columns on a data source sheet to update.\",\n          \"$ref\": \"DataSourceSheetDimensionRange\"\n        },\n        \"properties\": {\n          \"description\": \"Properties to update.\",\n          \"$ref\": \"DimensionProperties\"\n        },\n        \"fields\": {\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `properties` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\",\n          \"format\": \"google-fieldmask\"\n        }\n      }\n    },\n    \"DataLabel\": {\n      \"id\": \"DataLabel\",\n      \"description\": \"Settings for one set of data labels. Data labels are annotations that appear next to a set of data, such as the points on a line chart, and provide additional information about what the data represents, such as a text representation of the value behind that point on the graph.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"placement\": {\n          \"enum\": [\n            \"DATA_LABEL_PLACEMENT_UNSPECIFIED\",\n            \"CENTER\",\n            \"LEFT\",\n            \"RIGHT\",\n            \"ABOVE\",\n            \"BELOW\",\n            \"INSIDE_END\",\n            \"INSIDE_BASE\",\n            \"OUTSIDE_END\"\n          ],\n          \"description\": \"The placement of the data label relative to the labeled data.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The positioning is determined automatically by the renderer.\",\n            \"Center within a bar or column, both horizontally and vertically.\",\n            \"To the left of a data point.\",\n            \"To the right of a data point.\",\n            \"Above a data point.\",\n            \"Below a data point.\",\n            \"Inside a bar or column at the end (top if positive, bottom if negative).\",\n            \"Inside a bar or column at the base.\",\n            \"Outside a bar or column at the end.\"\n          ]\n        },\n        \"textFormat\": {\n          \"description\": \"The text format used for the data label. The link field is not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"customLabelData\": {\n          \"description\": \"Data to use for custom labels. Only used if type is set to CUSTOM. This data must be the same length as the series or other element this data label is applied to. In addition, if the series is split into multiple source ranges, this source data must come from the next column in the source data. For example, if the series is B2:B4,E6:E8 then this data must come from C2:C4,F6:F8.\",\n          \"$ref\": \"ChartData\"\n        },\n        \"type\": {\n          \"description\": \"The type of the data label.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The data label type is not specified and will be interpreted depending on the context of the data label within the chart.\",\n            \"The data label is not displayed.\",\n            \"The data label is displayed using values from the series data.\",\n            \"The data label is displayed using values from a custom data source indicated by customLabelData.\"\n          ],\n          \"enum\": [\n            \"DATA_LABEL_TYPE_UNSPECIFIED\",\n            \"NONE\",\n            \"DATA\",\n            \"CUSTOM\"\n          ]\n        }\n      }\n    },\n    \"BigQueryQuerySpec\": {\n      \"id\": \"BigQueryQuerySpec\",\n      \"description\": \"Specifies a custom BigQuery query.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rawQuery\": {\n          \"description\": \"The raw query string.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"OverlayPosition\": {\n      \"description\": \"The location an object is overlaid on top of a grid.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"anchorCell\": {\n          \"description\": \"The cell the object is anchored to.\",\n          \"$ref\": \"GridCoordinate\"\n        },\n        \"widthPixels\": {\n          \"description\": \"The width of the object, in pixels. Defaults to 600.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"heightPixels\": {\n          \"format\": \"int32\",\n          \"description\": \"The height of the object, in pixels. Defaults to 371.\",\n          \"type\": \"integer\"\n        },\n        \"offsetXPixels\": {\n          \"description\": \"The horizontal offset, in pixels, that the object is offset from the anchor cell.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"offsetYPixels\": {\n          \"description\": \"The vertical offset, in pixels, that the object is offset from the anchor cell.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"id\": \"OverlayPosition\"\n    },\n    \"BigQueryDataSourceSpec\": {\n      \"id\": \"BigQueryDataSourceSpec\",\n      \"description\": \"The specification of a BigQuery data source that's connected to a sheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"projectId\": {\n          \"description\": \"The ID of a BigQuery enabled Google Cloud project with a billing account attached. For any queries executed against the data source, the project is charged.\",\n          \"type\": \"string\"\n        },\n        \"querySpec\": {\n          \"description\": \"A BigQueryQuerySpec.\",\n          \"$ref\": \"BigQueryQuerySpec\"\n        },\n        \"tableSpec\": {\n          \"description\": \"A BigQueryTableSpec.\",\n          \"$ref\": \"BigQueryTableSpec\"\n        }\n      }\n    },\n    \"RefreshDataSourceResponse\": {\n      \"id\": \"RefreshDataSourceResponse\",\n      \"description\": \"The response from refreshing one or multiple data source objects.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"statuses\": {\n          \"items\": {\n            \"$ref\": \"RefreshDataSourceObjectExecutionStatus\"\n          },\n          \"description\": \"All the refresh status for the data source object references specified in the request. If is_all is specified, the field contains only those in failure status.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"DateTimeRule\": {\n      \"id\": \"DateTimeRule\",\n      \"description\": \"Allows you to organize the date-time values in a source data column into buckets based on selected parts of their date or time values. For example, consider a pivot table showing sales transactions by date: +----------+--------------+ | Date | SUM of Sales | +----------+--------------+ | 1/1/2017 | $621.14 | | 2/3/2017 | $708.84 | | 5/8/2017 | $326.84 | ... +----------+--------------+ Applying a date-time group rule with a DateTimeRuleType of YEAR_MONTH results in the following pivot table. +--------------+--------------+ | Grouped Date | SUM of Sales | +--------------+--------------+ | 2017-Jan | $53,731.78 | | 2017-Feb | $83,475.32 | | 2017-Mar | $94,385.05 | ... +--------------+--------------+\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"type\": {\n          \"description\": \"The type of date-time grouping to apply.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default type, do not use.\",\n            \"Group dates by second, from 0 to 59.\",\n            \"Group dates by minute, from 0 to 59.\",\n            \"Group dates by hour using a 24-hour system, from 0 to 23.\",\n            \"Group dates by hour and minute using a 24-hour system, for example 19:45.\",\n            \"Group dates by hour and minute using a 12-hour system, for example 7:45 PM. The AM/PM designation is translated based on the spreadsheet locale.\",\n            \"Group dates by day of week, for example Sunday. The days of the week will be translated based on the spreadsheet locale.\",\n            \"Group dates by day of year, from 1 to 366. Note that dates after Feb. 29 fall in different buckets in leap years than in non-leap years.\",\n            \"Group dates by day of month, from 1 to 31.\",\n            \"Group dates by day and month, for example 22-Nov. The month is translated based on the spreadsheet locale.\",\n            \"Group dates by month, for example Nov. The month is translated based on the spreadsheet locale.\",\n            \"Group dates by quarter, for example Q1 (which represents Jan-Mar).\",\n            \"Group dates by year, for example 2008.\",\n            \"Group dates by year and month, for example 2008-Nov. The month is translated based on the spreadsheet locale.\",\n            \"Group dates by year and quarter, for example 2008 Q4.\",\n            \"Group dates by year, month, and day, for example 2008-11-22.\"\n          ],\n          \"enum\": [\n            \"DATE_TIME_RULE_TYPE_UNSPECIFIED\",\n            \"SECOND\",\n            \"MINUTE\",\n            \"HOUR\",\n            \"HOUR_MINUTE\",\n            \"HOUR_MINUTE_AMPM\",\n            \"DAY_OF_WEEK\",\n            \"DAY_OF_YEAR\",\n            \"DAY_OF_MONTH\",\n            \"DAY_MONTH\",\n            \"MONTH\",\n            \"QUARTER\",\n            \"YEAR\",\n            \"YEAR_MONTH\",\n            \"YEAR_QUARTER\",\n            \"YEAR_MONTH_DAY\"\n          ]\n        }\n      }\n    },\n    \"HistogramChartSpec\": {\n      \"id\": \"HistogramChartSpec\",\n      \"description\": \"A histogram chart. A histogram chart groups data items into bins, displaying each bin as a column of stacked items. Histograms are used to display the distribution of a dataset. Each column of items represents a range into which those items fall. The number of bins can be chosen automatically or specified explicitly.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"showItemDividers\": {\n          \"description\": \"Whether horizontal divider lines should be displayed between items in each column.\",\n          \"type\": \"boolean\"\n        },\n        \"series\": {\n          \"items\": {\n            \"$ref\": \"HistogramSeries\"\n          },\n          \"description\": \"The series for a histogram may be either a single series of values to be bucketed or multiple series, each of the same length, containing the name of the series followed by the values to be bucketed for that series.\",\n          \"type\": \"array\"\n        },\n        \"outlierPercentile\": {\n          \"format\": \"double\",\n          \"description\": \"The outlier percentile is used to ensure that outliers do not adversely affect the calculation of bucket sizes. For example, setting an outlier percentile of 0.05 indicates that the top and bottom 5% of values when calculating buckets. The values are still included in the chart, they will be added to the first or last buckets instead of their own buckets. Must be between 0.0 and 0.5.\",\n          \"type\": \"number\"\n        },\n        \"legendPosition\": {\n          \"enum\": [\n            \"HISTOGRAM_CHART_LEGEND_POSITION_UNSPECIFIED\",\n            \"BOTTOM_LEGEND\",\n            \"LEFT_LEGEND\",\n            \"RIGHT_LEGEND\",\n            \"TOP_LEGEND\",\n            \"NO_LEGEND\",\n            \"INSIDE_LEGEND\"\n          ],\n          \"description\": \"The position of the chart legend.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The legend is rendered on the bottom of the chart.\",\n            \"The legend is rendered on the left of the chart.\",\n            \"The legend is rendered on the right of the chart.\",\n            \"The legend is rendered on the top of the chart.\",\n            \"No legend is rendered.\",\n            \"The legend is rendered inside the chart area.\"\n          ]\n        },\n        \"bucketSize\": {\n          \"format\": \"double\",\n          \"description\": \"By default the bucket size (the range of values stacked in a single column) is chosen automatically, but it may be overridden here. E.g., A bucket size of 1.5 results in buckets from 0 - 1.5, 1.5 - 3.0, etc. Cannot be negative. This field is optional.\",\n          \"type\": \"number\"\n        }\n      }\n    },\n    \"AddBandingRequest\": {\n      \"id\": \"AddBandingRequest\",\n      \"description\": \"Adds a new banded range to the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bandedRange\": {\n          \"description\": \"The banded range to add. The bandedRangeId field is optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of a range that already exists.)\",\n          \"$ref\": \"BandedRange\"\n        }\n      }\n    },\n    \"BatchClearValuesByDataFilterRequest\": {\n      \"description\": \"The request for clearing more than one range selected by a DataFilter in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilters\": {\n          \"items\": {\n            \"$ref\": \"DataFilter\"\n          },\n          \"description\": \"The DataFilters used to determine which ranges to clear.\",\n          \"type\": \"array\"\n        }\n      },\n      \"id\": \"BatchClearValuesByDataFilterRequest\"\n    },\n    \"DeleteDimensionGroupRequest\": {\n      \"description\": \"Deletes a group over the specified range by decrementing the depth of the dimensions in the range. For example, assume the sheet has a depth-1 group over B:E and a depth-2 group over C:D. Deleting a group over D:E leaves the sheet with a depth-1 group over B:D and a depth-2 group over C:C.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range of the group to be deleted.\",\n          \"$ref\": \"DimensionRange\"\n        }\n      },\n      \"id\": \"DeleteDimensionGroupRequest\"\n    },\n    \"UpdateValuesResponse\": {\n      \"id\": \"UpdateValuesResponse\",\n      \"description\": \"The response when updating a range of values in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"updatedColumns\": {\n          \"description\": \"The number of columns where at least one cell in the column was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"updatedData\": {\n          \"description\": \"The values of the cells after updates were applied. This is only included if the request's `includeValuesInResponse` field was `true`.\",\n          \"$ref\": \"ValueRange\"\n        },\n        \"spreadsheetId\": {\n          \"description\": \"The spreadsheet the updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"updatedCells\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of cells updated.\",\n          \"type\": \"integer\"\n        },\n        \"updatedRange\": {\n          \"description\": \"The range (in A1 notation) that updates were applied to.\",\n          \"type\": \"string\"\n        },\n        \"updatedRows\": {\n          \"description\": \"The number of rows where at least one cell in the row was updated.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      }\n    },\n    \"PivotFilterSpec\": {\n      \"id\": \"PivotFilterSpec\",\n      \"description\": \"The pivot table filter criteria associated with a specific source column offset.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"columnOffsetIndex\": {\n          \"description\": \"The zero-based column offset of the source range.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"dataSourceColumnReference\": {\n          \"description\": \"The reference to the data source column.\",\n          \"$ref\": \"DataSourceColumnReference\"\n        },\n        \"filterCriteria\": {\n          \"description\": \"The criteria for the column.\",\n          \"$ref\": \"PivotFilterCriteria\"\n        }\n      }\n    },\n    \"UpdateEmbeddedObjectBorderRequest\": {\n      \"description\": \"Updates an embedded object's border property.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"fields\": {\n          \"format\": \"google-fieldmask\",\n          \"description\": \"The fields that should be updated. At least one field must be specified. The root `border` is implied and should not be specified. A single `\\\"*\\\"` can be used as short-hand for listing every field.\",\n          \"type\": \"string\"\n        },\n        \"objectId\": {\n          \"description\": \"The ID of the embedded object to update.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"border\": {\n          \"description\": \"The border that applies to the embedded object.\",\n          \"$ref\": \"EmbeddedObjectBorder\"\n        }\n      },\n      \"id\": \"UpdateEmbeddedObjectBorderRequest\"\n    },\n    \"DeleteBandingRequest\": {\n      \"description\": \"Removes the banded range with the given ID from the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"bandedRangeId\": {\n          \"format\": \"int32\",\n          \"description\": \"The ID of the banded range to delete.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"DeleteBandingRequest\"\n    },\n    \"AddSlicerRequest\": {\n      \"id\": \"AddSlicerRequest\",\n      \"description\": \"Adds a slicer to a sheet in the spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"slicer\": {\n          \"description\": \"The slicer that should be added to the spreadsheet, including the position where it should be placed. The slicerId field is optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of a slicer that already exists.)\",\n          \"$ref\": \"Slicer\"\n        }\n      }\n    },\n    \"BasicChartAxis\": {\n      \"id\": \"BasicChartAxis\",\n      \"description\": \"An axis of the chart. A chart may not have more than one axis per axis position.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"viewWindowOptions\": {\n          \"description\": \"The view window options for this axis.\",\n          \"$ref\": \"ChartAxisViewWindowOptions\"\n        },\n        \"position\": {\n          \"description\": \"The position of this axis.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The axis rendered at the bottom of a chart. For most charts, this is the standard major axis. For bar charts, this is a minor axis.\",\n            \"The axis rendered at the left of a chart. For most charts, this is a minor axis. For bar charts, this is the standard major axis.\",\n            \"The axis rendered at the right of a chart. For most charts, this is a minor axis. For bar charts, this is an unusual major axis.\"\n          ],\n          \"enum\": [\n            \"BASIC_CHART_AXIS_POSITION_UNSPECIFIED\",\n            \"BOTTOM_AXIS\",\n            \"LEFT_AXIS\",\n            \"RIGHT_AXIS\"\n          ]\n        },\n        \"title\": {\n          \"description\": \"The title of this axis. If set, this overrides any title inferred from headers of the data.\",\n          \"type\": \"string\"\n        },\n        \"format\": {\n          \"description\": \"The format of the title. Only valid if the axis is not associated with the domain. The link field is not supported.\",\n          \"$ref\": \"TextFormat\"\n        },\n        \"titleTextPosition\": {\n          \"description\": \"The axis title text position.\",\n          \"$ref\": \"TextPosition\"\n        }\n      }\n    },\n    \"RefreshCancellationStatus\": {\n      \"id\": \"RefreshCancellationStatus\",\n      \"description\": \"The status of a refresh cancellation. You can send a cancel request to explicitly cancel one or multiple data source object refreshes.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"state\": {\n          \"description\": \"The state of a call to cancel a refresh in Sheets.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"The API call to Sheets to cancel a refresh has succeeded. This does not mean that the cancel happened successfully, but that the call has been made successfully.\",\n            \"The API call to Sheets to cancel a refresh has failed.\"\n          ],\n          \"enum\": [\n            \"REFRESH_CANCELLATION_STATE_UNSPECIFIED\",\n            \"CANCEL_SUCCEEDED\",\n            \"CANCEL_FAILED\"\n          ]\n        },\n        \"errorCode\": {\n          \"description\": \"The error code.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"Default value, do not use.\",\n            \"Execution to be cancelled not found in the query engine or in Sheets.\",\n            \"The user does not have permission to cancel the query.\",\n            \"The query execution has already completed and thus could not be cancelled.\",\n            \"There is already another cancellation in process.\",\n            \"All other errors.\"\n          ],\n          \"enum\": [\n            \"REFRESH_CANCELLATION_ERROR_CODE_UNSPECIFIED\",\n            \"EXECUTION_NOT_FOUND\",\n            \"CANCEL_PERMISSION_DENIED\",\n            \"QUERY_EXECUTION_COMPLETED\",\n            \"CONCURRENT_CANCELLATION\",\n            \"CANCEL_OTHER_ERROR\"\n          ]\n        }\n      }\n    },\n    \"DataFilterValueRange\": {\n      \"description\": \"A range of values whose location is specified by a DataFilter.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilter\": {\n          \"description\": \"The data filter describing the location of the values in the spreadsheet.\",\n          \"$ref\": \"DataFilter\"\n        },\n        \"majorDimension\": {\n          \"enum\": [\n            \"DIMENSION_UNSPECIFIED\",\n            \"ROWS\",\n            \"COLUMNS\"\n          ],\n          \"description\": \"The major dimension of the values.\",\n          \"type\": \"string\",\n          \"enumDescriptions\": [\n            \"The default value, do not use.\",\n            \"Operates on the rows of a sheet.\",\n            \"Operates on the columns of a sheet.\"\n          ]\n        },\n        \"values\": {\n          \"description\": \"The data to be written. If the provided values exceed any of the ranges matched by the data filter then the request fails. If the provided values are less than the matched ranges only the specified values are written, existing values in the matched ranges remain unaffected.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"type\": \"any\"\n            }\n          }\n        }\n      },\n      \"id\": \"DataFilterValueRange\"\n    },\n    \"AutoFillRequest\": {\n      \"description\": \"Fills in more data based on existing data.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range to autofill. This will examine the range and detect the location that has data and automatically fill that data in to the rest of the range.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"sourceAndDestination\": {\n          \"description\": \"The source and destination areas to autofill. This explicitly lists the source of the autofill and where to extend that data.\",\n          \"$ref\": \"SourceAndDestination\"\n        },\n        \"useAlternateSeries\": {\n          \"description\": \"True if we should generate data with the \\\"alternate\\\" series. This differs based on the type and amount of source data.\",\n          \"type\": \"boolean\"\n        }\n      },\n      \"id\": \"AutoFillRequest\"\n    },\n    \"Sheet\": {\n      \"id\": \"Sheet\",\n      \"description\": \"A sheet in a spreadsheet.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"basicFilter\": {\n          \"description\": \"The filter on this sheet, if any.\",\n          \"$ref\": \"BasicFilter\"\n        },\n        \"bandedRanges\": {\n          \"description\": \"The banded (alternating colors) ranges on this sheet.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"BandedRange\"\n          }\n        },\n        \"columnGroups\": {\n          \"items\": {\n            \"$ref\": \"DimensionGroup\"\n          },\n          \"description\": \"All column groups on this sheet, ordered by increasing range start index, then by group depth.\",\n          \"type\": \"array\"\n        },\n        \"conditionalFormats\": {\n          \"description\": \"The conditional format rules in this sheet.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"ConditionalFormatRule\"\n          }\n        },\n        \"slicers\": {\n          \"items\": {\n            \"$ref\": \"Slicer\"\n          },\n          \"description\": \"The slicers on this sheet.\",\n          \"type\": \"array\"\n        },\n        \"protectedRanges\": {\n          \"description\": \"The protected ranges in this sheet.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"ProtectedRange\"\n          }\n        },\n        \"properties\": {\n          \"description\": \"The properties of the sheet.\",\n          \"$ref\": \"SheetProperties\"\n        },\n        \"charts\": {\n          \"items\": {\n            \"$ref\": \"EmbeddedChart\"\n          },\n          \"description\": \"The specifications of every chart on this sheet.\",\n          \"type\": \"array\"\n        },\n        \"merges\": {\n          \"items\": {\n            \"$ref\": \"GridRange\"\n          },\n          \"description\": \"The ranges that are merged together.\",\n          \"type\": \"array\"\n        },\n        \"developerMetadata\": {\n          \"description\": \"The developer metadata associated with a sheet.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DeveloperMetadata\"\n          }\n        },\n        \"rowGroups\": {\n          \"items\": {\n            \"$ref\": \"DimensionGroup\"\n          },\n          \"description\": \"All row groups on this sheet, ordered by increasing range start index, then by group depth.\",\n          \"type\": \"array\"\n        },\n        \"tables\": {\n          \"items\": {\n            \"$ref\": \"Table\"\n          },\n          \"description\": \"The tables on this sheet.\",\n          \"type\": \"array\"\n        },\n        \"data\": {\n          \"items\": {\n            \"$ref\": \"GridData\"\n          },\n          \"description\": \"Data in the grid, if this is a grid sheet. The number of GridData objects returned is dependent on the number of ranges requested on this sheet. For example, if this is representing `Sheet1`, and the spreadsheet was requested with ranges `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a startRow/startColumn of `0`, while the second one will have `startRow 14` (zero-based row 15), and `startColumn 3` (zero-based column D). For a DATA_SOURCE sheet, you can not request a specific range, the GridData contains all the values.\",\n          \"type\": \"array\"\n        },\n        \"filterViews\": {\n          \"items\": {\n            \"$ref\": \"FilterView\"\n          },\n          \"description\": \"The filter views in this sheet.\",\n          \"type\": \"array\"\n        }\n      }\n    },\n    \"DeleteDeveloperMetadataRequest\": {\n      \"id\": \"DeleteDeveloperMetadataRequest\",\n      \"description\": \"A request to delete developer metadata.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dataFilter\": {\n          \"description\": \"The data filter describing the criteria used to select which developer metadata entry to delete.\",\n          \"$ref\": \"DataFilter\"\n        }\n      }\n    },\n    \"Link\": {\n      \"description\": \"An external or local reference.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"uri\": {\n          \"description\": \"The link identifier.\",\n          \"type\": \"string\"\n        }\n      },\n      \"id\": \"Link\"\n    },\n    \"ProtectedRange\": {\n      \"id\": \"ProtectedRange\",\n      \"description\": \"A protected range.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"range\": {\n          \"description\": \"The range that is being protected. The range may be fully unbounded, in which case this is considered a protected sheet. When writing, only one of range or named_range_id or table_id may be set.\",\n          \"$ref\": \"GridRange\"\n        },\n        \"tableId\": {\n          \"description\": \"The table this protected range is backed by, if any. When writing, only one of range or named_range_id or table_id may be set.\",\n          \"type\": \"string\"\n        },\n        \"unprotectedRanges\": {\n          \"items\": {\n            \"$ref\": \"GridRange\"\n          },\n          \"description\": \"The list of unprotected ranges within a protected sheet. Unprotected ranges are only supported on protected sheets.\",\n          \"type\": \"array\"\n        },\n        \"editors\": {\n          \"description\": \"The users and groups with edit access to the protected range. This field is only visible to users with edit access to the protected range and the document. Editors are not supported with warning_only protection.\",\n          \"$ref\": \"Editors\"\n        },\n        \"warningOnly\": {\n          \"description\": \"True if this protected range will show a warning when editing. Warning-based protection means that every user can edit data in the protected range, except editing will prompt a warning asking the user to confirm the edit. When writing: if this field is true, then editors are ignored. Additionally, if this field is changed from true to false and the `editors` field is not set (nor included in the field mask), then the editors will be set to all the editors in the document.\",\n          \"type\": \"boolean\"\n        },\n        \"protectedRangeId\": {\n          \"description\": \"The ID of the protected range. This field is read-only.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"requestingUserCanEdit\": {\n          \"description\": \"True if the user who requested this protected range can edit the protected area. This field is read-only.\",\n          \"type\": \"boolean\"\n        },\n        \"description\": {\n          \"description\": \"The description of this protected range.\",\n          \"type\": \"string\"\n        },\n        \"namedRangeId\": {\n          \"description\": \"The named range this protected range is backed by, if any. When writing, only one of range or named_range_id or table_id may be set.\",\n          \"type\": \"string\"\n        }\n      }\n    },\n    \"DeleteDimensionGroupResponse\": {\n      \"id\": \"DeleteDimensionGroupResponse\",\n      \"description\": \"The result of deleting a group.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"dimensionGroups\": {\n          \"description\": \"All groups of a dimension after deleting a group from that dimension.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"DimensionGroup\"\n          }\n        }\n      }\n    },\n    \"CandlestickSeries\": {\n      \"id\": \"CandlestickSeries\",\n      \"description\": \"The series of a CandlestickData.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"data\": {\n          \"description\": \"The data of the CandlestickSeries.\",\n          \"$ref\": \"ChartData\"\n        }\n      }\n    },\n    \"FindReplaceResponse\": {\n      \"description\": \"The result of the find/replace.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rowsChanged\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of rows changed.\",\n          \"type\": \"integer\"\n        },\n        \"valuesChanged\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of non-formula cells changed.\",\n          \"type\": \"integer\"\n        },\n        \"sheetsChanged\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of sheets changed.\",\n          \"type\": \"integer\"\n        },\n        \"occurrencesChanged\": {\n          \"description\": \"The number of occurrences (possibly multiple within a cell) changed. For example, if replacing `\\\"e\\\"` with `\\\"o\\\"` in `\\\"Google Sheets\\\"`, this would be `\\\"3\\\"` because `\\\"Google Sheets\\\"` -\\u003e `\\\"Googlo Shoots\\\"`.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        },\n        \"formulasChanged\": {\n          \"format\": \"int32\",\n          \"description\": \"The number of formula cells changed.\",\n          \"type\": \"integer\"\n        }\n      },\n      \"id\": \"FindReplaceResponse\"\n    },\n    \"SortRangeRequest\": {\n      \"id\": \"SortRangeRequest\",\n      \"description\": \"Sorts data in rows based on a sort order per column.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"sortSpecs\": {\n          \"description\": \"The sort order per column. Later specifications are used when values are equal in the earlier specifications.\",\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"SortSpec\"\n          }\n        },\n        \"range\": {\n          \"description\": \"The range to sort.\",\n          \"$ref\": \"GridRange\"\n        }\n      }\n    },\n    \"GridCoordinate\": {\n      \"description\": \"A coordinate in a sheet. All indexes are zero-based.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"rowIndex\": {\n          \"format\": \"int32\",\n          \"description\": \"The row index of the coordinate.\",\n          \"type\": \"integer\"\n        },\n        \"sheetId\": {\n          \"format\": \"int32\",\n          \"description\": \"The sheet this coordinate is on.\",\n          \"type\": \"integer\"\n        },\n        \"columnIndex\": {\n          \"description\": \"The column index of the coordinate.\",\n          \"type\": \"integer\",\n          \"format\": \"int32\"\n        }\n      },\n      \"id\": \"GridCoordinate\"\n    },\n    \"AddFilterViewRequest\": {\n      \"description\": \"Adds a filter view.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"filter\": {\n          \"description\": \"The filter to add. The filterViewId field is optional. If one is not set, an ID will be randomly generated. (It is an error to specify the ID of a filter that already exists.)\",\n          \"$ref\": \"FilterView\"\n        }\n      },\n      \"id\": \"AddFilterViewRequest\"\n    }\n  },\n  \"version_module\": true,\n  \"auth\": {\n    \"oauth2\": {\n      \"scopes\": {\n        \"https://www.googleapis.com/auth/drive.file\": {\n          \"description\": \"See, edit, create, and delete only the specific Google Drive files you use with this app\"\n        },\n        \"https://www.googleapis.com/auth/drive.readonly\": {\n          \"description\": \"See and download all your Google Drive files\"\n        },\n        \"https://www.googleapis.com/auth/spreadsheets\": {\n          \"description\": \"See, edit, create, and delete all your Google Sheets spreadsheets\"\n        },\n        \"https://www.googleapis.com/auth/spreadsheets.readonly\": {\n          \"description\": \"See all your Google Sheets spreadsheets\"\n        },\n        \"https://www.googleapis.com/auth/drive\": {\n          \"description\": \"See, edit, create, and delete all of your Google Drive files\"\n        }\n      }\n    }\n  },\n  \"icons\": {\n    \"x16\": \"http://www.google.com/images/icons/product/search-16.gif\",\n    \"x32\": \"http://www.google.com/images/icons/product/search-32.gif\"\n  },\n  \"name\": \"sheets\",\n  \"ownerDomain\": \"google.com\",\n  \"parameters\": {\n    \"prettyPrint\": {\n      \"type\": \"boolean\",\n      \"description\": \"Returns response with indentations and line breaks.\",\n      \"location\": \"query\",\n      \"default\": \"true\"\n    },\n    \"callback\": {\n      \"type\": \"string\",\n      \"description\": \"JSONP\",\n      \"location\": \"query\"\n    },\n    \"alt\": {\n      \"location\": \"query\",\n      \"default\": \"json\",\n      \"enum\": [\n        \"json\",\n        \"media\",\n        \"proto\"\n      ],\n      \"type\": \"string\",\n      \"description\": \"Data format for response.\",\n      \"enumDescriptions\": [\n        \"Responses with Content-Type of application/json\",\n        \"Media download with context-dependent Content-Type\",\n        \"Responses with Content-Type of application/x-protobuf\"\n      ]\n    },\n    \"key\": {\n      \"type\": \"string\",\n      \"description\": \"API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.\",\n      \"location\": \"query\"\n    },\n    \"quotaUser\": {\n      \"type\": \"string\",\n      \"description\": \"Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.\",\n      \"location\": \"query\"\n    },\n    \"upload_protocol\": {\n      \"type\": \"string\",\n      \"description\": \"Upload protocol for media (e.g. \\\"raw\\\", \\\"multipart\\\").\",\n      \"location\": \"query\"\n    },\n    \"access_token\": {\n      \"type\": \"string\",\n      \"description\": \"OAuth access token.\",\n      \"location\": \"query\"\n    },\n    \"$.xgafv\": {\n      \"enum\": [\n        \"1\",\n        \"2\"\n      ],\n      \"type\": \"string\",\n      \"description\": \"V1 error format.\",\n      \"enumDescriptions\": [\n        \"v1 error format\",\n        \"v2 error format\"\n      ],\n      \"location\": \"query\"\n    },\n    \"uploadType\": {\n      \"type\": \"string\",\n      \"description\": \"Legacy upload protocol for media (e.g. \\\"media\\\", \\\"multipart\\\").\",\n      \"location\": \"query\"\n    },\n    \"oauth_token\": {\n      \"type\": \"string\",\n      \"description\": \"OAuth 2.0 token for the current user.\",\n      \"location\": \"query\"\n    },\n    \"fields\": {\n      \"type\": \"string\",\n      \"description\": \"Selector specifying which fields to include in a partial response.\",\n      \"location\": \"query\"\n    }\n  },\n  \"fullyEncodeReservedExpansion\": true,\n  \"protocol\": \"rest\",\n  \"canonicalName\": \"Sheets\",\n  \"revision\": \"20260309\",\n  \"baseUrl\": \"https://sheets.googleapis.com/\",\n  \"batchPath\": \"batch\",\n  \"title\": \"Google Sheets API\",\n  \"mtlsRootUrl\": \"https://sheets.mtls.googleapis.com/\",\n  \"description\": \"Reads and writes Google Sheets.\"\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/fixtures/linear-introspection.json",
    "content": "{\n  \"data\": {\n    \"__schema\": {\n      \"queryType\": {\n        \"name\": \"Query\",\n        \"kind\": \"OBJECT\"\n      },\n      \"mutationType\": {\n        \"name\": \"Mutation\",\n        \"kind\": \"OBJECT\"\n      },\n      \"subscriptionType\": null,\n      \"types\": [\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNotificationSubscription\",\n          \"description\": \"A customer notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Customer\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"NotificationSubscription\",\n          \"description\": \"Notification subscriptions for models.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomViewNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CycleNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"LabelNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TeamNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"UserNotificationSubscription\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"Entity\",\n          \"description\": \"A basic entity.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomViewNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CycleNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"LabelNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TeamNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"UserNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OauthClientApprovalNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DocumentNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PostNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNeedNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PullRequestNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WelcomeMessageNotification\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"Node\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"User\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Organization\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Facet\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Team\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WorkflowState\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Issue\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Summary\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Cycle\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Document\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Project\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectStatus\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Template\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectUpdate\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Reaction\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Comment\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DocumentContent\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PullRequest\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Initiative\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeUpdate\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"EntityExternalLink\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IntegrationsSettings\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeHistory\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectMilestone\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiPromptRules\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WelcomeMessage\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Post\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ExternalUser\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentSession\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentSessionToPullRequest\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Favorite\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomView\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"FeedItem\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ViewPreferences\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueLabel\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectLabel\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Customer\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerStatus\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerTier\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNeed\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Attachment\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectAttachment\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Integration\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Dashboard\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Release\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ReleasePipeline\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ReleaseStage\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeToProject\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectHistory\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectRelation\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueHistory\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueImport\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WorkflowDefinition\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversation\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueRelation\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueSuggestion\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TriageResponsibility\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TimeSchedule\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TeamMembership\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"GitAutomationState\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"GitAutomationTargetBranch\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Webhook\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PaidSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IdentityProvider\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueDraft\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Draft\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomViewNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CycleNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"LabelNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TeamNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"UserNotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OauthClientApprovalNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OauthClientApproval\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DocumentNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PostNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNeedNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PullRequestNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WelcomeMessageNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"UserSettings\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"SemanticSearchResult\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DocumentSearchResult\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectSearchResult\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueSearchResult\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"RoadmapToProject\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Roadmap\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OrganizationInvite\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueToRelease\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IntegrationTemplate\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeRelation\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"Emoji\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"EmailIntakeAddress\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"SesDomainIdentity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AuditEntry\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PushSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OrganizationDomain\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"ID\",\n          \"description\": \"The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\\\"4\\\"`) or integer (such as `4`) input value will be accepted as an ID.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"DateTime\",\n          \"description\": \"Represents a date and time in ISO 8601 format. Accepts shortcuts like `2021` to represent midnight Fri Jan 01 2021. Also accepts ISO 8601 durations strings which are added to the current date to create the represented date (e.g '-P2W1D' represents the date that was two weeks and 1 day ago) \",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"User\",\n          \"description\": \"A user that has access to the the resources of an organization.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The user's full name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The user's display (nick) name. Unique within each organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The user's email address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"avatarUrl\",\n              \"description\": \"An URL to the user's avatar image.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"disableReason\",\n              \"description\": \"Reason why is the account disabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"calendarHash\",\n              \"description\": \"[DEPRECATED] Hash for the user to be used in calendar URLs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"A short description of the user, either its title or bio.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"statusEmoji\",\n              \"description\": \"The emoji to represent the user current status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"statusLabel\",\n              \"description\": \"The label of the user current status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"statusUntilAt\",\n              \"description\": \"A date at which the user current status should be cleared.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The local timezone of the user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"Organization the user belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastSeen\",\n              \"description\": \"The last time the user was seen online.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"identityProvider\",\n              \"description\": \"[INTERNAL] Identity provider the user is managed by.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IdentityProvider\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initials\",\n              \"description\": \"The initials of the user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"avatarBackgroundColor\",\n              \"description\": \"The background color of the avatar for users without set avatar.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"guest\",\n              \"description\": \"Whether the user is a guest in the workspace and limited to accessing a subset of teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"app\",\n              \"description\": \"Whether the user is an app.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isMentionable\",\n              \"description\": \"Whether the user is mentionable.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isAssignable\",\n              \"description\": \"Whether the user is assignable.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the user account is active or disabled (suspended).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueDrafts\",\n              \"description\": \"The user's issue drafts\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueDraftConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"drafts\",\n              \"description\": \"The user's drafts\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DraftConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"User's profile URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assignedIssues\",\n              \"description\": \"Issues assigned to the user.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"delegatedIssues\",\n              \"description\": \"Issues delegated to this user.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdIssues\",\n              \"description\": \"Issues created by the user.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdIssueCount\",\n              \"description\": \"Number of issues created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Teams the user is part of.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned teams.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMemberships\",\n              \"description\": \"Memberships associated with the user. For easier access of the same data, use `teams` query.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembershipConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedFacets\",\n              \"description\": \"[INTERNAL] The user's pinned feeds.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FacetConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canAccessAnyPublicTeam\",\n              \"description\": \"Whether this user can access any public team in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isMe\",\n              \"description\": \"Whether the user is the currently authenticated user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"admin\",\n              \"description\": \"Whether the user is an organization administrator.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Whether the user is an organization owner.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"supportsAgentSessions\",\n              \"description\": \"Whether this agent user supports agent sessions.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inviteHash\",\n              \"description\": \"[DEPRECATED] Unique hash for the user to be used in invite URLs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"This hash is not in use anymore, this value will always be empty.\"\n            },\n            {\n              \"name\": \"gitHubUserId\",\n              \"description\": \"The user's GitHub user ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"String\",\n          \"description\": \"The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Organization\",\n          \"description\": \"An organization. Organizations are root-level objects that contain user accounts and teams.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The organization's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"urlKey\",\n              \"description\": \"The organization's unique URL key.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The organization's logo URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"periodUploadVolume\",\n              \"description\": \"Rolling 30-day total upload volume for the organization, in megabytes.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facets\",\n              \"description\": \"[Internal] Facets associated with the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Facet\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitBranchFormat\",\n              \"description\": \"How git branches are formatted. If null, default formatting will be used.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitLinkbackMessagesEnabled\",\n              \"description\": \"Whether the Git integration linkback messages should be sent to private repositories.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitPublicLinkbackMessagesEnabled\",\n              \"description\": \"Whether the Git integration linkback messages should be sent to public repositories.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitLinkbackDescriptionsEnabled\",\n              \"description\": \"Whether issue descriptions should be included in Git integration linkback messages.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapEnabled\",\n              \"description\": \"Whether the organization is using a roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for project updates. When not set, reminders are off.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersDay\",\n              \"description\": \"The day at which to prompt for project updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"Day\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersHour\",\n              \"description\": \"The hour at which to prompt for project updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for initiative updates. When not set, reminders are off.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateRemindersDay\",\n              \"description\": \"The day at which to prompt for initiative updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"Day\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateRemindersHour\",\n              \"description\": \"The hour at which to prompt for initiative updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fiscalYearStartMonth\",\n              \"description\": \"The month at which the fiscal year starts. Defaults to January (0).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workingDays\",\n              \"description\": \"[Internal] The list of working days. Sunday is 0, Monday is 1, etc.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlEnabled\",\n              \"description\": \"Whether SAML authentication is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlSettings\",\n              \"description\": \"[INTERNAL] SAML settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimEnabled\",\n              \"description\": \"Whether SCIM provisioning is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimSettings\",\n              \"description\": \"[INTERNAL] SCIM settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"securitySettings\",\n              \"description\": \"Security settings for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"authSettings\",\n              \"description\": \"Authentication settings for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowedAuthServices\",\n              \"description\": \"Allowed authentication providers, empty array means all are allowed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use authSettings.allowedAuthServices instead.\"\n            },\n            {\n              \"name\": \"allowedFileUploadContentTypes\",\n              \"description\": \"Allowed file upload content types\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ipRestrictions\",\n              \"description\": \"IP restriction configurations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"OrganizationIpRestriction\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deletionRequestedAt\",\n              \"description\": \"The time at which deletion of the organization was requested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trialEndsAt\",\n              \"description\": \"The time at which the trial will end.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trialStartsAt\",\n              \"description\": \"The time at which the trial started.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"previousUrlKeys\",\n              \"description\": \"Previously used URL keys for the organization (last 3 are kept and redirected).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"restrictAgentInvocationToMembers\",\n              \"description\": \"[Internal] Whether agent invocation is restricted to full workspace members.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hipaaComplianceEnabled\",\n              \"description\": \"Whether HIPAA compliance is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"themeSettings\",\n              \"description\": \"[ALPHA] Theme settings for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseChannel\",\n              \"description\": \"The feature release channel the organization belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ReleaseChannel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customersConfiguration\",\n              \"description\": \"Configuration settings for the Customers feature.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"codeIntelligenceEnabled\",\n              \"description\": \"[INTERNAL] Whether code intelligence is enabled for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"codeIntelligenceRepository\",\n              \"description\": \"[INTERNAL] GitHub repository in owner/repo format for code intelligence.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultFeedSummarySchedule\",\n              \"description\": \"Default schedule for how often feed summaries are generated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FeedSummarySchedule\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedEnabled\",\n              \"description\": \"Whether the organization has enabled the feed feature.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hideNonPrimaryOrganizations\",\n              \"description\": \"Whether to hide other organizations for new users signing up with email domains claimed by this organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use authSettings.hideNonPrimaryOrganizations instead.\"\n            },\n            {\n              \"name\": \"aiAddonEnabled\",\n              \"description\": \"[INTERNAL] Whether the organization has enabled the AI add-on (which at this point only includes triage suggestions).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"generatedUpdatesEnabled\",\n              \"description\": \"[INTERNAL] Whether the organization has enabled generated updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiThreadSummariesEnabled\",\n              \"description\": \"Whether the organization has enabled resolved thread AI summaries.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiDiscussionSummariesEnabled\",\n              \"description\": \"Whether the organization has enabled AI discussion summaries for issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiProviderConfiguration\",\n              \"description\": \"[INTERNAL] Configure per-modality AI host providers and model families.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"linearAgentEnabled\",\n              \"description\": \"[Internal] Whether the organization has enabled Linear Agent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaDayCount\",\n              \"description\": \"[DEPRECATED] Which day count to use for SLA calculations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"SLADayCountType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"projectUpdatesReminderFrequency\",\n              \"description\": \"[DEPRECATED] The frequency at which to prompt for project updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ProjectUpdateReminderFrequency\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use organization.projectUpdatesReminderFrequencyInWeeks instead\"\n            },\n            {\n              \"name\": \"allowedAiProviders\",\n              \"description\": \"[INTERNAL] Permitted AI providers.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use aiProviderConfiguration instead.\"\n            },\n            {\n              \"name\": \"users\",\n              \"description\": \"Users associated with the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Teams associated with the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned teams.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatuses\",\n              \"description\": \"The organization's project statuses.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectStatus\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrations\",\n              \"description\": \"Integrations associated with the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectChannelIntegration\",\n              \"description\": \"The Slack integration used for auto-creating project channels.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectChannelPrefix\",\n              \"description\": \"The prefix used for auto-created Slack project channels.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscription\",\n              \"description\": \"The organization's subscription to a paid plan.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"PaidSubscription\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userCount\",\n              \"description\": \"Number of active users in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdIssueCount\",\n              \"description\": \"Aproximate number of issues in the organization, including archived ones.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templates\",\n              \"description\": \"Templates associated with the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned templates.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableTemplateFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TemplateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Labels associated with the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issue labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabels\",\n              \"description\": \"Project labels associated with the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Number of customers in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customersEnabled\",\n              \"description\": \"Whether the organization is using Customers.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowMembersToInvite\",\n              \"description\": \"[DEPRECATED] Whether member users are allowed to send invites.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `securitySettings.invitationsRole` instead.\"\n            },\n            {\n              \"name\": \"restrictTeamCreationToAdmins\",\n              \"description\": \"[DEPRECATED] Whether team creation is restricted to admins.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `securitySettings.teamCreationRole` instead.\"\n            },\n            {\n              \"name\": \"restrictLabelManagementToAdmins\",\n              \"description\": \"[DEPRECATED] Whether workspace label creation, update, and deletion is restricted to admins.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `securitySettings.labelManagementRole` instead.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"Float\",\n          \"description\": \"The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Facet\",\n          \"description\": \"A facet. Facets are joins between entities. A facet can tie a custom view to a project, or a a project to a roadmap for example.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the facet.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceOrganization\",\n              \"description\": \"The owning organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Organization\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceTeam\",\n              \"description\": \"The owning team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceProject\",\n              \"description\": \"The owning project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceInitiative\",\n              \"description\": \"The owning initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceFeedUser\",\n              \"description\": \"The owning feed user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourcePage\",\n              \"description\": \"The owning page.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FacetPageSource\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetCustomView\",\n              \"description\": \"The targeted custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Team\",\n          \"description\": \"An organizational unit that contains issues.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The team's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"key\",\n              \"description\": \"The team's unique key. The key is used in URLs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The team's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The team's color.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"The time at which the team was retired. Null if the team has not been retired.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the team is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"[Internal] The team's parent team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"[Internal] The team's sub-teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Team\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cyclesEnabled\",\n              \"description\": \"Whether the team uses cycles.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleStartDay\",\n              \"description\": \"The day of the week that a new cycle starts.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleDuration\",\n              \"description\": \"The duration of a cycle in weeks.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleCooldownTime\",\n              \"description\": \"The cooldown time after each cycle in weeks.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleIssueAutoAssignStarted\",\n              \"description\": \"Auto assign started issues to current cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleIssueAutoAssignCompleted\",\n              \"description\": \"Auto assign completed issues to current cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleLockToActive\",\n              \"description\": \"Auto assign issues to current cycle if in active status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"upcomingCycleCount\",\n              \"description\": \"How many upcoming cycles to create.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The timezone of the team. Defaults to \\\"America/Los_Angeles\\\"\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inheritWorkflowStatuses\",\n              \"description\": \"Whether the team should inherit its workflow statuses from its parent. Only applies to sub-teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inheritIssueEstimation\",\n              \"description\": \"Whether the team should inherit its estimation settings from its parent. Only applies to sub-teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueEstimationType\",\n              \"description\": \"The issue estimation type to use. Must be one of \\\"notUsed\\\", \\\"exponential\\\", \\\"fibonacci\\\", \\\"linear\\\", \\\"tShirt\\\".\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueOrderingNoPriorityFirst\",\n              \"description\": \"[DEPRECATED] Whether issues without priority should be sorted first.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"This setting is no longer in use.\"\n            },\n            {\n              \"name\": \"issueEstimationAllowZero\",\n              \"description\": \"Whether to allow zeros in issues estimates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"setIssueSortOrderOnStateChange\",\n              \"description\": \"Where to move issues when changing state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueEstimationExtended\",\n              \"description\": \"Whether to add additional points to the estimate scale.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultIssueEstimate\",\n              \"description\": \"What to use as a default estimate for unestimated issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageEnabled\",\n              \"description\": \"Whether triage mode is enabled for the team or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"requirePriorityToLeaveTriage\",\n              \"description\": \"Whether an issue needs to have a priority set before leaving triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultIssueState\",\n              \"description\": \"The default workflow state into which issues are set when they are opened by team members.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultTemplateForMembers\",\n              \"description\": \"The default template to use for new issues created by members of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultTemplateForMembersId\",\n              \"description\": \"The id of the default template to use for new issues created by members of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use defaultTemplateForMembers instead\"\n            },\n            {\n              \"name\": \"defaultTemplateForNonMembers\",\n              \"description\": \"The default template to use for new issues created by non-members of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultTemplateForNonMembersId\",\n              \"description\": \"The id of the default template to use for new issues created by non-members of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use defaultTemplateForNonMembers instead\"\n            },\n            {\n              \"name\": \"defaultProjectTemplate\",\n              \"description\": \"The default template to use for new projects created for the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageIssueState\",\n              \"description\": \"The workflow state into which issues are set when they are opened by non-team members or integrations if triage is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"private\",\n              \"description\": \"Whether the team is private or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allMembersCanJoin\",\n              \"description\": \"Whether all members in the workspace can join the team. Only used for public teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"securitySettings\",\n              \"description\": \"Security settings for the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facets\",\n              \"description\": \"[Internal] Facets associated with the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Facet\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"posts\",\n              \"description\": \"[Internal] Posts associated with the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Post\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimManaged\",\n              \"description\": \"Whether the team is managed by SCIM integration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimGroupName\",\n              \"description\": \"The SCIM group name for the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progressHistory\",\n              \"description\": \"[Internal] The progress history of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentProgress\",\n              \"description\": \"[Internal] The current progress of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"draftWorkflowState\",\n              \"description\": \"The workflow state into which issues are moved when a PR has been opened as draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use team.gitAutomationStates instead.\"\n            },\n            {\n              \"name\": \"startWorkflowState\",\n              \"description\": \"The workflow state into which issues are moved when a PR has been opened.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use team.gitAutomationStates instead.\"\n            },\n            {\n              \"name\": \"reviewWorkflowState\",\n              \"description\": \"The workflow state into which issues are moved when a review has been requested for the PR.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use team.gitAutomationStates instead.\"\n            },\n            {\n              \"name\": \"mergeableWorkflowState\",\n              \"description\": \"The workflow state into which issues are moved when a PR is ready to be merged.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use team.gitAutomationStates instead.\"\n            },\n            {\n              \"name\": \"mergeWorkflowState\",\n              \"description\": \"The workflow state into which issues are moved when a PR has been merged.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use team.gitAutomationStates instead.\"\n            },\n            {\n              \"name\": \"groupIssueHistory\",\n              \"description\": \"Whether to group recent issue history entries.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiThreadSummariesEnabled\",\n              \"description\": \"Whether to enable resolved thread AI summaries.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiDiscussionSummariesEnabled\",\n              \"description\": \"Whether to enable AI discussion summaries for issues in this team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackNewIssue\",\n              \"description\": \"Whether to send new issue notifications to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer is use\"\n            },\n            {\n              \"name\": \"slackIssueComments\",\n              \"description\": \"Whether to send new issue comment notifications to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"slackIssueStatuses\",\n              \"description\": \"Whether to send new issue status updates to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"autoClosePeriod\",\n              \"description\": \"Period after which issues are automatically closed in months. Null/undefined means disabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCloseStateId\",\n              \"description\": \"The canceled workflow state which auto closed issues will be set to. Defaults to the first canceled state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchivePeriod\",\n              \"description\": \"Period after which automatically closed and completed issues are automatically archived in months.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCloseParentIssues\",\n              \"description\": \"Whether parent issues should automatically close when all child issues are closed\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCloseChildIssues\",\n              \"description\": \"Whether child issues should automatically close when their parent issue is closed\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"markedAsDuplicateWorkflowState\",\n              \"description\": \"The workflow state into which issues are moved when they are marked as a duplicate of another issue. Defaults to the first canceled state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"joinByDefault\",\n              \"description\": \"[Internal] Whether new users should join this team by default.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleCalenderUrl\",\n              \"description\": \"Calendar feed URL (iCal) for cycles.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The name of the team including its parent team name if it has one.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"includeSubTeams\",\n                  \"description\": \"Include issues from sub-teams.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCount\",\n              \"description\": \"Number of issues in the team.\",\n              \"args\": [\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Include archived issues in the count.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycles\",\n              \"description\": \"Cycles associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned cycles.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CycleFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CycleConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activeCycle\",\n              \"description\": \"Team's currently active cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibility\",\n              \"description\": \"Team's triage responsibility.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"TriageResponsibility\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"members\",\n              \"description\": \"Users who are members of this team.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned users.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"membership\",\n              \"description\": \"[ALPHA] The membership of the given user in the team.\",\n              \"args\": [\n                {\n                  \"name\": \"userId\",\n                  \"description\": \"The user ID.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"TeamMembership\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"memberships\",\n              \"description\": \"Memberships associated with the team. For easier access of the same data, use `members` query.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembershipConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Projects associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"includeSubTeams\",\n                  \"description\": \"Include projects from sub-teams.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned projects.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned projects.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"ProjectSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"states\",\n              \"description\": \"The states that define the workflow associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned workflow states.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"WorkflowStateFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowStateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationStates\",\n              \"description\": \"The Git automation states for the team.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationStateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templates\",\n              \"description\": \"Templates associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned templates.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableTemplateFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TemplateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Labels associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issue labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhooks\",\n              \"description\": \"Webhooks associated with the team.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WebhookConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettings\",\n              \"description\": \"Settings for all integrations associated with that team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IntegrationsSettings\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueSortOrderDefaultToBottom\",\n              \"description\": \"[DEPRECATED] Whether to move issues to bottom of the column when changing state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use setIssueSortOrderOnStateChange instead.\"\n            },\n            {\n              \"name\": \"inviteHash\",\n              \"description\": \"[DEPRECATED] Unique hash for the team to be used in invite URLs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Not used anymore, simply returning an empty string.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"Boolean\",\n          \"description\": \"The `Boolean` scalar type represents `true` or `false`.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WorkflowState\",\n          \"description\": \"A state in a team workflow.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The state's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The state's UI color as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the state in the team flow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the state. One of \\\"triage\\\", \\\"backlog\\\", \\\"unstarted\\\", \\\"started\\\", \\\"completed\\\", \\\"canceled\\\", \\\"duplicate\\\".\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team to which this state belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inheritedFrom\",\n              \"description\": \"The state inherited from\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues belonging in this state.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Issue\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Issue\",\n          \"description\": \"An issue.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"The issue's unique number.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The issue's title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"The estimate of the complexity of the issue..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"boardOrder\",\n              \"description\": \"The order of the item in its column on the board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Will be removed in near future, please use `sortOrder` instead\"\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in relation to other items in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The order of the item in relation to other items in the organization, when ordered by priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time at which the issue was moved into started state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The time at which the issue was moved into completed state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedTriageAt\",\n              \"description\": \"The time at which the issue entered triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triagedAt\",\n              \"description\": \"The time at which the issue left triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The time at which the issue was moved into canceled state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoClosedAt\",\n              \"description\": \"The time at which the issue was automatically closed by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"The time at which the issue was automatically archived by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"The date at which the issue is due.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaStartedAt\",\n              \"description\": \"The time at which the issue's SLA began.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaMediumRiskAt\",\n              \"description\": \"The time at which the issue's SLA will enter medium risk state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaHighRiskAt\",\n              \"description\": \"The time at which the issue's SLA will enter high risk state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaBreachesAt\",\n              \"description\": \"The time at which the issue's SLA will breach.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaType\",\n              \"description\": \"The type of SLA set on the issue. Calendar days or business days.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToProjectAt\",\n              \"description\": \"The time at which the issue was added to a project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToCycleAt\",\n              \"description\": \"The time at which the issue was added to a cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToTeamAt\",\n              \"description\": \"The time at which the issue was added to a team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the issue is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until an issue will be snoozed in Triage view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestionsGeneratedAt\",\n              \"description\": \"[Internal] The time at which the most recent suggestions for this issue were generated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activitySummary\",\n              \"description\": \"[Internal] The activity summary information for this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"summary\",\n              \"description\": \"[Internal] AI-generated activity summary for this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Summary\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"Id of the labels associated with this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The cycle that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"The projectMilestone that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"The last template that was applied to this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"recurringIssueTemplate\",\n              \"description\": \"The recurring issue template that created this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"previousIdentifiers\",\n              \"description\": \"Previous identifiers of the issue if it has been moved between teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserCreator\",\n              \"description\": \"The external user who created the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": \"The user to whom the issue is assigned to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"delegate\",\n              \"description\": \"The agent user that is delegated to work on this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedBy\",\n              \"description\": \"The user who snoozed the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"The workflow state that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subIssueSortOrder\",\n              \"description\": \"The order of the item in the sub-issue list. Only set if the issue has a parent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionData\",\n              \"description\": \"Emoji reaction summary, grouped by emoji type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priorityLabel\",\n              \"description\": \"Label for the priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceComment\",\n              \"description\": \"The comment that this issue was created from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSourceType\",\n              \"description\": \"Integration type that created this issue, if applicable.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"IntegrationService\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"Documents associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that created the issue, if applicable.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorite\",\n              \"description\": \"The users favorite associated with this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Favorite\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"identifier\",\n              \"description\": \"Issue's human readable identifier (e.g. ENG-123).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Issue URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"branchName\",\n              \"description\": \"Suggested branch name for the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sharedAccess\",\n              \"description\": \"Shared access metadata for this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSharedAccess\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTicketCount\",\n              \"description\": \"Returns the number of Attachment resources which are created by customer support ticketing systems (e.g. Zendesk).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscribers\",\n              \"description\": \"Users who are subscribed to the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned subscribers.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Children of the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"history\",\n              \"description\": \"History entries associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueHistoryConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Labels associated with this issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issue labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relations\",\n              \"description\": \"Relations associated with this issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inverseRelations\",\n              \"description\": \"Inverse relations associated with this issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Attachments associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned attachments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"formerAttachments\",\n              \"description\": \"Attachments previously associated with the issue before being moved to another issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned attachments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The issue's description in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"descriptionState\",\n              \"description\": \"[Internal] The issue's description content as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"[ALPHA] The document content representing this issue description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Reactions associated with the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Reaction\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Customer needs associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"formerNeeds\",\n              \"description\": \"Customer needs previously associated with the issue before being moved to another issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"syncedWith\",\n              \"description\": \"The external services the issue is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ExternalEntityInfo\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestions\",\n              \"description\": \"[Internal] Product Intelligence suggestions for the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSuggestionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"incomingSuggestions\",\n              \"description\": \"[Internal] Incoming product intelligence relation suggestions for the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSuggestionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asksRequester\",\n              \"description\": \"The internal user who requested creation of the Asks issue on behalf of the creator.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asksExternalUserRequester\",\n              \"description\": \"The external user who requested creation of the Asks issue on behalf of the creator.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stateHistory\",\n              \"description\": \"The issue's workflow states over time.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueStateSpanConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"TimelessDate\",\n          \"description\": \"Represents a date in ISO 8601 format. Accepts shortcuts like `2021` to represent midnight Fri Jan 01 2021. Also accepts ISO 8601 durations strings which are added to the current date to create the represented date (e.g '-P2W1D' represents the date that was two weeks and 1 day ago) \",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"JSONObject\",\n          \"description\": \"The `JSONObject` scalar type represents arbitrary values as *embedded* JSON\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Summary\",\n          \"description\": \"An AI-generated summary.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue this summary belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The summary content as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"evalLogId\",\n              \"description\": \"The evaluation log id for this summary generation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"generationStatus\",\n              \"description\": \"The generation status of the summary.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"SummaryGenerationStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"generatedAt\",\n              \"description\": \"The time at which the summary was generated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"SummaryGenerationStatus\",\n          \"description\": \"The generation status of a summary.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"pending\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"failed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Cycle\",\n          \"description\": \"A set of issues to be resolved in a specified amount of time.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"The number of the cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The custom name of the cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The cycle's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"The start time of the cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"The end time of the cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The completion time of the cycle. If null, the cycle hasn't been completed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"The time at which the cycle was automatically archived by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCountHistory\",\n              \"description\": \"The total number of issues in the cycle after each day.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedIssueCountHistory\",\n              \"description\": \"The number of completed issues in the cycle after each day.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scopeHistory\",\n              \"description\": \"The total number of estimation points after each day.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedScopeHistory\",\n              \"description\": \"The number of completed estimation points after each day.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inProgressScopeHistory\",\n              \"description\": \"The number of in progress estimation points after each day.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the cycle is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progressHistory\",\n              \"description\": \"[Internal] The progress history of the cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentProgress\",\n              \"description\": \"[Internal] The current progress of the cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inheritedFrom\",\n              \"description\": \"The cycle inherited from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isActive\",\n              \"description\": \"Whether the cycle is currently active.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isFuture\",\n              \"description\": \"Whether the cycle is in the future.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isPast\",\n              \"description\": \"Whether the cycle is in the past.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"uncompletedIssuesUponClose\",\n              \"description\": \"Issues that weren't completed when the cycle was closed.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progress\",\n              \"description\": \"The overall progress of the cycle. This is the (completed estimate points + 0.25 * in progress estimate points) / total estimate points.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isNext\",\n              \"description\": \"Whether the cycle is the next cycle for the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isPrevious\",\n              \"description\": \"Whether the cycle is the previous cycle for the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"[Internal] Documents associated with the cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"links\",\n              \"description\": \"[Internal] Links associated with the cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueFilter\",\n          \"description\": \"Issue filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueIDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"Comparator for the issues number.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Comparator for the issues title.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the issues description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableNumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"Comparator for the issues estimate.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"EstimateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the issues started at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triagedAt\",\n              \"description\": \"Comparator for the issues triaged at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the issues completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"Comparator for the issues canceled at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"Comparator for the issues archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoClosedAt\",\n              \"description\": \"Comparator for the issues auto closed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"Comparator for the issues auto archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedToCycleAt\",\n              \"description\": \"Comparator for the issues added to cycle at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedToCyclePeriod\",\n              \"description\": \"Comparator for the period when issue was added to a cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CyclePeriodComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"Comparator for the issues due date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTimelessDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accumulatedStateUpdatedAt\",\n              \"description\": \"[Internal] Comparator for the issue's accumulatedStateUpdatedAt date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"Comparator for the issues snoozed until date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": \"Filters that the issues assignee must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"delegate\",\n              \"description\": \"Filters that the issue's delegated agent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"Filters that the last applied template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"recurringIssueTemplate\",\n              \"description\": \"[ALPHA] Filters that the recurring issue template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceMetadata\",\n              \"description\": \"Filters that the source must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SourceMetadataComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the issues creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the issue parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedBy\",\n              \"description\": \"Filters that the issues snoozer must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Filters that issue labels must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribers\",\n              \"description\": \"Filters that issue subscribers must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSharedUsers\",\n              \"description\": \"Comparator for filtering issues which have been shared with users outside of the team.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sharedWith\",\n              \"description\": \"Filters that users the issue has been shared with must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the issues team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"Filters that the issues project milestone must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Filters that the issues comments must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CommentCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activity\",\n              \"description\": \"Filters that the issue's activities must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ActivityCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestions\",\n              \"description\": \"[Internal] Filters that the issue's suggestions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueSuggestionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"Filters that the issues cycle must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCycleFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the issues project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"Filters that the issues state must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"WorkflowStateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Filters that the child issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Filters that the issues attachments must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"AttachmentCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"searchableContent\",\n              \"description\": \"[Internal] Comparator for the issues content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ContentComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasRelatedRelations\",\n              \"description\": \"Comparator for filtering issues with relations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDuplicateRelations\",\n              \"description\": \"Comparator for filtering issues which are duplicates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockedByRelations\",\n              \"description\": \"Comparator for filtering issues which are blocked.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockingRelations\",\n              \"description\": \"Comparator for filtering issues which are blocking.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedRelatedIssues\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested related issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedSimilarIssues\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested similar issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedAssignees\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested assignees.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedProjects\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedLabels\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedTeams\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested teams.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaStatus\",\n              \"description\": \"Comparator for the issues sla status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlaStatusComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the issues reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the issue's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releases\",\n              \"description\": \"[ALPHA] Filters that the issue's releases must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Count of customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Count of important customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"leadTime\",\n              \"description\": \"[Internal] Lead time (created -> completed) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleTime\",\n              \"description\": \"[Internal] Cycle time (started -> completed) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ageTime\",\n              \"description\": \"[Internal] Age (created -> now) comparator, defined if the issue is still open.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triageTime\",\n              \"description\": \"[Internal] Triage time (entered triaged -> triaged) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueIDComparator\",\n          \"description\": \"Comparator for issue identifiers.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"ID\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"ID\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"ID\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"ID\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DateComparator\",\n          \"description\": \"Comparator for dates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"DateTimeOrDuration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"DateTimeOrDuration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"DateTimeOrDuration\",\n          \"description\": \"Represents a date and time in ISO 8601 format. Accepts shortcuts like `2021` to represent midnight Fri Jan 01 2021. Also accepts ISO 8601 durations strings which are added to the current date to create the represented date (e.g '-P2W1D' represents the date that was two weeks and 1 day ago) \",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NumberComparator\",\n          \"description\": \"Comparator for numbers.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"StringComparator\",\n          \"description\": \"Comparator for strings.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"eqIgnoreCase\",\n              \"description\": \"Equals case insensitive. Matches any values that matches the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neqIgnoreCase\",\n              \"description\": \"Not-equals case insensitive. Matches any values that don't match the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWith\",\n              \"description\": \"Starts with constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWithIgnoreCase\",\n              \"description\": \"Starts with case insensitive constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notStartsWith\",\n              \"description\": \"Doesn't start with constraint. Matches any values that don't start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsWith\",\n              \"description\": \"Ends with constraint. Matches any values that end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notEndsWith\",\n              \"description\": \"Doesn't end with constraint. Matches any values that don't end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contains\",\n              \"description\": \"Contains constraint. Matches any values that contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCase\",\n              \"description\": \"Contains case insensitive constraint. Matches any values that contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContains\",\n              \"description\": \"Doesn't contain constraint. Matches any values that don't contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContainsIgnoreCase\",\n              \"description\": \"Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCaseAndAccent\",\n              \"description\": \"Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableStringComparator\",\n          \"description\": \"Comparator for optional strings.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"eqIgnoreCase\",\n              \"description\": \"Equals case insensitive. Matches any values that matches the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neqIgnoreCase\",\n              \"description\": \"Not-equals case insensitive. Matches any values that don't match the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWith\",\n              \"description\": \"Starts with constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWithIgnoreCase\",\n              \"description\": \"Starts with case insensitive constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notStartsWith\",\n              \"description\": \"Doesn't start with constraint. Matches any values that don't start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsWith\",\n              \"description\": \"Ends with constraint. Matches any values that end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notEndsWith\",\n              \"description\": \"Doesn't end with constraint. Matches any values that don't end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contains\",\n              \"description\": \"Contains constraint. Matches any values that contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCase\",\n              \"description\": \"Contains case insensitive constraint. Matches any values that contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContains\",\n              \"description\": \"Doesn't contain constraint. Matches any values that don't contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContainsIgnoreCase\",\n              \"description\": \"Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCaseAndAccent\",\n              \"description\": \"Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableNumberComparator\",\n          \"description\": \"Comparator for optional numbers.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EstimateComparator\",\n          \"description\": \"Comparator for estimates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, all of which need to be matched by the estimate.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableNumberComparator\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, one of which need to be matched by the estimate.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableNumberComparator\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableDateComparator\",\n          \"description\": \"Comparator for optional dates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"DateTimeOrDuration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"DateTimeOrDuration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTimeOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CyclePeriodComparator\",\n          \"description\": \"Comparator for period when issue was added to a cycle.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"CyclePeriod\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"CyclePeriod\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"CyclePeriod\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"CyclePeriod\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"CyclePeriod\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"before\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"during\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"after\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableTimelessDateComparator\",\n          \"description\": \"Comparator for optional timeless dates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDateOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDateOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"TimelessDateOrDuration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"TimelessDateOrDuration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDateOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDateOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDateOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDateOrDuration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"TimelessDateOrDuration\",\n          \"description\": \"Represents a date in ISO 8601 format or a duration. Accepts shortcuts like `2021` to represent midnight Fri Jan 01 2021. Also accepts ISO 8601 durations strings (e.g '-P2W1D'), which are not converted to dates.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableUserFilter\",\n          \"description\": \"User filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the user's name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"Comparator for the user's display name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Comparator for the user's email.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Comparator for the user's activity status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignedIssues\",\n              \"description\": \"Filters that the users assigned issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"admin\",\n              \"description\": \"Comparator for the user's admin status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Comparator for the user's owner status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"invited\",\n              \"description\": \"Comparator for the user's invited status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isInvited\",\n              \"description\": \"Comparator for the user's invited status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"app\",\n              \"description\": \"Comparator for the user's app status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isMe\",\n              \"description\": \"Filter based on the currently authenticated user. Set to true to filter for the authenticated user, false for any other user.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableUserFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableUserFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IDComparator\",\n          \"description\": \"Comparator for identifiers.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"ID\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"ID\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"ID\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"ID\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"BooleanComparator\",\n          \"description\": \"Comparator for booleans.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueCollectionFilter\",\n          \"description\": \"Issue filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueIDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"Comparator for the issues number.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Comparator for the issues title.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the issues description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableNumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"Comparator for the issues estimate.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"EstimateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the issues started at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triagedAt\",\n              \"description\": \"Comparator for the issues triaged at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the issues completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"Comparator for the issues canceled at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"Comparator for the issues archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoClosedAt\",\n              \"description\": \"Comparator for the issues auto closed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"Comparator for the issues auto archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedToCycleAt\",\n              \"description\": \"Comparator for the issues added to cycle at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedToCyclePeriod\",\n              \"description\": \"Comparator for the period when issue was added to a cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CyclePeriodComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"Comparator for the issues due date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTimelessDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accumulatedStateUpdatedAt\",\n              \"description\": \"[Internal] Comparator for the issue's accumulatedStateUpdatedAt date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"Comparator for the issues snoozed until date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": \"Filters that the issues assignee must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"delegate\",\n              \"description\": \"Filters that the issue's delegated agent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"Filters that the last applied template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"recurringIssueTemplate\",\n              \"description\": \"[ALPHA] Filters that the recurring issue template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceMetadata\",\n              \"description\": \"Filters that the source must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SourceMetadataComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the issues creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the issue parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedBy\",\n              \"description\": \"Filters that the issues snoozer must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Filters that issue labels must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribers\",\n              \"description\": \"Filters that issue subscribers must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSharedUsers\",\n              \"description\": \"Comparator for filtering issues which have been shared with users outside of the team.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sharedWith\",\n              \"description\": \"Filters that users the issue has been shared with must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the issues team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"Filters that the issues project milestone must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Filters that the issues comments must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CommentCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activity\",\n              \"description\": \"Filters that the issue's activities must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ActivityCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestions\",\n              \"description\": \"[Internal] Filters that the issue's suggestions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueSuggestionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"Filters that the issues cycle must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCycleFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the issues project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"Filters that the issues state must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"WorkflowStateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Filters that the child issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Filters that the issues attachments must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"AttachmentCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"searchableContent\",\n              \"description\": \"[Internal] Comparator for the issues content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ContentComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasRelatedRelations\",\n              \"description\": \"Comparator for filtering issues with relations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDuplicateRelations\",\n              \"description\": \"Comparator for filtering issues which are duplicates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockedByRelations\",\n              \"description\": \"Comparator for filtering issues which are blocked.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockingRelations\",\n              \"description\": \"Comparator for filtering issues which are blocking.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedRelatedIssues\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested related issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedSimilarIssues\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested similar issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedAssignees\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested assignees.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedProjects\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedLabels\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedTeams\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested teams.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaStatus\",\n              \"description\": \"Comparator for the issues sla status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlaStatusComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the issues reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the issue's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releases\",\n              \"description\": \"[ALPHA] Filters that the issue's releases must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Count of customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Count of important customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"leadTime\",\n              \"description\": \"[Internal] Lead time (created -> completed) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleTime\",\n              \"description\": \"[Internal] Cycle time (started -> completed) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ageTime\",\n              \"description\": \"[Internal] Age (created -> now) comparator, defined if the issue is still open.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triageTime\",\n              \"description\": \"[Internal] Triage time (entered triaged -> triaged) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableTemplateFilter\",\n          \"description\": \"Template filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the template's name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the template's type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritedFromId\",\n              \"description\": \"Comparator for the inherited template's ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the template.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableTemplateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the template.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableTemplateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SourceMetadataComparator\",\n          \"description\": \"Comparator for issue source type.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subType\",\n              \"description\": \"Comparator for the sub type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SubTypeComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"salesforceMetadata\",\n              \"description\": \"[INTERNAL] Comparator for the salesforce metadata.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SalesforceMetadataIntegrationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SubTypeComparator\",\n          \"description\": \"Comparator for source type.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SalesforceMetadataIntegrationComparator\",\n          \"description\": \"[INTERNAL] Comparator for Salesforce metadata.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"caseMetadata\",\n              \"description\": \"Salesforce Case metadata filter\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableIssueFilter\",\n          \"description\": \"Issue filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueIDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"Comparator for the issues number.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Comparator for the issues title.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the issues description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the issues priority. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableNumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"Comparator for the issues estimate.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"EstimateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the issues started at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triagedAt\",\n              \"description\": \"Comparator for the issues triaged at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the issues completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"Comparator for the issues canceled at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"Comparator for the issues archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoClosedAt\",\n              \"description\": \"Comparator for the issues auto closed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"Comparator for the issues auto archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedToCycleAt\",\n              \"description\": \"Comparator for the issues added to cycle at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedToCyclePeriod\",\n              \"description\": \"Comparator for the period when issue was added to a cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CyclePeriodComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"Comparator for the issues due date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTimelessDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accumulatedStateUpdatedAt\",\n              \"description\": \"[Internal] Comparator for the issue's accumulatedStateUpdatedAt date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"Comparator for the issues snoozed until date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": \"Filters that the issues assignee must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"delegate\",\n              \"description\": \"Filters that the issue's delegated agent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"Filters that the last applied template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"recurringIssueTemplate\",\n              \"description\": \"[ALPHA] Filters that the recurring issue template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceMetadata\",\n              \"description\": \"Filters that the source must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SourceMetadataComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the issues creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the issue parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedBy\",\n              \"description\": \"Filters that the issues snoozer must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Filters that issue labels must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribers\",\n              \"description\": \"Filters that issue subscribers must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSharedUsers\",\n              \"description\": \"Comparator for filtering issues which have been shared with users outside of the team.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sharedWith\",\n              \"description\": \"Filters that users the issue has been shared with must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the issues team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"Filters that the issues project milestone must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Filters that the issues comments must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CommentCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activity\",\n              \"description\": \"Filters that the issue's activities must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ActivityCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestions\",\n              \"description\": \"[Internal] Filters that the issue's suggestions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueSuggestionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"Filters that the issues cycle must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCycleFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the issues project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"Filters that the issues state must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"WorkflowStateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Filters that the child issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Filters that the issues attachments must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"AttachmentCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"searchableContent\",\n              \"description\": \"[Internal] Comparator for the issues content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ContentComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasRelatedRelations\",\n              \"description\": \"Comparator for filtering issues with relations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDuplicateRelations\",\n              \"description\": \"Comparator for filtering issues which are duplicates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockedByRelations\",\n              \"description\": \"Comparator for filtering issues which are blocked.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockingRelations\",\n              \"description\": \"Comparator for filtering issues which are blocking.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedRelatedIssues\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested related issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedSimilarIssues\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested similar issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedAssignees\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested assignees.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedProjects\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedLabels\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasSuggestedTeams\",\n              \"description\": \"[Internal] Comparator for filtering issues which have suggested teams.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaStatus\",\n              \"description\": \"Comparator for the issues sla status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlaStatusComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the issues reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the issue's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releases\",\n              \"description\": \"[ALPHA] Filters that the issue's releases must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Count of customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Count of important customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"leadTime\",\n              \"description\": \"[Internal] Lead time (created -> completed) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleTime\",\n              \"description\": \"[Internal] Cycle time (started -> completed) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ageTime\",\n              \"description\": \"[Internal] Age (created -> now) comparator, defined if the issue is still open.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triageTime\",\n              \"description\": \"[Internal] Triage time (entered triaged -> triaged) comparator.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDurationComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableIssueFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableIssueFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueLabelCollectionFilter\",\n          \"description\": \"Issue label filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Comparator for whether the label is a group label.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the issue labels creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the issue labels team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the issue label's parent label must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some issue labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all issue labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableTeamFilter\",\n          \"description\": \"Team filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the team name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"key\",\n              \"description\": \"Comparator for the team key.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the team description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"private\",\n              \"description\": \"Comparator for the team privacy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the teams issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the teams parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ancestors\",\n              \"description\": \"Filters that the team's ancestors must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the team.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableTeamFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the team.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableTeamFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamCollectionFilter\",\n          \"description\": \"Team collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the team.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the team.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some teams.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all teams.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the teams parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ancestors\",\n              \"description\": \"Filters that the team's ancestors must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamFilter\",\n          \"description\": \"Team filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the team name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"key\",\n              \"description\": \"Comparator for the team key.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the team description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"private\",\n              \"description\": \"Comparator for the team privacy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the teams issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the teams parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ancestors\",\n              \"description\": \"Filters that the team's ancestors must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the team.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the team.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueLabelFilter\",\n          \"description\": \"Issue label filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Comparator for whether the label is a group label.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the issue labels creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the issue labels team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the issue label's parent label must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserCollectionFilter\",\n          \"description\": \"User filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the user's name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"Comparator for the user's display name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Comparator for the user's email.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Comparator for the user's activity status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignedIssues\",\n              \"description\": \"Filters that the users assigned issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"admin\",\n              \"description\": \"Comparator for the user's admin status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Comparator for the user's owner status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"invited\",\n              \"description\": \"Comparator for the user's invited status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isInvited\",\n              \"description\": \"Comparator for the user's invited status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"app\",\n              \"description\": \"Comparator for the user's app status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isMe\",\n              \"description\": \"Filter based on the currently authenticated user. Set to true to filter for the authenticated user, false for any other user.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some users.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all users.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserFilter\",\n          \"description\": \"User filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the user's name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"Comparator for the user's display name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Comparator for the user's email.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Comparator for the user's activity status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignedIssues\",\n              \"description\": \"Filters that the users assigned issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"admin\",\n              \"description\": \"Comparator for the user's admin status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Comparator for the user's owner status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"invited\",\n              \"description\": \"Comparator for the user's invited status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isInvited\",\n              \"description\": \"Comparator for the user's invited status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"app\",\n              \"description\": \"Comparator for the user's app status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isMe\",\n              \"description\": \"Filter based on the currently authenticated user. Set to true to filter for the authenticated user, false for any other user.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RelationExistsComparator\",\n          \"description\": \"Comparator for relation existence.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableProjectMilestoneFilter\",\n          \"description\": \"Project milestone filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project milestone name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the project milestone target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the project milestone's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project milestone.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableProjectMilestoneFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project milestone.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableProjectMilestoneFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableProjectFilter\",\n          \"description\": \"Project filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the project slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"[DEPRECATED] Comparator for the project state.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Filters that the project's status must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectStatusFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the projects priority.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableNumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Filters that project labels must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"searchableContent\",\n              \"description\": \"[Internal] Comparator for the project's content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ContentComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the project started date (when it was moved to an \\\"In Progress\\\" status).\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the project completion date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"Comparator for the project cancelation date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"Comparator for the project start date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the project target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the project health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthWithAge\",\n              \"description\": \"Comparator for the project health (with age): onTrack, atRisk, offTrack, outdated, noUpdate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activityType\",\n              \"description\": \"[ALPHA] Comparator for the project activity type: buzzin, active, some, none\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasRelatedRelations\",\n              \"description\": \"Comparator for filtering projects with relations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDependedOnByRelations\",\n              \"description\": \"[Deprecated] Comparator for filtering projects which this is depended on by.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDependsOnRelations\",\n              \"description\": \"[Deprecated]Comparator for filtering projects which this depends on.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockedByRelations\",\n              \"description\": \"Comparator for filtering projects which are blocked.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockingRelations\",\n              \"description\": \"Comparator for filtering projects which are blocking.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasViolatedRelations\",\n              \"description\": \"Comparator for filtering projects with violated dependencies.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdates\",\n              \"description\": \"Comparator for the project updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdatesCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the projects creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lead\",\n              \"description\": \"Filters that the projects lead must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"members\",\n              \"description\": \"Filters that the projects members must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the projects issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"roadmaps\",\n              \"description\": \"Filters that the projects roadmaps must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RoadmapCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Filters that the projects initiatives must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestones\",\n              \"description\": \"Filters that the project's milestones must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedProjectMilestones\",\n              \"description\": \"Filters that the project's completed milestones must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nextProjectMilestone\",\n              \"description\": \"Filters that the project's next milestone must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accessibleTeams\",\n              \"description\": \"Filters that the project's team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"Filters that the last applied template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the project's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Count of customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Count of important customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableProjectFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableProjectFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectStatusFilter\",\n          \"description\": \"Project status filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project status name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the project status description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"Comparator for the project status position.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the project status type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Filters that the project status projects must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project status.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectStatusFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which needs to be matched by the project status.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectStatusFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectCollectionFilter\",\n          \"description\": \"Project filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the project slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"[DEPRECATED] Comparator for the project state.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Filters that the project's status must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectStatusFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the projects priority.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableNumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Filters that project labels must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"searchableContent\",\n              \"description\": \"[Internal] Comparator for the project's content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ContentComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the project started date (when it was moved to an \\\"In Progress\\\" status).\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the project completion date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"Comparator for the project cancelation date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"Comparator for the project start date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the project target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the project health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthWithAge\",\n              \"description\": \"Comparator for the project health (with age): onTrack, atRisk, offTrack, outdated, noUpdate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activityType\",\n              \"description\": \"[ALPHA] Comparator for the project activity type: buzzin, active, some, none\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasRelatedRelations\",\n              \"description\": \"Comparator for filtering projects with relations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDependedOnByRelations\",\n              \"description\": \"[Deprecated] Comparator for filtering projects which this is depended on by.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDependsOnRelations\",\n              \"description\": \"[Deprecated]Comparator for filtering projects which this depends on.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockedByRelations\",\n              \"description\": \"Comparator for filtering projects which are blocked.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockingRelations\",\n              \"description\": \"Comparator for filtering projects which are blocking.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasViolatedRelations\",\n              \"description\": \"Comparator for filtering projects with violated dependencies.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdates\",\n              \"description\": \"Comparator for the project updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdatesCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the projects creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lead\",\n              \"description\": \"Filters that the projects lead must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"members\",\n              \"description\": \"Filters that the projects members must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the projects issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"roadmaps\",\n              \"description\": \"Filters that the projects roadmaps must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RoadmapCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Filters that the projects initiatives must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestones\",\n              \"description\": \"Filters that the project's milestones must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedProjectMilestones\",\n              \"description\": \"Filters that the project's completed milestones must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nextProjectMilestone\",\n              \"description\": \"Filters that the project's next milestone must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accessibleTeams\",\n              \"description\": \"Filters that the project's team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"Filters that the last applied template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the project's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Count of customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Count of important customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectLabelCollectionFilter\",\n          \"description\": \"Project label filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Comparator for whether the label is a group label.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the project labels creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the project label's parent label must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some project labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all project labels.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectLabelFilter\",\n          \"description\": \"Project label filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Comparator for whether the label is a group label.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the project labels creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the project label's parent label must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the label.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ContentComparator\",\n          \"description\": \"[Internal] Comparator for content.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"contains\",\n              \"description\": \"[Internal] Contains constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContains\",\n              \"description\": \"[Internal] Not-contains constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdatesCollectionFilter\",\n          \"description\": \"Collection filtering options for filtering projects by project updates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the project update health.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project update.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdatesCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the update.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdatesCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdatesFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdatesFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdatesFilter\",\n          \"description\": \"Options for filtering projects by project updates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the project update health.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project updates.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdatesFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project updates.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdatesFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RoadmapCollectionFilter\",\n          \"description\": \"Roadmap collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the roadmap name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the roadmap slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the roadmap creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the roadmap.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"RoadmapCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the roadmap.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"RoadmapCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some roadmaps.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RoadmapFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all roadmaps.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RoadmapFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RoadmapFilter\",\n          \"description\": \"Roadmap filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the roadmap name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the roadmap slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the roadmap creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the roadmap.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"RoadmapFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the roadmap.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"RoadmapFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeCollectionFilter\",\n          \"description\": \"Initiative collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the initiative name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the initiative slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the initiative creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Comparator for the initiative status: Planned, Active, Completed\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Filters that the initiative teams must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Filters that the initiative owner must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the initiative target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the initiative started at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the initiative completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the initiative health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthWithAge\",\n              \"description\": \"Comparator for the initiative health (with age): onTrack, atRisk, offTrack, outdated, noUpdate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activityType\",\n              \"description\": \"Comparator for the initiative activity type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ancestors\",\n              \"description\": \"Filters that the initiative must be an ancestor of.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdates\",\n              \"description\": \"Filters that the initiative updates must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeUpdatesCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the initiative.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the initiative.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some initiatives.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all initiatives.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdatesCollectionFilter\",\n          \"description\": \"Collection filtering options for filtering initiatives by initiative updates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the initiative update.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdatesCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the update.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdatesCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some initiative updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeUpdatesFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all initiative updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeUpdatesFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdatesFilter\",\n          \"description\": \"Options for filtering initiatives by initiative updates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the initiative updates.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdatesFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the initiative updates.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdatesFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeFilter\",\n          \"description\": \"Initiative filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the initiative name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the initiative slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the initiative creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Comparator for the initiative status: Planned, Active, Completed\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Filters that the initiative teams must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Filters that the initiative owner must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the initiative target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the initiative started at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the initiative completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the initiative health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthWithAge\",\n              \"description\": \"Comparator for the initiative health (with age): onTrack, atRisk, offTrack, outdated, noUpdate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activityType\",\n              \"description\": \"Comparator for the initiative activity type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ancestors\",\n              \"description\": \"Filters that the initiative must be an ancestor of.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdates\",\n              \"description\": \"Filters that the initiative updates must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeUpdatesCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the initiative.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the initiative.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneCollectionFilter\",\n          \"description\": \"Milestone collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project milestone name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the project milestone target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the project milestone's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the milestone.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the milestone.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some milestones.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all milestones.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneFilter\",\n          \"description\": \"Project milestone filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project milestone name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the project milestone target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the project milestone's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project milestone.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project milestone.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerNeedCollectionFilter\",\n          \"description\": \"Customer needs filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the customer need priority.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the need's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"Filters that the need's issue must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"Filters that the need's comment must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"Filters that the need's customer must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCustomerFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the customer needs.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the customer needs.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some customer needs.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all customer needs.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableCommentFilter\",\n          \"description\": \"Comment filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"Comparator for the comment's body.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the comment's creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"Filters that the comment's issue must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"Filters that the comment's project update must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectUpdateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the comment parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"Filters that the comment's document content must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDocumentContentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"[Internal] Filters that the comment's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"[Internal] Filters that the comment's initiative must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableInitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the comment's reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the comment's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableCommentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableCommentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableProjectUpdateFilter\",\n          \"description\": \"Nullable project update filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the project update creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the project update project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the project updates reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project update.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableProjectUpdateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project update.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableProjectUpdateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectFilter\",\n          \"description\": \"Project filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the project name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the project slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"[DEPRECATED] Comparator for the project state.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Filters that the project's status must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectStatusFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the projects priority.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableNumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Filters that project labels must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLabelCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"searchableContent\",\n              \"description\": \"[Internal] Comparator for the project's content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ContentComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the project started date (when it was moved to an \\\"In Progress\\\" status).\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the project completion date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"Comparator for the project cancelation date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"Comparator for the project start date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the project target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the project health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthWithAge\",\n              \"description\": \"Comparator for the project health (with age): onTrack, atRisk, offTrack, outdated, noUpdate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activityType\",\n              \"description\": \"[ALPHA] Comparator for the project activity type: buzzin, active, some, none\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasRelatedRelations\",\n              \"description\": \"Comparator for filtering projects with relations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDependedOnByRelations\",\n              \"description\": \"[Deprecated] Comparator for filtering projects which this is depended on by.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDependsOnRelations\",\n              \"description\": \"[Deprecated]Comparator for filtering projects which this depends on.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockedByRelations\",\n              \"description\": \"Comparator for filtering projects which are blocked.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasBlockingRelations\",\n              \"description\": \"Comparator for filtering projects which are blocking.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasViolatedRelations\",\n              \"description\": \"Comparator for filtering projects with violated dependencies.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RelationExistsComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdates\",\n              \"description\": \"Comparator for the project updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdatesCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the projects creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lead\",\n              \"description\": \"Filters that the projects lead must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"members\",\n              \"description\": \"Filters that the projects members must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the projects issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"roadmaps\",\n              \"description\": \"Filters that the projects roadmaps must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RoadmapCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Filters that the projects initiatives must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestones\",\n              \"description\": \"Filters that the project's milestones must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedProjectMilestones\",\n              \"description\": \"Filters that the project's completed milestones must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nextProjectMilestone\",\n              \"description\": \"Filters that the project's next milestone must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accessibleTeams\",\n              \"description\": \"Filters that the project's team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"Filters that the last applied template must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTemplateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the project's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Count of customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Count of important customers\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReactionCollectionFilter\",\n          \"description\": \"Reaction filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"emoji\",\n              \"description\": \"Comparator for the reactions emoji.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customEmojiId\",\n              \"description\": \"Comparator for the reactions custom emoji.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the reaction.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReactionCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the reaction.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReactionCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some reactions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all reactions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReactionFilter\",\n          \"description\": \"Reaction filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"emoji\",\n              \"description\": \"Comparator for the reactions emoji.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customEmojiId\",\n              \"description\": \"Comparator for the reactions custom emoji.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the reaction.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReactionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the reaction.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReactionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableDocumentContentFilter\",\n          \"description\": \"Document content filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"Comparator for the document content.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the document content project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"Filters that the document content document must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DocumentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableDocumentContentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the user.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableDocumentContentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DocumentFilter\",\n          \"description\": \"Document filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Comparator for the document title.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the document slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the document's creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the document's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"Filters that the document's issue must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"Filters that the document's initiative must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the document.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the document.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableInitiativeFilter\",\n          \"description\": \"Initiative filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the initiative name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"Comparator for the initiative slug ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the initiative creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Comparator for the initiative status: Planned, Active, Completed\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Filters that the initiative teams must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Filters that the initiative owner must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Comparator for the initiative target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"Comparator for the initiative started at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the initiative completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Comparator for the initiative health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthWithAge\",\n              \"description\": \"Comparator for the initiative health (with age): onTrack, atRisk, offTrack, outdated, noUpdate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"activityType\",\n              \"description\": \"Comparator for the initiative activity type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ancestors\",\n              \"description\": \"Filters that the initiative must be an ancestor of.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdates\",\n              \"description\": \"Filters that the initiative updates must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeUpdatesCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the initiative.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableInitiativeFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the initiative.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableInitiativeFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableCustomerFilter\",\n          \"description\": \"Customer filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the customer name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackChannelId\",\n              \"description\": \"Comparator for the customer slack channel ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"domains\",\n              \"description\": \"Comparator for the customer's domains.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringArrayComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalIds\",\n              \"description\": \"Comparator for the customer's external IDs.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringArrayComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Filters that the customer owner must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the customer's needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"Comparator for the customer generated revenue.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"Comparator for the customer size.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Filters that the customer's status must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerStatusFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tier\",\n              \"description\": \"Filters that the customer's tier must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerTierFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableCustomerFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableCustomerFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"StringArrayComparator\",\n          \"description\": \"Comparator for strings.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"length\",\n              \"description\": \"Length of the array. Matches any values that have the given length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Compound filters, all of which need to be matched.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringItemComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Compound filters, one of which needs to be matched.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringItemComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"StringItemComparator\",\n          \"description\": \"Comparator for strings in arrays.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"eqIgnoreCase\",\n              \"description\": \"Equals case insensitive. Matches any values that matches the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neqIgnoreCase\",\n              \"description\": \"Not-equals case insensitive. Matches any values that don't match the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWith\",\n              \"description\": \"Starts with constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWithIgnoreCase\",\n              \"description\": \"Starts with case insensitive constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notStartsWith\",\n              \"description\": \"Doesn't start with constraint. Matches any values that don't start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsWith\",\n              \"description\": \"Ends with constraint. Matches any values that end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notEndsWith\",\n              \"description\": \"Doesn't end with constraint. Matches any values that don't end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contains\",\n              \"description\": \"Contains constraint. Matches any values that contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCase\",\n              \"description\": \"Contains case insensitive constraint. Matches any values that contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContains\",\n              \"description\": \"Doesn't contain constraint. Matches any values that don't contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContainsIgnoreCase\",\n              \"description\": \"Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCaseAndAccent\",\n              \"description\": \"Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerStatusFilter\",\n          \"description\": \"Customer status filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the customer status name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the customer status description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"Comparator for the customer status position.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the customer status type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"Comparator for the customer status color.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the customer status.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerStatusFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which needs to be matched by the customer status.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerStatusFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerTierFilter\",\n          \"description\": \"Customer tier filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"Comparator for the customer tier display name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the customer tier description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"Comparator for the customer tier position.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"Comparator for the customer tier color.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the customer tier.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerTierFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which needs to be matched by the customer tier.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerTierFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerNeedFilter\",\n          \"description\": \"Customer filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Comparator for the customer need priority.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the need's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"Filters that the need's issue must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"Filters that the need's comment must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"Filters that the need's customer must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCustomerFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the customer need.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the customer need.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CommentCollectionFilter\",\n          \"description\": \"Comment filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"Comparator for the comment's body.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the comment's creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"Filters that the comment's issue must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"Filters that the comment's project update must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectUpdateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the comment parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"Filters that the comment's document content must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDocumentContentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"[Internal] Filters that the comment's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"[Internal] Filters that the comment's initiative must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableInitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the comment's reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the comment's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some comments.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all comments.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CommentFilter\",\n          \"description\": \"Comment filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"Comparator for the comment's body.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the comment's creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"Filters that the comment's issue must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableIssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"Filters that the comment's project update must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectUpdateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"Filters that the comment parent must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"Filters that the comment's document content must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableDocumentContentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"[Internal] Filters that the comment's project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"[Internal] Filters that the comment's initiative must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableInitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the comment's reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the comment's customer needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ActivityCollectionFilter\",\n          \"description\": \"Activity collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the activity's user must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the activity.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ActivityCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the activity.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ActivityCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some activities.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ActivityFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all activities.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ActivityFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ActivityFilter\",\n          \"description\": \"Activity filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the activity's user must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the activity.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ActivityFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the activity.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ActivityFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueSuggestionCollectionFilter\",\n          \"description\": \"IssueSuggestion collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the suggestion type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"Comparator for the suggestion state.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedUser\",\n              \"description\": \"Filters that the suggested user must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedProject\",\n              \"description\": \"Filters that the suggested project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedTeam\",\n              \"description\": \"Filters that the suggested team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedLabel\",\n              \"description\": \"Filters that the suggested label must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the suggestion.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueSuggestionCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the suggestion.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueSuggestionCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some suggestions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueSuggestionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all suggestions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueSuggestionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueSuggestionFilter\",\n          \"description\": \"IssueSuggestion filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the suggestion type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"Comparator for the suggestion state.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedUser\",\n              \"description\": \"Filters that the suggested user must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedProject\",\n              \"description\": \"Filters that the suggested project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedTeam\",\n              \"description\": \"Filters that the suggested team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"suggestedLabel\",\n              \"description\": \"Filters that the suggested label must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueLabelFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the suggestion.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueSuggestionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the suggestion.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueSuggestionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableCycleFilter\",\n          \"description\": \"Cycle filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"Comparator for the cycle number.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the cycle name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"Comparator for the cycle start date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"Comparator for the cycle ends at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the cycle completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isActive\",\n              \"description\": \"Comparator for the filtering active cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isInCooldown\",\n              \"description\": \"Comparator for filtering for whether the cycle is currently in cooldown.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isNext\",\n              \"description\": \"Comparator for the filtering next cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isPrevious\",\n              \"description\": \"Comparator for the filtering previous cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isFuture\",\n              \"description\": \"Comparator for the filtering future cycles.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isPast\",\n              \"description\": \"Comparator for the filtering past cycles.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the cycles team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the cycles issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritedFromId\",\n              \"description\": \"Comparator for the inherited cycle ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Filter based on the existence of the relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the cycle.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableCycleFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the cycle.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NullableCycleFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"WorkflowStateFilter\",\n          \"description\": \"Workflow state filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the workflow state name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Comparator for the workflow state description.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"Comparator for the workflow state position.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the workflow state type. Possible values are \\\"triage\\\", \\\"backlog\\\", \\\"unstarted\\\", \\\"started\\\", \\\"completed\\\", \\\"canceled\\\", \\\"duplicate\\\".\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the workflow states team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the workflow states issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the workflow state.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"WorkflowStateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the workflow state.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"WorkflowStateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AttachmentCollectionFilter\",\n          \"description\": \"Attachment collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Comparator for the title.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"Comparator for the subtitle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Comparator for the url.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the attachments creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceType\",\n              \"description\": \"Comparator for the source type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SourceTypeComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the attachment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the attachment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some attachments.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"AttachmentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all attachments.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"AttachmentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SourceTypeComparator\",\n          \"description\": \"Comparator for `sourceType` field.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"eqIgnoreCase\",\n              \"description\": \"Equals case insensitive. Matches any values that matches the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neqIgnoreCase\",\n              \"description\": \"Not-equals case insensitive. Matches any values that don't match the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWith\",\n              \"description\": \"Starts with constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsWithIgnoreCase\",\n              \"description\": \"Starts with case insensitive constraint. Matches any values that start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notStartsWith\",\n              \"description\": \"Doesn't start with constraint. Matches any values that don't start with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsWith\",\n              \"description\": \"Ends with constraint. Matches any values that end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notEndsWith\",\n              \"description\": \"Doesn't end with constraint. Matches any values that don't end with the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contains\",\n              \"description\": \"Contains constraint. Matches any values that contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCase\",\n              \"description\": \"Contains case insensitive constraint. Matches any values that contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContains\",\n              \"description\": \"Doesn't contain constraint. Matches any values that don't contain the given string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notContainsIgnoreCase\",\n              \"description\": \"Doesn't contain case insensitive constraint. Matches any values that don't contain the given string case insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"containsIgnoreCaseAndAccent\",\n              \"description\": \"Contains case and accent insensitive constraint. Matches any values that contain the given string case and accent insensitive.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AttachmentFilter\",\n          \"description\": \"Attachment filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Comparator for the title.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"Comparator for the subtitle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableStringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Comparator for the url.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the attachments creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceType\",\n              \"description\": \"Comparator for the source type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SourceTypeComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the attachment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the attachment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlaStatusComparator\",\n          \"description\": \"Comparator for sla status.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"SlaStatus\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"SlaStatus\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"SlaStatus\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"SlaStatus\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"SlaStatus\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"Breached\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"HighRisk\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"MediumRisk\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"LowRisk\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Completed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Failed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseCollectionFilter\",\n          \"description\": \"[ALPHA] Release collection filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the release name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"Comparator for the release version.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipeline\",\n              \"description\": \"Filters that the release's pipeline must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleasePipelineFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stage\",\n              \"description\": \"Filters that the release's stage must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseStageFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseCollectionFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"some\",\n              \"description\": \"Filters that needs to be matched by some releases.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"every\",\n              \"description\": \"Filters that needs to be matched by all releases.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"length\",\n              \"description\": \"Comparator for the collection length.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleasePipelineFilter\",\n          \"description\": \"[ALPHA] Release pipeline filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the pipeline name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the pipeline.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleasePipelineFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the pipeline.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleasePipelineFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseStageFilter\",\n          \"description\": \"[ALPHA] Release stage filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the stage type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseStageTypeComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the stage name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the stage.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseStageFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the stage.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseStageFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseStageTypeComparator\",\n          \"description\": \"[ALPHA] Comparator for release stage type.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ReleaseStageType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ReleaseStageType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"ReleaseStageType\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"ReleaseStageType\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ReleaseStageType\",\n          \"description\": \"A type of release stage.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"planned\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"started\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceled\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseFilter\",\n          \"description\": \"[ALPHA] Release filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the release name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"Comparator for the release version.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipeline\",\n              \"description\": \"Filters that the release's pipeline must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleasePipelineFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stage\",\n              \"description\": \"Filters that the release's stage must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseStageFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NullableDurationComparator\",\n          \"description\": \"Nullable comparator for optional durations.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"eq\",\n              \"description\": \"Equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Duration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"neq\",\n              \"description\": \"Not-equals constraint.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Duration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"in\",\n              \"description\": \"In-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Duration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"nin\",\n              \"description\": \"Not-in-array constraint.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Duration\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"null\",\n              \"description\": \"Null constraint. Matches any non-null values if the given value is false, otherwise it matches null values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lt\",\n              \"description\": \"Less-than constraint. Matches any values that are less than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Duration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lte\",\n              \"description\": \"Less-than-or-equal constraint. Matches any values that are less than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Duration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gt\",\n              \"description\": \"Greater-than constraint. Matches any values that are greater than the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Duration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gte\",\n              \"description\": \"Greater-than-or-equal constraint. Matches any values that are greater than or equal to the given value.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Duration\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"Duration\",\n          \"description\": \"Represents a duration in ISO 8601 format. Accepts ISO 8601 duration strings or integers in milliseconds.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"Int\",\n          \"description\": \"The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PaginationOrderBy\",\n          \"description\": \"By which field should the pagination order by\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"createdAt\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"DocumentEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Document\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Document\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Document\",\n          \"description\": \"A document that can be attached to different entities.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The document title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"summary\",\n              \"description\": \"[Internal] A one-sentence AI-generated summary of the document content.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedBy\",\n              \"description\": \"The user who last updated the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"[Internal] The team that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": \"[Internal] The release that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Release\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"[Internal] The cycle that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The document's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"The last template that was applied to this document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hiddenAt\",\n              \"description\": \"The time at which the document was hidden. Null if the entity has not been hidden.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the document is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the resources list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the document.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The documents content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentState\",\n              \"description\": \"[Internal] The documents content as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContentId\",\n              \"description\": \"The ID of the document content associated with the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The canonical url for the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Project\",\n          \"description\": \"A project.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateReminderFrequency\",\n              \"description\": \"The frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"frequencyResolution\",\n              \"description\": \"The resolution of the reminder frequency.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"FrequencyResolutionType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateRemindersDay\",\n              \"description\": \"The day at which to prompt for updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateRemindersHour\",\n              \"description\": \"The hour at which to prompt for updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The project's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The project's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The project's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The project's color.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status that the project is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lead\",\n              \"description\": \"The project lead.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facets\",\n              \"description\": \"[Internal] Facets associated with the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Facet\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersPausedUntilAt\",\n              \"description\": \"The time until which project update reminders are paused.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The estimated start date of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startDateResolution\",\n              \"description\": \"The resolution of the project's start date.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the project's estimated completion date.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time at which the project was moved into started state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The time at which the project was moved into completed state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The time at which the project was moved into canceled state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"The time at which the project was automatically archived by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the project is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The sort order for the project within the organization, when ordered by priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"convertedFromIssue\",\n              \"description\": \"The project was created based on this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"The last template that was applied to this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastUpdate\",\n              \"description\": \"The last project update posted for this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"healthUpdatedAt\",\n              \"description\": \"The time at which the project health was updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCountHistory\",\n              \"description\": \"The total number of issues in the project after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedIssueCountHistory\",\n              \"description\": \"The number of completed issues in the project after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scopeHistory\",\n              \"description\": \"The total number of estimation points after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedScopeHistory\",\n              \"description\": \"The number of completed estimation points after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inProgressScopeHistory\",\n              \"description\": \"The number of in progress estimation points after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progressHistory\",\n              \"description\": \"[INTERNAL] The progress history of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentProgress\",\n              \"description\": \"[INTERNAL] The current progress of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackNewIssue\",\n              \"description\": \"Whether to send new issue notifications to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"slackIssueComments\",\n              \"description\": \"Whether to send new issue comment notifications to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"slackIssueStatuses\",\n              \"description\": \"Whether to send new issue status updates to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer is use\"\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"Id of the labels associated with this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorite\",\n              \"description\": \"The user's favorite associated with this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Favorite\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Project URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Initiatives that this project belongs to.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProjects\",\n              \"description\": \"Associations of this project to parent initiatives.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Teams associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned teams.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"members\",\n              \"description\": \"Users that are members of the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned users.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdates\",\n              \"description\": \"Project updates associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"Documents associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestones\",\n              \"description\": \"Milestones associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned milestones.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestoneConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalLinks\",\n              \"description\": \"External links associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Attachments associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectAttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"history\",\n              \"description\": \"History entries associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectHistoryConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Labels associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progress\",\n              \"description\": \"The overall progress of the project. This is the (completed estimate points + 0.25 * in progress estimate points) / total estimate points.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scope\",\n              \"description\": \"The overall scope (total estimate points) of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettings\",\n              \"description\": \"Settings for all integrations associated with that project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IntegrationsSettings\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The project's content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentState\",\n              \"description\": \"[Internal] The project's content as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"The content of the project description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the project overview.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relations\",\n              \"description\": \"Relations associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inverseRelations\",\n              \"description\": \"Inverse relations associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Customer needs associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"[DEPRECATED] The type of the state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use project.status instead\"\n            },\n            {\n              \"name\": \"priorityLabel\",\n              \"description\": \"The priority of the project as a label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"syncedWith\",\n              \"description\": \"The external services the project is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ExternalEntityInfo\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"FrequencyResolutionType\",\n          \"description\": \"By which resolution is frequency defined.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"daily\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"weekly\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"Day\",\n          \"description\": \"The day of the week.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"Sunday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Monday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Tuesday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Wednesday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Thursday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Friday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Saturday\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectStatus\",\n          \"description\": \"A project status.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the status as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the status in the workspace's project flow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the project status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ProjectStatusType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"indefinite\",\n              \"description\": \"Whether or not a project can be in this status indefinitely.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ProjectStatusType\",\n          \"description\": \"A type of project status.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"backlog\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"planned\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"started\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"paused\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceled\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"DateResolutionType\",\n          \"description\": \"By which resolution is a date defined.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"month\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"quarter\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"halfYear\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"year\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Template\",\n          \"description\": \"A template object used for creating entities faster.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The entity type this template is for.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the template.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Template description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the template.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the template icon.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templateData\",\n              \"description\": \"Template data.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSON\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the template.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedAt\",\n              \"description\": \"The date when the template was last applied.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the template is associated with. If null, the template is associated with a particular team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the template is associated with. If null, the template is global to the workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the template.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastUpdatedBy\",\n              \"description\": \"The user who last updated the template.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inheritedFrom\",\n              \"description\": \"The original template inherited from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hasFormFields\",\n              \"description\": \"[Internal] Whether the template has form fields\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"JSON\",\n          \"description\": \"The `JSON` scalar type represents arbitrary values as *stringified* JSON\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectUpdate\",\n          \"description\": \"An update associated with a project.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The update content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"editedAt\",\n              \"description\": \"The time the update was edited.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionData\",\n              \"description\": \"Emoji reaction summary, grouped by emoji type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the update as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The update's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the update is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the project at the time of the update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ProjectUpdateHealthType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who wrote the update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"infoSnapshot\",\n              \"description\": \"[Internal] Serialized JSON representing current state of the project properties when posting the project update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isDiffHidden\",\n              \"description\": \"Whether project update diff should be hidden.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL to the project update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isStale\",\n              \"description\": \"Whether the project update is stale.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"diff\",\n              \"description\": \"The diff between the current update and the previous one.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"diffMarkdown\",\n              \"description\": \"The diff between the current update and the previous one, formatted as markdown.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Reactions associated with the project update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Reaction\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the project update.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentCount\",\n              \"description\": \"Number of comments associated with the project update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ProjectUpdateHealthType\",\n          \"description\": \"The health type when the project update is created.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"onTrack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"atRisk\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"offTrack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Reaction\",\n          \"description\": \"A reaction associated with a comment or a project update.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emoji\",\n              \"description\": \"Name of the reaction's emoji.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that the reaction is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment that the reaction is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"The project update that the reaction is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"The initiative update that the reaction is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"post\",\n              \"description\": \"The post that the reaction is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Post\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that created the reaction.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUser\",\n              \"description\": \"The external user that created the reaction.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Comment\",\n          \"description\": \"A comment associated with an entity.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The comment content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The ID of the issue that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"The document content that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContentId\",\n              \"description\": \"The ID of the document content that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"The project update that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateId\",\n              \"description\": \"The ID of the project update that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"The initiative update that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateId\",\n              \"description\": \"The ID of the initiative update that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"post\",\n              \"description\": \"The post that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Post\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"[Internal] The project that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"[Internal] The ID of the project that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"[Internal] The initiative that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[Internal] The ID of the initiative that the comment is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent comment under which the current comment is nested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The ID of the parent comment under which the current comment is nested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resolvingUser\",\n              \"description\": \"The user that resolved the thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resolvedAt\",\n              \"description\": \"The time the resolvingUser resolved the thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resolvingComment\",\n              \"description\": \"The comment that resolved the thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resolvingCommentId\",\n              \"description\": \"The ID of the comment that resolved the thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who wrote the comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUser\",\n              \"description\": \"The external user who wrote the comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"editedAt\",\n              \"description\": \"The time user edited the comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The comment content as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"quotedText\",\n              \"description\": \"The text that this comment references. Only defined for inline comments.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionData\",\n              \"description\": \"Emoji reaction summary, grouped by emoji type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"threadSummary\",\n              \"description\": \"[Internal] A generated summary of the comment thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isArtificialAgentSessionRoot\",\n              \"description\": \"[Internal] Whether the comment is an artificial placeholder for an agent session thread created without a comment mention.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Comment's URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"The children of the comment.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSession\",\n              \"description\": \"Agent session associated with this comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AgentSession\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessions\",\n              \"description\": \"[Internal] Agent sessions associated with this comment.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"spawnedAgentSessions\",\n              \"description\": \"[Internal] Agent sessions spawned from this comment.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdIssues\",\n              \"description\": \"Issues created from this comment.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that created the comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"onBehalfOf\",\n              \"description\": \"[Internal] The user on whose behalf the comment was created, e.g. when the Linear assistant creates a comment for a user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalThread\",\n              \"description\": \"The external thread that the comment is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"SyncedExternalThread\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hideInLinear\",\n              \"description\": \"[Internal] Whether the comment should be hidden from Linear clients. This is typically used for bot comments that provide redundant information (e.g., Slack Asks confirmation messages).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Reactions associated with the comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Reaction\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"syncedWith\",\n              \"description\": \"The external services the comment is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ExternalEntityInfo\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentContent\",\n          \"description\": \"A document content for a project.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The document content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentState\",\n              \"description\": \"The document content state as a base64 encoded string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequest\",\n              \"description\": \"[Internal] The pull request that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"PullRequest\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"The project milestone that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"The document that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Document\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiPromptRules\",\n              \"description\": \"The AI prompt rules that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiPromptRules\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"welcomeMessage\",\n              \"description\": \"The welcome message that the content is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WelcomeMessage\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"restoredAt\",\n              \"description\": \"The time at which the document content was restored from a previous version.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PullRequest\",\n          \"description\": \"[Internal] A pull request in a version control system.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The pull request's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The title of the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"The number of the pull request in the version control system.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceBranch\",\n              \"description\": \"The source branch of the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetBranch\",\n              \"description\": \"The target branch of the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the pull request in the version control system.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"PullRequestStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mergeSettings\",\n              \"description\": \"Merge settings for this pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"PullRequestMergeSettings\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mergeCommit\",\n              \"description\": \"The merge commit created when the PR was merged.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"PullRequestCommit\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"checks\",\n              \"description\": \"[Internal] The checks associated with the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"PullRequestCheck\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commits\",\n              \"description\": \"[ALPHA] The commits associated with the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"PullRequestCommit\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"[Internal] The user who created the pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PullRequestStatus\",\n          \"description\": \"The status of a pull request.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"draft\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"open\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inReview\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"approved\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"merged\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"closed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PullRequestMergeSettings\",\n          \"description\": \"[Internal] Merge settings for a pull request\",\n          \"fields\": [\n            {\n              \"name\": \"isMergeQueueEnabled\",\n              \"description\": \"Whether merge queue is enabled for this repository.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"squashMergeAllowed\",\n              \"description\": \"Whether squash merge is allowed for this pull request's repository.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoMergeAllowed\",\n              \"description\": \"Whether auto-merge is allowed for the PR's repository.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rebaseMergeAllowed\",\n              \"description\": \"Whether rebase merge is allowed for pull requests PR's repository.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mergeCommitAllowed\",\n              \"description\": \"Whether merge commits are allowed for pull requests PR's repository.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deleteBranchOnMerge\",\n              \"description\": \"Whether the branch will be deleted when the pull request is merged.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mergeQueueMergeMethod\",\n              \"description\": \"The method used to merge a pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PullRequestMergeMethod\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PullRequestMergeMethod\",\n          \"description\": \"The method used to merge a pull request.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"MERGE\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"REBASE\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SQUASH\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PullRequestCommit\",\n          \"description\": \"[ALPHA] A pull request commit.\",\n          \"fields\": [\n            {\n              \"name\": \"sha\",\n              \"description\": \"The Git commit SHA.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"message\",\n              \"description\": \"The full commit message.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"committedAt\",\n              \"description\": \"The timestamp when the commit was committed (ISO 8601 string).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"additions\",\n              \"description\": \"Number of additions in this commit.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deletions\",\n              \"description\": \"Number of deletions in this commit.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"changedFiles\",\n              \"description\": \"The number of changed files if available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isMergeCommit\",\n              \"description\": \"Whether this commit has multiple parents.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"authorUserIds\",\n              \"description\": \"Linear user IDs for commit authors (includes co-authors).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"authorExternalUserIds\",\n              \"description\": \"External user IDs for commit authors (includes co-authors).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PullRequestCheck\",\n          \"description\": \"[ALPHA] A pull request check.\",\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the check.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowName\",\n              \"description\": \"The name of the workflow that triggered the check.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the check.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the check.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isRequired\",\n              \"description\": \"Whether the check is required.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The date/time at which when the check was started.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The date/time at which when the check was completed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Initiative\",\n          \"description\": \"An initiative to group projects.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateReminderFrequency\",\n              \"description\": \"The frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"frequencyResolution\",\n              \"description\": \"The resolution of the reminder frequency.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"FrequencyResolutionType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateRemindersDay\",\n              \"description\": \"The day at which to prompt for updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateRemindersHour\",\n              \"description\": \"The hour at which to prompt for updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The user who owns the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The initiative's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the initiative within the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The initiative's color.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the initiative is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facets\",\n              \"description\": \"[Internal] Facets associated with the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Facet\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the initiative's estimated completion date.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the initiative. One of Planned, Active, Completed\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"InitiativeStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastUpdate\",\n              \"description\": \"The last initiative update posted for this initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"healthUpdatedAt\",\n              \"description\": \"The time at which the initiative health was updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time at which the initiative was moved into active status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The time at which the initiative was moved into completed status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Initiative URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Projects associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"includeSubInitiatives\",\n                  \"description\": \"Whether to include projects from sub-initiatives. Defaults to true.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned projects.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned projects.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"ProjectSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"links\",\n              \"description\": \"Links associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettings\",\n              \"description\": \"Settings for all integrations associated with that initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IntegrationsSettings\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"history\",\n              \"description\": \"History entries associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeHistoryConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdates\",\n              \"description\": \"Initiative updates associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subInitiatives\",\n              \"description\": \"Sub-initiatives associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned sub-initiatives.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned initiatives.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"InitiativeSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentInitiative\",\n              \"description\": \"Parent initiative associated with the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentInitiatives\",\n              \"description\": \"[Internal] Parent initiatives associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned parent initiatives.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned initiatives.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"InitiativeSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The initiative's content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"The content of the initiative description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"Documents associated with the initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"InitiativeStatus\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"Planned\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Active\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Completed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeUpdate\",\n          \"description\": \"An initiative update.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The update content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"editedAt\",\n              \"description\": \"The time the update was edited.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionData\",\n              \"description\": \"Emoji reaction summary, grouped by emoji type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the update as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The update's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the update is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who wrote the update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health at the time of the update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"InitiativeUpdateHealthType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"infoSnapshot\",\n              \"description\": \"[Internal] Serialized JSON representing current state of the initiative properties when posting the initiative update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isDiffHidden\",\n              \"description\": \"Whether initiative update diff should be hidden.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL to the initiative update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isStale\",\n              \"description\": \"Whether the initiative update is stale.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"diff\",\n              \"description\": \"The diff between the current update and the previous one.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"diffMarkdown\",\n              \"description\": \"The diff between the current update and the previous one, formatted as markdown.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Reactions associated with the initiative update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Reaction\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the initiative update.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentCount\",\n              \"description\": \"Number of comments associated with the initiative update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"InitiativeUpdateHealthType\",\n          \"description\": \"The health type when the update is created.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"onTrack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"atRisk\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"offTrack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CommentConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CommentEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Comment\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CommentEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Comment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PageInfo\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"hasPreviousPage\",\n              \"description\": \"Indicates if there are more results when paginating backward.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hasNextPage\",\n              \"description\": \"Indicates if there are more results when paginating forward.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startCursor\",\n              \"description\": \"Cursor representing the first result in the paginated results.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endCursor\",\n              \"description\": \"Cursor representing the last result in the paginated results.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Project\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectSortInput\",\n          \"description\": \"Project sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"Sort by project name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectNameSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Sort by project status\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectStatusSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Sort by project priority\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectPrioritySort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manual\",\n              \"description\": \"Sort by manual order\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectManualSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Sort by project target date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TargetDateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"Sort by project start date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StartDateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Sort by project creation date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectCreatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Sort by project update date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Sort by project health status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectHealthSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lead\",\n              \"description\": \"Sort by project lead name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectLeadSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectNameSort\",\n          \"description\": \"Project name sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PaginationNulls\",\n          \"description\": \"How to treat NULL values, whether they should appear first or last\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"first\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"last\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PaginationSortOrder\",\n          \"description\": \"Whether to sort in ascending or descending order\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"Ascending\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Descending\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectStatusSort\",\n          \"description\": \"Project status sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectPrioritySort\",\n          \"description\": \"Project priority sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"noPriorityFirst\",\n              \"description\": \"Whether to consider no priority as the highest or lowest priority\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectManualSort\",\n          \"description\": \"Project manual order sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TargetDateSort\",\n          \"description\": \"Project target date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"StartDateSort\",\n          \"description\": \"Project start date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectCreatedAtSort\",\n          \"description\": \"Project creation date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdatedAtSort\",\n          \"description\": \"Project update date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectHealthSort\",\n          \"description\": \"Project health sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectLeadSort\",\n          \"description\": \"Project lead sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EntityExternalLinkConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"EntityExternalLinkEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"EntityExternalLink\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EntityExternalLinkEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLink\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EntityExternalLink\",\n          \"description\": \"An external link for an entity like initiative, etc...\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The link's URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The link's label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the resources list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the link.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the link is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationsSettings\",\n          \"description\": \"The configuration of all integrations for different entities.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the integration settings context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueCreated\",\n              \"description\": \"Whether to send a Slack message when a new issue is created for the project or the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use. Use `slackIssueAddedToView` instead.\"\n            },\n            {\n              \"name\": \"slackIssueNewComment\",\n              \"description\": \"Whether to send a Slack message when a comment is created on any of the project or team's issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueStatusChangedDone\",\n              \"description\": \"Whether to send a Slack message when any of the project or team's issues change to completed or cancelled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueAddedToView\",\n              \"description\": \"Whether to send a Slack message when an issue is added to the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueStatusChangedAll\",\n              \"description\": \"Whether to send a Slack message when any of the project or team's issues has a change in status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreated\",\n              \"description\": \"Whether to send a Slack message when a project update is created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreatedToTeam\",\n              \"description\": \"Whether to send a new project update to team Slack channels.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreatedToWorkspace\",\n              \"description\": \"Whether to send a new project update to workspace Slack channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackInitiativeUpdateCreated\",\n              \"description\": \"Whether to send a Slack message when a initiate update is created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueAddedToTriage\",\n              \"description\": \"Whether to send a Slack message when a new issue is added to triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueSlaHighRisk\",\n              \"description\": \"Whether to send a Slack message when an SLA is at high risk.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackIssueSlaBreached\",\n              \"description\": \"Whether to send a Slack message when an SLA is breached.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Team which those settings apply to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Project which those settings apply to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"Initiative which those settings apply to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ContextViewType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"activeIssues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activeCycle\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"upcomingCycle\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"backlog\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triage\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeHistoryConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeHistoryEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeHistory\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeHistoryEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeHistory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeHistory\",\n          \"description\": \"A initiative history containing relevant change events.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entries\",\n              \"description\": \"The events that happened while recording that history.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the history is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeUpdateConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeUpdateEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeUpdate\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeUpdateEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Initiative\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeSortInput\",\n          \"description\": \"Initiative sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"Sort by initiative name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeNameSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manual\",\n              \"description\": \"Sort by manual order.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeManualSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Sort by initiative update date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeUpdatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Sort by initiative creation date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCreatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"Sort by initiative target date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeTargetDateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"Sort by initiative health status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeHealthSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"healthUpdatedAt\",\n              \"description\": \"Sort by initiative health update date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeHealthUpdatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Sort by initiative owner name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeOwnerSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeNameSort\",\n          \"description\": \"Initiative name sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeManualSort\",\n          \"description\": \"Initiative manual sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdatedAtSort\",\n          \"description\": \"Initiative update date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeCreatedAtSort\",\n          \"description\": \"Initiative creation date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeTargetDateSort\",\n          \"description\": \"Initiative target date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeHealthSort\",\n          \"description\": \"Initiative health sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeHealthUpdatedAtSort\",\n          \"description\": \"Initiative health update date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeOwnerSort\",\n          \"description\": \"Initiative owner sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestone\",\n          \"description\": \"A milestone for a project.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the project milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"The content of the project milestone description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The planned completion date of the milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project of the milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progressHistory\",\n              \"description\": \"[Internal] The progress history of the project milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentProgress\",\n              \"description\": \"[Internal] The current progress of the project milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the milestone in relation to other milestones within a project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The project milestone's description in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the project milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ProjectMilestoneStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progress\",\n              \"description\": \"The progress % of the project milestone.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"descriptionState\",\n              \"description\": \"[Internal] The project milestone's description as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the project milestone.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ProjectMilestoneStatus\",\n          \"description\": \"The status of a project milestone.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"unstarted\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"next\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"overdue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"done\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiPromptRules\",\n          \"description\": \"AI prompt rules for a team.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedBy\",\n              \"description\": \"The user who last updated the AI prompt rules.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WelcomeMessage\",\n          \"description\": \"A welcome message for new users joining the workspace.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The title of the welcome message notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the welcome message is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedBy\",\n              \"description\": \"The user who last updated the welcome message.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Post\",\n          \"description\": \"[Internal] A generic post.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The update content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the post as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"writtenSummaryData\",\n              \"description\": \"[Internal] The written update data used to compose the written post.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"audioSummary\",\n              \"description\": \"The update content summarized for audio consumption.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The post's title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The post's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who wrote the post.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"editedAt\",\n              \"description\": \"The time the post was edited.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionData\",\n              \"description\": \"Emoji reaction summary, grouped by emoji type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ttlUrl\",\n              \"description\": \"A URL of the TTL (text-to-language) for the body.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that the post is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the post is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the post.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PostType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"evalLogId\",\n              \"description\": \"The log id of the ai response.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedSummaryScheduleAtCreate\",\n              \"description\": \"Schedule used to create a post summary.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FeedSummarySchedule\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PostType\",\n          \"description\": \"Type of Post\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"summary\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"update\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"FeedSummarySchedule\",\n          \"description\": \"Cadence to generate feed summary\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"daily\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"weekly\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"never\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalUser\",\n          \"description\": \"An external authenticated (e.g., through Slack) user which doesn't have a Linear account, but can create and update entities in Linear from the external system that authenticated them.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The external user's full name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The external user's display name. Unique within each organization. Can match the display name of an actual user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The external user's email address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"avatarUrl\",\n              \"description\": \"An URL to the external user's avatar image.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"Organization the external user belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastSeen\",\n              \"description\": \"The last time the external user was seen interacting with Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSession\",\n          \"description\": \"A session for agent activities and state management.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The human user responsible for the agent session. Null if the session was initiated via automation or by an agent user, with no responsible human user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"appUser\",\n              \"description\": \"The agent user that is associated with this agent session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment this agent session is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceComment\",\n              \"description\": \"The comment that this agent session was spawned from, if from a different thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue this agent session is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The current status of the agent session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentSessionStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time the agent session started.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endedAt\",\n              \"description\": \"The time the agent session ended.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dismissedAt\",\n              \"description\": \"The time the agent session was dismissed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dismissedBy\",\n              \"description\": \"The user who dismissed the agent session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activities\",\n              \"description\": \"Activities associated with this agent session.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned agent activities.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentActivityFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivityConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalLink\",\n              \"description\": \"The URL of an external agent-hosted page associated with this session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use externalUrls instead.\"\n            },\n            {\n              \"name\": \"summary\",\n              \"description\": \"A summary of the activities in this session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceMetadata\",\n              \"description\": \"Metadata about the external source that created this agent session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"plan\",\n              \"description\": \"A dynamically updated list of the agent's execution strategy.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"context\",\n              \"description\": \"Serialized JSON representing the contexts this session is related to, for direct chat sessions.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSON\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"[DEPRECATED] The type of the agent session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AgentSessionType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"This field is slated for removal.\"\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Agent session URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequests\",\n              \"description\": \"[Internal] Pull requests associated with this agent session.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionToPullRequestConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalLinks\",\n              \"description\": \"External links associated with this session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentSessionExternalLink\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUrls\",\n              \"description\": \"URLs of external resources associated with this session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSON\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use externalLinks instead.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AgentSessionStatus\",\n          \"description\": \"The status of an agent session.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"pending\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"complete\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"awaitingInput\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stale\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentActivityEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentActivity\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivity\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivity\",\n          \"description\": \"An activity within an agent context.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSession\",\n              \"description\": \"The agent session this activity belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSession\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The content of the activity\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"UNION\",\n                  \"name\": \"AgentActivityContent\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceComment\",\n              \"description\": \"The comment this activity is linked to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who created this agent activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceMetadata\",\n              \"description\": \"Metadata about the external source that created this agent activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"signal\",\n              \"description\": \"An optional modifier that provides additional instructions on how the activity should be interpreted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AgentActivitySignal\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ephemeral\",\n              \"description\": \"Whether the activity is ephemeral, and should disappear after the next agent activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextualMetadata\",\n              \"description\": \"[Internal] Metadata about user-provided contextual information for this agent activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"signalMetadata\",\n              \"description\": \"Metadata about this agent activity's signal.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"UNION\",\n          \"name\": \"AgentActivityContent\",\n          \"description\": \"Content for different types of agent activities.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivityThoughtContent\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivityActionContent\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivityResponseContent\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivityPromptContent\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivityErrorContent\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AgentActivityElicitationContent\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityThoughtContent\",\n          \"description\": \"Content for a thought activity.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The thought content in Markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The thought content as ProseMirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AgentActivityType\",\n          \"description\": \"The type of an agent activity.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"thought\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"action\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"response\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"elicitation\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"prompt\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityActionContent\",\n          \"description\": \"Content for an action activity (tool call or action).\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"action\",\n              \"description\": \"The action being performed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parameter\",\n              \"description\": \"The parameters for the action, e.g. a file path, a keyword, etc.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"result\",\n              \"description\": \"The result of the action in Markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resultData\",\n              \"description\": \"[Internal] The result content as ProseMirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityResponseContent\",\n          \"description\": \"Content for a response activity.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The response content in Markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The response content as ProseMirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityPromptContent\",\n          \"description\": \"Content for a prompt activity.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"A message requesting additional information or action from user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The prompt content as ProseMirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityErrorContent\",\n          \"description\": \"Content for an error activity.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The error message in Markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The error content as ProseMirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityElicitationContent\",\n          \"description\": \"Content for an elicitation activity.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The elicitation message in Markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The elicitation content as ProseMirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AgentActivitySignal\",\n          \"description\": \"A modifier that provides additional instructions on how the activity should be interpreted.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"stop\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"continue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"auth\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"select\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentActivityFilter\",\n          \"description\": \"Agent activity filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"agentSessionId\",\n              \"description\": \"Comparator for the agent session ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the agent activity's content type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceComment\",\n              \"description\": \"Filters that the source comment must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableCommentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the agent activity.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentActivityFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the agent activity.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentActivityFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AgentSessionType\",\n          \"description\": \"[DEPRECATED] The type of an agent session.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"commentThread\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionToPullRequestConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentSessionToPullRequestEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentSessionToPullRequest\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionToPullRequestEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionToPullRequest\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionToPullRequest\",\n          \"description\": \"Join table between agent sessions and pull requests.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequest\",\n              \"description\": \"The pull request that the agent session is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PullRequest\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSession\",\n              \"description\": \"The agent session that the pull request is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSession\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionExternalLink\",\n          \"description\": \"An external link associated with an agent session.\",\n          \"fields\": [\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the external resource.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"Label for the link.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentSessionEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AgentSession\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSession\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ActorBot\",\n          \"description\": \"A bot actor is an actor that is not a user, but an application or integration.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"ID\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of bot.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subType\",\n              \"description\": \"The sub type of the bot.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The display name of the bot.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userDisplayName\",\n              \"description\": \"The display name of the external user on behalf of which the bot acted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"avatarUrl\",\n              \"description\": \"A url pointing to the avatar representing this bot.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SyncedExternalThread\",\n          \"description\": \"A comment thread that is synced with an external source.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"ID\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the external source.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subType\",\n              \"description\": \"The sub type of the external source.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The display name of the source.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The external url of the thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isConnected\",\n              \"description\": \"Whether this thread is syncing with the external service.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isPersonalIntegrationConnected\",\n              \"description\": \"Whether the current user has the corresponding personal integration connected for the external service.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isPersonalIntegrationRequired\",\n              \"description\": \"Whether a connected personal integration is required to comment in this thread.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalEntityInfo\",\n          \"description\": \"Information about an external entity.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The id of the external entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"service\",\n              \"description\": \"The name of the service this entity is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ExternalSyncService\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Metadata about the external entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"UNION\",\n                \"name\": \"ExternalEntityInfoMetadata\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ExternalSyncService\",\n          \"description\": \"The service that syncs an external entity to Linear.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"jira\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"github\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"UNION\",\n          \"name\": \"ExternalEntityInfoMetadata\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ExternalEntityInfoGithubMetadata\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ExternalEntityInfoJiraMetadata\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ExternalEntitySlackMetadata\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalEntityInfoGithubMetadata\",\n          \"description\": \"Metadata about the external GitHub entity.\",\n          \"fields\": [\n            {\n              \"name\": \"repo\",\n              \"description\": \"The repository name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The owner of the repository.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"The number of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalEntityInfoJiraMetadata\",\n          \"description\": \"Metadata about the external Jira entity.\",\n          \"fields\": [\n            {\n              \"name\": \"issueKey\",\n              \"description\": \"The key of the Jira issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The id of the Jira project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueTypeId\",\n              \"description\": \"The id of the Jira issue type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalEntitySlackMetadata\",\n          \"description\": \"Metadata about the external Slack entity.\",\n          \"fields\": [\n            {\n              \"name\": \"isFromSlack\",\n              \"description\": \"Whether the entity originated from Slack (not Linear).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"channelId\",\n              \"description\": \"The id of the Slack channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"channelName\",\n              \"description\": \"The name of the Slack channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"messageUrl\",\n              \"description\": \"The URL of the Slack message.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Favorite\",\n          \"description\": \"User favorites presented in the sidebar.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the favorite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent folder of the favorite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Favorite\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"folderName\",\n              \"description\": \"The name of the folder. Only applies to favorites of type folder.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectTab\",\n              \"description\": \"The targeted tab of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectTab\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"predefinedViewType\",\n              \"description\": \"The type of favorited predefined view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeTab\",\n              \"description\": \"The targeted tab of the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeTab\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The owner of the favorite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the favorites list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Children of the favorite. Only applies to favorites of type folder.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FavoriteConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The favorited issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The favorited project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facet\",\n              \"description\": \"[INTERNAL] The favorited facet.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Facet\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectTeam\",\n              \"description\": \"[DEPRECATED] The favorited team of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The favorited cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The favorited custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"predefinedViewTeam\",\n              \"description\": \"The team of the favorited predefined view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"The favorited document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Document\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The favorited initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The favorited label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabel\",\n              \"description\": \"The favorited project label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The favorited user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The favorited customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dashboard\",\n              \"description\": \"The favorited dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Dashboard\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequest\",\n              \"description\": \"The favorited pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"PullRequest\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": \"[ALPHA] The favorited release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Release\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipeline\",\n              \"description\": \"[ALPHA] The favorited release pipeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ReleasePipeline\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"URL of the favorited entity. Folders return 'null' value.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Favorite's title text (name of the favorite'd object or folder).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"detail\",\n              \"description\": \"[Internal] Detail text for favorite's `title` (e.g. team's name for a project).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"[Internal] Returns the color of the favorite's icon. Unavailable for avatars and views with fixed icons (e.g. cycle).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"[Internal] Name of the favorite's icon. Unavailable for standard views, issues, and avatars\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ProjectTab\",\n          \"description\": \"Different tabs available inside a project.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"customers\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updates\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"InitiativeTab\",\n          \"description\": \"Different tabs available inside an initiative.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"overview\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updates\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FavoriteConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"FavoriteEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Favorite\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FavoriteEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Favorite\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomView\",\n          \"description\": \"A custom view that has been saved by a user.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon of the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization of the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The user who owns the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedBy\",\n              \"description\": \"The user who last updated the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"filters\",\n              \"description\": \"The filters applied to issues in the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Will be replaced by `filterData` in a future update\"\n            },\n            {\n              \"name\": \"filterData\",\n              \"description\": \"The filter applied to issues in the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFilterData\",\n              \"description\": \"The filter applied to projects in the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFilterData\",\n              \"description\": \"The filter applied to initiatives in the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedItemFilterData\",\n              \"description\": \"The filter applied to feed items in the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"shared\",\n              \"description\": \"Whether the custom view is shared with everyone in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The custom view's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"modelName\",\n              \"description\": \"The model name of the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facet\",\n              \"description\": \"[INTERNAL] The facet associated with the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Facet\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Projects associated with the custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"includeSubTeams\",\n                  \"description\": \"Include projects from sub-teams when the custom view is associated with a team.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"true\"\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned projects.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned projects.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"ProjectSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"includeSubTeams\",\n                  \"description\": \"Include issues from sub-teams when the custom view is associated with a team.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned issues.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"IssueSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updates\",\n              \"description\": \"Feed items associated with the custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"includeSubTeams\",\n                  \"description\": \"Include updates from sub-teams when the custom view is associated with a team.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned feed items.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"FeedItemFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FeedItemConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userViewPreferences\",\n              \"description\": \"The current users view preferences for this custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ViewPreferences\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationViewPreferences\",\n              \"description\": \"The organizations default view preferences for this custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ViewPreferences\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewPreferencesValues\",\n              \"description\": \"The calculated view preferences values for this custom view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ViewPreferencesValues\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Initiatives associated with the custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned initiatives.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueSortInput\",\n          \"description\": \"Issue sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"priority\",\n              \"description\": \"Sort by priority\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PrioritySort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"Sort by estimate\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"EstimateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Sort by issue title\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TitleSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"Sort by label\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"LabelSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelGroup\",\n              \"description\": \"Sort by label group\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"LabelGroupSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaStatus\",\n              \"description\": \"Sort by SLA status\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlaStatusSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Sort by issue creation date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CreatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Sort by issue update date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UpdatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Sort by issue completion date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CompletedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"Sort by issue due date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DueDateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accumulatedStateUpdatedAt\",\n              \"description\": \"[Internal] Sort by the accumulated time in the current workflow state\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TimeInStatusSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"Sort by Cycle start date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CycleSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"milestone\",\n              \"description\": \"Sort by Project Milestone target date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"MilestoneSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": \"Sort by assignee name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"AssigneeSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"delegate\",\n              \"description\": \"Sort by delegate name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DelegateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Sort by Project name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Sort by Team name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manual\",\n              \"description\": \"Sort by manual order\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ManualSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"workflowState\",\n              \"description\": \"Sort by workflow state type\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"WorkflowStateSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"Sort by customer name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerRevenue\",\n              \"description\": \"Sort by customer revenue\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerRevenueSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerCount\",\n              \"description\": \"Sort by number of customers associated with the issue\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerCountSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerImportantCount\",\n              \"description\": \"Sort by number of important customers associated with the issue\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerImportantCountSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"rootIssue\",\n              \"description\": \"Sort by the root issue\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RootIssueSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"linkCount\",\n              \"description\": \"[ALPHA] Sort by number of links associated with the issue\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"LinkCountSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"PrioritySort\",\n          \"description\": \"Issue priority sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"noPriorityFirst\",\n              \"description\": \"Whether to consider no priority as the highest or lowest priority\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EstimateSort\",\n          \"description\": \"Issue estimate sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TitleSort\",\n          \"description\": \"Issue title sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"LabelSort\",\n          \"description\": \"Issue label sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"LabelGroupSort\",\n          \"description\": \"Issue label-group sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelGroupId\",\n              \"description\": \"The label-group id to sort by\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlaStatusSort\",\n          \"description\": \"Issue SLA status sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CreatedAtSort\",\n          \"description\": \"Issue creation date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UpdatedAtSort\",\n          \"description\": \"Issue update date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CompletedAtSort\",\n          \"description\": \"Issue completion date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DueDateSort\",\n          \"description\": \"Issue due date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TimeInStatusSort\",\n          \"description\": \"Issue time in status sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CycleSort\",\n          \"description\": \"Issue cycle sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"currentCycleFirst\",\n              \"description\": \"When set to true, cycles will be ordered with a custom order. Current cycle comes first, followed by upcoming cycles in ASC order, followed by previous cycles in DESC order.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"MilestoneSort\",\n          \"description\": \"Issue project milestone options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AssigneeSort\",\n          \"description\": \"Issue assignee sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DelegateSort\",\n          \"description\": \"Issue delegate sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectSort\",\n          \"description\": \"Issue project sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamSort\",\n          \"description\": \"Issue team sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ManualSort\",\n          \"description\": \"Issue manual sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"WorkflowStateSort\",\n          \"description\": \"Issue workflow state sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"closedIssuesOrderedByRecency\",\n              \"description\": \"Whether to sort closed issues by recency\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerSort\",\n          \"description\": \"Issue customer sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerRevenueSort\",\n          \"description\": \"Issue customer revenue sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerCountSort\",\n          \"description\": \"Issue customer count sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerImportantCountSort\",\n          \"description\": \"Issue customer important count sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RootIssueSort\",\n          \"description\": \"Issue root-issue sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sort\",\n              \"description\": \"The sort to apply to the root issues\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"IssueSortInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"LinkCountSort\",\n          \"description\": \"[ALPHA] Issue link count sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FeedItemConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"FeedItemEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"FeedItem\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FeedItemEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FeedItem\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FeedItem\",\n          \"description\": \"[Internal] An item in a users feed.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that will see this feed item.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that will see this feed item.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that will see this feed item.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"The project update that is in the feed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"The initiative update that is in the feed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"post\",\n              \"description\": \"The post that is in the feed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Post\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"FeedItemFilter\",\n          \"description\": \"Feed item filtering options\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"author\",\n              \"description\": \"Filters that the feed item author must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateType\",\n              \"description\": \"Comparator for the update type: initiative, project, team\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateHealth\",\n              \"description\": \"Comparator for the project or initiative update health: onTrack, atRisk, offTrack\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"Filters that the feed item's project update must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectUpdateFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedInitiatives\",\n              \"description\": \"Filters that the related feed item initiatives must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedTeams\",\n              \"description\": \"Filters that the related feed item team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the feed item.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"FeedItemFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the feed item.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"FeedItemFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdateFilter\",\n          \"description\": \"Options for filtering project updates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the project update creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"Filters that the project update project must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the project updates reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the ProjectUpdate.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the ProjectUpdate.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ViewPreferences\",\n          \"description\": \"View preferences.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The view preference type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewType\",\n              \"description\": \"The view type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"preferences\",\n              \"description\": \"The view preferences\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ViewPreferencesValues\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ViewPreferencesValues\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"layout\",\n              \"description\": \"The issue layout type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewOrdering\",\n              \"description\": \"The issue ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewOrderingDirection\",\n              \"description\": \"The direction of the issue ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueGrouping\",\n              \"description\": \"The issue grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueSubGrouping\",\n              \"description\": \"The issue sub-grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueNesting\",\n              \"description\": \"How sub-issues should be nested and displayed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showCompletedIssues\",\n              \"description\": \"Whether completed issues are shown and for how long.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showParents\",\n              \"description\": \"Whether to show parent issues for sub-issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showSubIssues\",\n              \"description\": \"Whether to show sub-issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showSubTeamIssues\",\n              \"description\": \"Whether to show sub-team issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showSupervisedIssues\",\n              \"description\": \"Whether to show supervised issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showTriageIssues\",\n              \"description\": \"Whether to show triage issues.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showSnoozedItems\",\n              \"description\": \"Whether to show snoozed items.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showOnlySnoozedItems\",\n              \"description\": \"Whether to show only snoozed items.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showArchivedItems\",\n              \"description\": \"Whether to show archived items.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showReadItems\",\n              \"description\": \"Whether to show read items.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showUnreadItemsFirst\",\n              \"description\": \"Whether to show unread items first.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"closedIssuesOrderedByRecency\",\n              \"description\": \"Whether issues in closed columns should be ordered by recency.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showEmptyGroups\",\n              \"description\": \"Whether to show empty groups.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showEmptyGroupsBoard\",\n              \"description\": \"Whether to show empty groups on the board layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showEmptyGroupsList\",\n              \"description\": \"Whether to show empty groups on the list layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showEmptySubGroups\",\n              \"description\": \"Whether to show empty sub-groups.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showEmptySubGroupsBoard\",\n              \"description\": \"Whether to show empty sub-groups on the board layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showEmptySubGroupsList\",\n              \"description\": \"Whether to show empty sub-groups on the list layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueGroupingLabelGroupId\",\n              \"description\": \"The label group ID used for issue grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueSubGroupingLabelGroupId\",\n              \"description\": \"The label group ID used for issue sub-grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldId\",\n              \"description\": \"Whether to show the issue identifier field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldStatus\",\n              \"description\": \"Whether to show the issue status field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldPriority\",\n              \"description\": \"Whether to show the issue priority field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldDateCreated\",\n              \"description\": \"Whether to show the issue creation date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldDateUpdated\",\n              \"description\": \"Whether to show the issue updated date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldDateArchived\",\n              \"description\": \"Whether to show the issue archived date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldDateMyActivity\",\n              \"description\": \"Whether to show the issue last activity date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldAssignee\",\n              \"description\": \"Whether to show the issue assignee field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldEstimate\",\n              \"description\": \"Whether to show the issue estimate field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldPullRequests\",\n              \"description\": \"Whether to show the pull requests field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldPreviewLinks\",\n              \"description\": \"Whether to show preview links.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldSentryIssues\",\n              \"description\": \"Whether to show the Sentry issues field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldDueDate\",\n              \"description\": \"Whether to show the due date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldLinkCount\",\n              \"description\": \"Whether to show the link count field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldCustomerCount\",\n              \"description\": \"Whether to show the customer request count field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldCustomerRevenue\",\n              \"description\": \"Whether to show the customer revenue field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldSla\",\n              \"description\": \"Whether to show the SLA field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldLabels\",\n              \"description\": \"Whether to show the labels field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldProject\",\n              \"description\": \"Whether to show the project field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldCycle\",\n              \"description\": \"Whether to show the cycle field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldMilestone\",\n              \"description\": \"Whether to show the milestone field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldRelease\",\n              \"description\": \"Whether to show the release field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fieldTimeInCurrentStatus\",\n              \"description\": \"Whether to show the time in current status field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hiddenColumns\",\n              \"description\": \"List of column model IDs which should be hidden on a board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hiddenRows\",\n              \"description\": \"List of row model IDs which should be hidden on a board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLayout\",\n              \"description\": \"The project layout type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectViewOrdering\",\n              \"description\": \"The project ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectGrouping\",\n              \"description\": \"The project grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectSubGrouping\",\n              \"description\": \"The project sub-grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectGroupOrdering\",\n              \"description\": \"The ordering of project groups.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectGroupingDateResolution\",\n              \"description\": \"The date resolution when grouping projects by date.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showCompletedProjects\",\n              \"description\": \"Whether completed projects are shown and for how long.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectGroupingLabelGroupId\",\n              \"description\": \"The label group ID used for project grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectSubGroupingLabelGroupId\",\n              \"description\": \"The label group ID used for project sub-grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabelGroupColumns\",\n              \"description\": \"The project label group columns configuration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ViewPreferencesProjectLabelGroupColumn\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showSubTeamProjects\",\n              \"description\": \"Whether to show sub-team projects.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showSubInitiativeProjects\",\n              \"description\": \"Whether to show sub-initiative projects.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptyGroups\",\n              \"description\": \"How to show empty project groups.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptyGroupsList\",\n              \"description\": \"How to show empty project groups on the list layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptyGroupsTimeline\",\n              \"description\": \"How to show empty project groups on the timeline layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptyGroupsBoard\",\n              \"description\": \"How to show empty project groups on the board layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptySubGroups\",\n              \"description\": \"How to show empty project sub-groups.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptySubGroupsList\",\n              \"description\": \"How to show empty project sub-groups on the list layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptySubGroupsTimeline\",\n              \"description\": \"How to show empty project sub-groups on the timeline layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectShowEmptySubGroupsBoard\",\n              \"description\": \"How to show empty project sub-groups on the board layout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldStatus\",\n              \"description\": \"Whether to show the project status field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldPriority\",\n              \"description\": \"Whether to show the project priority field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldLead\",\n              \"description\": \"Whether to show the project lead field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldHealth\",\n              \"description\": \"Whether to show the project health field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldMembers\",\n              \"description\": \"Whether to show the project members field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldStartDate\",\n              \"description\": \"Whether to show the project start date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldTargetDate\",\n              \"description\": \"Whether to show the project target date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldTeams\",\n              \"description\": \"Whether to show the project teams field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRoadmaps\",\n              \"description\": \"Whether to show the project roadmaps field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldInitiatives\",\n              \"description\": \"Whether to show the project initiatives field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldMilestone\",\n              \"description\": \"Whether to show the project milestone field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldDescription\",\n              \"description\": \"Whether to show the project description field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldPredictions\",\n              \"description\": \"Whether to show the project predictions field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRelations\",\n              \"description\": \"Whether to show the project relations field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRolloutStage\",\n              \"description\": \"Whether to show the project rollout stage field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldActivity\",\n              \"description\": \"Whether to show the project activity field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldCustomerCount\",\n              \"description\": \"Whether to show the project customer count field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldCustomerRevenue\",\n              \"description\": \"Whether to show the project customer revenue field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldLabels\",\n              \"description\": \"Whether to show the project labels field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldDateCreated\",\n              \"description\": \"Whether to show the project creation date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldDateUpdated\",\n              \"description\": \"Whether to show the project updated date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldDateCompleted\",\n              \"description\": \"Whether to show the project completion date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldStatusTimeline\",\n              \"description\": \"Whether to show the project status field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldLeadTimeline\",\n              \"description\": \"Whether to show the project lead field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldHealthTimeline\",\n              \"description\": \"Whether to show the project health field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldMilestoneTimeline\",\n              \"description\": \"Whether to show the project milestone field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldPredictionsTimeline\",\n              \"description\": \"Whether to show the project predictions field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRelationsTimeline\",\n              \"description\": \"Whether to show the project relations field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldDescriptionBoard\",\n              \"description\": \"Whether to show the project description field on the board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldMembersBoard\",\n              \"description\": \"Whether to show the project members field on the board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldMembersList\",\n              \"description\": \"Whether to show the project members field on the list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldMembersTimeline\",\n              \"description\": \"Whether to show the project members field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRoadmapsBoard\",\n              \"description\": \"Whether to show the project roadmaps field on the board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRoadmapsList\",\n              \"description\": \"Whether to show the project roadmaps field on the list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldRoadmapsTimeline\",\n              \"description\": \"Whether to show the project roadmaps field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldTeamsBoard\",\n              \"description\": \"Whether to show the project teams field on the board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldTeamsList\",\n              \"description\": \"Whether to show the project teams field on the list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFieldTeamsTimeline\",\n              \"description\": \"Whether to show the project teams field on the timeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectZoomLevel\",\n              \"description\": \"The zoom level for the timeline view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use timelineZoomScale instead.\"\n            },\n            {\n              \"name\": \"timelineZoomScale\",\n              \"description\": \"The zoom scale for the timeline view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timelineChronologyShowCycleTeamIds\",\n              \"description\": \"Selected team IDs to show cycles for in timeline chronology bar.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timelineChronologyShowWeekNumbers\",\n              \"description\": \"Whether to show week numbers in timeline chronology bar.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeGrouping\",\n              \"description\": \"The initiative grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativesViewOrdering\",\n              \"description\": \"The initiative ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldProjects\",\n              \"description\": \"Whether to show the initiative projects field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldTeams\",\n              \"description\": \"Whether to show the initiative teams field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldDescription\",\n              \"description\": \"Whether to show the initiative description field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldOwner\",\n              \"description\": \"Whether to show the initiative owner field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldStartDate\",\n              \"description\": \"Whether to show the initiative start date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldTargetDate\",\n              \"description\": \"Whether to show the initiative target date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldDateCompleted\",\n              \"description\": \"Whether to show the initiative completed date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldDateUpdated\",\n              \"description\": \"Whether to show the initiative updated date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldDateCreated\",\n              \"description\": \"Whether to show the initiative created date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldActivity\",\n              \"description\": \"Whether to show the initiative activity field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldInitiativeHealth\",\n              \"description\": \"Whether to show the initiative health field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeFieldHealth\",\n              \"description\": \"Whether to show the initiative active projects health field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showNestedInitiatives\",\n              \"description\": \"Whether to show sub-initiatives nested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customersViewOrdering\",\n              \"description\": \"The customers view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldRequestCount\",\n              \"description\": \"Whether to show the customer request count field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldDomains\",\n              \"description\": \"Whether to show the customer domains field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldOwner\",\n              \"description\": \"Whether to show the customer owner field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldRevenue\",\n              \"description\": \"Whether to show the customer revenue field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldSize\",\n              \"description\": \"Whether to show the customer size field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldSource\",\n              \"description\": \"Whether to show the customer source field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldStatus\",\n              \"description\": \"Whether to show the customer status field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerFieldTier\",\n              \"description\": \"Whether to show the customer tier field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsViewGrouping\",\n              \"description\": \"The customer page needs view grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsViewOrdering\",\n              \"description\": \"The customer page needs view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsShowImportantFirst\",\n              \"description\": \"Whether to show important customer needs first.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsShowCompletedIssuesAndProjects\",\n              \"description\": \"Whether to show completed issues and projects in the customer page.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsFieldIssueIdentifier\",\n              \"description\": \"Whether to show the issue identifier field in the customer page.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsFieldIssuePriority\",\n              \"description\": \"Whether to show the issue priority field in the customer page.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsFieldIssueStatus\",\n              \"description\": \"Whether to show the issue status field in the customer page.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerPageNeedsFieldIssueTargetDueDate\",\n              \"description\": \"Whether to show the issue due date field in the customer page.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"embeddedCustomerNeedsViewOrdering\",\n              \"description\": \"The embedded customer needs view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"embeddedCustomerNeedsShowImportantFirst\",\n              \"description\": \"Whether to show important embedded customer needs first.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCustomerNeedsViewGrouping\",\n              \"description\": \"The project customer needs view grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCustomerNeedsViewOrdering\",\n              \"description\": \"The project customer needs view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCustomerNeedsShowImportantFirst\",\n              \"description\": \"Whether to show important project customer needs first.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCustomerNeedsShowCompletedIssuesLast\",\n              \"description\": \"Whether to show completed issues last in project customer needs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamViewOrdering\",\n              \"description\": \"The team view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldIdentifier\",\n              \"description\": \"Whether to show the team identifier field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldMembership\",\n              \"description\": \"Whether to show the team membership field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldOwner\",\n              \"description\": \"Whether to show the team owner field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldMembers\",\n              \"description\": \"Whether to show the team members field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldProjects\",\n              \"description\": \"Whether to show the team projects field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldCycle\",\n              \"description\": \"Whether to show the team cycle field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldDateCreated\",\n              \"description\": \"Whether to show the team creation date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamFieldDateUpdated\",\n              \"description\": \"Whether to show the team updated date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewsOrdering\",\n              \"description\": \"The custom views ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewFieldOwner\",\n              \"description\": \"Whether to show the custom view owner field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewFieldVisibility\",\n              \"description\": \"Whether to show the custom view visibility field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewFieldDateCreated\",\n              \"description\": \"Whether to show the custom view creation date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewFieldDateUpdated\",\n              \"description\": \"Whether to show the custom view updated date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dashboardsOrdering\",\n              \"description\": \"The dashboards ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dashboardFieldOwner\",\n              \"description\": \"Whether to show the dashboard owner field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dashboardFieldDateCreated\",\n              \"description\": \"Whether to show the dashboard creation date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dashboardFieldDateUpdated\",\n              \"description\": \"Whether to show the dashboard updated date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workspaceMembersViewOrdering\",\n              \"description\": \"The workspace members view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"memberFieldStatus\",\n              \"description\": \"Whether to show the member status field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"memberFieldJoined\",\n              \"description\": \"Whether to show the member joined date field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"memberFieldTeams\",\n              \"description\": \"Whether to show the member teams field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelinesViewOrdering\",\n              \"description\": \"The release pipelines view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineFieldType\",\n              \"description\": \"Whether to show the type field for release pipelines.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineFieldReleases\",\n              \"description\": \"Whether to show the releases field for release pipelines.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineFieldLatestRelease\",\n              \"description\": \"Whether to show the latest release field for release pipelines.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scheduledPipelineReleasesViewOrdering\",\n              \"description\": \"The scheduled pipeline releases view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scheduledPipelineReleaseFieldStage\",\n              \"description\": \"Whether to show the stage field for scheduled pipeline releases.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scheduledPipelineReleaseFieldReleaseDate\",\n              \"description\": \"Whether to show the release date field for scheduled pipeline releases.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"searchViewOrdering\",\n              \"description\": \"The search view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"searchResultType\",\n              \"description\": \"The search result type filter.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxViewOrdering\",\n              \"description\": \"The inbox view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageViewOrdering\",\n              \"description\": \"The triage view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"focusViewGrouping\",\n              \"description\": \"The focus view grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"focusViewOrdering\",\n              \"description\": \"The focus view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"focusViewOrderingDirection\",\n              \"description\": \"The focus view ordering direction.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewGrouping\",\n              \"description\": \"The review grouping.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewViewOrdering\",\n              \"description\": \"The review view ordering.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showCompletedReviews\",\n              \"description\": \"Whether completed reviews are shown and for how long.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showDraftReviews\",\n              \"description\": \"Whether to show draft reviews.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewFieldAvatar\",\n              \"description\": \"Whether to show the review avatar field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewFieldPreviewLinks\",\n              \"description\": \"Whether to show the review preview links field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewFieldRepository\",\n              \"description\": \"Whether to show the review repository field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewFieldIdentifier\",\n              \"description\": \"Whether to show the review identifier field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviewFieldChecks\",\n              \"description\": \"Whether to show the review checks field.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showCompletedAgentSessions\",\n              \"description\": \"Whether completed agent sessions are shown and for how long.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ViewPreferencesProjectLabelGroupColumn\",\n          \"description\": \"A label group column configuration for the project list view.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier of the label group.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the label group column is active.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueLabel\",\n          \"description\": \"Labels that can be associated with issues.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The label's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The label's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The label's color as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Whether the label is a group.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedAt\",\n              \"description\": \"The date when the label was last applied to an issue or project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"[Internal] When the label was retired.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Workspace labels are identified by their team being null.\"\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the label is associated with. If null, the label is associated with the global workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"retiredBy\",\n              \"description\": \"The user who retired the label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inheritedFrom\",\n              \"description\": \"The original label inherited from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the label.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Children of the label.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issue labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueLabelConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueLabelEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueLabel\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueLabelEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectLabel\",\n          \"description\": \"Labels that can be associated with projects.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The label's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The label's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The label's color as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Whether the label is a group.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedAt\",\n              \"description\": \"The date when the label was last applied to an issue or project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"[Internal] When the label was retired.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"retiredBy\",\n              \"description\": \"The user who retired the label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Projects associated with the label.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned projects.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned projects.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"ProjectSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Children of the label.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectLabelConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectLabelEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectLabel\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectLabelEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Customer\",\n          \"description\": \"A customer whose needs will be tied to issues or projects.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The customer's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The customer's logo URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"domains\",\n              \"description\": \"The domains associated with this customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalIds\",\n              \"description\": \"The ids of the customers in external systems.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackChannelId\",\n              \"description\": \"The ID of the Slack channel used to interact with the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The user who owns the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The current status of the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"The annual revenue generated by the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"The size of the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tier\",\n              \"description\": \"The tier of the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomerTier\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"approximateNeedCount\",\n              \"description\": \"The approximate number of needs of the customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The customer's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mainSourceId\",\n              \"description\": \"The ID of the main source, when a customer has multiple sources. Must be one of externalIds.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Customer needs associated with this customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerNeed\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that manages the Customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"URL of the customer in Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerStatus\",\n          \"description\": \"A customer status.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the status as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the status in the workspace's customers flow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the customer status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"CustomerStatusType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Customer statuses are no longer grouped by type.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"CustomerStatusType\",\n          \"description\": \"[DEPRECATED] A type of customer status.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"active\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inactive\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerTier\",\n          \"description\": \"A customer tier.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the tier as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the tier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the tier in the workspace's customers flow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the tier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeed\",\n          \"description\": \"A customer need, expressed through a reference to an issue, project, or comment.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer that this need is attached to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue this need is referencing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project this need is referencing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment this need is referencing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachment\",\n              \"description\": \"The attachment this need is referencing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Attachment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectAttachment\",\n              \"description\": \"The project attachment this need is referencing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectAttachment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Whether the customer need is important or not. 0 = Not important, 1 = Important.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The need content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the need as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The creator of the customer need.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"originalIssue\",\n              \"description\": \"The issue this customer need was originally created on. Will be undefined if the customer need hasn't been moved.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the underlying attachment, if any\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Attachment\",\n          \"description\": \"Issue attachment (e.g. support ticket, pull request).\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Content for the title line in the Linear attachment widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"Content for the subtitle line in the Linear attachment widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Location of the attachment which is also used as an identifier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The creator of the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserCreator\",\n              \"description\": \"The non-Linear user who created the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Custom metadata related to the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"source\",\n              \"description\": \"Information about the source which created the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceType\",\n              \"description\": \"An accessor helper to source.type, defines the source type of the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupBySource\",\n              \"description\": \"Indicates if attachments for the same source application should be grouped in the Linear UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"originalIssue\",\n              \"description\": \"The issue this attachment was originally created on. Will be undefined if the attachment hasn't been moved.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue this attachment belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The body data of the attachment, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectAttachment\",\n          \"description\": \"Project attachment\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"Title of the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"Optional subtitle of the attachment\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"URL of the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The creator of the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Custom metadata related to the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"source\",\n              \"description\": \"Information about the external source which created the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceType\",\n              \"description\": \"An accessor helper to source.type, defines the source type of the attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Integration\",\n          \"description\": \"An integration with an external service.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"service\",\n              \"description\": \"The integration's type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the integration is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the integration is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user that added the integration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Dashboard\",\n          \"description\": \"[Internal] A dashboard, usually a collection of widgets to display several insights at once.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The dashboard's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon of the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the dashboard within the organization or its team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"shared\",\n              \"description\": \"Whether the dashboard is shared with everyone in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization of the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedBy\",\n              \"description\": \"The user who last updated the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The owner of the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueFilter\",\n              \"description\": \"The filter applied to all dashboard widgets showing issues data.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFilter\",\n              \"description\": \"The filter applied to all dashboard widgets showing projects data.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"widgets\",\n              \"description\": \"The widgets on the dashboard.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Release\",\n          \"description\": \"[Internal] A release.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The release's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pipeline\",\n              \"description\": \"The pipeline this release belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipeline\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stage\",\n              \"description\": \"The current stage of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStage\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The release's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The estimated start date of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time at which the release was started.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The time at which the release was completed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The time at which the release was canceled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the release is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progressHistory\",\n              \"description\": \"[Internal] The progress history of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentProgress\",\n              \"description\": \"[Internal] The current progress of the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Release URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"[Internal] Documents associated with the release.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"links\",\n              \"description\": \"[Internal] Links associated with the release.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleasePipeline\",\n          \"description\": \"[Internal] A release pipeline.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the pipeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The pipeline's unique slug identifier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the pipeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ReleasePipelineType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"includePathPatterns\",\n              \"description\": \"Glob patterns to include commits affecting matching file paths.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"approximateReleaseCount\",\n              \"description\": \"[ALPHA] The number of non-archived releases in this pipeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] Release pipeline URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stages\",\n              \"description\": \"[ALPHA] Stages associated with this pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStageConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releases\",\n              \"description\": \"[ALPHA] Releases associated with this pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ReleasePipelineType\",\n          \"description\": \"A type of release pipeline.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"continuous\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scheduled\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseStageConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ReleaseStageEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ReleaseStage\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseStageEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStage\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseStage\",\n          \"description\": \"[Internal] A release stage.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the stage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the stage as a HEX string.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the stage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ReleaseStageType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the stage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"frozen\",\n              \"description\": \"Whether this stage is frozen. Only applicable to started type stages.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pipeline\",\n              \"description\": \"The pipeline this stage belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipeline\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releases\",\n              \"description\": \"[ALPHA] Releases associated with this stage.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ReleaseEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Release\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Release\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeToProjectConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeToProjectEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeToProject\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeToProjectEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeToProject\",\n          \"description\": \"Join table between projects and initiatives.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the initiative is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the project is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the project within the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TeamEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Team\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"UserEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"User\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectUpdateConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectUpdateEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectUpdate\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectUpdateEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestoneConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectMilestoneEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectMilestone\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestoneEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestone\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectAttachmentConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectAttachmentEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectAttachment\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectAttachmentEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectAttachment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectHistoryConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectHistoryEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectHistory\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectHistoryEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectHistory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectHistory\",\n          \"description\": \"An history associated with a project.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entries\",\n              \"description\": \"The events that happened while recording that history.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the history is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectRelationConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectRelationEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectRelation\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectRelationEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectRelation\",\n          \"description\": \"A relation between two projects.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The relationship of the project with the related project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project whose relationship is being described.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"The milestone within the project whose relationship is being described.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"anchorType\",\n              \"description\": \"The type of anchor on the project end of the relation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedProject\",\n              \"description\": \"The related project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedProjectMilestone\",\n              \"description\": \"The milestone within the related project whose relationship is being described.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedAnchorType\",\n              \"description\": \"The type of anchor on the relatedProject end of the relation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The last user who created or modified the relation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeedConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerNeedEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerNeed\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeedEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeed\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"IntegrationService\",\n          \"description\": \"Linear supported integration services.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"airbyte\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"discord\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"figma\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"figmaPlugin\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"front\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"github\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gong\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"githubEnterpriseServer\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"githubCommit\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"githubImport\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"githubPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"githubCodeAccessPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitlab\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"googleCalendarPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"googleSheets\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"intercom\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"jira\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"jiraPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"launchDarkly\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"launchDarklyPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"loom\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notion\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"opsgenie\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pagerDuty\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"salesforce\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackAsks\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asksWeb\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackCustomViewNotifications\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackOrgProjectUpdatesPost\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackOrgInitiativeUpdatesPost\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackPost\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectPost\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackProjectUpdatesPost\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackInitiativePost\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sentry\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"zendesk\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mcpServerPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mcpServer\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"microsoftTeams\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"microsoftPersonal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSharedAccess\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"isShared\",\n              \"description\": \"Whether this issue has been shared with users outside the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewerHasOnlySharedAccess\",\n              \"description\": \"Whether the viewer can access this issue only through issue sharing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sharedWithCount\",\n              \"description\": \"The number of users this issue is shared with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sharedWithUsers\",\n              \"description\": \"Users this issue is shared with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"User\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"disallowedIssueFields\",\n              \"description\": \"Issue update fields the viewer cannot modify due to shared-only access.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"IssueSharedAccessDisallowedField\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"IssueSharedAccessDisallowedField\",\n          \"description\": \"Issue update fields that are disallowed for users with only shared access.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"projectId\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueHistoryConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueHistoryEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueHistory\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueHistoryEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueHistory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueHistory\",\n          \"description\": \"A record of changes to an issue.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that was changed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorId\",\n              \"description\": \"The id of user who made these changes. If null, possibly means that the change made by an integration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedDescription\",\n              \"description\": \"Whether the issue's description was updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromTitle\",\n              \"description\": \"What the title was changed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toTitle\",\n              \"description\": \"What the title was changed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromAssigneeId\",\n              \"description\": \"The id of user from whom the issue was re-assigned from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toAssigneeId\",\n              \"description\": \"The id of user to whom the issue was assigned to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromPriority\",\n              \"description\": \"What the priority was changed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toPriority\",\n              \"description\": \"What the priority was changed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromTeamId\",\n              \"description\": \"The id of team from which the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toTeamId\",\n              \"description\": \"The id of team to which the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromParentId\",\n              \"description\": \"The id of previous parent of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toParentId\",\n              \"description\": \"The id of new parent of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromStateId\",\n              \"description\": \"The id of previous workflow state of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toStateId\",\n              \"description\": \"The id of new workflow state of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromCycleId\",\n              \"description\": \"The id of previous cycle of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toCycleId\",\n              \"description\": \"The id of new cycle of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toConvertedProjectId\",\n              \"description\": \"The id of new project created from the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromProjectId\",\n              \"description\": \"The id of previous project of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toProjectId\",\n              \"description\": \"The id of new project of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromEstimate\",\n              \"description\": \"What the estimate was changed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toEstimate\",\n              \"description\": \"What the estimate was changed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archived\",\n              \"description\": \"Whether the issue is archived at the time of this history entry.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"Whether the issue was trashed or un-trashed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentId\",\n              \"description\": \"The id of linked attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedLabelIds\",\n              \"description\": \"ID's of labels that were added.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"removedLabelIds\",\n              \"description\": \"ID's of labels that were removed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToReleaseIds\",\n              \"description\": \"[ALPHA] ID's of releases that the issue was added to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"removedFromReleaseIds\",\n              \"description\": \"[ALPHA] ID's of releases that the issue was removed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relationChanges\",\n              \"description\": \"Changed issue relationships.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"IssueRelationHistoryPayload\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoClosed\",\n              \"description\": \"Whether the issue was auto-closed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchived\",\n              \"description\": \"Whether the issue was auto-archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromDueDate\",\n              \"description\": \"What the due date was changed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toDueDate\",\n              \"description\": \"What the due date was changed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedId\",\n              \"description\": \"The id of linked customer need.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"changes\",\n              \"description\": \"[Internal] Serialized JSON representing changes for certain non-relational properties.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The actor that performed the actions. This field may be empty in the case of integrations or automations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actors\",\n              \"description\": \"The actors that performed the actions. This field may be empty in the case of integrations or automations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"User\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `actor` and `descriptionUpdatedBy` instead.\"\n            },\n            {\n              \"name\": \"descriptionUpdatedBy\",\n              \"description\": \"The actors that edited the description of the issue, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"User\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromAssignee\",\n              \"description\": \"The user that was unassigned from the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toAssignee\",\n              \"description\": \"The user that was assigned to the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromCycle\",\n              \"description\": \"The cycle that the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toCycle\",\n              \"description\": \"The cycle that the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toConvertedProject\",\n              \"description\": \"The new project created from the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromDelegate\",\n              \"description\": \"The app user from whom the issue delegation was transferred.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toDelegate\",\n              \"description\": \"The app user to whom the issue delegation was transferred.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromProject\",\n              \"description\": \"The project that the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toProject\",\n              \"description\": \"The project that the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromState\",\n              \"description\": \"The state that the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toState\",\n              \"description\": \"The state that the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromTeam\",\n              \"description\": \"The team that the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toTeam\",\n              \"description\": \"The team that the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromParent\",\n              \"description\": \"The parent issue that the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toParent\",\n              \"description\": \"The parent issue that the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachment\",\n              \"description\": \"The linked attachment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Attachment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImport\",\n              \"description\": \"The import record.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueImport\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilityNotifiedUsers\",\n              \"description\": \"The users that were notified of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"User\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilityAutoAssigned\",\n              \"description\": \"Boolean indicating if the issue was auto-assigned using the triage responsibility feature.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilityTeam\",\n              \"description\": \"The team that triggered the triage responsibility action.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromProjectMilestone\",\n              \"description\": \"The project milestone that the issue was moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toProjectMilestone\",\n              \"description\": \"The project milestone that the issue was moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromSlaStartedAt\",\n              \"description\": \"The time at which the issue's SLA was previously started.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toSlaStartedAt\",\n              \"description\": \"The time at which the issue's SLA is now started.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromSlaBreachesAt\",\n              \"description\": \"The SLA breach time that was previously set on the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toSlaBreachesAt\",\n              \"description\": \"The SLA breach time that is now set on the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromSlaBreached\",\n              \"description\": \"Whether the issue had previously breached its SLA.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toSlaBreached\",\n              \"description\": \"Whether the issue has now breached its SLA.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromSlaType\",\n              \"description\": \"The type of SLA that was previously set on the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toSlaType\",\n              \"description\": \"The type of SLA that is now set on the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that performed the action.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedLabels\",\n              \"description\": \"The labels that were added to the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"IssueLabel\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"removedLabels\",\n              \"description\": \"The labels that were removed from the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"IssueLabel\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToReleases\",\n              \"description\": \"The releases that the issue was added to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"Release\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"removedFromReleases\",\n              \"description\": \"The releases that the issue was removed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"Release\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageRuleMetadata\",\n              \"description\": \"[INTERNAL] Metadata about the triage rule that made changes to the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueHistoryTriageRuleMetadata\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `workflowMetadata` instead.\"\n            },\n            {\n              \"name\": \"workflowMetadata\",\n              \"description\": \"[INTERNAL] Metadata about the workflow that made changes to the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueHistoryWorkflowMetadata\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueRelationHistoryPayload\",\n          \"description\": \"Issue relation history's payload.\",\n          \"fields\": [\n            {\n              \"name\": \"identifier\",\n              \"description\": \"The identifier of the related issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the change.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueImport\",\n          \"description\": \"An import job for data from an external service.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamName\",\n              \"description\": \"New team's name in cases when teamId not set.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creatorId\",\n              \"description\": \"The id for the user that started the job.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"service\",\n              \"description\": \"The service from which data will be imported.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status for the import job.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mapping\",\n              \"description\": \"The data mapping configuration for the import job.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": \"User readable error message, if one has occurred during the import.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progress\",\n              \"description\": \"Current step progress in % (0-100).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"csvFileUrl\",\n              \"description\": \"File URL for the uploaded CSV for the import, if there is one.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"errorMetadata\",\n              \"description\": \"Error code and metadata, if one has occurred during the import.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"serviceMetadata\",\n              \"description\": \"Metadata related to import service.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the import service.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueHistoryTriageRuleMetadata\",\n          \"description\": \"Metadata about a triage rule that made changes to an issue.\",\n          \"fields\": [\n            {\n              \"name\": \"triageRuleError\",\n              \"description\": \"The error that occurred, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueHistoryTriageRuleError\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedByTriageRule\",\n              \"description\": \"The triage rule that triggered the issue update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowDefinition\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `IssueHistoryWorkflowMetadata.workflowDefinition` instead.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueHistoryTriageRuleError\",\n          \"description\": \"An error that occurred during triage rule execution.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of error that occurred.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"TriageRuleErrorType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"property\",\n              \"description\": \"The property that caused the error.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"conflictForSameChildLabel\",\n              \"description\": \"Whether the conflict was for the same child label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fromTeam\",\n              \"description\": \"The team the issue was being moved from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toTeam\",\n              \"description\": \"The team the issue was being moved to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"conflictingLabels\",\n              \"description\": \"The conflicting labels.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"IssueLabel\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"TriageRuleErrorType\",\n          \"description\": \"The type of error that occurred during triage rule execution.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"cycle\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"default\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labelGroupConflict\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WorkflowDefinition\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupName\",\n              \"description\": \"The name of the group that the workflow belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"WorkflowType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trigger\",\n              \"description\": \"The type of the event that triggers off the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"WorkflowTrigger\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triggerType\",\n              \"description\": \"The object type (e.g. Issue) that triggers this workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"WorkflowTriggerType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"conditions\",\n              \"description\": \"The conditions that need to be match for the workflow to be triggered.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the workflow. If not set, the workflow is associated with the entire organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activities\",\n              \"description\": \"An array of activities that will be executed as part of the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the workflow definition within its siblings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastExecutedAt\",\n              \"description\": \"The date when the workflow was last executed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastUpdatedBy\",\n              \"description\": \"The user who last updated the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The contextual user view associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The context custom view associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which this workflow's context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which this workflow's context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The workflow definition's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"WorkflowType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"sla\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"custom\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewSubscription\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triage\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"WorkflowTrigger\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"entityCreated\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityUpdated\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityCreatedOrUpdated\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityRemoved\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityUnarchived\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"WorkflowTriggerType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"issue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserContextViewType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"assigned\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueHistoryWorkflowMetadata\",\n          \"description\": \"Metadata about a workflow that made changes to an issue.\",\n          \"fields\": [\n            {\n              \"name\": \"workflowDefinition\",\n              \"description\": \"The workflow definition that triggered the issue update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowDefinition\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiConversation\",\n              \"description\": \"The AI conversation associated with the workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversation\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversation\",\n          \"description\": \"[Internal] A conversation between a user and an LLM.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who the conversation belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"context\",\n              \"description\": \"Serialized JSON representing the contexts this conversation is related to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"summary\",\n              \"description\": \"A summary of the conversation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowDefinition\",\n              \"description\": \"[Internal] The workflow definition that created this conversation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowDefinition\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the conversation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the conversation as read. Null, if the user hasn't read the conversation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parts\",\n              \"description\": \"The parts of the conversation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"UNION\",\n                    \"name\": \"AiConversationPart\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"iterationId\",\n              \"description\": \"The iteration ID of the conversation in agentic workflow.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"evalLogId\",\n              \"description\": \"[Internal] The log ID of the AI response.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationStatus\",\n          \"description\": \"The status of an AI conversation.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"active\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"complete\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"awaitingInput\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pending\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"UNION\",\n          \"name\": \"AiConversationPart\",\n          \"description\": \"A part in an AI conversation.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationPromptPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationTextPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationReasoningPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationToolCallPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationWidgetPart\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationPromptPart\",\n          \"description\": \"A prompt part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationPartType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"The metadata of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationPartMetadata\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The data of the prompt part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The Markdown body of the prompt part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who created the prompt part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBasePart\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"AiConversationBasePart\",\n          \"description\": \"A base part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationPartType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"The metadata of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationPartMetadata\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationPromptPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationTextPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationReasoningPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationToolCallPart\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationWidgetPart\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationPartType\",\n          \"description\": \"The type of a part in an AI conversation.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"prompt\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toolCall\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reasoning\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"text\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"widget\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"widgetPlaceholder\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationPartMetadata\",\n          \"description\": \"Metadata about a part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"turnId\",\n              \"description\": \"The turn ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"evalLogId\",\n              \"description\": \"The eval log ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The started timestamp of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endedAt\",\n              \"description\": \"The ended timestamp of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"phase\",\n              \"description\": \"The phase during which the part was generated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AiConversationPartPhase\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedback\",\n              \"description\": \"AI feedback state for this part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationPartPhase\",\n          \"description\": \"The phase during which a conversation part was generated.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"commentary\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"answer\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationTextPart\",\n          \"description\": \"A text part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationPartType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"The metadata of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationPartMetadata\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The data of the text part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The Markdown body of the text part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBasePart\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationReasoningPart\",\n          \"description\": \"A reasoning part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationPartType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"The metadata of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationPartMetadata\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The title of the reasoning part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The data of the reasoning part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The Markdown body of the reasoning part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBasePart\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationToolCallPart\",\n          \"description\": \"A tool call part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationPartType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"The metadata of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationPartMetadata\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"toolCall\",\n              \"description\": \"The tool call part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"UNION\",\n                  \"name\": \"AiConversationToolCall\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBasePart\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"UNION\",\n          \"name\": \"AiConversationToolCall\",\n          \"description\": \"The tool call.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationSearchEntitiesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationRetrieveEntitiesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationQueryViewToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationQueryActivityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationQueryUpdatesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationSuggestValuesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationCreateEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationUpdateEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationDeleteEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationRestoreEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationResearchToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationCodeIntelligenceToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetPullRequestDiffToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetPullRequestFileToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationTranscribeVideoToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationTranscribeMediaToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationSearchDocumentationToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationWebSearchToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetSlackConversationHistoryToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetMicrosoftTeamsConversationHistoryToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationInvokeMcpToolToolCall\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSearchEntitiesToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationSearchEntitiesToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"result\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationSearchEntitiesToolCallResult\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"AiConversationBaseToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationSearchEntitiesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationRetrieveEntitiesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationQueryViewToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationQueryActivityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationQueryUpdatesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationSuggestValuesToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationCreateEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationUpdateEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationDeleteEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationRestoreEntityToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationResearchToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationCodeIntelligenceToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetPullRequestDiffToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetPullRequestFileToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationTranscribeVideoToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationTranscribeMediaToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationSearchDocumentationToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationWebSearchToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetSlackConversationHistoryToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationGetMicrosoftTeamsConversationHistoryToolCall\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationInvokeMcpToolToolCall\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationTool\",\n          \"description\": \"The name of a tool that was called in an AI conversation.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"SearchEntities\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"RetrieveEntities\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"QueryView\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"QueryActivity\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"QueryUpdates\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SuggestValues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"CreateEntity\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"UpdateEntity\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"DeleteEntity\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"RestoreEntity\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Research\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"CodeIntelligence\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"GetPullRequestDiff\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"GetPullRequestFile\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"TranscribeVideo\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"TranscribeMedia\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SearchDocumentation\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"WebSearch\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"GetSlackConversationHistory\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"GetMicrosoftTeamsConversationHistory\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"InvokeMcpTool\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationToolDisplayInfo\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"icon\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activeLabel\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inactiveLabel\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"detail\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"result\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSearchEntitiesToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"queries\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSearchEntitiesToolCallResult\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entities\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationRetrieveEntitiesToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationRetrieveEntitiesToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationRetrieveEntitiesToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entities\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryViewToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationQueryViewToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryViewToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"view\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationQueryViewToolCallArgsView\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mode\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationQueryViewToolCallArgsMode\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"filter\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryViewToolCallArgsView\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"group\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"predefinedView\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationQueryViewToolCallArgsMode\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"list\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"insight\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryActivityToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationQueryActivityToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryActivityToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entities\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryUpdatesToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationQueryUpdatesToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationQueryUpdatesToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"updateType\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationQueryUpdatesToolCallArgsUpdateType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationQueryUpdatesToolCallArgsUpdateType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"ProjectUpdate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"InitiativeUpdate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSuggestValuesToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationSuggestValuesToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSuggestValuesToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"field\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"query\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationCreateEntityToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationCreateEntityToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationCreateEntityToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"count\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationUpdateEntityToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationUpdateEntityToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationUpdateEntityToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entity\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationDeleteEntityToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationDeleteEntityToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationDeleteEntityToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entity\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationRestoreEntityToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationRestoreEntityToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationRestoreEntityToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entity\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationResearchToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationResearchToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"result\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationResearchToolCallResult\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationResearchToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"context\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"query\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subjects\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationResearchToolCallResult\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"progressId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationCodeIntelligenceToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationCodeIntelligenceToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationCodeIntelligenceToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"question\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationGetPullRequestDiffToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationGetPullRequestDiffToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationGetPullRequestDiffToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entity\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationGetPullRequestFileToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationGetPullRequestFileToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationGetPullRequestFileToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"entity\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationSearchEntitiesToolCallResultEntities\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"path\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationTranscribeVideoToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationTranscribeMediaToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationSearchDocumentationToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationWebSearchToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationWebSearchToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationWebSearchToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"query\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationGetSlackConversationHistoryToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationGetMicrosoftTeamsConversationHistoryToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationInvokeMcpToolToolCall\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tool that was called.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationToolDisplayInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawResult\",\n              \"description\": \"The result of the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the tool call.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationInvokeMcpToolToolCallArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseToolCall\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationInvokeMcpToolToolCallArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"server\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationInvokeMcpToolToolCallArgsServer\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tool\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationInvokeMcpToolToolCallArgsTool\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationInvokeMcpToolToolCallArgsServer\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"integrationId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationInvokeMcpToolToolCallArgsTool\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationWidgetPart\",\n          \"description\": \"A widget part in an AI conversation.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The ID of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationPartType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"The metadata of the part.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AiConversationPartMetadata\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"widget\",\n              \"description\": \"The widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"UNION\",\n                  \"name\": \"AiConversationWidget\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBasePart\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"UNION\",\n          \"name\": \"AiConversationWidget\",\n          \"description\": \"The widget.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationEntityCardWidget\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationEntityListWidget\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationEntityCardWidget\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationWidgetName\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": \"Display information for the widget, including ProseMirror and Markdown representations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationWidgetDisplayInfo\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationEntityCardWidgetArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseWidget\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"AiConversationBaseWidget\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationWidgetName\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": \"Display information for the widget, including ProseMirror and Markdown representations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationWidgetDisplayInfo\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationEntityCardWidget\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"AiConversationEntityListWidget\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationWidgetName\",\n          \"description\": \"The name of a widget in an AI conversation.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"EntityCard\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"EntityList\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationWidgetDisplayInfo\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The ProseMirror data representation of the widget content.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The Markdown representation of the widget content.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationEntityCardWidgetArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"[Internal] The entity type\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationEntityCardWidgetArgsType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The UUID of the entity to display\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"note\",\n              \"description\": \"@deprecated Optional note to display about the entity\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Optional note to display about the entity\"\n            },\n            {\n              \"name\": \"action\",\n              \"description\": \"The action performed on the entity (leave empty if just found)\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AiConversationEntityCardWidgetArgsAction\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationEntityCardWidgetArgsType\",\n          \"description\": \"[Internal] The entity type\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"Issue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Project\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Initiative\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"InitiativeUpdate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ProjectUpdate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Team\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Template\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Customer\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"CustomerNeed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Document\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"CustomView\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"PullRequest\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Release\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ReleasePipeline\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"AiPrompt\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationEntityCardWidgetArgsAction\",\n          \"description\": \"The action performed on the entity (leave empty if just found)\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"created\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updated\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationEntityListWidget\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationWidgetName\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rawArgs\",\n              \"description\": \"The arguments of the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayInfo\",\n              \"description\": \"Display information for the widget, including ProseMirror and Markdown representations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationWidgetDisplayInfo\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": \"The arguments to the widget.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AiConversationEntityListWidgetArgs\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"AiConversationBaseWidget\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationEntityListWidgetArgs\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"count\",\n              \"description\": \"Total number of entities in the list\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entities\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AiConversationEntityListWidgetArgsEntities\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"action\",\n              \"description\": \"The action performed on the entities (leave empty if just found)\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AiConversationEntityListWidgetArgsAction\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AiConversationEntityListWidgetArgsEntities\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"[Internal] The entity type\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AiConversationEntityListWidgetArgsEntitiesType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"Entity UUID\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"note\",\n              \"description\": \"@deprecated Optional note to display about the entity\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Optional note to display about the entity\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationEntityListWidgetArgsEntitiesType\",\n          \"description\": \"[Internal] The entity type\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"Issue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Project\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Initiative\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"InitiativeUpdate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ProjectUpdate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Team\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Template\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Customer\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"CustomerNeed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Document\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"CustomView\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"PullRequest\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Release\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ReleasePipeline\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"AiPrompt\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AiConversationEntityListWidgetArgsAction\",\n          \"description\": \"The action performed on the entities (leave empty if just found)\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"created\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updated\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueRelationConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueRelationEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueRelation\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueRelationEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueRelation\",\n          \"description\": \"A relation between two issues.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The relationship of the issue with the related issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue whose relationship is being described.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedIssue\",\n              \"description\": \"The related issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AttachmentConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AttachmentEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Attachment\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AttachmentEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Attachment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSuggestionConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueSuggestionEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueSuggestion\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSuggestionEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSuggestion\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSuggestion\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"IssueSuggestionType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"IssueSuggestionState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stateChangedAt\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dismissalReason\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueSuggestionMetadata\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedIssue\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedIssueId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedTeam\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedProject\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedUser\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedUserId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedLabel\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestedLabelId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"IssueSuggestionType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"team\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"similarIssue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedIssue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"IssueSuggestionState\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"active\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stale\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"accepted\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSuggestionMetadata\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"score\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"classification\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reasons\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"evalLogId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rank\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"variant\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"appliedAutomationRuleId\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueStateSpanConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueStateSpanEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueStateSpan\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueStateSpanEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueStateSpan\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueStateSpan\",\n          \"description\": \"A continuous period of time during which an issue remained in a specific workflow state.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the state span.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stateId\",\n              \"description\": \"The workflow state identifier for this span.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The timestamp when the issue entered this state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endedAt\",\n              \"description\": \"The timestamp when the issue left this state. Null if the issue is currently in this state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"The workflow state for this span.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CycleConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CycleEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Cycle\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CycleEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Cycle\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CycleFilter\",\n          \"description\": \"Cycle filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"Comparator for the cycle number.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the cycle name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"Comparator for the cycle start date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"Comparator for the cycle ends at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"Comparator for the cycle completed at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isActive\",\n              \"description\": \"Comparator for the filtering active cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isInCooldown\",\n              \"description\": \"Comparator for filtering for whether the cycle is currently in cooldown.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isNext\",\n              \"description\": \"Comparator for the filtering next cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isPrevious\",\n              \"description\": \"Comparator for the filtering previous cycle.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isFuture\",\n              \"description\": \"Comparator for the filtering future cycles.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isPast\",\n              \"description\": \"Comparator for the filtering past cycles.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the cycles team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters that the cycles issues must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritedFromId\",\n              \"description\": \"Comparator for the inherited cycle ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the cycle.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CycleFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the cycle.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CycleFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TriageResponsibility\",\n          \"description\": \"A team's triage responsibility.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"action\",\n              \"description\": \"The action to take when an issue is added to triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"TriageResponsibilityAction\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"manualSelection\",\n              \"description\": \"Set of users used for triage responsibility.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"TriageResponsibilityManualSelection\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team to which the triage responsibility belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeSchedule\",\n              \"description\": \"The time schedule used for scheduling.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"TimeSchedule\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentUser\",\n              \"description\": \"The user currently responsible for triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"TriageResponsibilityAction\",\n          \"description\": \"Which action should be taken after an issue is added to triage.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"assign\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notify\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TriageResponsibilityManualSelection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"userIds\",\n              \"description\": \"The set of users responsible for triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assignmentIndex\",\n              \"description\": \"[Internal] The index of the current userId used for the assign action when having more than one user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TimeSchedule\",\n          \"description\": \"A time schedule.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the schedule.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entries\",\n              \"description\": \"The schedule entries.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"TimeScheduleEntry\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalId\",\n              \"description\": \"The identifier of the external schedule.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUrl\",\n              \"description\": \"The URL to the external schedule.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization of the schedule.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The identifier of the Linear integration populating the schedule.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TimeScheduleEntry\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"The start date of the schedule in ISO 8601 date-time format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"The end date of the schedule in ISO 8601 date-time format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The Linear user id of the user on schedule. If the user cannot be mapped to a Linear user then `userEmail` can be used as a reference.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userEmail\",\n              \"description\": \"The email, name or reference to the user on schedule. This is used in case the external user could not be mapped to a Linear user id.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamMembership\",\n          \"description\": \"Defines the membership of a user to a team.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that the membership is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the membership is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Whether the user is an owner of the team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the users team list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamMembershipConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TeamMembershipEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TeamMembership\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamMembershipEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembership\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WorkflowStateConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"WorkflowStateEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"WorkflowState\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WorkflowStateEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitAutomationStateConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"GitAutomationStateEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"GitAutomationState\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitAutomationStateEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitAutomationState\",\n          \"description\": \"A trigger that updates the issue status according to Git automations.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"The associated workflow state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team to which this automation state belongs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetBranch\",\n              \"description\": \"The target branch associated to this automation state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"GitAutomationTargetBranch\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"event\",\n              \"description\": \"The event that triggers the automation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"GitAutomationStates\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"branchPattern\",\n              \"description\": \"[DEPRECATED] The target branch, if null, the automation will be triggered on any branch.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use targetBranch instead.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitAutomationTargetBranch\",\n          \"description\": \"A Git target branch for which there are automations (GitAutomationState).\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team to which this Git target branch automation belongs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"branchPattern\",\n              \"description\": \"The target branch pattern.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isRegex\",\n              \"description\": \"Whether the branch pattern is a regular expression.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"automationStates\",\n              \"description\": \"Automation states associated with the target branch.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationStateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"GitAutomationStates\",\n          \"description\": \"The various states of a pull/merge request.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"draft\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"start\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"review\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mergeable\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"merge\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TemplateConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TemplateEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Template\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TemplateEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Template\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WebhookConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"WebhookEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Webhook\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WebhookEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Webhook\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Webhook\",\n          \"description\": \"A webhook used to send HTTP notifications over data updates.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"Webhook label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Webhook URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the Webhook is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the webhook is associated with. If null, the webhook is associated with all public teams of the organization or multiple teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"[INTERNAL] The teams that the webhook is associated with. Used to represent a webhook that targets multiple teams, potentially in addition to all public teams of the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allPublicTeams\",\n              \"description\": \"Whether the Webhook is enabled for all public teams, including teams created after the webhook was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the webhook.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"secret\",\n              \"description\": \"Secret token for verifying the origin on the recipient side.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resourceTypes\",\n              \"description\": \"The resource types this webhook is subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"failures\",\n              \"description\": \"[INTERNAL] Webhook failure events associated with the webhook (last 50).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"WebhookFailureEvent\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WebhookFailureEvent\",\n          \"description\": \"Entity representing a webhook execution failure.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhook\",\n              \"description\": \"The webhook that this failure event is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Webhook\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL that the webhook was trying to push to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"httpStatus\",\n              \"description\": \"The HTTP status code returned by the recipient.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"responseOrError\",\n              \"description\": \"The HTTP response body returned by the recipient or error occured.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"executionId\",\n              \"description\": \"The unique execution ID of the webhook push. This is retained between retries of the same push.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"FacetPageSource\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"projects\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamIssues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationIpRestriction\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"range\",\n              \"description\": \"IP range in CIDR format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Restriction type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Optional restriction description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the restriction is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ReleaseChannel\",\n          \"description\": \"Features release channel.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"development\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"internal\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"privateBeta\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"beta\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"preRelease\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"public\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"SLADayCountType\",\n          \"description\": \"Which day count to use for SLA calculations.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"all\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"onlyBusinessDays\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ProjectUpdateReminderFrequency\",\n          \"description\": \"The frequency at which to send project update reminders.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"week\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"twoWeeks\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"month\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"never\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IntegrationEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Integration\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Integration\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PaidSubscription\",\n          \"description\": \"The paid subscription of an organization.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The subscription type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"seats\",\n              \"description\": \"The number of seats in the subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"seatsMinimum\",\n              \"description\": \"The minimum number of seats that will be billed in the subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"seatsMaximum\",\n              \"description\": \"The maximum number of seats that will be billed in the subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The creator of the subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the subscription is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"collectionMethod\",\n              \"description\": \"The collection method for this subscription, either automatically charged or invoiced.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The date the subscription was canceled, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cancelAt\",\n              \"description\": \"The date the subscription is scheduled to be canceled, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pendingChangeType\",\n              \"description\": \"The subscription type of a pending change. Null if no change pending.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nextBillingAt\",\n              \"description\": \"The date the subscription will be billed next.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IdentityProvider\",\n          \"description\": \"An identity provider.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultMigrated\",\n              \"description\": \"Whether the identity provider is the default identity provider migrated from organization level settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of identity provider.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"IdentityProviderType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlEnabled\",\n              \"description\": \"Whether SAML authentication is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoEndpoint\",\n              \"description\": \"Sign in endpoint URL for the identity provider.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoBinding\",\n              \"description\": \"Binding method for authentication call. Can be either `post` (default) or `redirect`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoSignAlgo\",\n              \"description\": \"The algorithm of the Signing Certificate. Can be one of `sha1`, `sha256` (default), or `sha512`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoSigningCert\",\n              \"description\": \"X.509 Signing Certificate in string form.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issuerEntityId\",\n              \"description\": \"The issuer's custom entity ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"spEntityId\",\n              \"description\": \"The service provider (Linear) custom entity ID. Defaults to https://auth.linear.app/sso\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The SAML priority used to pick default workspace in SAML SP initiated flow, when same domain is claimed for SAML by multiple workspaces. Lower priority value means higher preference.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimEnabled\",\n              \"description\": \"Whether SCIM provisioning is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ownersGroupPush\",\n              \"description\": \"[INTERNAL] SCIM owners group push settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"adminsGroupPush\",\n              \"description\": \"[INTERNAL] SCIM admins group push settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"guestsGroupPush\",\n              \"description\": \"[INTERNAL] SCIM guests group push settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowNameChange\",\n              \"description\": \"Whether users are allowed to change their name and display name even if SCIM is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"IdentityProviderType\",\n          \"description\": \"The type of identity provider.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"general\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webForms\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueDraftConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueDraftEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueDraft\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueDraftEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueDraft\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueDraft\",\n          \"description\": \"[Internal] A draft issue.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The draft's title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The draft's description in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"The estimate of the complexity of the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"The date at which the issue would be due.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"The IDs of labels added to the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team associated with the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"The cycle associated with the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project associated with the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": \"The project milestone associated with the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assigneeId\",\n              \"description\": \"The user assigned to the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"delegateId\",\n              \"description\": \"The agent user delegated to work on the issue being drafted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stateId\",\n              \"description\": \"The workflow state associated with the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent draft of the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueDraft\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The ID of the parent issue draft, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceCommentId\",\n              \"description\": \"The ID of the comment that the draft was created from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentIssue\",\n              \"description\": \"The parent issue of the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentIssueId\",\n              \"description\": \"The ID of the parent issue, if any.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subIssueSortOrder\",\n              \"description\": \"The order of items in the sub-draft list. Only set if the draft has `parent` set.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priorityLabel\",\n              \"description\": \"Label for the priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"descriptionData\",\n              \"description\": \"[Internal] The draft's description as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Serialized array of JSONs representing attachments.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Serialized array of JSONs representing customer needs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseIds\",\n              \"description\": \"The IDs of releases associated with the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"schedule\",\n              \"description\": \"Serialized array of JSONs representing the recurring issue's schedule.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DraftConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"DraftEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Draft\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DraftEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Draft\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Draft\",\n          \"description\": \"A general purpose draft. Used for comments, project updates, etc.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The text content as a Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSON\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"data\",\n              \"description\": \"Additional properties for the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isAutogenerated\",\n              \"description\": \"Whether the draft was autogenerated for the user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use 'data.generationMetadata' instead\"\n            },\n            {\n              \"name\": \"wasLocalDraft\",\n              \"description\": \"[INTERNAL] Whether the draft was ported from a local draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user who created the draft.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue for which this is a draft comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project for which this is a draft project update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"The project update for which this is a draft comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative for which this is a draft initiative update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"The initiative update for which this is a draft comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"post\",\n              \"description\": \"The post for which this is a draft comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Post\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentComment\",\n              \"description\": \"The comment for which this is a draft comment reply.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeed\",\n              \"description\": \"The customer need that this draft is referencing.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomerNeed\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"anchor\",\n              \"description\": \"[INTERNAL] Allows for multiple drafts per entity (currently constrained to Pull Requests).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team for which this is a draft post.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FacetConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"FacetEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Facet\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FacetEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Facet\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomViewNotificationSubscription\",\n          \"description\": \"A custom view notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The custom view subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomView\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CycleNotificationSubscription\",\n          \"description\": \"A cycle notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The cycle subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Cycle\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"LabelNotificationSubscription\",\n          \"description\": \"A label notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The label subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectNotificationSubscription\",\n          \"description\": \"A project notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeNotificationSubscription\",\n          \"description\": \"An initiative notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamNotificationSubscription\",\n          \"description\": \"A team notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserNotificationSubscription\",\n          \"description\": \"A user notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriber\",\n              \"description\": \"The user that subscribed to receive notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Customer\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The contextual custom view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomView\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The contextual cycle view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The contextual label view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueLabel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The contextual project view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The contextual initiative view associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team associated with the notification subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user subscribed to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The type of subscription.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"NotificationSubscription\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueNotification\",\n          \"description\": \"An issue related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"commentId\",\n              \"description\": \"Related comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentCommentId\",\n              \"description\": \"Related parent comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionEmoji\",\n              \"description\": \"Name of the reaction emoji related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"Related issue ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentComment\",\n              \"description\": \"The parent comment related to the notification, if a notification is a reply comment notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team related to the issue notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriptions\",\n              \"description\": \"The subscriptions related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INTERFACE\",\n                    \"name\": \"NotificationSubscription\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"Notification\",\n          \"description\": \"A notification sent to a user.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OauthClientApprovalNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DocumentNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PostNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNeedNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"PullRequestNotification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WelcomeMessageNotification\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"NotificationCategory\",\n          \"description\": \"The categories of notifications a user can subscribe to.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"assignments\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"statusChanges\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentsAndReplies\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mentions\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriptions\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentChanges\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"postsAndUpdates\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reminders\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviews\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"appsAndIntegrations\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triage\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customers\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"system\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectNotification\",\n          \"description\": \"A project related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"commentId\",\n              \"description\": \"Related comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentCommentId\",\n              \"description\": \"Related parent comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionEmoji\",\n              \"description\": \"Name of the reaction emoji related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"Related project ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": \"Related project milestone ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateId\",\n              \"description\": \"Related project update ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"The document related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Document\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"The project update related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentComment\",\n              \"description\": \"The parent comment related to the notification, if a notification is a reply comment notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeNotification\",\n          \"description\": \"An initiative related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"commentId\",\n              \"description\": \"Related comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentCommentId\",\n              \"description\": \"Related parent comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionEmoji\",\n              \"description\": \"Name of the reaction emoji related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"Related initiative ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateId\",\n              \"description\": \"Related initiative update ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"The document related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Document\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"The initiative update related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentComment\",\n              \"description\": \"The parent comment related to the notification, if a notification is a reply comment notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OauthClientApprovalNotification\",\n          \"description\": \"An oauth client approval related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"oauthClientApprovalId\",\n              \"description\": \"Related OAuth client approval request ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"oauthClientApproval\",\n              \"description\": \"The OAuth client approval request related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OauthClientApproval\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OauthClientApproval\",\n          \"description\": \"Request to install OAuth clients on organizations and the response to the request.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"oauthClientId\",\n              \"description\": \"The uuid of the OAuth client being requested for installation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"requesterId\",\n              \"description\": \"The person who requested installing the OAuth client.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"responderId\",\n              \"description\": \"The person who responded to the request to install the OAuth client.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status for the OAuth client approval request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"OAuthClientApprovalStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scopes\",\n              \"description\": \"The scopes the app has been approved for.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"requestReason\",\n              \"description\": \"The reason the person wants to install this OAuth client.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"denyReason\",\n              \"description\": \"The reason the request for the OAuth client approval was denied.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"newlyRequestedScopes\",\n              \"description\": \"New scopes that were requested for approval after the initial request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"OAuthClientApprovalStatus\",\n          \"description\": \"The different requests statuses possible for an OAuth client approval request.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"requested\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"approved\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"denied\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentNotification\",\n          \"description\": \"A document related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"commentId\",\n              \"description\": \"Related comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentCommentId\",\n              \"description\": \"Related parent comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionEmoji\",\n              \"description\": \"Name of the reaction emoji related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentId\",\n              \"description\": \"Related document ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PostNotification\",\n          \"description\": \"A post related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"commentId\",\n              \"description\": \"Related comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parentCommentId\",\n              \"description\": \"Related parent comment ID. Null if the notification is not related to a comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionEmoji\",\n              \"description\": \"Name of the reaction emoji related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"postId\",\n              \"description\": \"Related post ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeedNotification\",\n          \"description\": \"A customer need related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedId\",\n              \"description\": \"Related customer need.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedIssue\",\n              \"description\": \"The issue related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedProject\",\n              \"description\": \"The project related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeed\",\n              \"description\": \"The customer need related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeed\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNotification\",\n          \"description\": \"A customer related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerId\",\n              \"description\": \"Related customer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Customer\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PullRequestNotification\",\n          \"description\": \"A pull request related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequestId\",\n              \"description\": \"Related pull request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequestCommentId\",\n              \"description\": \"Related pull request comment ID. Null if the notification is not related to a pull request comment.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pullRequest\",\n              \"description\": \"The pull request related to the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PullRequest\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WelcomeMessageNotification\",\n          \"description\": \"A welcome message related notification.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Notification type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserActor\",\n              \"description\": \"The external user that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that received the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time at when the user marked the notification as read. Null, if the the user hasn't read the notification\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailedAt\",\n              \"description\": \"The time at when an email reminder for this notification was sent to the user. Null, if no email\\n    reminder has been sent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsnoozedAt\",\n              \"description\": \"The time at which a notification was unsnoozed..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"category\",\n              \"description\": \"The category of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"NotificationCategory\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"[Internal] URL to the target of the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inboxUrl\",\n              \"description\": \"[Internal] Inbox URL for the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"[Internal] Notification title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"[Internal] Notification subtitle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isLinearActor\",\n              \"description\": \"[Internal] If notification actor was Linear.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarUrl\",\n              \"description\": \"[Internal] Notification avatar URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorInitials\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorAvatarColor\",\n              \"description\": \"[Internal] Notification actor initials if avatar is not available.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatusType\",\n              \"description\": \"[Internal] Issue's status type for issue notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateHealth\",\n              \"description\": \"[Internal] Project update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateHealth\",\n              \"description\": \"[Internal] Initiative update health for new updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingKey\",\n              \"description\": \"[Internal] Notifications with the same grouping key will be grouped together in the UI.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"groupingPriority\",\n              \"description\": \"[Internal] Priority of the notification with the same grouping key. Higher number means higher priority. If priority is the same, notifications should be sorted by `createdAt`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that caused the notification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"welcomeMessageId\",\n              \"description\": \"Related welcome message.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Notification\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Entity\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Query\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"workflowStates\",\n              \"description\": \"All issue workflow states.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned workflow states.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"WorkflowStateFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowStateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowState\",\n              \"description\": \"One specific state.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhooks\",\n              \"description\": \"All webhooks.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WebhookConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhook\",\n              \"description\": \"A specific webhook.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the webhook to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Webhook\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"failuresForOauthWebhooks\",\n              \"description\": \"[INTERNAL] Webhook failure events for webhooks that belong to an OAuth application. (last 50)\",\n              \"args\": [\n                {\n                  \"name\": \"oauthClientId\",\n                  \"description\": \"The identifier of the OAuth client to retrieve failures for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"WebhookFailureEvent\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userSettings\",\n              \"description\": \"The user's settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserSettings\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"users\",\n              \"description\": \"All users for the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned users.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned users.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"UserSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"One specific user.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user to retrieve. To retrieve the authenticated user, use `viewer` query.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewer\",\n              \"description\": \"The currently authenticated user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userSessions\",\n              \"description\": \"Lists the sessions of a user. Can only be called by an admin or owner.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user to list sessions of.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuthenticationSessionResponse\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilities\",\n              \"description\": \"All triage responsibilities.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TriageResponsibilityConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibility\",\n              \"description\": \"A specific triage responsibility.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the triage responsibility to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TriageResponsibility\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeSchedules\",\n              \"description\": \"All time schedules.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeScheduleConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeSchedule\",\n              \"description\": \"A specific time schedule.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the time schedule to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedule\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templates\",\n              \"description\": \"All templates from all users.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Template\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"template\",\n              \"description\": \"A specific template.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the template to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Template\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templatesForIntegration\",\n              \"description\": \"Returns all templates that are associated with the integration type.\",\n              \"args\": [\n                {\n                  \"name\": \"integrationType\",\n                  \"description\": \"The type of integration for which to return associated templates.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Template\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"All projects.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned projects.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned projects.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"ProjectSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"One specific project.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectFilterSuggestion\",\n              \"description\": \"Suggests filters for a project view based on a text prompt.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"[Internal] The ID of the team if filtering a team view.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"prompt\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectFilterSuggestionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"All teams whose issues can be accessed by the user. This might be different from `administrableTeams`, which also includes teams whose settings can be changed by the user.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned teams.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"administrableTeams\",\n              \"description\": \"All teams you the user can administrate. Administrable teams are teams whose settings the user can change, but to whose issues the user doesn't necessarily have access to.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned teams.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"One specific team.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMemberships\",\n              \"description\": \"All team memberships.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembershipConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMembership\",\n              \"description\": \"One specific team membership.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembership\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"semanticSearch\",\n              \"description\": \"Search for various resources using natural language.\",\n              \"args\": [\n                {\n                  \"name\": \"query\",\n                  \"description\": \"Search query to look for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"types\",\n                  \"description\": \"The types of results to return (default: all).\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"ENUM\",\n                        \"name\": \"SemanticSearchResultType\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"maxResults\",\n                  \"description\": \"The maximum number of results to return (default: 50).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Whether to include archived results in the search (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"filters\",\n                  \"description\": \"Filters to apply to the semantic search results of each type.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"SemanticSearchFilters\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SemanticSearchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"searchDocuments\",\n              \"description\": \"Search documents.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"term\",\n                  \"description\": \"Search string to look for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeComments\",\n                  \"description\": \"Should associated comments be searched (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"UUID of a team to use as a boost.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentSearchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"searchProjects\",\n              \"description\": \"Search projects.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"term\",\n                  \"description\": \"Search string to look for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeComments\",\n                  \"description\": \"Should associated comments be searched (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"UUID of a team to use as a boost.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectSearchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"searchIssues\",\n              \"description\": \"Search issues.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"term\",\n                  \"description\": \"Search string to look for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeComments\",\n                  \"description\": \"Should associated comments be searched (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"UUID of a team to use as a boost.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSearchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapToProjects\",\n              \"description\": null,\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapToProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"RoadmapToProject is deprecated, use InitiativeToProject instead.\"\n            },\n            {\n              \"name\": \"roadmapToProject\",\n              \"description\": \"One specific roadmapToProject.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapToProject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"RoadmapToProject is deprecated, use InitiativeToProject instead.\"\n            },\n            {\n              \"name\": \"roadmaps\",\n              \"description\": \"All roadmaps in the workspace.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"roadmap\",\n              \"description\": \"One specific roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Roadmap\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"releaseStages\",\n              \"description\": \"[ALPHA] All release stages.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStageConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseStage\",\n              \"description\": \"[ALPHA] One specific release stage.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStage\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releases\",\n              \"description\": \"[ALPHA] All releases.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned releases.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ReleaseFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": \"[ALPHA] One specific release.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Release\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseSearch\",\n              \"description\": \"[ALPHA] Search releases by term with ranked results.\",\n              \"args\": [\n                {\n                  \"name\": \"first\",\n                  \"description\": \"Maximum results. Capped at 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"20\"\n                },\n                {\n                  \"name\": \"term\",\n                  \"description\": \"Search term to match against release name, version, and pipeline name.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Release\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelines\",\n              \"description\": \"[ALPHA] All release pipelines.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipelineConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipeline\",\n              \"description\": \"[ALPHA] One specific release pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipeline\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineByAccessKey\",\n              \"description\": \"[ALPHA] Returns a release pipeline by ID. Requires the access key to have access to the pipeline.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipeline\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"latestReleaseByAccessKey\",\n              \"description\": \"[ALPHA] Returns the latest release for the pipeline associated with the access key.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Release\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rateLimitStatus\",\n              \"description\": \"The status of the rate limiter.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RateLimitPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pushSubscriptionTest\",\n              \"description\": \"Sends a test push message.\",\n              \"args\": [\n                {\n                  \"name\": \"targetMobile\",\n                  \"description\": \"Whether to send to mobile devices.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                },\n                {\n                  \"name\": \"sendStrategy\",\n                  \"description\": \"The send strategy to use.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"SendStrategy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"push\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PushSubscriptionTestPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdates\",\n              \"description\": \"All project updates.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project updates.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectUpdateFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"A specific project update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project update to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatuses\",\n              \"description\": \"All project statuses.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatusConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatusProjectCount\",\n              \"description\": \"[INTERNAL] Count of projects using this project status across the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project status to find the project count for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatusCountPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatus\",\n              \"description\": \"One specific project status.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRelations\",\n              \"description\": \"All project relationships.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRelation\",\n              \"description\": \"One specific project relation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestones\",\n              \"description\": \"All milestones for the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project milestones.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestoneConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"One specific project milestone.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestone\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabels\",\n              \"description\": \"All project labels.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabel\",\n              \"description\": \"One specific label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The user's organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationExists\",\n              \"description\": \"Does the organization exist.\",\n              \"args\": [\n                {\n                  \"name\": \"urlKey\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationExistsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedTeams\",\n              \"description\": \"[Internal] All archived teams of the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Team\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationMeta\",\n              \"description\": \"[INTERNAL] Get organization metadata by urlKey or organization id.\",\n              \"args\": [\n                {\n                  \"name\": \"urlKey\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"OrganizationMeta\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationInvites\",\n              \"description\": \"All invites for the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationInviteConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationInvite\",\n              \"description\": \"One specific organization invite.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationInvite\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationInviteDetails\",\n              \"description\": \"One specific organization invite.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"UNION\",\n                  \"name\": \"OrganizationInviteDetailsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomainClaimRequest\",\n              \"description\": \"[INTERNAL] Checks whether the domain can be claimed.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The ID of the organization domain to claim.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDomainClaimPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptions\",\n              \"description\": \"The user's notification subscriptions.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationSubscriptionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscription\",\n              \"description\": \"One specific notification subscription.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INTERFACE\",\n                  \"name\": \"NotificationSubscription\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notifications\",\n              \"description\": \"All notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filters returned notifications.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NotificationFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationsUnreadCount\",\n              \"description\": \"[Internal] A number of unread notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notification\",\n              \"description\": \"One specific notification.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INTERFACE\",\n                  \"name\": \"Notification\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueToReleases\",\n              \"description\": \"[ALPHA] Returns a list of issue to release entities.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueToReleaseConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueToRelease\",\n              \"description\": \"[ALPHA] One specific issueToRelease.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueToRelease\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"All issues.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned issues.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"IssueSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"One specific issue.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueSearch\",\n              \"description\": \"[DEPRECATED] Search issues. This endpoint is deprecated and will be removed in the future – use `searchIssues` instead.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"query\",\n                  \"description\": \"[Deprecated] Search string to look for.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueVcsBranchSearch\",\n              \"description\": \"Find issue based on the VCS branch name.\",\n              \"args\": [\n                {\n                  \"name\": \"branchName\",\n                  \"description\": \"The VCS branch name to search for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueFigmaFileKeySearch\",\n              \"description\": \"Find issues that are related to a given Figma file key.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"fileKey\",\n                  \"description\": \"The Figma file key.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issuePriorityValues\",\n              \"description\": \"Issue priority values and corresponding labels.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssuePriorityValue\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueFilterSuggestion\",\n              \"description\": \"Suggests filters for an issue view based on a text prompt.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"[Internal] The ID of the team if filtering a team view.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"projectId\",\n                  \"description\": \"The ID of the project if filtering a project view.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"prompt\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueFilterSuggestionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRepositorySuggestions\",\n              \"description\": \"Returns code repositories that are most likely to be relevant for implementing an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"agentSessionId\",\n                  \"description\": \"Optional AgentSession ID associated with the issue for which the suggestions are being generated.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"candidateRepositories\",\n                  \"description\": \"List of candidate repositories to restrict suggestions to.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"LIST\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"NON_NULL\",\n                        \"name\": null,\n                        \"ofType\": {\n                          \"kind\": \"INPUT_OBJECT\",\n                          \"name\": \"CandidateRepository\",\n                          \"ofType\": null\n                        }\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The ID of the issue to get repository suggestions for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RepositorySuggestionsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRelations\",\n              \"description\": \"All issue relationships.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRelation\",\n              \"description\": \"One specific issue relation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabels\",\n              \"description\": \"All issue labels.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issue labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabel\",\n              \"description\": \"One specific label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCheckCSV\",\n              \"description\": \"Checks a CSV file validity against a specific import service.\",\n              \"args\": [\n                {\n                  \"name\": \"csvUrl\",\n                  \"description\": \"CSV storage url.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"service\",\n                  \"description\": \"The service the CSV containing data from.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportCheckPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCheckSync\",\n              \"description\": \"Checks whether it will be possible to setup sync for this project or repository at the end of import\",\n              \"args\": [\n                {\n                  \"name\": \"issueImportId\",\n                  \"description\": \"The ID of the issue import for which to check sync eligibility\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportSyncCheckPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportJqlCheck\",\n              \"description\": \"Checks whether a custom JQL query is valid and can be used to filter issues of a Jira import\",\n              \"args\": [\n                {\n                  \"name\": \"jiraHostname\",\n                  \"description\": \"Jira installation or cloud hostname.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraToken\",\n                  \"description\": \"Jira personal access token to access Jira REST API.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraEmail\",\n                  \"description\": \"Jira user account email.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraProject\",\n                  \"description\": \"Jira project key to use as the base filter of the query.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jql\",\n                  \"description\": \"The JQL query to validate.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportJqlCheckPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettings\",\n              \"description\": \"One specific set of settings.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationsSettings\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationTemplates\",\n              \"description\": \"Template and integration connections.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationTemplateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationTemplate\",\n              \"description\": \"One specific integrationTemplate.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationTemplate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrations\",\n              \"description\": \"All integrations.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"One specific integration.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Integration\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"verifyGitHubEnterpriseServerInstallation\",\n              \"description\": \"Verify that we received the correct response from the GitHub Enterprise Server.\",\n              \"args\": [\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The integration ID.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitHubEnterpriseServerInstallVerificationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationHasScopes\",\n              \"description\": \"Checks if the integration has all required scopes.\",\n              \"args\": [\n                {\n                  \"name\": \"scopes\",\n                  \"description\": \"Required scopes.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"LIST\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"NON_NULL\",\n                        \"name\": null,\n                        \"ofType\": {\n                          \"kind\": \"SCALAR\",\n                          \"name\": \"String\",\n                          \"ofType\": null\n                        }\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The integration ID.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationHasScopesPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdates\",\n              \"description\": \"All  InitiativeUpdates.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned initiative updates.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdateFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"A specific  initiative update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the  initiative update to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProjects\",\n              \"description\": \"returns a list of initiative to project entities.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProject\",\n              \"description\": \"One specific initiativeToProject.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"All initiatives in the workspace.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned initiatives.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned initiatives.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"InitiativeSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"One specific initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeRelations\",\n              \"description\": \"All initiative relationships.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeRelation\",\n              \"description\": \"One specific initiative relation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fetchData\",\n              \"description\": \"[Internal] Fetch an arbitrary set of data using natural language query. Be specific about what you want including properties for each entity, sort order, filters, limit and properties.\",\n              \"args\": [\n                {\n                  \"name\": \"query\",\n                  \"description\": \"Natural language query describing what data to fetch.\\n    \\n    Examples:\\n    - \\\"All issues for the project with id 12345678-1234-1234-1234-123456789abc including comments\\\"\\n    - \\\"The latest project update for each project that's a part of the initiative with id 12345678-1234-1234-1234-123456789abc, including it's sub-initiatives\\\"\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FetchDataPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorites\",\n              \"description\": \"The user's favorites.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FavoriteConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorite\",\n              \"description\": \"One specific favorite.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Favorite\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUsers\",\n              \"description\": \"All external users for the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ExternalUserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUser\",\n              \"description\": \"One specific external user.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the external user to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ExternalUser\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityExternalLink\",\n              \"description\": \"One specific entity link.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLink\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emojis\",\n              \"description\": \"All custom emojis.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmojiConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emoji\",\n              \"description\": \"A specific emoji.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier or the name of the emoji to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Emoji\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailIntakeAddress\",\n              \"description\": \"One specific email intake address.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailIntakeAddress\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"All documents in the workspace.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"One specific document.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Document\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContentHistory\",\n              \"description\": \"A collection of document content history entries.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentContentHistoryPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycles\",\n              \"description\": \"All cycles.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned users.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CycleFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CycleConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"One specific cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Cycle\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTiers\",\n              \"description\": \"All customer tiers.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerTierConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTier\",\n              \"description\": \"One specific customer tier.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerTier\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerStatuses\",\n              \"description\": \"All customer statuses.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatusConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerStatus\",\n              \"description\": \"One specific customer status.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customers\",\n              \"description\": \"All customers.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned customers.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sorts\",\n                  \"description\": \"Sort returned customers.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"CustomerSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"One specific customer.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Customer\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeeds\",\n              \"description\": \"All customer needs.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned customers needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeed\",\n              \"description\": \"One specific customer need\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the need to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"hash\",\n                  \"description\": \"The hash of the need to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeed\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueTitleSuggestionFromCustomerRequest\",\n              \"description\": \"Suggests issue title based on a customer request.\",\n              \"args\": [\n                {\n                  \"name\": \"request\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueTitleSuggestionFromCustomerRequestPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViews\",\n              \"description\": \"Custom views for the user.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned custom views.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomViewFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"sort\",\n                  \"description\": \"[INTERNAL] Sort returned custom views.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"INPUT_OBJECT\",\n                        \"name\": \"CustomViewSortInput\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomViewConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"One specific custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomView\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewDetailsSuggestion\",\n              \"description\": \"[INTERNAL] Suggests metadata for a view based on it's filters.\",\n              \"args\": [\n                {\n                  \"name\": \"modelName\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"filter\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"JSONObject\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomViewSuggestionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewHasSubscribers\",\n              \"description\": \"Whether a custom view has other subscribers than the current user in the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the custom view.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomViewHasSubscribersPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"All comments.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"A specific comment.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the comment to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"hash\",\n                  \"description\": \"The hash of the comment to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Comment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"availableUsers\",\n              \"description\": \"Fetch users belonging to this user account.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthResolverResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"authenticationSessions\",\n              \"description\": \"User's active sessions.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuthenticationSessionResponse\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoUrlFromEmail\",\n              \"description\": \"Fetch SSO login URL for the email provided.\",\n              \"args\": [\n                {\n                  \"name\": \"isDesktop\",\n                  \"description\": \"Whether the client is the desktop app.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"type\",\n                  \"description\": \"Type of identity provider.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"IdentityProviderType\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": \"general\"\n                },\n                {\n                  \"name\": \"email\",\n                  \"description\": \"Email to query the SSO login URL by.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SsoUrlFromEmailResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"auditEntryTypes\",\n              \"description\": \"List of audit entry types.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuditEntryType\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"auditEntries\",\n              \"description\": \"All audit log entries.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned audit entries.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AuditEntryFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuditEntryConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"All issue attachments.\\n\\nTo get attachments for a given URL, use `attachmentsForURL` query.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned attachments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachment\",\n              \"description\": \"\\nOne specific issue attachment.\\n[Deprecated] 'url' can no longer be used as the 'id' parameter. Use 'attachmentsForUrl' instead\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Attachment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentsForURL\",\n              \"description\": \"Returns issue attachments for a given `url`.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The attachment URL.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentIssue\",\n              \"description\": \"\\nQuery an issue by its associated attachment, and its id.\\n\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"`id` of the attachment for which you'll want to get the issue for. [Deprecated] `url` as the `id` parameter.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Will be removed in near future, please use `attachmentsForURL` to get attachments and their issues instead.\"\n            },\n            {\n              \"name\": \"attachmentSources\",\n              \"description\": \"[Internal] Get a list of all unique attachment sources in the workspace.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"(optional) if provided will only return attachment sources for the given team.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentSourcesPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"applicationInfo\",\n              \"description\": \"Get basic information for an application.\",\n              \"args\": [\n                {\n                  \"name\": \"clientId\",\n                  \"description\": \"The client ID of the application.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Application\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessions\",\n              \"description\": \"All agent sessions.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSession\",\n              \"description\": \"A specific agent session.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the agent session to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSession\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionSandbox\",\n              \"description\": \"[Internal] Retrieves the coding agent sandbox for a given agent session ID.\",\n              \"args\": [\n                {\n                  \"name\": \"agentSessionId\",\n                  \"description\": \"The identifier of the agent session.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CodingAgentSandboxPayload\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentActivities\",\n              \"description\": \"All agent activities.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned agent activities.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentActivityFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivityConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentActivity\",\n              \"description\": \"A specific agent activity.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the agent activity to retrieve.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivity\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettings\",\n          \"description\": \"The settings of a user as a JSON object.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationDeliveryPreferences\",\n              \"description\": \"The notification delivery preferences for the user. Note: notificationDisabled field is deprecated in favor of notificationChannelPreferences.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"unsubscribedFrom\",\n              \"description\": \"The email types the user has unsubscribed from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use individual subscription fields instead. This field's value is now outdated.\"\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user associated with these settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"calendarHash\",\n              \"description\": \"Hash for the user to be used in calendar URLs.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscribedToChangelog\",\n              \"description\": \"Whether this user is subscribed to changelog email or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscribedToDPA\",\n              \"description\": \"Whether this user is subscribed to DPA emails or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscribedToInviteAccepted\",\n              \"description\": \"Whether this user is subscribed to invite accepted emails or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscribedToPrivacyLegalUpdates\",\n              \"description\": \"Whether this user is subscribed to privacy and legal update emails or not.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedSummarySchedule\",\n              \"description\": \"The user's feed summary schedule preference.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FeedSummarySchedule\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"showFullUserNames\",\n              \"description\": \"Whether to show full user names instead of display names.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedLastSeenTime\",\n              \"description\": \"The user's last seen time for the pulse feed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoAssignToSelf\",\n              \"description\": \"Whether to auto-assign newly created issues to the current user by default.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationCategoryPreferences\",\n              \"description\": \"The user's notification category preferences.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationCategoryPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationChannelPreferences\",\n              \"description\": \"The user's notification channel preferences.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"theme\",\n              \"description\": \"The user's theme for a given mode and device type.\",\n              \"args\": [\n                {\n                  \"name\": \"deviceType\",\n                  \"description\": \"The device type.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"UserSettingsThemeDeviceType\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"desktop\"\n                },\n                {\n                  \"name\": \"mode\",\n                  \"description\": \"The theme color mode.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"UserSettingsThemeMode\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"light\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"UserSettingsTheme\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationDeliveryPreferences\",\n          \"description\": \"A user's notification delivery preferences.\",\n          \"fields\": [\n            {\n              \"name\": \"mobile\",\n              \"description\": \"The delivery preferences for the mobile channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"NotificationDeliveryPreferencesChannel\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesChannel\",\n          \"description\": \"A user's notification delivery preferences.\",\n          \"fields\": [\n            {\n              \"name\": \"notificationsDisabled\",\n              \"description\": \"[DEPRECATED] Whether notifications are enabled for this channel. Use notificationChannelPreferences instead.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"This field has been replaced by notificationChannelPreferences\"\n            },\n            {\n              \"name\": \"schedule\",\n              \"description\": \"The schedule for notifications on this channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"NotificationDeliveryPreferencesSchedule\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesSchedule\",\n          \"description\": \"A user's notification delivery schedule for a particular day.\",\n          \"fields\": [\n            {\n              \"name\": \"disabled\",\n              \"description\": \"Whether the schedule is disabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sunday\",\n              \"description\": \"Delivery preferences for Sunday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"monday\",\n              \"description\": \"Delivery preferences for Monday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tuesday\",\n              \"description\": \"Delivery preferences for Tuesday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"wednesday\",\n              \"description\": \"Delivery preferences for Wednesday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"thursday\",\n              \"description\": \"Delivery preferences for Thursday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"friday\",\n              \"description\": \"Delivery preferences for Friday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"saturday\",\n              \"description\": \"Delivery preferences for Saturday.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDay\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesDay\",\n          \"description\": \"A user's notification delivery schedule for a particular day.\",\n          \"fields\": [\n            {\n              \"name\": \"start\",\n              \"description\": \"The time notifications start.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"end\",\n              \"description\": \"The time notifications end.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationCategoryPreferences\",\n          \"description\": \"A user's notification category preferences.\",\n          \"fields\": [\n            {\n              \"name\": \"assignments\",\n              \"description\": \"The preferences for notifications about assignments.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"statusChanges\",\n              \"description\": \"The preferences for notifications about status changes.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentsAndReplies\",\n              \"description\": \"The preferences for notifications about comments and replies.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mentions\",\n              \"description\": \"The preferences for notifications about mentions.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"The preferences for notifications about reactions.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriptions\",\n              \"description\": \"The preferences for notifications about subscriptions.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentChanges\",\n              \"description\": \"The preferences for notifications about document changes.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"postsAndUpdates\",\n              \"description\": \"The preferences for notifications about posts and updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reminders\",\n              \"description\": \"The preferences for notifications about reminders.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviews\",\n              \"description\": \"The preferences for notifications about reviews.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"appsAndIntegrations\",\n              \"description\": \"The preferences for notifications about apps and integrations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"system\",\n              \"description\": \"The preferences for system notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triage\",\n              \"description\": \"The preferences for triage notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customers\",\n              \"description\": \"The preferences for customer notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feed\",\n              \"description\": \"The preferences for feed summary notifications.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationChannelPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationChannelPreferences\",\n          \"description\": \"A user's notification channel preferences, indicating if a channel is enabled or not\",\n          \"fields\": [\n            {\n              \"name\": \"mobile\",\n              \"description\": \"Whether notifications are currently enabled for mobile.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktop\",\n              \"description\": \"Whether notifications are currently enabled for desktop.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Whether notifications are currently enabled for email.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slack\",\n              \"description\": \"Whether notifications are currently enabled for Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettingsTheme\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"preset\",\n              \"description\": \"The theme preset.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"UserSettingsThemePreset\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"custom\",\n              \"description\": \"The custom theme definition, only present when preset is 'custom'.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"UserSettingsCustomTheme\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserSettingsThemePreset\",\n          \"description\": \"Theme preset options\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"system\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"light\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pureLight\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dark\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"magicBlue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"classicDark\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"custom\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettingsCustomTheme\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"accent\",\n              \"description\": \"The accent color in LCH format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"base\",\n              \"description\": \"The base color in LCH format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contrast\",\n              \"description\": \"The contrast value.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sidebar\",\n              \"description\": \"Optional sidebar theme colors.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"UserSettingsCustomSidebarTheme\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettingsCustomSidebarTheme\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"accent\",\n              \"description\": \"The accent color in LCH format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"base\",\n              \"description\": \"The base color in LCH format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contrast\",\n              \"description\": \"The contrast value.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserSettingsThemeDeviceType\",\n          \"description\": \"Device type for theme\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"desktop\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mobileWeb\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserSettingsThemeMode\",\n          \"description\": \"Theme color mode\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"light\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dark\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserSortInput\",\n          \"description\": \"User sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"Sort by user name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserNameSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"Sort by user display name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserDisplayNameSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserNameSort\",\n          \"description\": \"User name sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserDisplayNameSort\",\n          \"description\": \"User display name sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuthenticationSessionResponse\",\n          \"description\": \"Authentication session information.\",\n          \"fields\": [\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Type of application used to authenticate.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AuthenticationSessionType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ip\",\n              \"description\": \"IP address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"locationCountry\",\n              \"description\": \"Location country name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"locationCountryCode\",\n              \"description\": \"Location country code.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"countryCodes\",\n              \"description\": \"Country codes of all seen locations.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"locationRegionCode\",\n              \"description\": \"Location region code.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"locationCity\",\n              \"description\": \"Location city name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userAgent\",\n              \"description\": \"Session's user-agent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"browserType\",\n              \"description\": \"Used web browser.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"service\",\n              \"description\": \"Service used for logging in.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastActiveAt\",\n              \"description\": \"When was the session last seen\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Date when the session was last updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"location\",\n              \"description\": \"Human readable location\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"operatingSystem\",\n              \"description\": \"Operating system used for the session\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"client\",\n              \"description\": \"Client used for the session\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Name of the session, derived from the client and operating system\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isCurrentSession\",\n              \"description\": \"Identifies the session used to make the request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"AuthenticationSessionType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"web\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktop\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ios\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"android\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TriageResponsibilityConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TriageResponsibilityEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TriageResponsibility\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TriageResponsibilityEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TriageResponsibility\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TimeScheduleConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TimeScheduleEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"TimeSchedule\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TimeScheduleEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedule\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectFilterSuggestionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"filter\",\n              \"description\": \"The json filter that is suggested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logId\",\n              \"description\": \"The log id of the prompt, that created this filter.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SemanticSearchPayload\",\n          \"description\": \"Payload returned by semantic search.\",\n          \"fields\": [\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the semantic search is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Always true.\"\n            },\n            {\n              \"name\": \"results\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"SemanticSearchResult\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SemanticSearchResult\",\n          \"description\": \"A semantic search result reference.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the semantic search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"SemanticSearchResultType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue related to the semantic search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project related to the semantic search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative related to the semantic search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"The document related to the semantic search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Document\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"SemanticSearchResultType\",\n          \"description\": \"The type of the semantic search result.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"issue\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SemanticSearchFilters\",\n          \"description\": \"Filters for semantic search results.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"issues\",\n              \"description\": \"Filters applied to issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Filters applied to projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Filters applied to initiatives.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"Filters applied to documents.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DocumentFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentSearchPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"DocumentSearchResultEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"DocumentSearchResult\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivePayload\",\n              \"description\": \"Archived entities matching the search term along with all their dependencies.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ArchiveResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"totalCount\",\n              \"description\": \"Total number of results for query without filters applied.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentSearchResultEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentSearchResult\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentSearchResult\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The document title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"summary\",\n              \"description\": \"[Internal] A one-sentence AI-generated summary of the document content.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedBy\",\n              \"description\": \"The user who last updated the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"[Internal] The team that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": \"[Internal] The release that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Release\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"[Internal] The cycle that the document is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The document's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"The last template that was applied to this document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hiddenAt\",\n              \"description\": \"The time at which the document was hidden. Null if the entity has not been hidden.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the document is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the resources list.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the document.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The documents content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentState\",\n              \"description\": \"[Internal] The documents content as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContentId\",\n              \"description\": \"The ID of the document content associated with the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The canonical url for the document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Metadata related to search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ArchiveResponse\",\n          \"description\": \"Contains requested archived model objects.\",\n          \"fields\": [\n            {\n              \"name\": \"archive\",\n              \"description\": \"A JSON serialized collection of model objects loaded from the archive\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"totalCount\",\n              \"description\": \"The total number of entities in the archive.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"databaseVersion\",\n              \"description\": \"The version of the remote database. Incremented by 1 for each migration run on the database.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"includesDependencies\",\n              \"description\": \"Whether the dependencies for the model objects are included in the archive.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectSearchPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectSearchResultEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectSearchResult\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivePayload\",\n              \"description\": \"Archived entities matching the search term along with all their dependencies.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ArchiveResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"totalCount\",\n              \"description\": \"Total number of results for query without filters applied.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectSearchResultEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectSearchResult\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectSearchResult\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateReminderFrequency\",\n              \"description\": \"The frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"frequencyResolution\",\n              \"description\": \"The resolution of the reminder frequency.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"FrequencyResolutionType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateRemindersDay\",\n              \"description\": \"The day at which to prompt for updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateRemindersHour\",\n              \"description\": \"The hour at which to prompt for updates.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The project's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The project's description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The project's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The project's color.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The status that the project is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lead\",\n              \"description\": \"The project lead.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"facets\",\n              \"description\": \"[Internal] Facets associated with the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Facet\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersPausedUntilAt\",\n              \"description\": \"The time until which project update reminders are paused.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The estimated start date of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startDateResolution\",\n              \"description\": \"The resolution of the project's start date.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the project's estimated completion date.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time at which the project was moved into started state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The time at which the project was moved into completed state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The time at which the project was moved into canceled state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"The time at which the project was automatically archived by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the project is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The sort order for the project within the organization, when ordered by priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"convertedFromIssue\",\n              \"description\": \"The project was created based on this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"The last template that was applied to this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastUpdate\",\n              \"description\": \"The last project update posted for this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"healthUpdatedAt\",\n              \"description\": \"The time at which the project health was updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCountHistory\",\n              \"description\": \"The total number of issues in the project after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedIssueCountHistory\",\n              \"description\": \"The number of completed issues in the project after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scopeHistory\",\n              \"description\": \"The total number of estimation points after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedScopeHistory\",\n              \"description\": \"The number of completed estimation points after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inProgressScopeHistory\",\n              \"description\": \"The number of in progress estimation points after each week.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progressHistory\",\n              \"description\": \"[INTERNAL] The progress history of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"currentProgress\",\n              \"description\": \"[INTERNAL] The current progress of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackNewIssue\",\n              \"description\": \"Whether to send new issue notifications to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"slackIssueComments\",\n              \"description\": \"Whether to send new issue comment notifications to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer in use\"\n            },\n            {\n              \"name\": \"slackIssueStatuses\",\n              \"description\": \"Whether to send new issue status updates to Slack.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"No longer is use\"\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"Id of the labels associated with this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorite\",\n              \"description\": \"The user's favorite associated with this project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Favorite\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Project URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": \"Initiatives that this project belongs to.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProjects\",\n              \"description\": \"Associations of this project to parent initiatives.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Teams associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned teams.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TeamFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"members\",\n              \"description\": \"Users that are members of the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned users.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdates\",\n              \"description\": \"Project updates associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdateConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"Documents associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestones\",\n              \"description\": \"Milestones associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned milestones.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestoneConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Issues associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalLinks\",\n              \"description\": \"External links associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Attachments associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectAttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"history\",\n              \"description\": \"History entries associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectHistoryConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Labels associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned project labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"progress\",\n              \"description\": \"The overall progress of the project. This is the (completed estimate points + 0.25 * in progress estimate points) / total estimate points.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scope\",\n              \"description\": \"The overall scope (total estimate points) of the project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettings\",\n              \"description\": \"Settings for all integrations associated with that project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IntegrationsSettings\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The project's content in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentState\",\n              \"description\": \"[Internal] The project's content as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"The content of the project description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the project overview.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relations\",\n              \"description\": \"Relations associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inverseRelations\",\n              \"description\": \"Inverse relations associated with this project.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Customer needs associated with the project.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"[DEPRECATED] The type of the state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use project.status instead\"\n            },\n            {\n              \"name\": \"priorityLabel\",\n              \"description\": \"The priority of the project as a label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"syncedWith\",\n              \"description\": \"The external services the project is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ExternalEntityInfo\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Metadata related to search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSearchPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueSearchResultEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueSearchResult\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivePayload\",\n              \"description\": \"Archived entities matching the search term along with all their dependencies.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ArchiveResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"totalCount\",\n              \"description\": \"Total number of results for query without filters applied.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSearchResultEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSearchResult\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueSearchResult\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"The issue's unique number.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The issue's title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"The estimate of the complexity of the issue..\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"boardOrder\",\n              \"description\": \"The order of the item in its column on the board.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Will be removed in near future, please use `sortOrder` instead\"\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in relation to other items in the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The order of the item in relation to other items in the organization, when ordered by priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"The time at which the issue was moved into started state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The time at which the issue was moved into completed state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedTriageAt\",\n              \"description\": \"The time at which the issue entered triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triagedAt\",\n              \"description\": \"The time at which the issue left triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The time at which the issue was moved into canceled state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoClosedAt\",\n              \"description\": \"The time at which the issue was automatically closed by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoArchivedAt\",\n              \"description\": \"The time at which the issue was automatically archived by the auto pruning process.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"The date at which the issue is due.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaStartedAt\",\n              \"description\": \"The time at which the issue's SLA began.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaMediumRiskAt\",\n              \"description\": \"The time at which the issue's SLA will enter medium risk state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaHighRiskAt\",\n              \"description\": \"The time at which the issue's SLA will enter high risk state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaBreachesAt\",\n              \"description\": \"The time at which the issue's SLA will breach.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slaType\",\n              \"description\": \"The type of SLA set on the issue. Calendar days or business days.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToProjectAt\",\n              \"description\": \"The time at which the issue was added to a project.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToCycleAt\",\n              \"description\": \"The time at which the issue was added to a cycle.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addedToTeamAt\",\n              \"description\": \"The time at which the issue was added to a team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"A flag that indicates whether the issue is in the trash bin.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until an issue will be snoozed in Triage view.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestionsGeneratedAt\",\n              \"description\": \"[Internal] The time at which the most recent suggestions for this issue were generated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activitySummary\",\n              \"description\": \"[Internal] The activity summary information for this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"summary\",\n              \"description\": \"[Internal] AI-generated activity summary for this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Summary\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"Id of the labels associated with this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Team\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The cycle that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"The projectMilestone that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestone\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplate\",\n              \"description\": \"The last template that was applied to this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"recurringIssueTemplate\",\n              \"description\": \"The recurring issue template that created this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"previousIdentifiers\",\n              \"description\": \"Previous identifiers of the issue if it has been moved between teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"externalUserCreator\",\n              \"description\": \"The external user who created the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assignee\",\n              \"description\": \"The user to whom the issue is assigned to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"delegate\",\n              \"description\": \"The agent user that is delegated to work on this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"snoozedBy\",\n              \"description\": \"The user who snoozed the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"state\",\n              \"description\": \"The workflow state that the issue is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subIssueSortOrder\",\n              \"description\": \"The order of the item in the sub-issue list. Only set if the issue has a parent.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionData\",\n              \"description\": \"Emoji reaction summary, grouped by emoji type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priorityLabel\",\n              \"description\": \"Label for the priority.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sourceComment\",\n              \"description\": \"The comment that this issue was created from.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Comment\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSourceType\",\n              \"description\": \"Integration type that created this issue, if applicable.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"IntegrationService\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documents\",\n              \"description\": \"Documents associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned documents.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"DocumentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botActor\",\n              \"description\": \"The bot that created the issue, if applicable.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ActorBot\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorite\",\n              \"description\": \"The users favorite associated with this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Favorite\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"identifier\",\n              \"description\": \"Issue's human readable identifier (e.g. ENG-123).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Issue URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"branchName\",\n              \"description\": \"Suggested branch name for the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sharedAccess\",\n              \"description\": \"Shared access metadata for this issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSharedAccess\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTicketCount\",\n              \"description\": \"Returns the number of Attachment resources which are created by customer support ticketing systems (e.g. Zendesk).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscribers\",\n              \"description\": \"Users who are subscribed to the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned subscribers.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"UserFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeDisabled\",\n                  \"description\": \"Should query return disabled/suspended users (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"parent\",\n              \"description\": \"The parent of the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"children\",\n              \"description\": \"Children of the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issues.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comments\",\n              \"description\": \"Comments associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned comments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CommentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"history\",\n              \"description\": \"History entries associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueHistoryConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"Labels associated with this issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned issue labels.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueLabelFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relations\",\n              \"description\": \"Relations associated with this issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inverseRelations\",\n              \"description\": \"Inverse relations associated with this issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachments\",\n              \"description\": \"Attachments associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned attachments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"formerAttachments\",\n              \"description\": \"Attachments previously associated with the issue before being moved to another issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned attachments.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AttachmentFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The issue's description in markdown format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"descriptionState\",\n              \"description\": \"[Internal] The issue's description content as YJS state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentContent\",\n              \"description\": \"[ALPHA] The document content representing this issue description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"DocumentContent\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Reactions associated with the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Reaction\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Customer needs associated with the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"formerNeeds\",\n              \"description\": \"Customer needs previously associated with the issue before being moved to another issue.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned needs.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerNeedFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"syncedWith\",\n              \"description\": \"The external services the issue is synced with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ExternalEntityInfo\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"suggestions\",\n              \"description\": \"[Internal] Product Intelligence suggestions for the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSuggestionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"incomingSuggestions\",\n              \"description\": \"[Internal] Incoming product intelligence relation suggestions for the issue.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueSuggestionConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asksRequester\",\n              \"description\": \"The internal user who requested creation of the Asks issue on behalf of the creator.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asksExternalUserRequester\",\n              \"description\": \"The external user who requested creation of the Asks issue on behalf of the creator.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ExternalUser\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"stateHistory\",\n              \"description\": \"The issue's workflow states over time.\",\n              \"args\": [\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueStateSpanConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Metadata related to search result.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapToProjectConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"RoadmapToProjectEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"RoadmapToProject\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapToProjectEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapToProject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapToProject\",\n          \"description\": \"[Deprecated] Join table between projects and roadmaps.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that the roadmap is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Project\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmap\",\n              \"description\": \"The roadmap that the project is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Roadmap\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the project within the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Roadmap\",\n          \"description\": \"[Deprecated] A roadmap for projects.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization of the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"The user who owns the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The roadmap's unique URL slug.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the roadmap within the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The roadmap's color.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"Projects associated with the roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"filter\",\n                  \"description\": \"Filter returned projects.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectFilter\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"before\",\n                  \"description\": \"A cursor to be used with last for backward pagination.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"after\",\n                  \"description\": \"A cursor to be used with first for forward pagination\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"first\",\n                  \"description\": \"The number of items to forward paginate (used with after). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"last\",\n                  \"description\": \"The number of items to backward paginate (used with before). Defaults to 50.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Int\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeArchived\",\n                  \"description\": \"Should archived resources be included (default: false)\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"orderBy\",\n                  \"description\": \"By which field should the pagination order by. Available options are createdAt (default) and updatedAt.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"PaginationOrderBy\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectConnection\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The canonical url for the roadmap.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"RoadmapEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Roadmap\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Roadmap\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleasePipelineConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ReleasePipelineEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ReleasePipeline\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleasePipelineEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipeline\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RateLimitPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"identifier\",\n              \"description\": \"The identifier we rate limit on.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"kind\",\n              \"description\": \"The kind of rate limit selected for this request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"limits\",\n              \"description\": \"The state of the rate limit.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"RateLimitResultPayload\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RateLimitResultPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"What is being rate limited.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"requestedAmount\",\n              \"description\": \"The requested quantity for this type of limit.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowedAmount\",\n              \"description\": \"The total allowed quantity for this type of limit.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"period\",\n              \"description\": \"The period in which the rate limit is fully replenished in ms.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"remainingAmount\",\n              \"description\": \"The remaining quantity for this type of limit after this request.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reset\",\n              \"description\": \"The timestamp after the rate limit is fully replenished as a UNIX timestamp.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PushSubscriptionTestPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"SendStrategy\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"desktopThenPush\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktopAndPush\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktop\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"push\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectStatusConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectStatusEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ProjectStatus\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectStatusEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectStatusCountPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"count\",\n              \"description\": \"Total number of projects using this project status.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"privateCount\",\n              \"description\": \"Total number of projects using this project status that are not visible to the user because they are in a private team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedTeamCount\",\n              \"description\": \"Total number of projects using this project status that are not visible to the user because they are in an archived team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationExistsPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"exists\",\n              \"description\": \"Whether the organization exists.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationMeta\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"region\",\n              \"description\": \"The region the organization is hosted in.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowedAuthServices\",\n              \"description\": \"Allowed authentication providers, empty array means all are allowed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationInviteConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"OrganizationInviteEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"OrganizationInvite\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationInviteEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationInvite\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationInvite\",\n          \"description\": \"An invitation to the organization that has been sent via email.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The invitees email address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"role\",\n              \"description\": \"The user role that the invitee will receive upon accepting the invite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"UserRoleType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"external\",\n              \"description\": \"The invite was sent to external address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"acceptedAt\",\n              \"description\": \"The time at which the invite was accepted. Null, if the invite hasn't been accepted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"expiresAt\",\n              \"description\": \"The time at which the invite will be expiring. Null, if the invite shouldn't expire.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Extra metadata associated with the organization invite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inviter\",\n              \"description\": \"The user who created the invitation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"User\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"invitee\",\n              \"description\": \"The user who has accepted the invite. Null, if the invite hasn't been accepted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the invite is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserRoleType\",\n          \"description\": \"The different permission roles available to users on an organization.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"owner\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"admin\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"guest\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"app\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"UNION\",\n          \"name\": \"OrganizationInviteDetailsPayload\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OrganizationInviteFullDetailsPayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"OrganizationAcceptedOrExpiredInviteDetailsPayload\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationInviteFullDetailsPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the invite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"OrganizationInviteStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inviter\",\n              \"description\": \"The name of the inviter.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The email of the invitee.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"role\",\n              \"description\": \"What user role the invite should grant.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"UserRoleType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"When the invite was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationName\",\n              \"description\": \"Name of the workspace the invite is for.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationId\",\n              \"description\": \"ID of the workspace the invite is for.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationLogoUrl\",\n              \"description\": \"URL of the workspace logo the invite is for.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"accepted\",\n              \"description\": \"Whether the invite has already been accepted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"expired\",\n              \"description\": \"Whether the invite has expired.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowedAuthServices\",\n              \"description\": \"Allowed authentication providers, empty array means all are allowed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"OrganizationInviteStatus\",\n          \"description\": \"The different statuses possible for an organization invite.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"pending\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"accepted\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"expired\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationAcceptedOrExpiredInviteDetailsPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"status\",\n              \"description\": \"The status of the invite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"OrganizationInviteStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationDomainClaimPayload\",\n          \"description\": \"[INTERNAL] Domain claim request response.\",\n          \"fields\": [\n            {\n              \"name\": \"verificationString\",\n              \"description\": \"String to put into DNS for verification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationSubscriptionConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"NotificationSubscriptionEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INTERFACE\",\n                      \"name\": \"NotificationSubscription\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationSubscriptionEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INTERFACE\",\n                  \"name\": \"NotificationSubscription\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"NotificationEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INTERFACE\",\n                      \"name\": \"Notification\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INTERFACE\",\n                  \"name\": \"Notification\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationFilter\",\n          \"description\": \"Notification filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the notification type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"Comparator for the archived at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the notification.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NotificationFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the notification.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"NotificationFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueToReleaseConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueToReleaseEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IssueToRelease\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueToReleaseEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueToRelease\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueToRelease\",\n          \"description\": \"[Internal] Join table between issues and releases.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue associated with the release.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Issue\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": \"The release associated with the issue.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Release\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssuePriorityValue\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"priority\",\n              \"description\": \"Priority's number value.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"Priority's label.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueFilterSuggestionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"filter\",\n              \"description\": \"The json filter that is suggested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logId\",\n              \"description\": \"The log id of the prompt, that created this filter.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RepositorySuggestionsPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"suggestions\",\n              \"description\": \"The suggested repositories.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"RepositorySuggestion\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RepositorySuggestion\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"repositoryFullName\",\n              \"description\": \"The full name of the repository in owner/name format (e.g., 'acme/backend').\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hostname\",\n              \"description\": \"Hostname of the Git service (e.g., 'github.com', 'github.company.com').\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"confidence\",\n              \"description\": \"Confidence score from 0.0 to 1.0.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CandidateRepository\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"repositoryFullName\",\n              \"description\": \"The full name of the repository in owner/name format (e.g., 'acme/backend').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hostname\",\n              \"description\": \"Hostname of the Git service (e.g., 'github.com', 'github.company.com').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueImportCheckPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueImportSyncCheckPayload\",\n          \"description\": \"Whether an issue import can be synced at the end of an import or not\",\n          \"fields\": [\n            {\n              \"name\": \"canSync\",\n              \"description\": \"Returns true if the import can be synced, false otherwise\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": \"An error message with a root cause of why the import cannot be synced\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueImportJqlCheckPayload\",\n          \"description\": \"Whether a custom JQL query is valid or not\",\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Returns true if the JQL query has been validated successfully, false otherwise\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"count\",\n              \"description\": \"Returns an approximate number of issues matching the JQL query, if available\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": \"An error message returned by Jira when validating the JQL query.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationTemplateConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IntegrationTemplateEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"IntegrationTemplate\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationTemplateEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationTemplate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationTemplate\",\n          \"description\": \"Join table between templates and integrations.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"template\",\n              \"description\": \"The template that the integration is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Template\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that the template is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Integration\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"foreignEntityId\",\n              \"description\": \"ID of the foreign entity in the external integration this template is for, e.g., Slack channel ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitHubEnterpriseServerInstallVerificationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Has the install been successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationHasScopesPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"hasAllScopes\",\n              \"description\": \"Whether the integration has the required scopes.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"missingScopes\",\n              \"description\": \"The missing scopes.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdateFilter\",\n          \"description\": \"Options for filtering initiative updates.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"Filters that the initiative update creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"Filters that the initiative update initiative must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"Filters that the initiative updates reactions must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReactionCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the InitiativeUpdate.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the InitiativeUpdate.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InitiativeUpdateFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeRelationConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeRelationEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"InitiativeRelation\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeRelationEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeRelation\",\n          \"description\": \"A relation representing the dependency between two initiatives.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The parent initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"relatedInitiative\",\n              \"description\": \"The child initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The last user who created or modified the relation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the relation within the initiative.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FetchDataPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"data\",\n              \"description\": \"The fetched data based on the natural language query.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"query\",\n              \"description\": \"The GraphQL query used to fetch the data.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"filters\",\n              \"description\": \"The filters used to fetch the data.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the fetch operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalUserConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ExternalUserEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"ExternalUser\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ExternalUserEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ExternalUser\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmojiConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"EmojiEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Emoji\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmojiEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Emoji\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Emoji\",\n          \"description\": \"A custom emoji.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The emoji's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The emoji image URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"source\",\n              \"description\": \"The source of the emoji.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the emoji.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the emoji belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmailIntakeAddress\",\n          \"description\": \"An email address that can be used for submitting issues.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"address\",\n              \"description\": \"Unique email address user name (before @) used for incoming email.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the email address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"EmailIntakeAddressType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"forwardingEmailAddress\",\n              \"description\": \"The email address used to forward emails to the intake address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"senderName\",\n              \"description\": \"The name to be used for outgoing emails.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the email address is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"repliesEnabled\",\n              \"description\": \"Whether email replies are enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"useUserNamesInReplies\",\n              \"description\": \"Whether the commenter's name is included in the email replies.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"template\",\n              \"description\": \"The template that the email address is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Template\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that the email address is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that the email address is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sesDomainIdentity\",\n              \"description\": \"The SES domain identity that the email address is associated with.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"SesDomainIdentity\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the email intake address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerRequestsEnabled\",\n              \"description\": \"Whether issues created from that email address will be turned into customer requests.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCreatedAutoReply\",\n              \"description\": \"The auto-reply message for issue created. If not set, the default reply will be used.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCreatedAutoReplyEnabled\",\n              \"description\": \"Whether the auto-reply for issue created is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCompletedAutoReplyEnabled\",\n              \"description\": \"Whether the auto-reply for issue completed is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCompletedAutoReply\",\n              \"description\": \"The auto-reply message for issue completed. If not set, the default reply will be used.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCanceledAutoReplyEnabled\",\n              \"description\": \"Whether the auto-reply for issue canceled is enabled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCanceledAutoReply\",\n              \"description\": \"The auto-reply message for issue canceled. If not set, the default reply will be used.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reopenOnReply\",\n              \"description\": \"Whether to reopen completed or canceled issues when a substantive email reply is received.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"EmailIntakeAddressType\",\n          \"description\": \"The type of the email address.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"team\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"template\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asks\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"asksWeb\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SesDomainIdentity\",\n          \"description\": \"SES domain identity used for sending emails from a custom domain.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"domain\",\n              \"description\": \"The domain of the SES domain identity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"region\",\n              \"description\": \"The AWS region of the SES domain identity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization of the SES domain identity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Organization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who created the SES domain identity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canSendFromCustomDomain\",\n              \"description\": \"Whether the domain is fully verified and can be used for sending emails.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dnsRecords\",\n              \"description\": \"The DNS records for the SES domain identity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"SesDomainIdentityDnsRecord\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SesDomainIdentityDnsRecord\",\n          \"description\": \"A DNS record for a SES domain identity.\",\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the DNS record.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the DNS record.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The content of the DNS record.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isVerified\",\n              \"description\": \"Whether the DNS record is verified in the domain's DNS configuration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentContentHistoryPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"history\",\n              \"description\": \"The document content history entries.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"DocumentContentHistoryType\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentContentHistoryType\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The UUID of the document content history entry.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The date when the document content history entry was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentDataSnapshotAt\",\n              \"description\": \"The date when the document content history snapshot was taken. This can be different than createdAt since the content is captured from its state at the previously known updatedAt timestamp in the case of an update. On document create, these timestamps can be the same.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentData\",\n              \"description\": \"[Internal] The document content as Prosemirror document.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorIds\",\n              \"description\": \"The ID of the author of the change.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Metadata associated with the history item.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerTierConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerTierEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerTier\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerTierEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerTier\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerStatusConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerStatusEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerStatus\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerStatusEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Customer\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Customer\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerFilter\",\n          \"description\": \"Customer filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the customer name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackChannelId\",\n              \"description\": \"Comparator for the customer slack channel ID.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"domains\",\n              \"description\": \"Comparator for the customer's domains.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringArrayComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalIds\",\n              \"description\": \"Comparator for the customer's external IDs.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringArrayComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Filters that the customer owner must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"needs\",\n              \"description\": \"Filters that the customer's needs must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerNeedCollectionFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"Comparator for the customer generated revenue.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"Comparator for the customer size.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NumberComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Filters that the customer's status must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerStatusFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tier\",\n              \"description\": \"Filters that the customer's tier must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerTierFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomerFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerSortInput\",\n          \"description\": \"Customer sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"Sort by name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NameSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Sort by customer creation date\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerCreatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Sort by owner name\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"OwnerSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"Sort by customer status\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomerStatusSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"Sort by customer generated revenue\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RevenueSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"Sort by customer size\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SizeSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tier\",\n              \"description\": \"Sort by customer tier\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TierSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"approximateNeedCount\",\n              \"description\": \"Sort by approximate customer need count\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ApproximateNeedCountSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NameSort\",\n          \"description\": \"Customer name sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerCreatedAtSort\",\n          \"description\": \"Customer creation date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OwnerSort\",\n          \"description\": \"Customer owner sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerStatusSort\",\n          \"description\": \"Customer status sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RevenueSort\",\n          \"description\": \"Customer revenue sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SizeSort\",\n          \"description\": \"Customer size sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TierSort\",\n          \"description\": \"Customer tier sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ApproximateNeedCountSort\",\n          \"description\": \"Customer approximate need count sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueTitleSuggestionFromCustomerRequestPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The suggested issue title.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logId\",\n              \"description\": \"[Internal] The log id of the ai response.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomViewConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomViewEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomView\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomViewEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomView\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewFilter\",\n          \"description\": \"Custom view filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Comparator for the custom view name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"modelName\",\n              \"description\": \"Comparator for the custom view model name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"Filters that the custom view's team must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableTeamFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"Filters that the custom view creator must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"UserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shared\",\n              \"description\": \"Comparator for whether the custom view is shared.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"BooleanComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasFacet\",\n              \"description\": \"[INTERNAL] Filter based on whether the custom view has a facet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the custom view.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomViewFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the custom view.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"CustomViewFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewSortInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"Sort by custom view name.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomViewNameSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Sort by custom view creation date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomViewCreatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shared\",\n              \"description\": \"Sort by custom view shared status.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomViewSharedSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Sort by custom view update date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"CustomViewUpdatedAtSort\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewNameSort\",\n          \"description\": \"Custom view name sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewCreatedAtSort\",\n          \"description\": \"Custom view creation date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewSharedSort\",\n          \"description\": \"Custom view shared status sorting options. Ascending order puts shared views last.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewUpdatedAtSort\",\n          \"description\": \"Custom view update date sorting options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"nulls\",\n              \"description\": \"Whether nulls should be sorted first or last\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationNulls\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"last\"\n            },\n            {\n              \"name\": \"order\",\n              \"description\": \"The order for the individual sort\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PaginationSortOrder\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomViewSuggestionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The suggested view name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The suggested view description.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The suggested view icon.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomViewHasSubscribersPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"hasSubscribers\",\n              \"description\": \"Whether the custom view has subscribers.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuthResolverResponse\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"User account ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Email for the authenticated account.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowDomainAccess\",\n              \"description\": \"Should the signup flow allow access for the domain.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"users\",\n              \"description\": \"List of active users that belong to the user account.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuthUser\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lockedUsers\",\n              \"description\": \"List of locked users that are locked by login restrictions\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuthUser\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"availableOrganizations\",\n              \"description\": \"List of organizations allowing this user account to join automatically.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"AuthOrganization\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lockedOrganizations\",\n              \"description\": \"List of organization available to this user account but locked due to the current auth method.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"AuthOrganization\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lastUsedOrganizationId\",\n              \"description\": \"ID of the organization last accessed by the user.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"service\",\n              \"description\": \"The authentication service used for the current session (e.g., google, email, saml).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"token\",\n              \"description\": \"Application token.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Deprecated and not used anymore. Never populated.\"\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuthUser\",\n          \"description\": \"A user that has access to the the resources of an organization.\",\n          \"fields\": [\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The user's full name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The user's display (nick) name. Unique within each organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The user's email address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"avatarUrl\",\n              \"description\": \"An URL to the user's avatar image.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"role\",\n              \"description\": \"Whether the user is an organization admin or guest on a database level.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"UserRoleType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the user is active.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userAccountId\",\n              \"description\": \"User account ID the user belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"Organization the user belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthOrganization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"identityProvider\",\n              \"description\": \"[INTERNAL] Identity provider the user is managed by.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"AuthIdentityProvider\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuthOrganization\",\n          \"description\": \"An organization. Organizations are root-level objects that contain users and teams.\",\n          \"fields\": [\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The organization's name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the organization is enabled. Used as a superuser tool to lock down the org.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"urlKey\",\n              \"description\": \"The organization's unique URL key.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"previousUrlKeys\",\n              \"description\": \"Previously used URL keys for the organization (last 3 are kept and redirected).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The organization's logo URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deletionRequestedAt\",\n              \"description\": \"The time at which deletion of the organization was requested.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseChannel\",\n              \"description\": \"The feature release channel the organization belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ReleaseChannel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlEnabled\",\n              \"description\": \"Whether SAML authentication is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlSettings\",\n              \"description\": \"[INTERNAL] SAML settings\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allowedAuthServices\",\n              \"description\": \"Allowed authentication providers, empty array means all are allowed\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use authSettings.allowedAuthServices instead.\"\n            },\n            {\n              \"name\": \"authSettings\",\n              \"description\": \"Authentication settings for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimEnabled\",\n              \"description\": \"Whether SCIM provisioning is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"serviceId\",\n              \"description\": \"The email domain or URL key for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"region\",\n              \"description\": \"The region the organization is hosted in.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"approximateUserCount\",\n              \"description\": \"An approximate count of users, updated once per day.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hideNonPrimaryOrganizations\",\n              \"description\": \"Whether to hide other organizations for new users signing up with email domains claimed by this organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userCount\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuthIdentityProvider\",\n          \"description\": \"An identity provider.\",\n          \"fields\": [\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultMigrated\",\n              \"description\": \"Whether the identity provider is the default identity provider migrated from organization level settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of identity provider.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"IdentityProviderType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlEnabled\",\n              \"description\": \"Whether SAML authentication is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoEndpoint\",\n              \"description\": \"Sign in endpoint URL for the identity provider.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoBinding\",\n              \"description\": \"Binding method for authentication call. Can be either `post` (default) or `redirect`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoSignAlgo\",\n              \"description\": \"The algorithm of the Signing Certificate. Can be one of `sha1`, `sha256` (default), or `sha512`.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issuerEntityId\",\n              \"description\": \"The issuer's custom entity ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"spEntityId\",\n              \"description\": \"The service provider (Linear) custom entity ID. Defaults to https://auth.linear.app/sso\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ssoSigningCert\",\n              \"description\": \"X.509 Signing Certificate in string form.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The SAML priority used to pick default workspace in SAML SP initiated flow, when same domain is claimed for SAML by multiple workspaces. Lower priority value means higher preference.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scimEnabled\",\n              \"description\": \"Whether SCIM provisioning is enabled for organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SsoUrlFromEmailResponse\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlSsoUrl\",\n              \"description\": \"SAML SSO sign-in URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuditEntryType\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The audit entry type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the audit entry type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuditEntryConnection\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"edges\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuditEntryEdge\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nodes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"AuditEntry\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pageInfo\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PageInfo\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuditEntryEdge\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"node\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuditEntry\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cursor\",\n              \"description\": \"Used in `before` and `after` args\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AuditEntry\",\n          \"description\": \"Workspace audit log entry object.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization the audit log belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Organization\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"The user that caused the audit entry to be created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"actorId\",\n              \"description\": \"The ID of the user that caused the audit entry to be created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ip\",\n              \"description\": \"IP from actor when entry was recorded.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"countryCode\",\n              \"description\": \"Country code of request resulting to audit entry.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Additional metadata related to the audit entry.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"requestInformation\",\n              \"description\": \"Additional information related to the request which performed the action.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AuditEntryFilter\",\n          \"description\": \"Audit entry filtering options.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"Comparator for the identifier.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IDComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"Comparator for the created at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"Comparator for the updated at date.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"DateComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Comparator for the type.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ip\",\n              \"description\": \"Comparator for the IP address.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"countryCode\",\n              \"description\": \"Comparator for the country code.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"StringComparator\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"actor\",\n              \"description\": \"Filters that the audit entry actor must satisfy.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NullableUserFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"and\",\n              \"description\": \"Compound filters, all of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AuditEntryFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"or\",\n              \"description\": \"Compound filters, one of which need to be matched by the issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AuditEntryFilter\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AttachmentSourcesPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"sources\",\n              \"description\": \"A unique list of all source types used in this workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Application\",\n          \"description\": \"Public information of the OAuth application.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"OAuth application's ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"clientId\",\n              \"description\": \"OAuth application's client ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Application name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Information about the application.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"developer\",\n              \"description\": \"Name of the developer.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"developerUrl\",\n              \"description\": \"Url of the developer (homepage or docs).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"imageUrl\",\n              \"description\": \"Image of the application.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CodingAgentSandboxPayload\",\n          \"description\": \"[Internal] Coding agent sandbox details for an agent session.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The sandbox identifier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionId\",\n              \"description\": \"The agent session identifier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationId\",\n              \"description\": \"The organization identifier.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creatorId\",\n              \"description\": \"The user who initiated the session.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sandboxUrl\",\n              \"description\": \"Current sandbox URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"sandboxLogsUrl\",\n              \"description\": \"The sandbox logs URL.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"datadogLogsUrl\",\n              \"description\": \"Datadog logs URL for the session or sandbox.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"temporalWorkflowUrl\",\n              \"description\": \"Temporal URL to view all workflows for this sandbox.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workerConversationId\",\n              \"description\": \"Claude Agent SDK conversation ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"repository\",\n              \"description\": \"GitHub repository in owner/repo format.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"branchName\",\n              \"description\": \"Git branch name for this sandbox.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"baseRef\",\n              \"description\": \"Git ref to checkout.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"When the sandbox was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"startedAt\",\n              \"description\": \"When the sandbox first became active.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"endedAt\",\n              \"description\": \"When the session reached a terminal state.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"Mutation\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"fileUpload\",\n              \"description\": \"XHR request payload to upload an images, video and other attachments directly to Linear's cloud storage.\",\n              \"args\": [\n                {\n                  \"name\": \"metaData\",\n                  \"description\": \"Optional metadata.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"JSON\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"makePublic\",\n                  \"description\": \"Should the file be made publicly accessible (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"size\",\n                  \"description\": \"File size of the uploaded file.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Int\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"contentType\",\n                  \"description\": \"MIME type of the uploaded file.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"filename\",\n                  \"description\": \"Filename of the uploaded file.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UploadPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"importFileUpload\",\n              \"description\": \"XHR request payload to upload a file for import, directly to Linear's cloud storage.\",\n              \"args\": [\n                {\n                  \"name\": \"metaData\",\n                  \"description\": \"Optional metadata.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"JSON\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"size\",\n                  \"description\": \"File size of the uploaded file.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Int\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"contentType\",\n                  \"description\": \"MIME type of the uploaded file.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"filename\",\n                  \"description\": \"Filename of the uploaded file.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UploadPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"imageUploadFromUrl\",\n              \"description\": \"Upload an image from an URL to Linear.\",\n              \"args\": [\n                {\n                  \"name\": \"url\",\n                  \"description\": \"URL of the file to be uploaded to Linear.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ImageUploadFromUrlPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fileUploadDangerouslyDelete\",\n              \"description\": \"[INTERNAL] Permanently delete an uploaded file by asset URL. This should be used as a last resort and will break comments and documents that reference the asset.\",\n              \"args\": [\n                {\n                  \"name\": \"assetUrl\",\n                  \"description\": \"The asset URL of the uploaded file to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FileUploadDeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowStateCreate\",\n              \"description\": \"Creates a new state, adding it to the workflow of a team.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The state to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"WorkflowStateCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowStatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowStateUpdate\",\n              \"description\": \"Updates a state.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial state object to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"WorkflowStateUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the state to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowStatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowStateArchive\",\n              \"description\": \"Archives a state. Only states with issues that have all been archived can be archived.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the state to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowStateArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookCreate\",\n              \"description\": \"Creates a new webhook.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The webhook object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"WebhookCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WebhookPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookUpdate\",\n              \"description\": \"Updates an existing Webhook.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the Webhook.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"WebhookUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the Webhook.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WebhookPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookDelete\",\n              \"description\": \"Deletes a Webhook.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the Webhook to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookRotateSecret\",\n              \"description\": \"Rotates the signing secret for a Webhook.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the Webhook to rotate the secret for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WebhookRotateSecretPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewPreferencesCreate\",\n              \"description\": \"Creates a new ViewPreferences object.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The ViewPreferences object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ViewPreferencesCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ViewPreferencesPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewPreferencesUpdate\",\n              \"description\": \"Updates an existing ViewPreferences object.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the view preferences.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ViewPreferencesUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the ViewPreferences object.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ViewPreferencesPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewPreferencesDelete\",\n              \"description\": \"Deletes a ViewPreferences.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the ViewPreferences to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userSettingsUpdate\",\n              \"description\": \"Updates the user's settings.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial notification object to update the settings with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"UserSettingsUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the userSettings to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserSettingsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userSettingsFlagsReset\",\n              \"description\": \"Resets user's setting flags.\",\n              \"args\": [\n                {\n                  \"name\": \"flags\",\n                  \"description\": \"The flags to reset. If not provided all flags will be reset.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"ENUM\",\n                        \"name\": \"UserFlagType\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserSettingsFlagsResetPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userFlagUpdate\",\n              \"description\": \"Updates a user's settings flag.\",\n              \"args\": [\n                {\n                  \"name\": \"operation\",\n                  \"description\": \"Flag operation to perform.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"UserFlagUpdateOperation\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"flag\",\n                  \"description\": \"Settings flag to increment.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"UserFlagType\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserSettingsFlagPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationCategoryChannelSubscriptionUpdate\",\n              \"description\": \"Subscribes to or unsubscribes from a notification category for a given notification channel for the user\",\n              \"args\": [\n                {\n                  \"name\": \"channel\",\n                  \"description\": \"The notification channel in which to subscribe to or unsubscribe from the category\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"NotificationChannel\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"category\",\n                  \"description\": \"The notification category to subscribe to or unsubscribe from\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"NotificationCategory\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"subscribe\",\n                  \"description\": \"True if the user wants to subscribe, false if the user wants to unsubscribe\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Boolean\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserSettingsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userUpdate\",\n              \"description\": \"Updates a user. Only available to organization admins and the user themselves.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial user object to update the user with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"UserUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user to update. Use `me` to reference currently authenticated user.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userDiscordConnect\",\n              \"description\": \"Connects the Discord user to this Linear account via OAuth2.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Discord OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Discord OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userExternalUserDisconnect\",\n              \"description\": \"Disconnects the external user from this Linear account.\",\n              \"args\": [\n                {\n                  \"name\": \"service\",\n                  \"description\": \"The external service to disconnect.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userChangeRole\",\n              \"description\": \"Changes the role of a user.\",\n              \"args\": [\n                {\n                  \"name\": \"role\",\n                  \"description\": \"The new role for the user.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"UserRoleType\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserAdminPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userSuspend\",\n              \"description\": \"Suspends a user. Can only be called by an admin or owner.\",\n              \"args\": [\n                {\n                  \"name\": \"forceBypassScimRestrictions\",\n                  \"description\": \"[INTERNAL] Whether to bypass SCIM restrictions when suspending. Use with caution — this overrides identity provider management.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user to suspend.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserAdminPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userRevokeAllSessions\",\n              \"description\": \"Revokes a user's sessions. Can only be called by an admin or owner.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user to logout all sessions of.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserAdminPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userRevokeSession\",\n              \"description\": \"Revokes a specific session for a user. Can only be called by an admin or owner.\",\n              \"args\": [\n                {\n                  \"name\": \"sessionId\",\n                  \"description\": \"The identifier of the session to revoke.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user whose session to revoke.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserAdminPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userUnsuspend\",\n              \"description\": \"Un-suspends a user. Can only be called by an admin or owner.\",\n              \"args\": [\n                {\n                  \"name\": \"forceBypassScimRestrictions\",\n                  \"description\": \"[INTERNAL] Whether to bypass SCIM restrictions when unsuspending. Use with caution — this overrides identity provider management.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the user to unsuspend.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserAdminPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userUnlinkFromIdentityProvider\",\n              \"description\": \"Unlinks a guest user from their identity provider. Can only be called by an admin when SCIM is enabled.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the guest user to unlink from their identity provider.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserAdminPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilityCreate\",\n              \"description\": \"Creates a new triage responsibility.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the triage responsibility to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TriageResponsibilityCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TriageResponsibilityPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilityUpdate\",\n              \"description\": \"Updates an existing triage responsibility.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the triage responsibility to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TriageResponsibilityUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the triage responsibility to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TriageResponsibilityPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibilityDelete\",\n              \"description\": \"Deletes a triage responsibility.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the triage responsibility to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeScheduleCreate\",\n              \"description\": \"Creates a new time schedule.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the time schedule to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TimeScheduleCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedulePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeScheduleUpdate\",\n              \"description\": \"Updates a time schedule.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the time schedule to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TimeScheduleUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the time schedule to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedulePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeScheduleUpsertExternal\",\n              \"description\": \"Upsert an external time schedule.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the time schedule to insert or update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TimeScheduleUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"externalId\",\n                  \"description\": \"The unique identifier of the external schedule.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedulePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeScheduleDelete\",\n              \"description\": \"Deletes a time schedule.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the time schedule to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeScheduleRefreshIntegrationSchedule\",\n              \"description\": \"Refresh the integration schedule information.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the time schedule to refresh.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedulePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templateCreate\",\n              \"description\": \"Creates a new template.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The template object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TemplateCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TemplatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templateUpdate\",\n              \"description\": \"Updates an existing template.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the template to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TemplateUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the template.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TemplatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"templateDelete\",\n              \"description\": \"Deletes a template.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the template to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCreate\",\n              \"description\": \"Creates a new project.\",\n              \"args\": [\n                {\n                  \"name\": \"slackChannelName\",\n                  \"description\": \"The full name for the Slack channel to create (including prefix). When provided, a Slack channel will be created and connected to the project.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The issue object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"Updates a project.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial project object to update the project with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project to update. Also the identifier from the URL is accepted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCreateSlackChannel\",\n              \"description\": \"[Internal] Creates a Slack channel for an existing project.\",\n              \"args\": [\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The identifier of the Slack integration to use. When not provided, uses the organization's configured integration.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"slackChannelName\",\n                  \"description\": \"The full name for the Slack channel to create (including prefix). When provided, a Slack channel will be created and connected to the project.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectReassignStatus\",\n              \"description\": \"[INTERNAL] Updates all projects currently assigned to to a project status to a new project status.\",\n              \"args\": [\n                {\n                  \"name\": \"newProjectStatusId\",\n                  \"description\": \"The identifier of the new project status to update the projects to.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"originalProjectStatusId\",\n                  \"description\": \"The identifier of the project status with which projects will be updated.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SuccessPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectDelete\",\n              \"description\": \"Deletes (trashes) a project.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectArchive\",\n              \"description\": \"Archives a project.\",\n              \"args\": [\n                {\n                  \"name\": \"trash\",\n                  \"description\": \"Whether to trash the project.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project to archive. Also the identifier from the URL is accepted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Deprecated in favor of projectDelete.\"\n            },\n            {\n              \"name\": \"projectUnarchive\",\n              \"description\": \"Unarchives a project.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project to restore. Also the identifier from the URL is accepted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectAddLabel\",\n              \"description\": \"Adds a label to a project.\",\n              \"args\": [\n                {\n                  \"name\": \"labelId\",\n                  \"description\": \"The identifier of the label to add.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project to add the label to.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRemoveLabel\",\n              \"description\": \"Removes a label from a project.\",\n              \"args\": [\n                {\n                  \"name\": \"labelId\",\n                  \"description\": \"The identifier of the label to remove.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project to remove the label from.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectExternalSyncDisable\",\n              \"description\": \"Disables external sync on a project.\",\n              \"args\": [\n                {\n                  \"name\": \"syncSource\",\n                  \"description\": \"The source of the external sync to disable.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"ExternalSyncService\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"projectId\",\n                  \"description\": \"The ID of the project to disable external sync for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamCreate\",\n              \"description\": \"Creates a new team. The user who creates the team will automatically be added as a member to the newly created team.\",\n              \"args\": [\n                {\n                  \"name\": \"copySettingsFromTeamId\",\n                  \"description\": \"The team id to copy settings from, if any.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The team object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TeamCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamUpdate\",\n              \"description\": \"Updates a team.\",\n              \"args\": [\n                {\n                  \"name\": \"mapping\",\n                  \"description\": \"[INTERNAL] Mapping of existing team entities to those inherited from the parent team\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"InheritanceEntityMapping\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial team object to update the team with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TeamUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamDelete\",\n              \"description\": \"Deletes a team.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamUnarchive\",\n              \"description\": \"Unarchives a team and cancels deletion.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamCyclesDelete\",\n              \"description\": \"Deletes team's cycles data\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team, which cycles will be deleted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMembershipCreate\",\n              \"description\": \"Creates a new team membership.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The team membership object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TeamMembershipCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembershipPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMembershipUpdate\",\n              \"description\": \"Updates a team membership.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial team membership object to update the team membership with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TeamMembershipUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team membership to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TeamMembershipPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMembershipDelete\",\n              \"description\": \"Deletes a team membership.\",\n              \"args\": [\n                {\n                  \"name\": \"alsoLeaveParentTeams\",\n                  \"description\": \"Whether to leave the parent teams.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team membership to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamKeyDelete\",\n              \"description\": \"Deletes a previously used team key.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the team key to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapToProjectCreate\",\n              \"description\": \"Creates a new roadmapToProject join.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the roadmapToProject to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"RoadmapToProjectCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapToProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapToProjectUpdate\",\n              \"description\": \"Updates a roadmapToProject.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the roadmapToProject to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"RoadmapToProjectUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the roadmapToProject to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapToProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapToProjectDelete\",\n              \"description\": \"Deletes a roadmapToProject.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the roadmapToProject to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapCreate\",\n              \"description\": \"Creates a new roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the roadmap to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"RoadmapCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"roadmapUpdate\",\n              \"description\": \"Updates a roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the roadmap to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"RoadmapUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the roadmap to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"roadmapArchive\",\n              \"description\": \"Archives a roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the roadmap to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"roadmapUnarchive\",\n              \"description\": \"Unarchives a roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the roadmap to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"roadmapDelete\",\n              \"description\": \"Deletes a roadmap.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the roadmap to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Roadmaps are deprecated, use initiatives instead.\"\n            },\n            {\n              \"name\": \"createCsvExportReport\",\n              \"description\": \"Create CSV export report for the organization.\",\n              \"args\": [\n                {\n                  \"name\": \"includePrivateTeamIds\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"SCALAR\",\n                        \"name\": \"String\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CreateCsvExportReportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseStageCreate\",\n              \"description\": \"[ALPHA] Creates a new release stage.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The ReleaseStage object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseStageCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStagePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseStageUpdate\",\n              \"description\": \"[ALPHA] Updates a release stage.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial ReleaseStage object to update the ReleaseStage with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseStageUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release stage to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStagePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseStageArchive\",\n              \"description\": \"[ALPHA] Archives a release stage.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release stage to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStageArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseStageUnarchive\",\n              \"description\": \"[ALPHA] Unarchives a release stage.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release stage to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStageArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseSync\",\n              \"description\": \"[ALPHA] Syncs release data.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The release data to sync.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseSyncInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseCreate\",\n              \"description\": \"[ALPHA] Creates a new release.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The release to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseUpdate\",\n              \"description\": \"[ALPHA] Updates a release.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial Release object to update the Release with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseComplete\",\n              \"description\": \"[ALPHA] Marks a release as completed. If version is provided, completes that specific release; otherwise completes the most recent started release.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The input containing the pipeline ID and optional version.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseCompleteInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseUpdateByPipeline\",\n              \"description\": \"[ALPHA] Updates a release by pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The input containing the pipeline ID, optional version, and optional stage name.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseUpdateByPipelineInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseDelete\",\n              \"description\": \"[ALPHA] Deletes (trashes) a release.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseArchive\",\n              \"description\": \"[ALPHA] Archives a release.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseUnarchive\",\n              \"description\": \"[ALPHA] Unarchives a release.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseSyncByAccessKey\",\n              \"description\": \"[ALPHA] Syncs release data using an access key. The pipeline is inferred from the access key.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The release data to sync.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseSyncInputBase\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseCompleteByAccessKey\",\n              \"description\": \"[ALPHA] Marks a release as completed using an access key. If version is provided, completes that specific release; otherwise completes the most recent started release. The pipeline is inferred from the access key.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The input containing the optional version.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseCompleteInputBase\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseUpdateByPipelineByAccessKey\",\n              \"description\": \"[ALPHA] Updates a release by pipeline using an access key.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The input containing the optional version and optional stage name.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleaseUpdateByPipelineInputBase\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineCreate\",\n              \"description\": \"[ALPHA] Creates a new release pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The ReleasePipeline object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleasePipelineCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipelinePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineUpdate\",\n              \"description\": \"[ALPHA] Updates a release pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial ReleasePipeline object to update the ReleasePipeline with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReleasePipelineUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release pipeline to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipelinePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineArchive\",\n              \"description\": \"[ALPHA] Archives a release pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release pipeline to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipelineArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineUnarchive\",\n              \"description\": \"[ALPHA] Unarchives a release pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release pipeline to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipelineArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelineDelete\",\n              \"description\": \"[ALPHA] Deletes a release pipeline.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the release pipeline to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionCreate\",\n              \"description\": \"Creates a new reaction.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The reaction object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ReactionCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReactionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reactionDelete\",\n              \"description\": \"Deletes a reaction.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the reaction to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pushSubscriptionCreate\",\n              \"description\": \"Creates a push subscription.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The push subscription to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"PushSubscriptionCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PushSubscriptionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pushSubscriptionDelete\",\n              \"description\": \"Deletes a push subscription.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the push subscription to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PushSubscriptionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateCreate\",\n              \"description\": \"Creates a new project update.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Data for the project update to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectUpdateCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateUpdate\",\n              \"description\": \"Updates a project update.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A data to update the project update with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectUpdateUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project update to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateArchive\",\n              \"description\": \"Archives a project update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project update to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdateArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateUnarchive\",\n              \"description\": \"Unarchives a project update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project update to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdateArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdateDelete\",\n              \"description\": \"Deletes a project update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project update to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use `projectUpdateArchive` instead.\"\n            },\n            {\n              \"name\": \"createProjectUpdateReminder\",\n              \"description\": \"Create a notification to remind a user about a project update.\",\n              \"args\": [\n                {\n                  \"name\": \"userId\",\n                  \"description\": \"The user identifier to whom the notification will be sent. By default, it is set to the project lead.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"projectId\",\n                  \"description\": \"The identifier of the project to remind about.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdateReminderPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatusCreate\",\n              \"description\": \"Creates a new project status.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The ProjectStatus object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectStatusCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatusPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatusUpdate\",\n              \"description\": \"Updates a project status.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial ProjectStatus object to update the ProjectStatus with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectStatusUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project status to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatusPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatusArchive\",\n              \"description\": \"Archives a project status.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project status to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatusArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatusUnarchive\",\n              \"description\": \"Unarchives a project status.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project status to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatusArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRelationCreate\",\n              \"description\": \"Creates a new project relation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The project relation to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectRelationCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRelationUpdate\",\n              \"description\": \"Updates a project relation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the project relation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectRelationUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project relation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRelationDelete\",\n              \"description\": \"Deletes a project relation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project relation to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneCreate\",\n              \"description\": \"Creates a new project milestone.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The project milestone to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectMilestoneCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestonePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneUpdate\",\n              \"description\": \"Updates a project milestone.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial object to update the project milestone with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectMilestoneUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project milestone to update. Also the identifier from the URL is accepted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestonePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneDelete\",\n              \"description\": \"Deletes a project milestone.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project milestone to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestoneMove\",\n              \"description\": \"[Internal] Moves a project milestone to another project, can be called to undo a prior move.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The project to move the milestone to, as well as any additional options need to make a successful move, or undo a previous move.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectMilestoneMoveInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the project milestone to move.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestoneMovePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabelCreate\",\n              \"description\": \"Creates a new project label.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The project label to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectLabelCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabelUpdate\",\n              \"description\": \"Updates a project label.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial label object to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ProjectLabelUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabelDelete\",\n              \"description\": \"Deletes a project label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabelRetire\",\n              \"description\": \"Retires a project label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to retire.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabelRestore\",\n              \"description\": \"Restores a project label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to restore.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationUpdate\",\n              \"description\": \"Updates the user's organization.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial organization object to update the organization with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDeleteChallenge\",\n              \"description\": \"Get an organization's delete confirmation token.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDelete\",\n              \"description\": \"Deletes an organization.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Information required to delete an organization.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"DeleteOrganizationInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationCancelDelete\",\n              \"description\": \"Cancels the deletion of an organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationCancelDeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationStartTrialForPlan\",\n              \"description\": \"Starts a trial for the organization on the specified plan type.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Plan details for trial\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationStartTrialInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationStartTrialPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationStartTrial\",\n              \"description\": \"[DEPRECATED] Starts a trial for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationStartTrialPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use organizationStartTrialForPlan\"\n            },\n            {\n              \"name\": \"organizationInviteCreate\",\n              \"description\": \"Creates a new organization invite.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The organization invite object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationInviteCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationInvitePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationInviteUpdate\",\n              \"description\": \"Updates an organization invite.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The updates to make to the organization invite object.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationInviteUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the organization invite to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationInvitePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resendOrganizationInvite\",\n              \"description\": \"Re-send an organization invite.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the organization invite to re-send.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"resendOrganizationInviteByEmail\",\n              \"description\": \"Re-send an organization invite tied to an email address.\",\n              \"args\": [\n                {\n                  \"name\": \"email\",\n                  \"description\": \"The email address tied to the organization invite to re-send.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationInviteDelete\",\n              \"description\": \"Deletes an organization invite.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the organization invite to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomainClaim\",\n              \"description\": \"[INTERNAL] Verifies a domain claim.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The ID of the organization domain to claim.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDomainSimplePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomainVerify\",\n              \"description\": \"[INTERNAL] Verifies a domain to be added to an organization.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The organization domain to verify.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationDomainVerificationInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDomainPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomainCreate\",\n              \"description\": \"[INTERNAL] Adds a domain to be allowed for an organization.\",\n              \"args\": [\n                {\n                  \"name\": \"triggerEmailVerification\",\n                  \"description\": \"Whether to trigger an email verification flow during domain creation.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The organization domain entry to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationDomainCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDomainPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomainUpdate\",\n              \"description\": \"[INTERNAL] Updates an organization domain settings.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The organization domain entry to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"OrganizationDomainUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the domain to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDomainPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomainDelete\",\n              \"description\": \"Deletes a domain.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the domain to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionCreate\",\n              \"description\": \"Creates a new notification subscription for a cycle, custom view, label, project or team.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The subscription object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationSubscriptionCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationSubscriptionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionUpdate\",\n              \"description\": \"Updates a notification subscription.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial notification subscription object to update the notification subscription with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationSubscriptionUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the notification subscription to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationSubscriptionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionDelete\",\n              \"description\": \"Deletes a notification subscription reference.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the notification subscription reference to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Update `notificationSubscription.active` to `false` instead.\"\n            },\n            {\n              \"name\": \"notificationUpdate\",\n              \"description\": \"Updates a notification.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial notification object to update the notification with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the notification to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationMarkReadAll\",\n              \"description\": \"Marks notification and all related notifications as read.\",\n              \"args\": [\n                {\n                  \"name\": \"readAt\",\n                  \"description\": \"The time when notification was marked as read.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"DateTime\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The type and id of the entity to archive notifications for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationEntityInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationBatchActionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationMarkUnreadAll\",\n              \"description\": \"Marks notification and all related notifications as unread.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The type and id of the entity to archive notifications for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationEntityInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationBatchActionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSnoozeAll\",\n              \"description\": \"Snoozes a notification and all related notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"snoozedUntilAt\",\n                  \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"DateTime\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The type and id of the entity to archive notifications for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationEntityInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationBatchActionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationUnsnoozeAll\",\n              \"description\": \"Unsnoozes a notification and all related notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"unsnoozedAt\",\n                  \"description\": \"The time when the notification was unsnoozed.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"DateTime\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The type and id of the entity to archive notifications for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationEntityInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationBatchActionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationArchive\",\n              \"description\": \"Archives a notification.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The id of the notification to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationArchiveAll\",\n              \"description\": \"Archives a notification and all related notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The type and id of the entity to archive notifications for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"NotificationEntityInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationBatchActionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationUnarchive\",\n              \"description\": \"Unarchives a notification.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The id of the notification to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"NotificationArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueToReleaseCreate\",\n              \"description\": \"[ALPHA] Creates a new issueToRelease join, adding an issue to a release.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the issueToRelease to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueToReleaseCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueToReleasePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueToReleaseDeleteByIssueAndRelease\",\n              \"description\": \"[ALPHA] Deletes an issueToRelease by issue and release identifiers\",\n              \"args\": [\n                {\n                  \"name\": \"releaseId\",\n                  \"description\": \"The identifier of the release\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The identifier of the issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueToReleaseDelete\",\n              \"description\": \"[ALPHA] Deletes an issueToRelease by its identifier, removing an issue from a release.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issueToRelease to delete\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueCreate\",\n              \"description\": \"Creates a new issue.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The issue object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueBatchCreate\",\n              \"description\": \"Creates a list of issues in one transaction.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A list of issue objects to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueBatchCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueBatchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueUpdate\",\n              \"description\": \"Updates an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial issue object to update the issue with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueBatchUpdate\",\n              \"description\": \"Updates multiple issues at once.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial issue object to update the issues with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"ids\",\n                  \"description\": \"The id's of the issues to update. Can't be more than 50 at a time.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"LIST\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"NON_NULL\",\n                        \"name\": null,\n                        \"ofType\": {\n                          \"kind\": \"SCALAR\",\n                          \"name\": \"UUID\",\n                          \"ofType\": null\n                        }\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueBatchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueArchive\",\n              \"description\": \"Archives an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"trash\",\n                  \"description\": \"Whether to trash the issue.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueUnarchive\",\n              \"description\": \"Unarchives an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueDelete\",\n              \"description\": \"Deletes (trashes) an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"permanentlyDelete\",\n                  \"description\": \"Whether to permanently delete the issue and skip the grace period of 30 days. Available only to admins!\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueAddLabel\",\n              \"description\": \"Adds a label to an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"labelId\",\n                  \"description\": \"The identifier of the label to add.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to add the label to.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRemoveLabel\",\n              \"description\": \"Removes a label from an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"labelId\",\n                  \"description\": \"The identifier of the label to remove.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to remove the label from.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueReminder\",\n              \"description\": \"Adds an issue reminder. Will cause a notification to be sent when the issue reminder time is reached.\",\n              \"args\": [\n                {\n                  \"name\": \"reminderAt\",\n                  \"description\": \"The time when a reminder notification will be sent.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"DateTime\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to add a reminder for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueSubscribe\",\n              \"description\": \"Subscribes a user to an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"userEmail\",\n                  \"description\": \"The email of the user to subscribe, default is the current user.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"userId\",\n                  \"description\": \"The identifier of the user to subscribe, default is the current user.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to subscribe to.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueUnsubscribe\",\n              \"description\": \"Unsubscribes a user from an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"userEmail\",\n                  \"description\": \"The email of the user to unsubscribe, default is the current user.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"userId\",\n                  \"description\": \"The identifier of the user to unsubscribe, default is the current user.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to unsubscribe from.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueDescriptionUpdateFromFront\",\n              \"description\": \"[INTERNAL] Updates an issue description from the Front app to handle Front attachments correctly.\",\n              \"args\": [\n                {\n                  \"name\": \"description\",\n                  \"description\": \"Description to update the issue with. \",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueExternalSyncDisable\",\n              \"description\": \"Disables external sync on an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"attachmentId\",\n                  \"description\": \"The ID of the sync attachment to disable.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssuePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRelationCreate\",\n              \"description\": \"Creates a new issue relation.\",\n              \"args\": [\n                {\n                  \"name\": \"overrideCreatedAt\",\n                  \"description\": \"Used by client undo operations. Should not be set directly.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"DateTime\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The issue relation to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueRelationCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRelationUpdate\",\n              \"description\": \"Updates an issue relation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the issue relation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueRelationUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue relation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRelationDelete\",\n              \"description\": \"Deletes an issue relation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue relation to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabelCreate\",\n              \"description\": \"Creates a new label.\",\n              \"args\": [\n                {\n                  \"name\": \"replaceTeamLabels\",\n                  \"description\": \"Whether to replace all team-specific labels with the same name with this newly created workspace label (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The issue label to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueLabelCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabelUpdate\",\n              \"description\": \"Updates a label.\",\n              \"args\": [\n                {\n                  \"name\": \"replaceTeamLabels\",\n                  \"description\": \"Whether to replace all team-specific labels with the same name with this updated workspace label (default: false).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial label object to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueLabelUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabelDelete\",\n              \"description\": \"Deletes an issue label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabelRetire\",\n              \"description\": \"Retires a label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to retire.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabelRestore\",\n              \"description\": \"Restores a label.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the label to restore.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabelPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCreateGithub\",\n              \"description\": \"Kicks off a GitHub import job.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"ID of the team into which to import data.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamName\",\n                  \"description\": \"Name of new team. When teamId is not set.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"githubRepoIds\",\n                  \"description\": \"IDs of the Github repositories from which we will import data.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"SCALAR\",\n                        \"name\": \"Int\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"githubLabels\",\n                  \"description\": \"Labels to use to filter the import data. Only issues matching any of these filters will be imported.\",\n                  \"type\": {\n                    \"kind\": \"LIST\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"NON_NULL\",\n                      \"name\": null,\n                      \"ofType\": {\n                        \"kind\": \"SCALAR\",\n                        \"name\": \"String\",\n                        \"ofType\": null\n                      }\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"instantProcess\",\n                  \"description\": \"Whether to instantly process the import with the default configuration mapping.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeClosedIssues\",\n                  \"description\": \"Whether or not we should collect the data for closed issues.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCreateJira\",\n              \"description\": \"Kicks off a Jira import job.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"ID of the team into which to import data. Empty to create new team.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamName\",\n                  \"description\": \"Name of new team. When teamId is not set.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraToken\",\n                  \"description\": \"Jira personal access token to access Jira REST API.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraProject\",\n                  \"description\": \"Jira project key from which we will import data.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraEmail\",\n                  \"description\": \"Jira user account email.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraHostname\",\n                  \"description\": \"Jira installation or cloud hostname.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jql\",\n                  \"description\": \"A custom JQL query to filter issues being imported\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"instantProcess\",\n                  \"description\": \"Whether to instantly process the import with the default configuration mapping.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeClosedIssues\",\n                  \"description\": \"Whether or not we should collect the data for closed issues.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"ID of issue import. If not provided it will be generated.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCreateCSVJira\",\n              \"description\": \"Kicks off a Jira import job from a CSV.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"ID of the team into which to import data. Empty to create new team.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamName\",\n                  \"description\": \"Name of new team. When teamId is not set.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"csvUrl\",\n                  \"description\": \"URL for the CSV.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraHostname\",\n                  \"description\": \"Jira installation or cloud hostname.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraToken\",\n                  \"description\": \"Jira personal access token to access Jira REST API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraEmail\",\n                  \"description\": \"Jira user account email.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCreateClubhouse\",\n              \"description\": \"Kicks off a Shortcut (formerly Clubhouse) import job.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"ID of the team into which to import data.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamName\",\n                  \"description\": \"Name of new team. When teamId is not set.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"clubhouseToken\",\n                  \"description\": \"Shortcut (formerly Clubhouse) token to fetch information from the Clubhouse API.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"clubhouseGroupName\",\n                  \"description\": \"Shortcut (formerly Clubhouse) group name to choose which issues we should import.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"instantProcess\",\n                  \"description\": \"Whether to instantly process the import with the default configuration mapping.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeClosedIssues\",\n                  \"description\": \"Whether or not we should collect the data for closed issues.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"ID of issue import. If not provided it will be generated.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCreateAsana\",\n              \"description\": \"Kicks off an Asana import job.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"ID of the team into which to import data.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamName\",\n                  \"description\": \"Name of new team. When teamId is not set.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"asanaToken\",\n                  \"description\": \"Asana token to fetch information from the Asana API.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"asanaTeamName\",\n                  \"description\": \"Asana team name to choose which issues we should import.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"instantProcess\",\n                  \"description\": \"Whether to instantly process the import with the default configuration mapping.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"includeClosedIssues\",\n                  \"description\": \"Whether or not we should collect the data for closed issues.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"ID of issue import. If not provided it will be generated.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportCreateLinearV2\",\n              \"description\": \"[INTERNAL] Kicks off a Linear to Linear import job.\",\n              \"args\": [\n                {\n                  \"name\": \"linearSourceOrganizationId\",\n                  \"description\": \"The source organization to import from.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"ID of issue import. If not provided it will be generated.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportDelete\",\n              \"description\": \"Deletes an import job.\",\n              \"args\": [\n                {\n                  \"name\": \"issueImportId\",\n                  \"description\": \"ID of the issue import to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportDeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportProcess\",\n              \"description\": \"Kicks off import processing.\",\n              \"args\": [\n                {\n                  \"name\": \"mapping\",\n                  \"description\": \"The mapping configuration to use for processing the import.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"JSONObject\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueImportId\",\n                  \"description\": \"ID of the issue import which we're going to process.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImportUpdate\",\n              \"description\": \"Updates the mapping for the issue import.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the issue import to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueImportUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the issue import.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueImportPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettingsCreate\",\n              \"description\": \"Creates new settings for one or more integrations.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The settings to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationsSettingsCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationsSettingsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettingsUpdate\",\n              \"description\": \"Updates settings related to integrations for a project or a team.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A settings object to update the settings with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationsSettingsUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the settings to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationsSettingsPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationTemplateCreate\",\n              \"description\": \"Creates a new integrationTemplate join.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the integrationTemplate to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationTemplateCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationTemplatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationTemplateDelete\",\n              \"description\": \"Deletes a integrationTemplate.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the integrationTemplate to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationUpdate\",\n              \"description\": \"[INTERNAL] Updates the integration.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial integration object to update the integration with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the integration to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSettingsUpdate\",\n              \"description\": \"[INTERNAL] Updates the integration settings.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"An integration settings object.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationSettingsInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the integration to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Use integrationUpdate instead.\"\n            },\n            {\n              \"name\": \"integrationGithubCommitCreate\",\n              \"description\": \"Generates a webhook for the GitHub commit integration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitHubCommitIntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGithubConnect\",\n              \"description\": \"Connects the organization with the GitHub App.\",\n              \"args\": [\n                {\n                  \"name\": \"githubHost\",\n                  \"description\": \"The GitHub Enterprise Cloud host (e.g., 'linear-development.ghe.com'). When provided, this creates a GEC integration.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"codeAccess\",\n                  \"description\": \"Whether the integration should have code access\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The GitHub grant code that's exchanged for OAuth tokens.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"installationId\",\n                  \"description\": \"The GitHub data to connect with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGithubImportConnect\",\n              \"description\": \"Connects the organization with the GitHub Import App.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The GitHub grant code that's exchanged for OAuth tokens.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"installationId\",\n                  \"description\": \"The GitHub data to connect with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGithubImportRefresh\",\n              \"description\": \"Refreshes the data for a GitHub import integration.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The id of the integration to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGitHubEnterpriseServerConnect\",\n              \"description\": \"Connects the organization with a GitHub Enterprise Server.\",\n              \"args\": [\n                {\n                  \"name\": \"organizationName\",\n                  \"description\": \"The name of GitHub organization.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"githubUrl\",\n                  \"description\": \"The base URL of the GitHub Enterprise Server installation.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitHubEnterpriseServerPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGitlabConnect\",\n              \"description\": \"Connects the organization with a GitLab Access Token.\",\n              \"args\": [\n                {\n                  \"name\": \"gitlabUrl\",\n                  \"description\": \"The URL of the GitLab installation.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"accessToken\",\n                  \"description\": \"The GitLab Access Token to connect with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitLabIntegrationCreatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGitlabTestConnection\",\n              \"description\": \"Tests connectivity to a self-hosted GitLab instance and clears auth errors if successful.\",\n              \"args\": [\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The ID of the GitLab integration to test.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitLabTestConnectionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"airbyteIntegrationConnect\",\n              \"description\": \"Creates an integration api key for Airbyte to connect with Linear.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Airbyte integration settings.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AirbyteConfigurationInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGoogleCalendarPersonalConnect\",\n              \"description\": \"[Internal] Connects the Google Calendar to the user to this Linear account via OAuth2.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"[Internal] The Google OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationLaunchDarklyConnect\",\n              \"description\": \"[INTERNAL] Integrates the organization with LaunchDarkly.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The LaunchDarkly OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"projectKey\",\n                  \"description\": \"The LaunchDarkly project key.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"environment\",\n                  \"description\": \"The LaunchDarkly environment.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationLaunchDarklyPersonalConnect\",\n              \"description\": \"[INTERNAL] Integrates your personal account with LaunchDarkly.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The LaunchDarkly OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"jiraIntegrationConnect\",\n              \"description\": \"[INTERNAL] Connects the organization with a Jira Personal Access Token.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Jira integration settings.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"JiraConfigurationInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationJiraUpdate\",\n              \"description\": \"[INTERNAL] Updates a Jira Integration.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Jira integration update input.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"JiraUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationJiraFetchProjectStatuses\",\n              \"description\": \"[INTERNAL] Fetches Jira project statuses and stores them in integration settings.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Input for fetching Jira project statuses.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"JiraFetchProjectStatusesInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"JiraFetchProjectStatusesPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationJiraPersonal\",\n              \"description\": \"Connect your Jira account to Linear.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Jira OAuth code, when connecting using OAuth.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"accessToken\",\n                  \"description\": \"The Jira personal access token, when connecting using a PAT.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGitHubPersonal\",\n              \"description\": \"Connect your GitHub account to Linear.\",\n              \"args\": [\n                {\n                  \"name\": \"codeAccess\",\n                  \"description\": \"Whether to connect with code access.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The GitHub OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationIntercom\",\n              \"description\": \"Integrates the organization with Intercom.\",\n              \"args\": [\n                {\n                  \"name\": \"domainUrl\",\n                  \"description\": \"The Intercom domain URL to use for the integration. Defaults to app.intercom.com if not provided.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Intercom OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Intercom OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationIntercomDelete\",\n              \"description\": \"Disconnects the organization from Intercom.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationCustomerDataAttributesRefresh\",\n              \"description\": \"[INTERNAL] Refreshes the customer data attributes from the specified integration service.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The integration service to refresh customer data attributes from.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationCustomerDataAttributesRefreshInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationIntercomSettingsUpdate\",\n              \"description\": \"[DEPRECATED] Updates settings on the Intercom integration.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial Intercom integration settings object to update the integration settings with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntercomSettingsInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"This mutation is deprecated, please use `integrationSettingsUpdate` instead\"\n            },\n            {\n              \"name\": \"integrationDiscord\",\n              \"description\": \"Integrates the organization with Discord.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Discord OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Discord OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationOpsgenieConnect\",\n              \"description\": \"[INTERNAL] Integrates the organization with Opsgenie.\",\n              \"args\": [\n                {\n                  \"name\": \"apiKey\",\n                  \"description\": \"The Opsgenie API key.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationOpsgenieRefreshScheduleMappings\",\n              \"description\": \"[INTERNAL] Refresh Opsgenie schedule mappings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationPagerDutyConnect\",\n              \"description\": \"[INTERNAL] Integrates the organization with PagerDuty.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The PagerDuty OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The PagerDuty OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationPagerDutyRefreshScheduleMappings\",\n              \"description\": \"[INTERNAL] Refresh PagerDuty schedule mappings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updateIntegrationSlackScopes\",\n              \"description\": \"[Internal] Updates existing Slack and Asks integration scopes.\",\n              \"args\": [\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The ID of the existing Slack integration\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlack\",\n              \"description\": \"Integrates the organization with Slack.\",\n              \"args\": [\n                {\n                  \"name\": \"shouldUseV2Auth\",\n                  \"description\": \"[DEPRECATED] Whether or not v2 of Slack OAuth should be used. No longer used.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackAsks\",\n              \"description\": \"Integrates the organization with the Slack Asks app.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackOrAsksUpdateSlackTeamName\",\n              \"description\": \"Updates the Slack team's name in Linear for an existing Slack or Asks integration.\",\n              \"args\": [\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The integration ID.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationSlackWorkspaceNamePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackPersonal\",\n              \"description\": \"Integrates your personal notifications with Slack.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationAsksConnectChannel\",\n              \"description\": \"Connect a Slack channel to Asks.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AsksChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackPost\",\n              \"description\": \"Slack integration for team notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"shouldUseV2Auth\",\n                  \"description\": \"[DEPRECATED] Whether or not v2 of Slack OAuth should be used. No longer used.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"Integration's associated team.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackProjectPost\",\n              \"description\": \"Slack integration for project notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"service\",\n                  \"description\": \"The service to enable once connected, either 'notifications' or 'updates'.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"projectId\",\n                  \"description\": \"Integration's associated project.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackInitiativePost\",\n              \"description\": \"[Internal] Slack integration for initiative notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"initiativeId\",\n                  \"description\": \"Integration's associated initiative.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackCustomViewNotifications\",\n              \"description\": \"Slack integration for custom view notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"customViewId\",\n                  \"description\": \"Integration's associated custom view.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackCustomerChannelLink\",\n              \"description\": \"Integrates a Slack Asks channel with a Customer.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"customerId\",\n                  \"description\": \"The customer to link the Slack channel with\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SuccessPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackOrgProjectUpdatesPost\",\n              \"description\": \"Slack integration for organization level project update notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackOrgInitiativeUpdatesPost\",\n              \"description\": \"[Internal] Slack integration for organization level initiative update notifications.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelConnectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackImportEmojis\",\n              \"description\": \"Imports custom emojis from your Slack workspace.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Slack OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Slack OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationFigma\",\n              \"description\": \"Integrates the organization with Figma.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Figma OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Figma OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGong\",\n              \"description\": \"Integrates the organization with Gong.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Gong OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Gong OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationMicrosoftTeams\",\n              \"description\": \"[ALPHA] Integrates the organization with Microsoft Teams.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Microsoft OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Microsoft OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationMicrosoftPersonalConnect\",\n              \"description\": \"[ALPHA] Connects the user's personal Microsoft account to Linear.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Microsoft OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Microsoft OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationGoogleSheets\",\n              \"description\": \"Integrates the organization with Google Sheets.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Google OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"refreshGoogleSheetsData\",\n              \"description\": \"Manually update Google Sheets data.\",\n              \"args\": [\n                {\n                  \"name\": \"type\",\n                  \"description\": \"The type of export.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the Google Sheets integration to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSentryConnect\",\n              \"description\": \"Integrates the organization with Sentry.\",\n              \"args\": [\n                {\n                  \"name\": \"organizationSlug\",\n                  \"description\": \"The slug of the Sentry organization being connected.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Sentry grant code that's exchanged for OAuth tokens.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"installationId\",\n                  \"description\": \"The Sentry installationId to connect with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationFront\",\n              \"description\": \"Integrates the organization with Front.\",\n              \"args\": [\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Front OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Front OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationZendesk\",\n              \"description\": \"Integrates the organization with Zendesk.\",\n              \"args\": [\n                {\n                  \"name\": \"subdomain\",\n                  \"description\": \"The Zendesk installation subdomain.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Zendesk OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"scope\",\n                  \"description\": \"The Zendesk OAuth scopes.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Zendesk OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationLoom\",\n              \"description\": \"Enables Loom integration for the organization.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": true,\n              \"deprecationReason\": \"Not available.\"\n            },\n            {\n              \"name\": \"integrationSalesforce\",\n              \"description\": \"Integrates the organization with Salesforce.\",\n              \"args\": [\n                {\n                  \"name\": \"code\",\n                  \"description\": \"The Salesforce OAuth code.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"subdomain\",\n                  \"description\": \"The Salesforce installation subdomain.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"redirectUri\",\n                  \"description\": \"The Salesforce OAuth redirect URI.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSalesforceMetadataRefresh\",\n              \"description\": \"[INTERNAL] Refreshes the Salesforce integration metadata.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The ID of the integration to refresh metadata for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationMcpServerPersonalConnect\",\n              \"description\": \"[INTERNAL] Connects the user's personal account with an MCP server.\",\n              \"args\": [\n                {\n                  \"name\": \"serverUrl\",\n                  \"description\": \"The URL of the MCP server to connect with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationMcpServerConnect\",\n              \"description\": \"[INTERNAL] Connects the workspace with an MCP server.\",\n              \"args\": [\n                {\n                  \"name\": \"teamId\",\n                  \"description\": \"The ID of the team to connect the MCP server to.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"serverUrl\",\n                  \"description\": \"The URL of the MCP server to connect with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationDelete\",\n              \"description\": \"Deletes an integration.\",\n              \"args\": [\n                {\n                  \"name\": \"skipInstallationDeletion\",\n                  \"description\": \"Whether to skip deleting the installation on the external service side.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the integration to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationArchive\",\n              \"description\": \"Archives an integration.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the integration to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationSlackWorkflowAccessUpdate\",\n              \"description\": \"[Internal] Enables Linear Agent Slack workflow access for a Slack or Slack Asks integration.\",\n              \"args\": [\n                {\n                  \"name\": \"enabled\",\n                  \"description\": \"Whether to enable workflow access.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Boolean\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"integrationId\",\n                  \"description\": \"The ID of the integration to toggle workflow access for.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationRequest\",\n              \"description\": \"Requests a currently unavailable integration.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Integration request details.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IntegrationRequestInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationRequestPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateCreate\",\n              \"description\": \"Creates a initiative update.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The initiative update object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeUpdateCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateUpdate\",\n              \"description\": \"Updates an update.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A data to update the update with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeUpdateUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the update to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateArchive\",\n              \"description\": \"Archives an initiative update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative update to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdateArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createInitiativeUpdateReminder\",\n              \"description\": \"Create a notification to remind a user about an initiative update.\",\n              \"args\": [\n                {\n                  \"name\": \"userId\",\n                  \"description\": \"The user identifier to whom the notification will be sent. By default, it is set to the initiative owner.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"initiativeId\",\n                  \"description\": \"The identifier of the initiative to remind about.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdateReminderPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdateUnarchive\",\n              \"description\": \"Unarchives an initiative update.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative update to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdateArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProjectCreate\",\n              \"description\": \"Creates a new initiativeToProject join.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the initiativeToProject to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeToProjectCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProjectUpdate\",\n              \"description\": \"Updates a initiativeToProject.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the initiativeToProject to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeToProjectUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiativeToProject to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProjectPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProjectDelete\",\n              \"description\": \"Deletes a initiativeToProject.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiativeToProject to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeCreate\",\n              \"description\": \"Creates a new initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the initiative to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"Updates a initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the initiative to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeArchive\",\n              \"description\": \"Archives a initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUnarchive\",\n              \"description\": \"Unarchives a initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeDelete\",\n              \"description\": \"Deletes (trashes) an initiative.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeRelationCreate\",\n              \"description\": \"Creates a new initiative relation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The initiative relation to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeRelationCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeRelationPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeRelationUpdate\",\n              \"description\": \"Updates an initiative relation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the initiative relation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"InitiativeRelationUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative relation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeRelationDelete\",\n              \"description\": \"Deletes an initiative relation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the initiative relation to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationTargetBranchCreate\",\n              \"description\": \"Creates a Git target branch automation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The Git target branch automation to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"GitAutomationTargetBranchCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationTargetBranchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationTargetBranchUpdate\",\n              \"description\": \"Updates an existing Git target branch automation.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The updates.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"GitAutomationTargetBranchUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the Git target branch automation to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationTargetBranchPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationTargetBranchDelete\",\n              \"description\": \"Archives a Git target branch automation.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the Git target branch automation to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationStateCreate\",\n              \"description\": \"Creates a new automation state.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The automation state to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"GitAutomationStateCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationStatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationStateUpdate\",\n              \"description\": \"Updates an existing state.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The state to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"GitAutomationStateUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the state to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationStatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationStateDelete\",\n              \"description\": \"Archives an automation state.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the automation state to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favoriteCreate\",\n              \"description\": \"Creates a new favorite (project, cycle etc).\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The favorite object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"FavoriteCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FavoritePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favoriteUpdate\",\n              \"description\": \"Updates a favorite.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial favorite object to update the favorite with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"FavoriteUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the favorite to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FavoritePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favoriteDelete\",\n              \"description\": \"Deletes a favorite reference.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the favorite reference to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"trackAnonymousEvent\",\n              \"description\": \"Track an anonymous analytics event.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Event tracking details.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EventTrackingInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EventTrackingPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityExternalLinkCreate\",\n              \"description\": \"Creates a new entity link.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The entity link object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EntityExternalLinkCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityExternalLinkUpdate\",\n              \"description\": \"Updates an entity link.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The entity link object to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EntityExternalLinkUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the entity link to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLinkPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityExternalLinkDelete\",\n              \"description\": \"Deletes an entity link.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the entity link to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emojiCreate\",\n              \"description\": \"Creates a custom emoji.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The emoji object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EmojiCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmojiPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emojiDelete\",\n              \"description\": \"Deletes an emoji.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the emoji to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailUnsubscribe\",\n              \"description\": \"Unsubscribes the user from one type of email.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Unsubscription details.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EmailUnsubscribeInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailUnsubscribePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailIntakeAddressCreate\",\n              \"description\": \"Creates a new email intake address.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The email intake address object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EmailIntakeAddressCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailIntakeAddressPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailIntakeAddressRotate\",\n              \"description\": \"Rotates an existing email intake address.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the email intake address.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailIntakeAddressPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailIntakeAddressUpdate\",\n              \"description\": \"Updates an existing email intake address.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the email intake address to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EmailIntakeAddressUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the email intake address.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailIntakeAddressPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailIntakeAddressDelete\",\n              \"description\": \"Deletes an email intake address object.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the email intake address to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentCreate\",\n              \"description\": \"Creates a new document.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The document to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"DocumentCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentUpdate\",\n              \"description\": \"Updates a document.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial document object to update the document with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"DocumentUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the document to update. Also the identifier from the URL is accepted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentDelete\",\n              \"description\": \"Deletes (trashes) a document.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the document to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"documentUnarchive\",\n              \"description\": \"Restores a document.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the document to restore.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DocumentArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleCreate\",\n              \"description\": \"Creates a new cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The cycle object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CycleCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CyclePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleUpdate\",\n              \"description\": \"Updates a cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial cycle object to update the cycle with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CycleUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the cycle to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CyclePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleArchive\",\n              \"description\": \"Archives a cycle.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the cycle to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CycleArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleShiftAll\",\n              \"description\": \"Shifts all cycles starts and ends by a certain number of days, starting from the provided cycle onwards.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial cycle object to update the cycle with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CycleShiftAllInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CyclePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleStartUpcomingCycleToday\",\n              \"description\": \"Shifts all cycles starts and ends by a certain number of days, starting from the provided cycle onwards.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the cycle to start as of midnight today. Must be the upcoming cycle.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CyclePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTierCreate\",\n              \"description\": \"Creates a new customer tier.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The CustomerTier object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerTierCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerTierPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTierUpdate\",\n              \"description\": \"Updates a customer tier.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial CustomerTier object to update the CustomerTier with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerTierUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer tier to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerTierPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerTierDelete\",\n              \"description\": \"Deletes a customer tier.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer tier to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerStatusCreate\",\n              \"description\": \"Creates a new customer status.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The CustomerStatus object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerStatusCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatusPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerStatusUpdate\",\n              \"description\": \"Updates a customer status.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial CustomerStatus object to update the CustomerStatus with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerStatusUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer status to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatusPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerStatusDelete\",\n              \"description\": \"Deletes a customer status.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer status to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerCreate\",\n              \"description\": \"Creates a new customer.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The customer to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerUpdate\",\n              \"description\": \"Updates a customer\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the customer to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerDelete\",\n              \"description\": \"Deletes a customer.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerMerge\",\n              \"description\": \"Merges two customers.\",\n              \"args\": [\n                {\n                  \"name\": \"sourceCustomerId\",\n                  \"description\": \"The ID of the customer to merge. The needs of this customer will be transferred before it gets deleted.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"targetCustomerId\",\n                  \"description\": \"The ID of the target customer to merge into. The needs of this customer will be retained\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerUpsert\",\n              \"description\": \"Upserts a customer, creating it if it doesn't exists, updating it otherwise. Matches against an existing customer with `id` or `externalId`\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The customer to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerUpsertInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerUnsync\",\n              \"description\": \"Unsyncs a managed customer from the its current data source. External IDs mapping to the external source will be cleared.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer to unsync.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedCreate\",\n              \"description\": \"Creates a new customer need.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The customer need to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerNeedCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedCreateFromAttachment\",\n              \"description\": \"Creates a new customer need out of an attachment\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The customer need to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerNeedCreateFromAttachmentInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedUpdate\",\n              \"description\": \"Updates a customer need\",\n              \"args\": [\n                {\n                  \"name\": \"clearAttachment\",\n                  \"description\": \"Whether to remove any existing attachment associated with the customer need.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the customer need to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomerNeedUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer need to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedUpdatePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedDelete\",\n              \"description\": \"Deletes a customer need.\",\n              \"args\": [\n                {\n                  \"name\": \"keepAttachment\",\n                  \"description\": \"Whether to keep the attachment associated with the customer need.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer need to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedArchive\",\n              \"description\": \"Archives a customer need.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer need to archive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customerNeedUnarchive\",\n              \"description\": \"Unarchives a customer need.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the customer need to unarchive.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeedArchivePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewCreate\",\n              \"description\": \"Creates a new custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the custom view to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomViewCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomViewPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewUpdate\",\n              \"description\": \"Updates a custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The properties of the custom view to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CustomViewUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the custom view to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomViewPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViewDelete\",\n              \"description\": \"Deletes a custom view.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the custom view to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contactCreate\",\n              \"description\": \"Saves user message.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The contact entry to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ContactCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ContactPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contactSalesCreate\",\n              \"description\": \"[INTERNAL] Saves sales pricing inquiry to Front.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The contact entry to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"ContactSalesCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ContactPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentCreate\",\n              \"description\": \"Creates a new comment.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The comment object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CommentCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentUpdate\",\n              \"description\": \"Updates a comment.\",\n              \"args\": [\n                {\n                  \"name\": \"skipEditedAt\",\n                  \"description\": \"[INTERNAL] Flag to prevent setting editedAt when updating bodyData (used for background uploads).\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial comment object to update the comment with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CommentUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the comment to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentDelete\",\n              \"description\": \"Deletes a comment.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the comment to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentResolve\",\n              \"description\": \"Resolves a comment.\",\n              \"args\": [\n                {\n                  \"name\": \"resolvingCommentId\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the comment to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commentUnresolve\",\n              \"description\": \"Unresolves a comment.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the comment to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CommentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailUserAccountAuthChallenge\",\n              \"description\": \"Finds or creates a new user account by email and sends an email with token.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The data used for email authentication.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"EmailUserAccountAuthChallengeInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailUserAccountAuthChallengeResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailTokenUserAccountAuth\",\n              \"description\": \"Authenticates a user account via email and authentication token.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The data used for token authentication.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TokenUserAccountAuthInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthResolverResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"samlTokenUserAccountAuth\",\n              \"description\": \"Authenticates a user account via email and authentication token for SAML.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The data used for token authentication.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TokenUserAccountAuthInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthResolverResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"googleUserAccountAuth\",\n              \"description\": \"Authenticate user account through Google OAuth. This is the 2nd step of OAuth flow.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The data used for Google authentication.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"GoogleUserAccountAuthInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthResolverResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"passkeyLoginStart\",\n              \"description\": \"[INTERNAL] Starts passkey login process.\",\n              \"args\": [\n                {\n                  \"name\": \"authId\",\n                  \"description\": \"Random ID to start passkey login with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PasskeyLoginStartResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"passkeyLoginFinish\",\n              \"description\": \"[INTERNAL] Finish passkey login process.\",\n              \"args\": [\n                {\n                  \"name\": \"response\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"JSONObject\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"authId\",\n                  \"description\": \"Random ID to start passkey login with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthResolverResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createOrganizationFromOnboarding\",\n              \"description\": \"Creates an organization from onboarding.\",\n              \"args\": [\n                {\n                  \"name\": \"sessionId\",\n                  \"description\": \"PostHog session ID for attribution tracking.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"survey\",\n                  \"description\": \"Onboarding survey.\",\n                  \"type\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"OnboardingCustomerSurvey\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Organization details for the new organization.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"CreateOrganizationInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CreateOrJoinOrganizationResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"joinOrganizationFromOnboarding\",\n              \"description\": \"Join an organization from onboarding.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"Organization details for the organization to join.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"JoinOrganizationInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CreateOrJoinOrganizationResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"leaveOrganization\",\n              \"description\": \"Leave an organization.\",\n              \"args\": [\n                {\n                  \"name\": \"organizationId\",\n                  \"description\": \"ID of the organization to leave.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CreateOrJoinOrganizationResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logout\",\n              \"description\": \"Logout the client.\",\n              \"args\": [\n                {\n                  \"name\": \"reason\",\n                  \"description\": \"The reason for logging out.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"LogoutResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logoutSession\",\n              \"description\": \"Logout an individual session with its ID.\",\n              \"args\": [\n                {\n                  \"name\": \"sessionId\",\n                  \"description\": \"ID of the session to logout.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"LogoutResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logoutAllSessions\",\n              \"description\": \"Logout all of user's sessions including the active one.\",\n              \"args\": [\n                {\n                  \"name\": \"reason\",\n                  \"description\": \"The reason for logging out.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"LogoutResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"logoutOtherSessions\",\n              \"description\": \"Logout all of user's sessions excluding the current one.\",\n              \"args\": [\n                {\n                  \"name\": \"reason\",\n                  \"description\": \"The reason for logging out.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"LogoutResponse\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentCreate\",\n              \"description\": \"Creates a new attachment, or updates existing if the same `url` and `issueId` is used. To create an integration-aware attachment, use the integration-specific mutations such as `attachmentLinkZendesk`, `attachmentLinkSlack`, or `attachmentLinkURL` instead.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The attachment object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AttachmentCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentUpdate\",\n              \"description\": \"Updates an existing issue attachment.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial attachment object to update the attachment with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AttachmentUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the attachment to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkURL\",\n              \"description\": \"Link any URL to an issue. If the workspace has a matching integration configured and the URL is recognized (e.g., Zendesk, GitHub, Slack), a rich attachment will be created that enables features like automated status updates. Otherwise, a basic attachment is created.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The url to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the url. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The id for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkGitLabMR\",\n              \"description\": \"Link an existing GitLab MR to an issue. This creates a rich attachment using the workspace's GitLab integration, enabling features like automated status syncing.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the GitLab merge request. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The URL of the GitLab merge request to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"projectPathWithNamespace\",\n                  \"description\": \"The path name to the project including any (sub)groups. E.g. linear/main/client.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"number\",\n                  \"description\": \"The GitLab merge request number to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"Float\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkGitHubIssue\",\n              \"description\": \"Link a GitHub issue to a Linear issue. This creates a rich attachment using the workspace's GitHub integration, enabling features like automated status syncing.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The Linear issue for which to link the GitHub issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The URL of the GitHub issue to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkGitHubPR\",\n              \"description\": \"Link a GitHub pull request to an issue. This creates a rich attachment using the workspace's GitHub integration, enabling features like automated status syncing.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the GitHub pull request. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The URL of the GitHub pull request to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"linkKind\",\n                  \"description\": \"[Internal] The kind of link between the issue and the pull request.\",\n                  \"type\": {\n                    \"kind\": \"ENUM\",\n                    \"name\": \"GitLinkKind\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkZendesk\",\n              \"description\": \"Link an existing Zendesk ticket to an issue. This creates a rich attachment using the workspace's Zendesk integration, enabling features like automated ticket reopening when the Linear issue is completed.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"ticketId\",\n                  \"description\": \"The Zendesk ticket ID to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the Zendesk ticket. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The URL of the Zendesk ticket to link.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkDiscord\",\n              \"description\": \"Link an existing Discord message to an issue. This creates a rich attachment using the workspace's Discord integration.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the Discord message. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"channelId\",\n                  \"description\": \"The Discord channel ID for the message to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"messageId\",\n                  \"description\": \"The Discord message ID for the message to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The Discord message URL for the message to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentSyncToSlack\",\n              \"description\": \"Begin syncing the thread for an existing Slack message attachment with a comment thread on its issue.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The ID of the Slack attachment to begin syncing.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkSlack\",\n              \"description\": \"Link an existing Slack message to an issue. This creates a rich attachment using the workspace's Slack integration.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue to which to link the Slack message. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The Slack message URL for the message to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"syncToCommentThread\",\n                  \"description\": \"Whether to begin syncing the message's Slack thread with a comment thread on the issue.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkFront\",\n              \"description\": \"Link an existing Front conversation to an issue. This creates a rich attachment using the workspace's Front integration, enabling features like automated conversation updates.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"conversationId\",\n                  \"description\": \"The Front conversation ID to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the Front conversation. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"FrontAttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkIntercom\",\n              \"description\": \"Link an existing Intercom conversation to an issue. This creates a rich attachment using the workspace's Intercom integration, enabling features like automated conversation updates.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"conversationId\",\n                  \"description\": \"The Intercom conversation ID to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"partId\",\n                  \"description\": \"An optional Intercom conversation part ID to link to\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the Intercom conversation. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkJiraIssue\",\n              \"description\": \"Link an existing Jira issue to an issue. This creates a rich attachment using the workspace's Jira integration, enabling features like automated status syncing.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the Jira issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"jiraIssueId\",\n                  \"description\": \"The Jira issue key or ID to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"Optional fallback URL to use if the Jira issue cannot be found.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentLinkSalesforce\",\n              \"description\": \"Link an existing Salesforce case to an issue. This creates a rich attachment using the workspace's Salesforce integration.\",\n              \"args\": [\n                {\n                  \"name\": \"createAsUser\",\n                  \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"displayIconUrl\",\n                  \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"title\",\n                  \"description\": \"The title to use for the attachment.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"issueId\",\n                  \"description\": \"The issue for which to link the Salesforce case. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"Optional attachment ID that may be provided through the API.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"url\",\n                  \"description\": \"The URL of the Salesforce case to link.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AttachmentPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachmentDelete\",\n              \"description\": \"Deletes an issue attachment.\",\n              \"args\": [\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the attachment to delete.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"DeletePayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionCreateOnComment\",\n              \"description\": \"Creates a new agent session on a rootcomment.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The agent session object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentSessionCreateOnComment\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionCreateOnIssue\",\n              \"description\": \"Creates a new agent session on an issue.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The agent session object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentSessionCreateOnIssue\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionCreate\",\n              \"description\": \"[Internal] Creates a new agent session on behalf of the current user\",\n              \"args\": [\n                {\n                  \"name\": \"pullRequestId\",\n                  \"description\": \"[Internal] Optional pull request to associate with the created session.\",\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The agent session object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentSessionCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionUpdateExternalUrl\",\n              \"description\": \"Updates the externalUrl of an agent session, which is an agent-hosted page associated with this session.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The agent session object to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentSessionUpdateExternalUrlInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the agent session to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSessionUpdate\",\n              \"description\": \"Updates an agent session.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"A partial agent session object to update the agent session with.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentSessionUpdateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                },\n                {\n                  \"name\": \"id\",\n                  \"description\": \"The identifier of the agent session to update.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSessionPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentActivityCreate\",\n              \"description\": \"Creates an agent activity.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The agent activity object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentActivityCreateInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivityPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentActivityCreatePrompt\",\n              \"description\": \"[Internal] Creates a prompt agent activity from Linear user input.\",\n              \"args\": [\n                {\n                  \"name\": \"input\",\n                  \"description\": \"The prompt agent activity object to create.\",\n                  \"type\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"AgentActivityCreatePromptInput\",\n                      \"ofType\": null\n                    }\n                  },\n                  \"defaultValue\": null\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivityPayload\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UploadPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"uploadFile\",\n              \"description\": \"Object describing the file to be uploaded.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"UploadFile\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UploadFile\",\n          \"description\": \"Object representing Google Cloud upload policy, plus additional data.\",\n          \"fields\": [\n            {\n              \"name\": \"filename\",\n              \"description\": \"The filename.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contentType\",\n              \"description\": \"The content type.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"The size of the uploaded file.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Int\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"uploadUrl\",\n              \"description\": \"The signed URL the for the uploaded file. (assigned automatically).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"assetUrl\",\n              \"description\": \"The asset URL for the uploaded file. (assigned automatically).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"metaData\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"headers\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"UploadFileHeader\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UploadFileHeader\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"key\",\n              \"description\": \"Upload file header key.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"value\",\n              \"description\": \"Upload file header value.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ImageUploadFromUrlPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL containing the image.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FileUploadDeletePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WorkflowStatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workflowState\",\n              \"description\": \"The state that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"WorkflowState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"WorkflowStateCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The workflow type.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the state.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the state.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team associated with the state.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"WorkflowStateUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WorkflowStateArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"WorkflowState\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INTERFACE\",\n          \"name\": \"ArchivePayload\",\n          \"description\": \"A generic payload return from entity archive or deletion mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": [\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"WorkflowStateArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DeletePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"TeamArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"RoadmapArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ReleaseStageArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ReleaseArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ReleasePipelineArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectUpdateArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"ProjectStatusArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"NotificationArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"IssueArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeUpdateArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"InitiativeArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"DocumentArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CycleArchivePayload\",\n              \"ofType\": null\n            },\n            {\n              \"kind\": \"OBJECT\",\n              \"name\": \"CustomerNeedArchivePayload\",\n              \"ofType\": null\n            }\n          ]\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WebhookPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhook\",\n              \"description\": \"The webhook entity being mutated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Webhook\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"WebhookCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"label\",\n              \"description\": \"Label for the webhook.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether this webhook is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"true\"\n            },\n            {\n              \"name\": \"secret\",\n              \"description\": \"A secret token used to sign the webhook payload.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL that will be called on data changes.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resourceTypes\",\n              \"description\": \"List of resources the webhook should subscribe to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier or key of the team associated with the Webhook.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"allPublicTeams\",\n              \"description\": \"Whether this webhook is enabled for all public teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"WebhookUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"label\",\n              \"description\": \"Label for the webhook.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"secret\",\n              \"description\": \"A secret token used to sign the webhook payload.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether this webhook is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL that will be called on data changes.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resourceTypes\",\n              \"description\": \"List of resources the webhook should subscribe to.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DeletePayload\",\n          \"description\": \"A generic payload return from entity deletion mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityId\",\n              \"description\": \"The identifier of the deleted entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"WebhookRotateSecretPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"secret\",\n              \"description\": \"The new webhook signing secret.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ViewPreferencesPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"viewPreferences\",\n              \"description\": \"The view preferences entity being mutated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ViewPreferences\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ViewPreferencesCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of view preferences (either user or organization level preferences).\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ViewPreferencesType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"viewType\",\n              \"description\": \"The view type of the view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ViewType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"preferences\",\n              \"description\": \"View preferences object.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"insights\",\n              \"description\": \"The default parameters for the insight on that view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[Internal] The initiative these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelId\",\n              \"description\": \"The label these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectLabelId\",\n              \"description\": \"The project label these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releasePipelineId\",\n              \"description\": \"The release pipeline these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customViewId\",\n              \"description\": \"The custom view these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The user profile these view preferences are associated with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ViewPreferencesType\",\n          \"description\": \"The type of view preferences (either user or organization level preferences).\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"organization\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ViewType\",\n          \"description\": \"The client view this custom view is targeting.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"inbox\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"myIssues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"myIssuesCreatedByMe\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"myIssuesSubscribedTo\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"myIssuesActivity\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"myIssuesSharedWithMe\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userProfile\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userProfileCreatedByUser\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"board\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedCycle\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"continuousPipelineReleases\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"scheduledPipelineReleases\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectDocuments\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triage\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"activeIssues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"backlog\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subIssues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"allIssues\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dashboards\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customViews\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeOverview\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeOverviewSubInitiatives\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiatives\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativesPlanned\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativesCompleted\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectsAll\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectsBacklog\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectsClosed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabel\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"search\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"splitSearch\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archive\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"quickView\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueIdentifiers\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customers\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"embeddedCustomerNeeds\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectCustomerNeeds\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reviews\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"myReviews\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdReviews\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agents\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"focus\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedAll\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedCreated\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedFollowing\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"feedPopular\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"workspaceMembers\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipelines\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapAll\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmap\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmaps\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapClosed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapBacklog\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ViewPreferencesUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"preferences\",\n              \"description\": \"View preferences.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"insights\",\n              \"description\": \"The default parameters for the insight on that view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettingsPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"userSettings\",\n              \"description\": \"The user's settings.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"UserSettings\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserSettingsUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"settings\",\n              \"description\": \"The user's settings.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribedToChangelog\",\n              \"description\": \"Whether this user is subscribed to changelog email or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribedToDPA\",\n              \"description\": \"Whether this user is subscribed to DPA emails or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribedToInviteAccepted\",\n              \"description\": \"Whether this user is subscribed to invite accepted emails or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribedToPrivacyLegalUpdates\",\n              \"description\": \"Whether this user is subscribed to privacy and legal update emails or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscribedToGeneralMarketingCommunications\",\n              \"description\": \"Whether this user is subscribed to general marketing communications or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notificationCategoryPreferences\",\n              \"description\": \"The user's notification category preferences.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NotificationCategoryPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notificationChannelPreferences\",\n              \"description\": \"The user's notification channel preferences.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notificationDeliveryPreferences\",\n              \"description\": \"The user's notification delivery preferences.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NotificationDeliveryPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"usageWarningHistory\",\n              \"description\": \"[Internal] The user's usage warning history.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"feedSummarySchedule\",\n              \"description\": \"[Internal] How often to generate a feed summary.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FeedSummarySchedule\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"feedLastSeenTime\",\n              \"description\": \"[Internal] The user's last seen time for the pulse feed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationCategoryPreferencesInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"assignments\",\n              \"description\": \"The preferences for notifications about assignments.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusChanges\",\n              \"description\": \"The preferences for notifications about status changes.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commentsAndReplies\",\n              \"description\": \"The preferences for notifications about comments and replies.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"mentions\",\n              \"description\": \"The preferences for notifications about mentions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reactions\",\n              \"description\": \"The preferences for notifications about reactions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriptions\",\n              \"description\": \"The preferences for notifications about subscriptions.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documentChanges\",\n              \"description\": \"The preferences for notifications about document changes.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"postsAndUpdates\",\n              \"description\": \"The preferences for notifications about posts and updates.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reminders\",\n              \"description\": \"The preferences for notifications about reminders.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reviews\",\n              \"description\": \"The preferences for notifications about reviews.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"appsAndIntegrations\",\n              \"description\": \"The preferences for notifications about apps and integrations.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triage\",\n              \"description\": \"The preferences for notifications about triage.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customers\",\n              \"description\": \"The preferences for notifications about customers.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"feed\",\n              \"description\": \"The preferences for notifications about feed summaries.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PartialNotificationChannelPreferencesInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"PartialNotificationChannelPreferencesInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"mobile\",\n              \"description\": \"Whether notifications are currently enabled for mobile.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"desktop\",\n              \"description\": \"Whether notifications are currently enabled for desktop.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Whether notifications are currently enabled for email.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slack\",\n              \"description\": \"Whether notifications are currently enabled for Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"mobile\",\n              \"description\": \"The delivery preferences for the mobile channel.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NotificationDeliveryPreferencesChannelInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesChannelInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"schedule\",\n              \"description\": \"The schedule for notifications on this channel.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NotificationDeliveryPreferencesScheduleInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesScheduleInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"disabled\",\n              \"description\": \"Whether the schedule is disabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sunday\",\n              \"description\": \"Delivery preferences for Sunday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"monday\",\n              \"description\": \"Delivery preferences for Monday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tuesday\",\n              \"description\": \"Delivery preferences for Tuesday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"wednesday\",\n              \"description\": \"Delivery preferences for Wednesday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"thursday\",\n              \"description\": \"Delivery preferences for Thursday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"friday\",\n              \"description\": \"Delivery preferences for Friday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"saturday\",\n              \"description\": \"Delivery preferences for Saturday.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"NotificationDeliveryPreferencesDayInput\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationDeliveryPreferencesDayInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"start\",\n              \"description\": \"The time notifications start.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"end\",\n              \"description\": \"The time notifications end.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettingsFlagsResetPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserFlagType\",\n          \"description\": \"The types of flags that the user can have.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"updatedSlackThreadSyncIntegration\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"completedOnboarding\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktopInstalled\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamsPageIntroductionDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"joinTeamIntroductionDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktopDownloadToastDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emptyBacklogDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emptyCustomViewsDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emptyActiveIssuesDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emptyMyIssuesDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycleWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectBacklogWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdatesWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"pulseWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"analyticsWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"insightsWelcomeDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"insightsHelpDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"figmaPromptDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueMovePromptCompleted\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"migrateThemePreference\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"listSelectionTip\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emptyParagraphSlashCommandTip\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"editorSlashCommandUsed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canPlaySnake\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"canPlayTetris\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"importBannerDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryInvitePeopleDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryRoadmapsDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryCyclesDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryTriageDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryGithubDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryCursorDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tryCodexDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"rewindBannerDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"helpIslandFeatureInsightsDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"dueDateShortcutMigration\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackCommentReactionTipShown\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabelSuggestionUsed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"threadedCommentsNudgeIsSeen\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"desktopTabsOnboardingDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"milestoneOnboardingIsSeenAndDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectBoardOnboardingIsSeenAndDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"figmaPluginBannerDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativesBannerDismissed\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"commandMenuClearShortcutTip\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackBotWelcomeMessageShown\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamsBotWelcomeMessageShown\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slackAgentPromoFromCreateNewIssueShown\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"all\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserSettingsFlagPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"flag\",\n              \"description\": \"The flag key which was updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"value\",\n              \"description\": \"The flag value after update.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"UserFlagUpdateOperation\",\n          \"description\": \"Operations that can be applied to UserFlagType.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"incr\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"decr\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"clear\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"lock\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"NotificationChannel\",\n          \"description\": \"The delivery channels a user can receive notifications in.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"desktop\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mobile\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"slack\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": \"The user that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"UserUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the user.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the user.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"avatarUrl\",\n              \"description\": \"The avatar image URL of the user.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The user description or a short bio.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusEmoji\",\n              \"description\": \"The emoji part of the user status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusLabel\",\n              \"description\": \"The label part of the user status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusUntilAt\",\n              \"description\": \"When the user status should be cleared.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The local timezone of the user.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"UserAdminPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TriageResponsibilityPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"triageResponsibility\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TriageResponsibility\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TriageResponsibilityCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier of the team associated with the triage responsibility.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"action\",\n              \"description\": \"The action to take when an issue is added to triage.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manualSelection\",\n              \"description\": \"The manual selection of users responsible for triage.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TriageResponsibilityManualSelectionInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timeScheduleId\",\n              \"description\": \"The identifier of the time schedule used for scheduling triage responsibility\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TriageResponsibilityManualSelectionInput\",\n          \"description\": \"Manual triage responsibility using a set of users.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"userIds\",\n              \"description\": \"The set of users responsible for triage.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assignmentIndex\",\n              \"description\": \"[Internal] The index of the current userId used for the assign action when having more than one user.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TriageResponsibilityUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"action\",\n              \"description\": \"The action to take when an issue is added to triage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manualSelection\",\n              \"description\": \"The manual selection of users responsible for triage.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TriageResponsibilityManualSelectionInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timeScheduleId\",\n              \"description\": \"The identifier of the time schedule used for scheduling triage responsibility.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TimeSchedulePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"timeSchedule\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"TimeSchedule\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TimeScheduleCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the schedule.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"entries\",\n              \"description\": \"The schedule entries.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"TimeScheduleEntryInput\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalId\",\n              \"description\": \"The unique identifier of the external schedule.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUrl\",\n              \"description\": \"The URL to the external schedule.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TimeScheduleEntryInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"The start date of the schedule in ISO 8601 date-time format.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"The end date of the schedule in ISO 8601 date-time format.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The Linear user id of the user on schedule. If the user cannot be mapped to a Linear user then `userEmail` can be used as a reference.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userEmail\",\n              \"description\": \"The email, name or reference to the user on schedule. This is used in case the external user could not be mapped to a Linear user id.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TimeScheduleUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the schedule.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"entries\",\n              \"description\": \"The schedule entries.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"TimeScheduleEntryInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalId\",\n              \"description\": \"The unique identifier of the external schedule.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUrl\",\n              \"description\": \"The URL to the external schedule.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TemplatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"template\",\n              \"description\": \"The template that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Template\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TemplateCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The template type, e.g. 'issue'.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier or key of the team associated with the template. If not given, the template will be shared across all teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The template name.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The template description.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the template.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the template icon.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateData\",\n              \"description\": \"The template data as JSON encoded attributes of the type of entity, such as an issue.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSON\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the template in the templates list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TemplateUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The template name.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The template description.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the template.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the template icon.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier or key of the team associated with the template. If set to null, the template will be shared across all teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateData\",\n              \"description\": \"The template data as JSON encoded attributes of the type of entity, such as an issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the template in the templates list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The project that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusId\",\n              \"description\": \"The ID of the project status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description for the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The project content as markdown.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"The identifiers of the teams this project is associated with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"convertedFromIssueId\",\n              \"description\": \"The ID of the issue from which that project is created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplateId\",\n              \"description\": \"The ID of the last template applied to the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateId\",\n              \"description\": \"The ID of the template to apply when creating the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"useDefaultTemplate\",\n              \"description\": \"When set to true, the default project template of the first team provided will be applied. If templateId is provided, this will be ignored.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"leadId\",\n              \"description\": \"The identifier of the project lead.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"memberIds\",\n              \"description\": \"The identifiers of the members of this project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The planned start date of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDateResolution\",\n              \"description\": \"The resolution of the project's start date.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The planned target date of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the project's estimated completion date.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within shared views.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The sort order for the project within shared views, when ordered by priority.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"[Internal]The identifiers of the project labels associated with this project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"statusId\",\n              \"description\": \"The ID of the project status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description for the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The project content as markdown.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"convertedFromIssueId\",\n              \"description\": \"The ID of the issue from which that project is created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplateId\",\n              \"description\": \"The ID of the last template applied to the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"The identifiers of the teams this project is associated with.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersPausedUntilAt\",\n              \"description\": \"The time until which project update reminders are paused.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateReminderFrequency\",\n              \"description\": \"The frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"frequencyResolution\",\n              \"description\": \"The frequency resolution.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FrequencyResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateRemindersDay\",\n              \"description\": \"The day at which to prompt for updates.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateRemindersHour\",\n              \"description\": \"The hour at which to prompt for updates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"leadId\",\n              \"description\": \"The identifier of the project lead.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"memberIds\",\n              \"description\": \"The identifiers of the members of this project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The planned start date of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDateResolution\",\n              \"description\": \"The resolution of the project's start date.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The planned target date of the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the project's estimated completion date.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The date when the project was completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canceledAt\",\n              \"description\": \"The date when the project was canceled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackNewIssue\",\n              \"description\": \"Whether to send new issue notifications to Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueComments\",\n              \"description\": \"Whether to send new issue comment notifications to Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueStatuses\",\n              \"description\": \"Whether to send issue status update notifications to Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project in shared views.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The sort order for the project within shared views, when ordered by priority.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"Whether the project has been trashed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the project. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"The identifiers of the project labels associated with this project.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SuccessPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Project\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": \"The team that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the team.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"key\",\n              \"description\": \"The key of the team. If not given, the key will be generated based on the name of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cyclesEnabled\",\n              \"description\": \"Whether the team uses cycles.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleStartDay\",\n              \"description\": \"The day of the week that a new cycle starts.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleDuration\",\n              \"description\": \"The duration of each cycle in weeks.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleCooldownTime\",\n              \"description\": \"The cooldown time after each cycle in weeks.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleIssueAutoAssignStarted\",\n              \"description\": \"Auto assign started issues to current active cycle setting.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleIssueAutoAssignCompleted\",\n              \"description\": \"Auto assign completed issues to current active cycle setting.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleLockToActive\",\n              \"description\": \"Only allow issues issues with cycles in Active Issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"upcomingCycleCount\",\n              \"description\": \"How many upcoming cycles to create.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triageEnabled\",\n              \"description\": \"Whether triage mode is enabled for the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"requirePriorityToLeaveTriage\",\n              \"description\": \"Whether an issue needs to have a priority set before leaving triage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The timezone of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritIssueEstimation\",\n              \"description\": \"Whether the team should inherit estimation settings from its parent. Only applies to sub-teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritWorkflowStatuses\",\n              \"description\": \"[Internal] Whether the team should inherit workflow statuses from its parent.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueEstimationType\",\n              \"description\": \"The issue estimation type to use. Must be one of \\\"notUsed\\\", \\\"exponential\\\", \\\"fibonacci\\\", \\\"linear\\\", \\\"tShirt\\\".\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueEstimationAllowZero\",\n              \"description\": \"Whether to allow zeros in issues estimates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"setIssueSortOrderOnStateChange\",\n              \"description\": \"Whether to move issues to bottom of the column when changing state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueEstimationExtended\",\n              \"description\": \"Whether to add additional points to the estimate scale.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultIssueEstimate\",\n              \"description\": \"What to use as an default estimate for unestimated issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"groupIssueHistory\",\n              \"description\": \"Whether to group recent issue history entries.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultTemplateForMembersId\",\n              \"description\": \"The identifier of the default template for members of this team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultTemplateForNonMembersId\",\n              \"description\": \"The identifier of the default template for non-members of this team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultProjectTemplateId\",\n              \"description\": \"The identifier of the default project template of this team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"private\",\n              \"description\": \"Internal. Whether the team is private or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoClosePeriod\",\n              \"description\": \"Period after which issues are automatically closed, in months.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCloseStateId\",\n              \"description\": \"The canceled workflow state which auto closed issues will be set to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoArchivePeriod\",\n              \"description\": \"Period after which closed and completed issues are automatically archived, in months. 0 means disabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"markedAsDuplicateWorkflowStateId\",\n              \"description\": \"The workflow state into which issues are moved when they are marked as a duplicate of another issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The parent team ID.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritProductIntelligenceScope\",\n              \"description\": \"[Internal] Whether the team should inherit its product intelligence scope from its parent. Only applies to sub-teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"productIntelligenceScope\",\n              \"description\": \"[Internal] The scope of product intelligence suggestion data for the team.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProductIntelligenceScope\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"ProductIntelligenceScope\",\n          \"description\": \"[Internal] The scope of product intelligence suggestion data for a team.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"workspace\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamHierarchy\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"team\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"none\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InheritanceEntityMapping\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"workflowStates\",\n              \"description\": \"Mapping of the WorkflowState ID to the new WorkflowState ID.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueLabels\",\n              \"description\": \"Mapping of the IssueLabel ID to the new IssueLabel name.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"key\",\n              \"description\": \"The key of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cyclesEnabled\",\n              \"description\": \"Whether the team uses cycles.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleStartDay\",\n              \"description\": \"The day of the week that a new cycle starts.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleDuration\",\n              \"description\": \"The duration of each cycle in weeks.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleCooldownTime\",\n              \"description\": \"The cooldown time after each cycle in weeks.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleIssueAutoAssignStarted\",\n              \"description\": \"Auto assign started issues to current active cycle setting.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleIssueAutoAssignCompleted\",\n              \"description\": \"Auto assign completed issues to current active cycle setting.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleLockToActive\",\n              \"description\": \"Only allow issues with cycles in Active Issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleEnabledStartDate\",\n              \"description\": \"The date to begin cycles on.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"upcomingCycleCount\",\n              \"description\": \"How many upcoming cycles to create.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The timezone of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritIssueEstimation\",\n              \"description\": \"Whether the team should inherit estimation settings from its parent. Only applies to sub-teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueEstimationType\",\n              \"description\": \"The issue estimation type to use. Must be one of \\\"notUsed\\\", \\\"exponential\\\", \\\"fibonacci\\\", \\\"linear\\\", \\\"tShirt\\\".\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueEstimationAllowZero\",\n              \"description\": \"Whether to allow zeros in issues estimates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"setIssueSortOrderOnStateChange\",\n              \"description\": \"Whether to move issues to bottom of the column when changing state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueEstimationExtended\",\n              \"description\": \"Whether to add additional points to the estimate scale.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultIssueEstimate\",\n              \"description\": \"What to use as an default estimate for unestimated issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackNewIssue\",\n              \"description\": \"Whether to send new issue notifications to Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueComments\",\n              \"description\": \"Whether to send new issue comment notifications to Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueStatuses\",\n              \"description\": \"Whether to send issue status update notifications to Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"groupIssueHistory\",\n              \"description\": \"Whether to group recent issue history entries.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiThreadSummariesEnabled\",\n              \"description\": \"Whether to enable resolved thread AI summaries.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiDiscussionSummariesEnabled\",\n              \"description\": \"Whether to enable AI discussion summaries for issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultTemplateForMembersId\",\n              \"description\": \"The identifier of the default template for members of this team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultTemplateForNonMembersId\",\n              \"description\": \"The identifier of the default template for non-members of this team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultProjectTemplateId\",\n              \"description\": \"The identifier of the default project template of this team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"private\",\n              \"description\": \"Whether the team is private or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"triageEnabled\",\n              \"description\": \"Whether triage mode is enabled for the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"requirePriorityToLeaveTriage\",\n              \"description\": \"Whether an issue needs to have a priority set before leaving triage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultIssueStateId\",\n              \"description\": \"Default status for newly created issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoClosePeriod\",\n              \"description\": \"Period after which issues are automatically closed, in months.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCloseStateId\",\n              \"description\": \"The canceled workflow state which auto closed issues will be set to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCloseParentIssues\",\n              \"description\": \"Whether to automatically close a parent issue in this team if all its sub-issues are closed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCloseChildIssues\",\n              \"description\": \"Whether to automatically close all sub-issues when a parent issue in this team is closed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoArchivePeriod\",\n              \"description\": \"Period after which closed and completed issues are automatically archived, in months.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"markedAsDuplicateWorkflowStateId\",\n              \"description\": \"The workflow state into which issues are moved when they are marked as a duplicate of another issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"joinByDefault\",\n              \"description\": \"Whether new users should join this team by default. Mutation restricted to workspace admins or owners!\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"scimManaged\",\n              \"description\": \"Whether the team is managed by SCIM integration. Mutation restricted to workspace admins or owners and only unsetting is allowed!\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The parent team ID.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritWorkflowStatuses\",\n              \"description\": \"[Internal] Whether the team should inherit workflow statuses from its parent.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inheritProductIntelligenceScope\",\n              \"description\": \"[Internal] Whether the team should inherit its product intelligence scope from its parent. Only applies to sub-teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"productIntelligenceScope\",\n              \"description\": \"[Internal] The scope of product intelligence suggestion data for the team.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProductIntelligenceScope\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"securitySettings\",\n              \"description\": \"The security settings for the team.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"TeamSecuritySettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"allMembersCanJoin\",\n              \"description\": \"Whether all members in the workspace can join the team. Only used for public teams.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"When the team was retired.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"handleSubTeamsOnRetirement\",\n              \"description\": \"[Internal] How to handle sub-teams when retiring. Required if the team has active sub-teams.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"TeamRetirementSubTeamHandling\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamSecuritySettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"labelManagement\",\n              \"description\": \"The minimum team role required to manage labels in the team.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"TeamRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"memberManagement\",\n              \"description\": \"The minimum team role required to manage full workspace members (non-guests) in the team.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"TeamRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamManagement\",\n              \"description\": \"The minimum team role required to manage team settings.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"TeamRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateManagement\",\n              \"description\": \"The minimum team role required to manage templates in the team.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"TeamRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"TeamRoleType\",\n          \"description\": \"All possible roles within a team in terms of access to team settings and operations.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"owner\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"member\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"TeamRetirementSubTeamHandling\",\n          \"description\": \"[Internal] How to handle sub-teams when retiring a parent team.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"unnest\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"retire\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Team\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"TeamMembershipPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamMembership\",\n              \"description\": \"The team membership that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"TeamMembership\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamMembershipCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The identifier of the user associated with the membership.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier of the team associated with the membership.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"owner\",\n              \"description\": \"Internal. Whether the user is the owner of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the item in the users list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TeamMembershipUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"owner\",\n              \"description\": \"Internal. Whether the user is the owner of the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the item in the users list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapToProjectPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmapToProject\",\n              \"description\": \"The roadmapToProject that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"RoadmapToProject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RoadmapToProjectCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"roadmapId\",\n              \"description\": \"The identifier of the roadmap.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within its organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RoadmapToProjectUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within its organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"roadmap\",\n              \"description\": \"The roadmap that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Roadmap\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RoadmapCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the roadmap.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the roadmap.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The owner of the roadmap.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the roadmap within the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The roadmap's color.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RoadmapUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the roadmap.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the roadmap.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The owner of the roadmap.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the roadmap within the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The roadmap's color.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"RoadmapArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Roadmap\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CreateCsvExportReportPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseStagePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releaseStage\",\n              \"description\": \"The release stage that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleaseStage\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseStageCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the stage.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the stage as a HEX string.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the stage.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ReleaseStageType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the stage.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipelineId\",\n              \"description\": \"The identifier of the pipeline this stage belongs to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"frozen\",\n              \"description\": \"Whether this stage is frozen. Only applicable to started stages.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseStageUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the stage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the stage as a HEX string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the stage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"frozen\",\n              \"description\": \"Whether this stage is frozen. Only applicable to started stages.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseStageArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ReleaseStage\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleasePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"release\",\n              \"description\": \"The release that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Release\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseSyncInput\",\n          \"description\": \"The release data to sync.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this release.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueReferences\",\n              \"description\": \"Issue references (e.g. ENG-123) to associate with this release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueReferenceInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revertedIssueReferences\",\n              \"description\": \"Issue references that were reverted and should be removed from the release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueReferenceInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pullRequestReferences\",\n              \"description\": \"Pull request references to look up. Issues linked to found PRs will be associated with this release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"PullRequestReferenceInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repository\",\n              \"description\": \"Information about the source repository.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RepositoryDataInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"debugSink\",\n              \"description\": \"Debug information for release creation diagnostics.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseDebugSinkInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipelineId\",\n              \"description\": \"The identifier of the pipeline this release belongs to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueReferenceInput\",\n          \"description\": \"A reference to an issue found during release creation.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"identifier\",\n              \"description\": \"The issue identifier (e.g. ENG-123).\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA where this issue reference was found.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"PullRequestReferenceInput\",\n          \"description\": \"Input for referencing a pull request by repository and number.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"repositoryOwner\",\n              \"description\": \"The owner of the repository (e.g., organization or user name).\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repositoryName\",\n              \"description\": \"The name of the repository.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"number\",\n              \"description\": \"The pull request number.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"RepositoryDataInput\",\n          \"description\": \"Information about the source repository.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"owner\",\n              \"description\": \"The owner of the repository (e.g., organization or user name).\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the repository.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"provider\",\n              \"description\": \"The VCS provider hosting the repository (e.g., 'github', 'gitlab').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The base URL of the repository on the hosting provider (e.g., 'https://github.com/linear/linear-app').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseDebugSinkInput\",\n          \"description\": \"Debug sink for release creation diagnostics.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"inspectedShas\",\n              \"description\": \"List of commit SHAs that were inspected.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"Map of issue identifiers to their source information.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revertedIssues\",\n              \"description\": \"Map of reverted issue identifiers to their source information.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pullRequests\",\n              \"description\": \"Pull request debug information.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"JSONObject\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"includePaths\",\n              \"description\": \"List of paths applied during commit scanning.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseCreateInput\",\n          \"description\": \"The input for creating a release.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the release.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipelineId\",\n              \"description\": \"The identifier of the pipeline this release belongs to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stageId\",\n              \"description\": \"The current stage of the release. Defaults to the first 'completed' stage for continuous pipelines, or the first 'started' stage for scheduled pipelines.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The estimated start date of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipelineId\",\n              \"description\": \"The identifier of the pipeline this release belongs to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stageId\",\n              \"description\": \"The current stage of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startDate\",\n              \"description\": \"The estimated start date of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"Whether the release has been trashed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseCompleteInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release to complete. If not provided, the latest started release will be completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this completion. If a completed release with this SHA already exists, it will be returned instead of completing a new release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipelineId\",\n              \"description\": \"The identifier of the pipeline to mark a release as completed.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseUpdateByPipelineInput\",\n          \"description\": \"Input for updating a release by pipeline.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release to update. If not provided, the latest started or latest planned release will be updated.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stage\",\n              \"description\": \"The stage name to set. First tries exact match, then falls back to case-insensitive matching with dashes/underscores treated as spaces.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pipelineId\",\n              \"description\": \"The identifier of the pipeline.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleaseArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Release\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseSyncInputBase\",\n          \"description\": \"Base release sync data without pipeline specification.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this release.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueReferences\",\n              \"description\": \"Issue references (e.g. ENG-123) to associate with this release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueReferenceInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revertedIssueReferences\",\n              \"description\": \"Issue references that were reverted and should be removed from the release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"IssueReferenceInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pullRequestReferences\",\n              \"description\": \"Pull request references to look up. Issues linked to found PRs will be associated with this release.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"PullRequestReferenceInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repository\",\n              \"description\": \"Information about the source repository.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"RepositoryDataInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"debugSink\",\n              \"description\": \"Debug information for release creation diagnostics.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ReleaseDebugSinkInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseCompleteInputBase\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release to complete. If not provided, the latest started release will be completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commitSha\",\n              \"description\": \"The commit SHA associated with this completion. If a completed release with this SHA already exists, it will be returned instead of completing a new release.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleaseUpdateByPipelineInputBase\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"version\",\n              \"description\": \"The version of the release to update. If not provided, the latest started or latest planned release will be updated.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stage\",\n              \"description\": \"The stage name to set. First tries exact match, then falls back to case-insensitive matching with dashes/underscores treated as spaces.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleasePipelinePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"releasePipeline\",\n              \"description\": \"The release pipeline that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ReleasePipeline\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleasePipelineCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the pipeline.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The pipeline's unique slug identifier. If not provided, it will be auto-generated.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the pipeline.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ReleasePipelineType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"includePathPatterns\",\n              \"description\": \"Glob patterns to include commits affecting matching file paths.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReleasePipelineUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the pipeline.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slugId\",\n              \"description\": \"The pipeline's unique slug identifier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the pipeline.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ReleasePipelineType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"includePathPatterns\",\n              \"description\": \"Glob patterns to include commits affecting matching file paths.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReleasePipelineArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ReleasePipeline\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ReactionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"reaction\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Reaction\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ReactionCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"emoji\",\n              \"description\": \"The emoji the user reacted with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commentId\",\n              \"description\": \"The comment to associate the reaction with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateId\",\n              \"description\": \"The project update to associate the reaction with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateId\",\n              \"description\": \"The update to associate the reaction with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue to associate the reaction with. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"postId\",\n              \"description\": \"[Internal] The post to associate the reaction with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pullRequestId\",\n              \"description\": \"[Internal] The pull request to associate the reaction with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pullRequestCommentId\",\n              \"description\": \"[Internal] The pull request comment to associate the reaction with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PushSubscriptionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The push subscription that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"PushSubscription\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PushSubscription\",\n          \"description\": \"A user's web or mobile push notification subscription.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"PushSubscriptionCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"data\",\n              \"description\": \"The data of the subscription in stringified JSON format.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Whether this is a subscription payload for Google Cloud Messaging or Apple Push Notification service.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PushSubscriptionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"web\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PushSubscriptionType\",\n          \"description\": \"The different push subscription types.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"web\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"apple\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"appleDevelopment\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"firebase\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectUpdatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectUpdate\",\n              \"description\": \"The project update that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectUpdate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdateCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The content of the project update in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the project update as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project to associate the project update with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the project at the time of the update.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isDiffHidden\",\n              \"description\": \"Whether the diff between the current update and the previous one should be hidden.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectUpdateUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"body\",\n              \"description\": \"The content of the project update in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The content of the project update as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the project at the time of the update.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isDiffHidden\",\n              \"description\": \"Whether the diff between the current update and the previous one should be hidden.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectUpdateArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectUpdateReminderPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectStatusPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The project status that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectStatusCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the status.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the status as a HEX string.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the status in the workspace's project flow.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the project status.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"ProjectStatusType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"indefinite\",\n              \"description\": \"Whether or not a project can be in this status indefinitely.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectStatusUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the status as a HEX string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the status in the workspace's project flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the project status.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectStatusType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"indefinite\",\n              \"description\": \"Whether or not a project can be in this status indefinitely.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectStatusArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectStatus\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectRelationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectRelation\",\n              \"description\": \"The project relation that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectRelationCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of relation of the project to the related project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project that is related to another project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": \"The identifier of the project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"anchorType\",\n              \"description\": \"The type of the anchor for the project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedProjectId\",\n              \"description\": \"The identifier of the related project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedProjectMilestoneId\",\n              \"description\": \"The identifier of the related project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedAnchorType\",\n              \"description\": \"The type of the anchor for the related project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectRelationUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of relation of the project to the related project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project that is related to another project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": \"The identifier of the project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"anchorType\",\n              \"description\": \"The type of the anchor for the project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedProjectId\",\n              \"description\": \"The identifier of the related project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedProjectMilestoneId\",\n              \"description\": \"The identifier of the related project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedAnchorType\",\n              \"description\": \"The type of the anchor for the related project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestonePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"The project milestone that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestone\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the project milestone.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the project milestone in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"descriptionData\",\n              \"description\": \"[Internal] The description of the project milestone as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The planned target date of the project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"Related project for the project milestone.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project milestone within a project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the project milestone in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"descriptionData\",\n              \"description\": \"[Internal] The description of the project milestone as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The planned target date of the project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project milestone within a project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"Related project for the project milestone.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestoneMovePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectMilestone\",\n              \"description\": \"The project milestone that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectMilestone\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"previousIssueTeamIds\",\n              \"description\": \"A snapshot of the issues that were moved to new teams, if the user selected to do it, containing an array of mappings between an issue and its previous team. Store on the client to use for undoing a previous milestone move.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"ProjectMilestoneMoveIssueToTeam\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"previousProjectTeamIds\",\n              \"description\": \"A snapshot of the project that had new teams added to it, if the user selected to do it, containing an array of mappings between a project and its previous teams. Store on the client to use for undoing a previous milestone move.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"ProjectMilestoneMoveProjectTeams\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestoneMoveIssueToTeam\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue id in this relationship, you can use * as wildcard if all issues are being moved to the same team\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team id in this relationship\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectMilestoneMoveProjectTeams\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project id\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"The team ids for the project\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneMoveInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project to move the milestone to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"newIssueTeamId\",\n              \"description\": \"The team id to move the attached issues to. This is needed when there is a mismatch between a project's teams and the milestone's issues' teams. Either this or addIssueTeamToProject is required in that situation to resolve constraints.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addIssueTeamToProject\",\n              \"description\": \"Whether to add each milestone issue's team to the project. This is needed when there is a mismatch between a project's teams and the milestone's issues' teams. Either this or newIssueTeamId is required in that situation to resolve constraints.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"undoIssueTeamIds\",\n              \"description\": \"A list of issue id to team ids, used for undoing a previous milestone move where the specified issues were moved from the specified teams.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"ProjectMilestoneMoveIssueToTeamInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"undoProjectTeamIds\",\n              \"description\": \"A mapping of project id to a previous set of team ids, used for undoing a previous milestone move where the specified teams were added to the project.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectMilestoneMoveProjectTeamsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneMoveIssueToTeamInput\",\n          \"description\": \"[Internal] Used for ProjectMilestoneMoveInput to describe a mapping between an issue and its team.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue id in this relationship, you can use * as wildcard if all issues are being moved to the same team\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team id in this relationship\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectMilestoneMoveProjectTeamsInput\",\n          \"description\": \"[Internal] Used for ProjectMilestoneMoveInput to describe a snapshot of a project and its team ids\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project id\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"The team ids for the project\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ProjectLabelPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectLabel\",\n              \"description\": \"The label that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"ProjectLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectLabelCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the label.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier of the parent label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Whether the label is a group.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"When the label was retired.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ProjectLabelUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier of the parent label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Whether the label is a group.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"When the label was retired.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": \"The organization that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Organization\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The logo of the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"urlKey\",\n              \"description\": \"The URL key of the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitBranchFormat\",\n              \"description\": \"How git branches are formatted. If null, default formatting will be used.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitLinkbackMessagesEnabled\",\n              \"description\": \"Whether the Git integration linkback messages should be sent for private repositories.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitPublicLinkbackMessagesEnabled\",\n              \"description\": \"Whether the Git integration linkback messages should be sent for public repositories.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitLinkbackDescriptionsEnabled\",\n              \"description\": \"Whether issue descriptions should be included in Git integration linkback messages.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"roadmapEnabled\",\n              \"description\": \"Whether the organization is using roadmap.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for project updates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersDay\",\n              \"description\": \"The day at which project updates are sent.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateRemindersHour\",\n              \"description\": \"The hour at which project updates are sent.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateReminderFrequencyInWeeks\",\n              \"description\": \"[ALPHA] The n-weekly frequency at which to prompt for initiative updates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateRemindersDay\",\n              \"description\": \"[ALPHA] The day at which initiative updates are sent.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateRemindersHour\",\n              \"description\": \"[ALPHA] The hour at which initiative updates are sent.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"fiscalYearStartMonth\",\n              \"description\": \"The month at which the fiscal year starts.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"workingDays\",\n              \"description\": \"[Internal] The list of working days. Sunday is 0, Monday is 1, etc.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Float\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reducedPersonalInformation\",\n              \"description\": \"Whether the organization has opted for reduced customer support attachment information.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"oauthAppReview\",\n              \"description\": \"Whether the organization has opted for having to approve all OAuth applications for install.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"allowedAuthServices\",\n              \"description\": \"List of services that are allowed to be used for login.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaEnabled\",\n              \"description\": \"Internal. Whether SLAs have been enabled for the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"restrictAgentInvocationToMembers\",\n              \"description\": \"Whether agent invocation is restricted to full workspace members.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ipRestrictions\",\n              \"description\": \"IP restriction configurations controlling allowed access the workspace.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"OrganizationIpRestrictionInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"allowedFileUploadContentTypes\",\n              \"description\": \"Allowed file upload content types.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"themeSettings\",\n              \"description\": \"[ALPHA] Theme settings for the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customersEnabled\",\n              \"description\": \"[INTERNAL] Whether the organization is using customers.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customersConfiguration\",\n              \"description\": \"[INTERNAL] Configuration settings for the Customers feature.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"codeIntelligenceEnabled\",\n              \"description\": \"[INTERNAL] Whether code intelligence is enabled for the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"codeIntelligenceRepository\",\n              \"description\": \"[INTERNAL] GitHub repository in owner/repo format for code intelligence.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"feedEnabled\",\n              \"description\": \"Whether the organization has enabled the feed feature.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hideNonPrimaryOrganizations\",\n              \"description\": \"Whether to hide other workspaces for new users signing up with email domains claimed by this organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultFeedSummarySchedule\",\n              \"description\": \"Default schedule for how often feed summaries are generated.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FeedSummarySchedule\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiAddonEnabled\",\n              \"description\": \"[INTERNAL] Whether the organization has enabled the AI add-on.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"generatedUpdatesEnabled\",\n              \"description\": \"[INTERNAL] Whether the organization has enabled generated updates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiTelemetryEnabled\",\n              \"description\": \"[INTERNAL] Whether the organization has opted in to AI telemetry.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiDiscussionSummariesEnabled\",\n              \"description\": \"Whether the organization has enabled AI discussion summaries for issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiThreadSummariesEnabled\",\n              \"description\": \"Whether the organization has enabled resolved thread AI summaries.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hipaaComplianceEnabled\",\n              \"description\": \"Whether HIPAA compliance is enabled for organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"securitySettings\",\n              \"description\": \"The security settings for the organization.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"OrganizationSecuritySettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"authSettings\",\n              \"description\": \"The authentication settings for the organization.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"OrganizationAuthSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiProviderConfiguration\",\n              \"description\": \"[INTERNAL] Configure per-modality AI host providers and model families.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectChannelIntegrationId\",\n              \"description\": \"The ID of the Slack integration to use for auto-creating project channels.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectChannelPrefix\",\n              \"description\": \"The prefix to use for auto-created Slack project channels (p-, proj-, or project-).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"linearAgentEnabled\",\n              \"description\": \"[Internal] Whether the organization has enabled Linear Agent.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationIpRestrictionInput\",\n          \"description\": \"[INTERNAL] Organization IP restriction configuration.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"range\",\n              \"description\": \"IP range in CIDR format.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"Restriction type.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Optional restriction description.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the restriction is enabled.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationSecuritySettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"personalApiKeysRole\",\n              \"description\": \"The minimum role required to create personal API keys.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"invitationsRole\",\n              \"description\": \"The minimum role required to invite users.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamCreationRole\",\n              \"description\": \"The minimum role required to create teams.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelManagementRole\",\n              \"description\": \"The minimum role required to manage workspace labels.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"apiSettingsRole\",\n              \"description\": \"The minimum role required to manage API settings.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateManagementRole\",\n              \"description\": \"The minimum role required to manage workspace templates.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"importRole\",\n              \"description\": \"The minimum role required to import data.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"agentGuidanceRole\",\n              \"description\": \"The minimum role required to manage agent guidance prompts and settings.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"integrationCreationRole\",\n              \"description\": \"The minimum role required to install and connect new integrations.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationAuthSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"allowedAuthServices\",\n              \"description\": \"Allowed authentication providers, empty array means all are allowed.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disableAuthServiceBypass\",\n              \"description\": \"Whether to disable admin/owner auth service bypass.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hideNonPrimaryOrganizations\",\n              \"description\": \"Whether to hide non-primary organizations during signup for users with matching email domains.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationDeletePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DeleteOrganizationInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"deletionCode\",\n              \"description\": \"The deletion code to confirm operation.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationCancelDeletePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationStartTrialPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationStartTrialInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"planType\",\n              \"description\": \"The plan type to trial.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationInvitePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationInvite\",\n              \"description\": \"The organization invite that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationInvite\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationInviteCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The email of the invitee.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"role\",\n              \"description\": \"What user role the invite should grant.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserRoleType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"user\"\n            },\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"The teams that the user has been invited to.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"[INTERNAL] Optional metadata about the invite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationInviteUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"teamIds\",\n              \"description\": \"The teams that the user has been invited to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationDomainSimplePayload\",\n          \"description\": \"[INTERNAL] Organization domain operation response.\",\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationDomainPayload\",\n          \"description\": \"[INTERNAL] Organization domain operation response.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organizationDomain\",\n              \"description\": \"The organization domain that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"OrganizationDomain\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"OrganizationDomain\",\n          \"description\": \"Defines the use of a domain by an organization.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier of the entity.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The time at which the entity was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The last time at which the entity was meaningfully updated. This is the same as the creation time if the entity hasn't\\n    been updated after creation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"archivedAt\",\n              \"description\": \"The time at which the entity was archived. Null if the entity has not been archived.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"identityProvider\",\n              \"description\": \"The identity provider the domain belongs to.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IdentityProvider\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Domain name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"verified\",\n              \"description\": \"Is this domain verified.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"verificationEmail\",\n              \"description\": \"E-mail used to verify this domain.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"creator\",\n              \"description\": \"The user who added the domain.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"User\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"authType\",\n              \"description\": \"What type of auth is the domain used for.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"OrganizationDomainAuthType\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"claimed\",\n              \"description\": \"Whether the domains was claimed by the organization through DNS verification.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"disableOrganizationCreation\",\n              \"description\": \"Prevent users with this domain to create new workspaces.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"Node\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"OrganizationDomainAuthType\",\n          \"description\": \"What type of auth is the domain used for.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"saml\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"general\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationDomainVerificationInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"organizationDomainId\",\n              \"description\": \"The identifier in UUID v4 format of the domain being verified.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"verificationCode\",\n              \"description\": \"The verification code sent via email.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationDomainCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"identityProviderId\",\n              \"description\": \"The identity provider to which to add the domain.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The domain name to add.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"verificationEmail\",\n              \"description\": \"The email address to which to send the verification code.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"authType\",\n              \"description\": \"The authentication type this domain is for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"\\\"general\\\"\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OrganizationDomainUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"disableOrganizationCreation\",\n              \"description\": \"Prevent users with this domain to create new workspaces. Only allowed to set on claimed domains!\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationSubscriptionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notificationSubscription\",\n              \"description\": \"The notification subscription that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INTERFACE\",\n                  \"name\": \"NotificationSubscription\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationSubscriptionCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerId\",\n              \"description\": \"The identifier of the customer to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customViewId\",\n              \"description\": \"The identifier of the custom view to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"The identifier of the cycle to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The identifier of the initiative to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelId\",\n              \"description\": \"The identifier of the label to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier of the team to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The identifier of the user to subscribe to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the notification subscription context is associated with.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userContextViewType\",\n              \"description\": \"The type of user view to which the notification subscription context is associated with.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"UserContextViewType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The types of notifications of the subscription.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationSubscriptionUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"notificationSubscriptionTypes\",\n              \"description\": \"The types of notifications of the subscription.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"active\",\n              \"description\": \"Whether the subscription is active.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notification\",\n              \"description\": \"The notification that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INTERFACE\",\n                  \"name\": \"Notification\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"readAt\",\n              \"description\": \"The time when notification was marked as read.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until a notification will be snoozed. After that it will appear in the inbox again.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateId\",\n              \"description\": \"The id of the project update related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateId\",\n              \"description\": \"The id of the project update related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationBatchActionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"notifications\",\n              \"description\": \"The notifications that were updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INTERFACE\",\n                      \"name\": \"Notification\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotificationEntityInput\",\n          \"description\": \"Describes the type and id of the entity to target for notifications.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The id of the issue related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"[DEPRECATED] The id of the project related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The id of the initiative related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateId\",\n              \"description\": \"The id of the project update related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateId\",\n              \"description\": \"The id of the initiative update related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"oauthClientApprovalId\",\n              \"description\": \"The id of the OAuth client approval related to the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The id of the notification.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"NotificationArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"INTERFACE\",\n                \"name\": \"Notification\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueToReleasePayload\",\n          \"description\": \"[ALPHA] The result of an issueToRelease mutation.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueToRelease\",\n              \"description\": \"The issueToRelease that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueToRelease\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueToReleaseCreateInput\",\n          \"description\": \"[ALPHA] The properties of the issueToRelease to create.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The identifier of the issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releaseId\",\n              \"description\": \"The identifier of the release\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssuePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The issue that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The title of the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The issue description in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"descriptionData\",\n              \"description\": \"[Internal] The issue description as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assigneeId\",\n              \"description\": \"The identifier of the user to assign the issue to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"delegateId\",\n              \"description\": \"The identifier of the agent user to delegate the issue to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier of the parent issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"The estimated complexity of the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriberIds\",\n              \"description\": \"The identifiers of the users subscribing to this ticket.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"The identifiers of the issue labels associated with this ticket.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier of the team associated with the issue.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"The cycle associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": \"The project milestone associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplateId\",\n              \"description\": \"The ID of the last template applied to the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stateId\",\n              \"description\": \"The team state of the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"referenceCommentId\",\n              \"description\": \"The comment the issue is referencing.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceCommentId\",\n              \"description\": \"The comment the issue is created from.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourcePullRequestCommentId\",\n              \"description\": \"[Internal] The pull request comment the issue is created from.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the issue related to other issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The position of the issue related to other issues, when ordered by priority.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subIssueSortOrder\",\n              \"description\": \"The position of the issue in parent's sub-issue list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"The date at which the issue is due.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createAsUser\",\n              \"description\": \"Create issue as a user with the provided name. This option is only available to OAuth applications creating issues in `actor=app` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayIconUrl\",\n              \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"preserveSortOrderOnCreate\",\n              \"description\": \"Whether the passed sort order should be preserved.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The date when the issue was created (e.g. if importing from another system). Must be a date in the past. If none is provided, the backend will generate the time as now.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaBreachesAt\",\n              \"description\": \"[Internal] The timestamp at which an issue will be considered in breach of SLA.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaStartedAt\",\n              \"description\": \"[Internal] The timestamp at which the issue's SLA was started.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateId\",\n              \"description\": \"The identifier of a template the issue should be created from. If other values are provided in the input, they will override template values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The date when the issue was completed (e.g. if importing from another system). Must be a date in the past and after createdAt date. Cannot be provided with an incompatible workflow state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaType\",\n              \"description\": \"The SLA day count type for the issue. Whether SLA should be business days only or calendar days (default).\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"SLADayCountType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"useDefaultTemplate\",\n              \"description\": \"Whether to use the default template for the team. When set to true, the default template of this team based on user's membership will be applied.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueBatchPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issues\",\n              \"description\": \"The issues that were updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"Issue\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueBatchCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"issues\",\n              \"description\": \"The issues to create.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"IssueCreateInput\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"title\",\n              \"description\": \"The issue title.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The issue description in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"descriptionData\",\n              \"description\": \"[Internal] The issue description as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"assigneeId\",\n              \"description\": \"The identifier of the user to assign the issue to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"delegateId\",\n              \"description\": \"The identifier of the agent user to delegate the issue to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier of the parent issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"The priority of the issue. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"estimate\",\n              \"description\": \"The estimated complexity of the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriberIds\",\n              \"description\": \"The identifiers of the users subscribing to this ticket.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelIds\",\n              \"description\": \"The identifiers of the issue labels associated with this ticket.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedLabelIds\",\n              \"description\": \"The identifiers of the issue labels to be added to this issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"removedLabelIds\",\n              \"description\": \"The identifiers of the issue labels to be removed from this issue.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier of the team associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"The cycle associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectMilestoneId\",\n              \"description\": \"The project milestone associated with the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplateId\",\n              \"description\": \"The ID of the last template applied to the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stateId\",\n              \"description\": \"The team state of the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the issue related to other issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"prioritySortOrder\",\n              \"description\": \"The position of the issue related to other issues, when ordered by priority.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subIssueSortOrder\",\n              \"description\": \"The position of the issue in parent's sub-issue list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dueDate\",\n              \"description\": \"The date at which the issue is due.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"Whether the issue has been trashed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaBreachesAt\",\n              \"description\": \"[Internal] The timestamp at which an issue will be considered in breach of SLA.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaStartedAt\",\n              \"description\": \"[Internal] The timestamp at which the issue's SLA was started.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedUntilAt\",\n              \"description\": \"The time until an issue will be snoozed in Triage view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"snoozedById\",\n              \"description\": \"The identifier of the user who snoozed the issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slaType\",\n              \"description\": \"The SLA day count type for the issue. Whether SLA should be business days only or calendar days (default).\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"SLADayCountType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoClosedByParentClosing\",\n              \"description\": \"Whether the issue was automatically closed because its parent issue was closed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"SCALAR\",\n          \"name\": \"UUID\",\n          \"description\": \"A universally unique identifier as specified by RFC 4122.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Issue\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueRelationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueRelation\",\n              \"description\": \"The issue relation that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueRelationCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of relation of the issue to the related issue.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"IssueRelationType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The identifier of the issue that is related to another issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedIssueId\",\n              \"description\": \"The identifier of the related issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"IssueRelationType\",\n          \"description\": \"The type of the issue relation.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"blocks\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"duplicate\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"related\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"similar\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueRelationUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of relation of the issue to the related issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The identifier of the issue that is related to another issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedIssueId\",\n              \"description\": \"The identifier of the related issue. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueLabelPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueLabel\",\n              \"description\": \"The label that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IssueLabel\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueLabelCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the label.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier of the parent label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team associated with the label. If not given, the label will be associated with the entire workspace.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Whether the label is a group.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"When the label was retired.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueLabelUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier of the parent label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the label.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isGroup\",\n              \"description\": \"Whether the label is a group.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"retiredAt\",\n              \"description\": \"When the label was retired.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueImportPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImport\",\n              \"description\": \"The import job that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueImport\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IssueImportDeletePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueImport\",\n              \"description\": \"The import job that was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"IssueImport\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IssueImportUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"mapping\",\n              \"description\": \"The mapping configuration for the import.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationsSettingsPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationsSettings\",\n              \"description\": \"The settings that were created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationsSettings\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationsSettingsCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"slackIssueCreated\",\n              \"description\": \"Whether to send a Slack message when a new issue is created for the project or the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueAddedToView\",\n              \"description\": \"Whether to send a Slack message when an issue is added to a view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueNewComment\",\n              \"description\": \"Whether to send a Slack message when a comment is created on any of the project or team's issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueStatusChangedDone\",\n              \"description\": \"Whether to send a Slack message when any of the project or team's issues change to completed or cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueStatusChangedAll\",\n              \"description\": \"Whether to send a Slack message when any of the project or team's issues has a change in status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreated\",\n              \"description\": \"Whether to send a Slack message when a project update is created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreatedToTeam\",\n              \"description\": \"Whether to send a Slack message when a project update is created to team channels.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreatedToWorkspace\",\n              \"description\": \"Whether to send a Slack message when a project update is created to workspace channel.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackInitiativeUpdateCreated\",\n              \"description\": \"Whether to send a Slack message when an initiative update is created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueAddedToTriage\",\n              \"description\": \"Whether to send a Slack message when a new issue is added to triage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueSlaHighRisk\",\n              \"description\": \"Whether to send a Slack message when an SLA is at high risk.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueSlaBreached\",\n              \"description\": \"Whether to receive notification when an SLA has breached on Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier of the team to create settings for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project to create settings for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The identifier of the initiative to create settings for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customViewId\",\n              \"description\": \"The identifier of the custom view to create settings for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contextViewType\",\n              \"description\": \"The type of view to which the integration settings context is associated with.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ContextViewType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationsSettingsUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"slackIssueCreated\",\n              \"description\": \"Whether to send a Slack message when a new issue is created for the project or the team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueAddedToView\",\n              \"description\": \"Whether to send a Slack message when an issue is added to a view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueNewComment\",\n              \"description\": \"Whether to send a Slack message when a comment is created on any of the project or team's issues.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueStatusChangedDone\",\n              \"description\": \"Whether to send a Slack message when any of the project or team's issues change to completed or cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueStatusChangedAll\",\n              \"description\": \"Whether to send a Slack message when any of the project or team's issues has a change in status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreated\",\n              \"description\": \"Whether to send a Slack message when a project update is created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreatedToTeam\",\n              \"description\": \"Whether to send a Slack message when a project update is created to team channels.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectUpdateCreatedToWorkspace\",\n              \"description\": \"Whether to send a Slack message when a project update is created to workspace channel.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackInitiativeUpdateCreated\",\n              \"description\": \"Whether to send a Slack message when an initiative update is created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueAddedToTriage\",\n              \"description\": \"Whether to send a Slack message when a new issue is added to triage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueSlaHighRisk\",\n              \"description\": \"Whether to send a Slack message when an SLA is at high risk.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackIssueSlaBreached\",\n              \"description\": \"Whether to receive notification when an SLA has breached on Slack.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationTemplatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integrationTemplate\",\n              \"description\": \"The IntegrationTemplate that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"IntegrationTemplate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationTemplateCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"integrationId\",\n              \"description\": \"The identifier of the integration.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateId\",\n              \"description\": \"The identifier of the template.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"foreignEntityId\",\n              \"description\": \"The foreign identifier in the other service.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"settings\",\n              \"description\": \"The settings to update.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IntegrationSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"slack\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackAsks\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackAsksSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackPost\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackPostSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackProjectPost\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackPostSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackInitiativePost\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackPostSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackCustomViewNotifications\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackPostSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackOrgProjectUpdatesPost\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackPostSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackOrgInitiativeUpdatesPost\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SlackPostSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"googleSheets\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GoogleSheetsSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitHub\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GitHubSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitHubImport\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GitHubImportSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitHubPersonal\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GitHubPersonalSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitLab\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GitLabSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sentry\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SentrySettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"zendesk\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ZendeskSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"intercom\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IntercomSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"front\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"FrontSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gong\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GongSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"microsoftTeams\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"MicrosoftTeamsSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"jira\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"JiraSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"notion\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"NotionSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"opsgenie\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"OpsgenieInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pagerDuty\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"PagerDutyInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"launchDarkly\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"LaunchDarklySettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"jiraPersonal\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"JiraPersonalSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"salesforce\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"SalesforceSettingsInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlackSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"teamName\",\n              \"description\": \"Slack workspace name\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"Slack workspace id\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enterpriseName\",\n              \"description\": \"Enterprise name of the connected Slack enterprise\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enterpriseId\",\n              \"description\": \"Enterprise id of the connected Slack enterprise\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shouldUnfurl\",\n              \"description\": \"Whether to show unfurl previews in Slack\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shouldUseDefaultUnfurl\",\n              \"description\": \"Whether to show unfurls in the default style instead of Work Objects in Slack\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUserActions\",\n              \"description\": \"Whether to allow external users to perform actions on unfurls\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"linkOnIssueIdMention\",\n              \"description\": \"Whether Linear should automatically respond with issue unfurls when an issue identifier is mentioned in a Slack message.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableAgent\",\n              \"description\": \"Whether Linear Agent should be enabled for this Slack integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableLinearAgentWorkflowAccess\",\n              \"description\": \"Whether Linear Agent should be given Org-wide access within Slack workflows.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlackAsksSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"teamName\",\n              \"description\": \"Slack workspace name\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"Slack workspace id\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enterpriseName\",\n              \"description\": \"Enterprise name of the connected Slack enterprise\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enterpriseId\",\n              \"description\": \"Enterprise id of the connected Slack enterprise\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shouldUnfurl\",\n              \"description\": \"Whether to show unfurl previews in Slack\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shouldUseDefaultUnfurl\",\n              \"description\": \"Whether to show unfurls in the default style instead of Work Objects in Slack\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUserActions\",\n              \"description\": \"Whether to allow external users to perform actions on unfurls\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackChannelMapping\",\n              \"description\": \"The mapping of Slack channel ID => Slack channel name for connected channels.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"SlackChannelNameMappingInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canAdministrate\",\n              \"description\": \"The user role type that is allowed to manage Asks settings.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"UserRoleType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerVisibility\",\n              \"description\": \"Controls who can see and set Customers when creating Asks in Slack.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"CustomerVisibilityMode\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableAgent\",\n              \"description\": \"Whether Linear Agent should be enabled for this Slack Asks integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableLinearAgentWorkflowAccess\",\n              \"description\": \"Whether Linear Agent should be given Org-wide access within Slack workflows.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlackChannelNameMappingInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The Slack channel ID.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The Slack channel name.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isPrivate\",\n              \"description\": \"Whether or not the Slack channel is private.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isShared\",\n              \"description\": \"Whether or not the Slack channel is shared with an external org.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"botAdded\",\n              \"description\": \"Whether or not the Linear Asks bot has been added to this Slack channel.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Which teams are connected to the channel and settings for those teams.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"SlackAsksTeamSettingsInput\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCreateOnMessage\",\n              \"description\": \"Whether or not top-level messages in this channel should automatically create Asks.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCreateOnEmoji\",\n              \"description\": \"Whether or not using the :ticket: emoji in this channel should automatically create Asks.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCreateOnBotMention\",\n              \"description\": \"Whether or not @-mentioning the bot should automatically create an Ask with the message.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"autoCreateTemplateId\",\n              \"description\": \"The optional template ID to use for Asks auto-created in this channel. If not set, auto-created Asks won't use any template.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"postCancellationUpdates\",\n              \"description\": \"Whether or not synced Slack threads should be updated with a message and emoji when their Ask is canceled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"postCompletionUpdates\",\n              \"description\": \"Whether or not synced Slack threads should be updated with a message and emoji when their Ask is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"postAcceptedFromTriageUpdates\",\n              \"description\": \"Whether or not synced Slack threads should be updated with a message when their Ask is accepted from triage.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"aiTitles\",\n              \"description\": \"Whether or not to use AI to generate titles for Asks created in this channel.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlackAsksTeamSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The Linear team ID.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hasDefaultAsk\",\n              \"description\": \"Whether the default Asks template is enabled in the given channel for this team.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"CustomerVisibilityMode\",\n          \"description\": \"Mode that controls who can see and set Customers in Slack Asks.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"LinearOnly\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SlackMembers\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SlackMembersAndGuests\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SlackPostSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"channel\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"channelId\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"configurationUrl\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"Slack workspace id\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"channelType\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"SlackChannelType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"SlackChannelType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"DirectMessage\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"MultiPersonDirectMessage\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Private\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"PrivateGroup\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"Public\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GoogleSheetsSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"spreadsheetId\",\n              \"description\": \"[Deprecated] The ID of the exported Google Sheet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"spreadsheetUrl\",\n              \"description\": \"[Deprecated] The URL of the exported Google Sheet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sheetId\",\n              \"description\": \"[Deprecated] The ID of the target sheet (tab) within the Google Sheet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedIssuesAt\",\n              \"description\": \"[Deprecated] The date of the most recent export.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issue\",\n              \"description\": \"The export settings for issues.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GoogleSheetsExportSettings\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"project\",\n              \"description\": \"The export settings for projects.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GoogleSheetsExportSettings\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The export settings for initiatives.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GoogleSheetsExportSettings\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GoogleSheetsExportSettings\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the export is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"spreadsheetId\",\n              \"description\": \"The ID of the exported Google Sheet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"spreadsheetUrl\",\n              \"description\": \"The URL of the exported Google Sheet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sheetId\",\n              \"description\": \"The ID of the target sheet (tab) within the Google Sheet.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updatedAt\",\n              \"description\": \"The date of the most recent export.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitHubSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"pullRequestReviewTool\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"PullRequestReviewTool\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"orgAvatarUrl\",\n              \"description\": \"The avatar URL for the GitHub organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"orgLogin\",\n              \"description\": \"The GitHub organization's name.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repositories\",\n              \"description\": \"The names of the repositories connected for the GitHub integration.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"GitHubRepoInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repositoriesMapping\",\n              \"description\": \"Mapping of team to repository for syncing.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"GitHubRepoMappingInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"orgType\",\n              \"description\": \"The type of Github org\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"GithubOrgType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"codeAccess\",\n              \"description\": \"Whether the integration has code access\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enterpriseUrl\",\n              \"description\": \"The enterprise URL if this is a GitHub Enterprise Cloud integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"PullRequestReviewTool\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"source\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"graphite\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitHubRepoInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The GitHub repo id.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"fullName\",\n              \"description\": \"The full name of the repository.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"archived\",\n              \"description\": \"Whether the repository is archived.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitHubRepoMappingInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The unique identifier for this mapping.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"linearTeamId\",\n              \"description\": \"The Linear team id to map to the given project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitHubRepoId\",\n              \"description\": \"The GitHub repo id.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"gitHubLabels\",\n              \"description\": \"Labels to filter incoming GitHub issue creation by.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bidirectional\",\n              \"description\": \"Whether the sync for this mapping is bidirectional.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"default\",\n              \"description\": \"Whether this mapping is the default one for issue creation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"GithubOrgType\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"user\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"organization\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitHubImportSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"orgLogin\",\n              \"description\": \"The GitHub organization's name.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"orgAvatarUrl\",\n              \"description\": \"The avatar URL for the GitHub organization.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repositories\",\n              \"description\": \"The names of the repositories connected for the GitHub integration.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"GitHubRepoInput\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labels\",\n              \"description\": \"A map storing all available issue labels per repository\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"orgType\",\n              \"description\": \"The type of Github org\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"GithubOrgType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitHubPersonalSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"login\",\n              \"description\": \"The GitHub user's name.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitLabSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"url\",\n              \"description\": \"The self-hosted URL of the GitLab instance.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"readonly\",\n              \"description\": \"Whether the token is limited to a read-only scope.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"expiresAt\",\n              \"description\": \"The ISO timestamp the GitLab access token expires.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SentrySettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"organizationSlug\",\n              \"description\": \"The slug of the Sentry organization being connected.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"organizationId\",\n              \"description\": \"The ID of the Sentry organization being connected.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"ID\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resolvingCompletesIssues\",\n              \"description\": \"Whether Sentry issues resolving completes Linear issues.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"unresolvingReopensIssues\",\n              \"description\": \"Whether Sentry issues unresolving reopens Linear issues.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ZendeskSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sendNoteOnStatusChange\",\n              \"description\": \"Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sendNoteOnComment\",\n              \"description\": \"Whether an internal message should be added when someone comments on an issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnComment\",\n              \"description\": \"Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disableCustomerRequestsAutoCreation\",\n              \"description\": \"[ALPHA] Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableAiIntake\",\n              \"description\": \"Whether Linear Agent should be enabled for this integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subdomain\",\n              \"description\": \"The subdomain of the Zendesk organization being connected.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the connected Zendesk organization.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"botUserId\",\n              \"description\": \"The ID of the Linear bot user.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"canReadCustomers\",\n              \"description\": \"[INTERNAL] Temporary flag indicating if the integration has the necessary scopes for Customers\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"supportsOAuthRefresh\",\n              \"description\": \"[INTERNAL] Flag indicating if the integration supports OAuth refresh tokens\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hostMappings\",\n              \"description\": \"The host mappings from Zendesk brands.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntercomSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sendNoteOnStatusChange\",\n              \"description\": \"Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sendNoteOnComment\",\n              \"description\": \"Whether an internal message should be added when someone comments on an issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnComment\",\n              \"description\": \"Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disableCustomerRequestsAutoCreation\",\n              \"description\": \"[ALPHA] Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableAiIntake\",\n              \"description\": \"Whether Linear Agent should be enabled for this integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"FrontSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sendNoteOnStatusChange\",\n              \"description\": \"Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sendNoteOnComment\",\n              \"description\": \"Whether an internal message should be added when someone comments on an issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnComment\",\n              \"description\": \"Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disableCustomerRequestsAutoCreation\",\n              \"description\": \"[ALPHA] Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableAiIntake\",\n              \"description\": \"Whether Linear Agent should be enabled for this integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GongSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"importConfig\",\n              \"description\": \"Configuration for recording import.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"GongRecordingImportConfigInput\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GongRecordingImportConfigInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team ID to create issues in for imported recordings. Set to null to disable import.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"MicrosoftTeamsSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"tenantName\",\n              \"description\": \"The display name of the Azure AD tenant.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"projectMapping\",\n              \"description\": \"The mapping of Jira project id => Linear team id.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"JiraLinearMappingInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projects\",\n              \"description\": \"The Jira projects for the organization.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"INPUT_OBJECT\",\n                      \"name\": \"JiraProjectDataInput\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isJiraServer\",\n              \"description\": \"Whether this integration is for Jira Server or not.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            },\n            {\n              \"name\": \"setupPending\",\n              \"description\": \"Whether the user needs to provide setup information about the webhook to complete the integration setup. Only relevant for integrations that use a manual setup flow\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manualSetup\",\n              \"description\": \"Whether this integration is using a manual setup flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The label of the Jira instance, for visual identification purposes only\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusNamesPerIssueType\",\n              \"description\": \"Jira status names grouped by project, separated into issue statuses (non-Epic) and project statuses (Epic). Structure: projectId -> { issueStatuses: string[], projectStatuses: string[] }\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraLinearMappingInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"jiraProjectId\",\n              \"description\": \"The Jira id for this project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"linearTeamId\",\n              \"description\": \"The Linear team id to map to the given project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bidirectional\",\n              \"description\": \"Whether the sync for this mapping is bidirectional.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"default\",\n              \"description\": \"Whether this mapping is the default one for issue creation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraProjectDataInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The Jira id for this project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"key\",\n              \"description\": \"The Jira key for this project, such as ENG.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The Jira name for this project, such as Engineering.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"NotionSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"workspaceId\",\n              \"description\": \"The ID of the Notion workspace being connected.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"workspaceName\",\n              \"description\": \"The name of the Notion workspace being connected.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OpsgenieInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"apiFailedWithUnauthorizedErrorAt\",\n              \"description\": \"The date when the Opsgenie API failed with an unauthorized error.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"PagerDutyInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"apiFailedWithUnauthorizedErrorAt\",\n              \"description\": \"The date when the PagerDuty API failed with an unauthorized error.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"LaunchDarklySettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"projectKey\",\n              \"description\": \"The project key of the LaunchDarkly integration.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"environment\",\n              \"description\": \"The environment of the LaunchDarkly integration.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraPersonalSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"siteName\",\n              \"description\": \"The name of the Jira site currently authorized through the integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"SalesforceSettingsInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sendNoteOnStatusChange\",\n              \"description\": \"Whether an internal message should be added when a Linear issue changes status (for status types except completed or canceled).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sendNoteOnComment\",\n              \"description\": \"Whether an internal message should be added when someone comments on an issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear issue is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnComment\",\n              \"description\": \"Whether a ticket should be automatically reopened when a comment is posted on its linked Linear issue\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disableCustomerRequestsAutoCreation\",\n              \"description\": \"[ALPHA] Whether customer and customer requests should not be automatically created when conversations are linked to a Linear issue.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCompletion\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"automateTicketReopeningOnProjectCancellation\",\n              \"description\": \"Whether a ticket should be automatically reopened when its linked Linear project is cancelled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"enableAiIntake\",\n              \"description\": \"Whether Linear Agent should be enabled for this integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subdomain\",\n              \"description\": \"The Salesforce subdomain.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The Salesforce instance URL.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reopenCaseStatus\",\n              \"description\": \"The Salesforce case status to use to reopen cases.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"restrictVisibility\",\n              \"description\": \"Whether to restrict visibility of the integration to issues that have been either created from Salesforce or linked to Salesforce.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"defaultTeam\",\n              \"description\": \"The Salesforce team to use when a template doesn't specify a team.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitHubCommitIntegrationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookSecret\",\n              \"description\": \"The webhook secret to provide to GitHub.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitHubEnterpriseServerPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"setupUrl\",\n              \"description\": \"The setup address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"installUrl\",\n              \"description\": \"The app install address.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookSecret\",\n              \"description\": \"The webhook secret to provide to GitHub.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitLabIntegrationCreatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"webhookSecret\",\n              \"description\": \"The webhook secret to provide to GitLab.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": \"Error message if the connection failed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"errorResponseBody\",\n              \"description\": \"Response body from GitLab for debugging.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"errorResponseHeaders\",\n              \"description\": \"Response headers from GitLab for debugging (JSON stringified).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitLabTestConnectionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"error\",\n              \"description\": \"Error message if the connection test failed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"errorResponseBody\",\n              \"description\": \"Response body from GitLab for debugging.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"errorResponseHeaders\",\n              \"description\": \"Response headers from GitLab for debugging (JSON stringified).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AirbyteConfigurationInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"apiKey\",\n              \"description\": \"Linear export API key.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraConfigurationInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"accessToken\",\n              \"description\": \"The Jira personal access token.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The Jira user's email address. A username is also accepted on Jira Server / DC.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hostname\",\n              \"description\": \"The Jira installation hostname.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"manualSetup\",\n              \"description\": \"Whether this integration will be setup using the manual webhook flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The id of the integration to update.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateProjects\",\n              \"description\": \"Whether to refresh Jira Projects for the integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateMetadata\",\n              \"description\": \"Whether to refresh Jira metadata for the integration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"deleteWebhook\",\n              \"description\": \"Whether to delete the current manual webhook configuration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"webhookSecret\",\n              \"description\": \"Webhook secret for a new manual configuration.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"noSecret\",\n              \"description\": \"Whether the Jira instance does not support webhook secrets.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"accessToken\",\n              \"description\": \"The Jira personal access token.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"The Jira user email address associated with the personal access token.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"JiraFetchProjectStatusesPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"issueStatuses\",\n              \"description\": \"The fetched Jira issue statuses (non-Epic).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"projectStatuses\",\n              \"description\": \"The fetched Jira project statuses (Epic).\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"SCALAR\",\n                      \"name\": \"String\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JiraFetchProjectStatusesInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"integrationId\",\n              \"description\": \"The id of the Jira integration.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The Jira project ID to fetch statuses for.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationCustomerDataAttributesRefreshInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"service\",\n              \"description\": \"The integration service to refresh customer data attributes from.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationSlackWorkspaceNamePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The current name of the Slack workspace.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AsksChannelConnectPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mapping\",\n              \"description\": \"The new Asks Slack channel mapping for the connected channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"SlackChannelNameMapping\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addBot\",\n              \"description\": \"Whether the bot needs to be manually added to the channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SlackChannelNameMapping\",\n          \"description\": \"Object for mapping Slack channel IDs to names and other settings.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The Slack channel ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The Slack channel name.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isPrivate\",\n              \"description\": \"Whether or not the Slack channel is private.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isShared\",\n              \"description\": \"Whether or not the Slack channel is shared with an external org.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"botAdded\",\n              \"description\": \"Whether or not the Linear Asks bot has been added to this Slack channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"teams\",\n              \"description\": \"Which teams are connected to the channel and settings for those teams.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"SlackAsksTeamSettings\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCreateOnMessage\",\n              \"description\": \"Whether or not top-level messages in this channel should automatically create Asks.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCreateOnEmoji\",\n              \"description\": \"Whether or not using the :ticket: emoji in this channel should automatically create Asks.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCreateOnBotMention\",\n              \"description\": \"Whether or not @-mentioning the bot should automatically create an Ask with the message.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"autoCreateTemplateId\",\n              \"description\": \"The optional template ID to use for Asks auto-created in this channel. If not set, auto-created Asks won't use any template.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"postCancellationUpdates\",\n              \"description\": \"Whether or not synced Slack threads should be updated with a message and emoji when their Ask is canceled.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"postCompletionUpdates\",\n              \"description\": \"Whether or not synced Slack threads should be updated with a message and emoji when their Ask is completed.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"postAcceptedFromTriageUpdates\",\n              \"description\": \"Whether or not synced Slack threads should be updated with a message when their Ask is accepted from triage.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"aiTitles\",\n              \"description\": \"Whether or not to use AI to generate titles for Asks created in this channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SlackAsksTeamSettings\",\n          \"description\": \"Tuple for mapping Slack channel IDs to names.\",\n          \"fields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The Linear team ID.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"hasDefaultAsk\",\n              \"description\": \"Whether the default Asks template is enabled in the given channel for this team.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"SlackChannelConnectPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"integration\",\n              \"description\": \"The integration that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Integration\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"addBot\",\n              \"description\": \"Whether the bot needs to be manually added to the channel.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nudgeToConnectMainSlackIntegration\",\n              \"description\": \"Whether it's recommended to connect main Slack integration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"nudgeToUpdateMainSlackIntegration\",\n              \"description\": \"Whether it's recommended to update main Slack integration.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"IntegrationRequestPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"IntegrationRequestInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"email\",\n              \"description\": \"Email associated with the request.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"Name of the requested integration.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeUpdatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeUpdate\",\n              \"description\": \"The initiative update that was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeUpdate\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdateCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The content of the update in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the update as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the initiative at the time of the update.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The initiative to associate the update with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isDiffHidden\",\n              \"description\": \"Whether the diff between the current update and the previous one should be hidden.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdateUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"body\",\n              \"description\": \"The content of the update in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"The content of the update as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"health\",\n              \"description\": \"The health of the initiative at the time of the update.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeUpdateHealthType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isDiffHidden\",\n              \"description\": \"Whether the diff between the current update and the previous one should be hidden.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeUpdateArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"InitiativeUpdate\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeUpdateReminderPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeToProjectPayload\",\n          \"description\": \"The result of a initiativeToProject mutation.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeToProject\",\n              \"description\": \"The initiativeToProject that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeToProject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeToProjectCreateInput\",\n          \"description\": \"The properties of the initiativeToProject to create.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The identifier of the initiative.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within its organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeToProjectUpdateInput\",\n          \"description\": \"The properties of the initiativeToProject to update.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order for the project within its organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativePayload\",\n          \"description\": \"The payload returned by the initiative mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiative\",\n              \"description\": \"The initiative that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Initiative\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeCreateInput\",\n          \"description\": \"The properties of the initiative to create.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the initiative.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The owner of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the initiative within the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The initiative's color.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The initiative's icon.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The initiative's status.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeStatus\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the initiative's estimated completion date.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The initiative's content in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeUpdateInput\",\n          \"description\": \"The properties of the initiative to update.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The owner of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the initiative within the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The initiative's color.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The initiative's icon.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDate\",\n              \"description\": \"The estimated completion date of the initiative.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"TimelessDate\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The initiative's status.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeStatus\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetDateResolution\",\n              \"description\": \"The resolution of the initiative's estimated completion date.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"DateResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"Whether the initiative has been trashed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The initiative's content in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateReminderFrequencyInWeeks\",\n              \"description\": \"The n-weekly frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateReminderFrequency\",\n              \"description\": \"The frequency at which to prompt for updates. When not set, reminders are inherited from workspace.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"frequencyResolution\",\n              \"description\": \"The frequency resolution.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"FrequencyResolutionType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateRemindersDay\",\n              \"description\": \"The day at which to prompt for updates.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"Day\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"updateRemindersHour\",\n              \"description\": \"The hour at which to prompt for updates.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Initiative\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"InitiativeRelationPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"initiativeRelation\",\n              \"description\": \"The initiative relation that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"InitiativeRelation\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeRelationCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The identifier of the parent initiative.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"relatedInitiativeId\",\n              \"description\": \"The identifier of the child initiative.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the initiative relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"InitiativeRelationUpdateInput\",\n          \"description\": \"The properties of the initiativeRelation to update.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The sort order of the initiative relation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitAutomationTargetBranchPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"targetBranch\",\n              \"description\": \"The Git target branch automation that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationTargetBranch\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitAutomationTargetBranchCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team associated with the Git target branch automation.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"branchPattern\",\n              \"description\": \"The target branch pattern.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isRegex\",\n              \"description\": \"Whether the branch pattern is a regular expression.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"false\"\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitAutomationTargetBranchUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"branchPattern\",\n              \"description\": \"The target branch pattern.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isRegex\",\n              \"description\": \"Whether the branch pattern is a regular expression.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"GitAutomationStatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"gitAutomationState\",\n              \"description\": \"The automation state that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"GitAutomationState\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitAutomationStateCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team associated with the automation state.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"stateId\",\n              \"description\": \"The associated workflow state. If null, will override default behaviour and take no action.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetBranchId\",\n              \"description\": \"The associated target branch. If null, all branches are targeted.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"event\",\n              \"description\": \"The event that triggers the automation.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"GitAutomationStates\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GitAutomationStateUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"stateId\",\n              \"description\": \"The associated workflow state.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"targetBranchId\",\n              \"description\": \"The associated target branch. If null, all branches are targeted.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"event\",\n              \"description\": \"The event that triggers the automation.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"GitAutomationStates\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FavoritePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"favorite\",\n              \"description\": \"The object that was added as a favorite.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Favorite\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"FavoriteCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"folderName\",\n              \"description\": \"The name of the favorite folder.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The parent folder of the favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The identifier of the issue to favorite. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"facetId\",\n              \"description\": \"The identifier of the facet to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The identifier of the project to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectTab\",\n              \"description\": \"The tab of the project to favorite.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"ProjectTab\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"predefinedViewType\",\n              \"description\": \"The type of the predefined view to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"predefinedViewTeamId\",\n              \"description\": \"The identifier of team for the predefined view to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"The identifier of the cycle to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customViewId\",\n              \"description\": \"The identifier of the custom view to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documentId\",\n              \"description\": \"The identifier of the document to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[INTERNAL] The identifier of the initiative to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeTab\",\n              \"description\": \"The tab of the initiative to favorite.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"InitiativeTab\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"labelId\",\n              \"description\": \"The identifier of the label to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectLabelId\",\n              \"description\": \"The identifier of the label to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The identifier of the user to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the item in the favorites list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerId\",\n              \"description\": \"The identifier of the customer to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dashboardId\",\n              \"description\": \"The identifier of the dashboard to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"pullRequestId\",\n              \"description\": \"The identifier of the pull request to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releaseId\",\n              \"description\": \"[ALPHA] The identifier of the release to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releasePipelineId\",\n              \"description\": \"[ALPHA] The identifier of the release pipeline to favorite.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"FavoriteUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The position of the item in the favorites list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The identifier (in UUID v4 format) of the folder to move the favorite under.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"folderName\",\n              \"description\": \"The name of the favorite folder.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EventTrackingPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EventTrackingInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"event\",\n              \"description\": \"The event name to track.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"properties\",\n              \"description\": \"Optional properties for the event.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sessionId\",\n              \"description\": \"Client session ID for PostHog session correlation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EntityExternalLinkPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entityExternalLink\",\n              \"description\": \"The link that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EntityExternalLink\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EntityExternalLinkCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the link.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The label for the link.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The initiative associated with the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The project associated with the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"[Internal] The team associated with the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releaseId\",\n              \"description\": \"[Internal] The release associated with the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"[Internal] The cycle associated with the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resourceFolderId\",\n              \"description\": \"[Internal] The resource folder containing the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the entities resources list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EntityExternalLinkUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"The label for the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the entities resources list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resourceFolderId\",\n              \"description\": \"[Internal] The resource folder containing the link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmojiPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emoji\",\n              \"description\": \"The emoji that was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Emoji\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EmojiCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the custom emoji.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL for the emoji.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmailUnsubscribePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EmailUnsubscribeInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"Email type to unsubscribe from.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"token\",\n              \"description\": \"The user's email validation token.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userId\",\n              \"description\": \"The identifier of the user.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmailIntakeAddressPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"emailIntakeAddress\",\n              \"description\": \"The email address that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"EmailIntakeAddress\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EmailIntakeAddressCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of the email address. If not provided, the backend will default to team or template.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"EmailIntakeAddressType\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"forwardingEmailAddress\",\n              \"description\": \"The email address used to forward emails to the intake address.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"senderName\",\n              \"description\": \"The name to be used for outgoing emails.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier or key of the team this email address will intake issues for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateId\",\n              \"description\": \"The identifier of the template this email address will intake issues for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repliesEnabled\",\n              \"description\": \"Whether email replies are enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"useUserNamesInReplies\",\n              \"description\": \"Whether the commenter's name is included in the email replies.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCreatedAutoReplyEnabled\",\n              \"description\": \"Whether the issue created auto-reply is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCreatedAutoReply\",\n              \"description\": \"The auto-reply message for issue created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCompletedAutoReplyEnabled\",\n              \"description\": \"Whether the issue completed auto-reply is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCompletedAutoReply\",\n              \"description\": \"The auto-reply message for issue completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCanceledAutoReplyEnabled\",\n              \"description\": \"Whether the issue canceled auto-reply is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCanceledAutoReply\",\n              \"description\": \"The auto-reply message for issue canceled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerRequestsEnabled\",\n              \"description\": \"Whether customer requests are enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reopenOnReply\",\n              \"description\": \"Whether to reopen completed or canceled issues when a substantive email reply is received.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EmailIntakeAddressUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"enabled\",\n              \"description\": \"Whether the email address is currently enabled. If set to false, the email address will be disabled and no longer accept incoming emails.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"forwardingEmailAddress\",\n              \"description\": \"The email address used to forward emails to the intake address.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"senderName\",\n              \"description\": \"The name to be used for outgoing emails.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The identifier or key of the team this email address will intake issues for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"templateId\",\n              \"description\": \"The identifier of the template this email address will intake issues for.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"repliesEnabled\",\n              \"description\": \"Whether email replies are enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"useUserNamesInReplies\",\n              \"description\": \"Whether the commenter's name is included in the email replies.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCreatedAutoReplyEnabled\",\n              \"description\": \"Whether the issue created auto-reply is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCreatedAutoReply\",\n              \"description\": \"The auto-reply message for issue created.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCompletedAutoReplyEnabled\",\n              \"description\": \"Whether the issue completed auto-reply is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCompletedAutoReply\",\n              \"description\": \"Custom auto-reply message for issue completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCanceledAutoReplyEnabled\",\n              \"description\": \"Whether the issue canceled auto-reply is enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueCanceledAutoReply\",\n              \"description\": \"Custom auto-reply message for issue canceled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerRequestsEnabled\",\n              \"description\": \"Whether customer requests are enabled.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"reopenOnReply\",\n              \"description\": \"Whether to reopen completed or canceled issues when a substantive email reply is received.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"document\",\n              \"description\": \"The document that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Document\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DocumentCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The title of the document.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The document content as markdown.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"Related project for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[Internal] Related initiative for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"[Internal] Related team for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"Related issue for the document. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releaseId\",\n              \"description\": \"[Internal] Related release for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"[Internal] Related cycle for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resourceFolderId\",\n              \"description\": \"[Internal] The resource folder containing the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplateId\",\n              \"description\": \"The ID of the last template applied to the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the resources list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriberIds\",\n              \"description\": \"[INTERNAL] The identifiers of the users subscribing to this document.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"DocumentUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"title\",\n              \"description\": \"The title of the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The document content as markdown.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"Related project for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[Internal] Related initiative for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"[Internal] Related team for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"Related issue for the document. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"releaseId\",\n              \"description\": \"[Internal] Related release for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"cycleId\",\n              \"description\": \"[Internal] Related cycle for the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resourceFolderId\",\n              \"description\": \"[Internal] The resource folder containing the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastAppliedTemplateId\",\n              \"description\": \"The ID of the last template applied to the document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"hiddenAt\",\n              \"description\": \"The time at which the document was hidden.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sortOrder\",\n              \"description\": \"The order of the item in the resources list.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"trashed\",\n              \"description\": \"Whether the document has been trashed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriberIds\",\n              \"description\": \"[INTERNAL] The identifiers of the users subscribing to this document.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"DocumentArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Document\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CyclePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"cycle\",\n              \"description\": \"The Cycle that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CycleCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The custom name of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The team to associate the cycle with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"The start date of the cycle.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"The end date of the cycle.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"DateTime\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The completion time of the cycle. If null, the cycle hasn't been completed.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CycleUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The custom name of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"startsAt\",\n              \"description\": \"The start date of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"endsAt\",\n              \"description\": \"The end date of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"completedAt\",\n              \"description\": \"The end date of the cycle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CycleArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"Cycle\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CycleShiftAllInput\",\n          \"description\": \"Input for shifting all cycles from a certain cycle onwards by a certain number of days\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The cycle ID at which to start the shift.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"daysToShift\",\n              \"description\": \"The number of days to shift the cycles by.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerTierPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"tier\",\n              \"description\": \"The customer tier that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerTier\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerTierCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the tier as a HEX string.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the tier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the tier in the workspace's customer flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the tier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerTierUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the tier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the tier as a HEX string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the tier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the tier in the workspace's customer flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the tier.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerStatusPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"status\",\n              \"description\": \"The customer status that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerStatus\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerStatusCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the status as a HEX string.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the status in the workspace's customer flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerStatusUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The UI color of the status as a HEX string.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"Description of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"position\",\n              \"description\": \"The position of the status in the workspace's customer flow.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayName\",\n              \"description\": \"The display name of the status.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customer\",\n              \"description\": \"The customer that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Customer\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the customer.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"domains\",\n              \"description\": \"The domains associated with this customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": \"[]\"\n            },\n            {\n              \"name\": \"externalIds\",\n              \"description\": \"The ids of the customers in external systems.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": \"[]\"\n            },\n            {\n              \"name\": \"slackChannelId\",\n              \"description\": \"The ID of the Slack channel used to interact with the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The user who owns the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusId\",\n              \"description\": \"The status of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"The annual revenue generated by the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"The size of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tierId\",\n              \"description\": \"The tier of the customer customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The URL of the customer's logo.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"mainSourceId\",\n              \"description\": \"The main source of the customer, for customers with multiple sources. Must be one of externalIds.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"domains\",\n              \"description\": \"The domains associated with this customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalIds\",\n              \"description\": \"The ids of the customers in external systems.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackChannelId\",\n              \"description\": \"The ID of the Slack channel used to interact with the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The user who owns the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusId\",\n              \"description\": \"The status of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"The annual revenue generated by the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"The size of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tierId\",\n              \"description\": \"The tier of the customer customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The URL of the customer's logo.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"mainSourceId\",\n              \"description\": \"The main source of the customer, for customers with multiple sources. Must be one of externalIds.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerUpsertInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"domains\",\n              \"description\": \"The domains associated with this customer.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalId\",\n              \"description\": \"The id of the customers in external systems.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"slackChannelId\",\n              \"description\": \"The ID of the Slack channel used to interact with the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The user who owns the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"statusId\",\n              \"description\": \"The status of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"revenue\",\n              \"description\": \"The annual revenue generated by the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"size\",\n              \"description\": \"The size of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tierId\",\n              \"description\": \"The tier of the customer.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"logoUrl\",\n              \"description\": \"The URL of the customer's logo.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"tierName\",\n              \"description\": \"The name tier of the customer. Will be created if doesn't exist\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeedPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"need\",\n              \"description\": \"The customer need that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeed\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerNeedCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerId\",\n              \"description\": \"The uuid of the customer the need belongs to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerExternalId\",\n              \"description\": \"The external ID of the customer the need belongs to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue this need is referencing. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"[INTERNAL] The project this need is referencing.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commentId\",\n              \"description\": \"The comment this need is referencing.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"attachmentId\",\n              \"description\": \"The attachment this need is referencing.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Whether the customer need is important or not. 0 = Not important, 1 = Important.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The content of the need in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the need as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"attachmentUrl\",\n              \"description\": \"Optional URL for the attachment associated with the customer need.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createAsUser\",\n              \"description\": \"Create need as a user with the provided name. This option is only available to OAuth applications creating needs in `actor=app` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayIconUrl\",\n              \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating needs in `actor=app` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerNeedCreateFromAttachmentInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"attachmentId\",\n              \"description\": \"The attachment this need is created from.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeedUpdatePayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"need\",\n              \"description\": \"The customer need that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomerNeed\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"updatedRelatedNeeds\",\n              \"description\": \"The related customer needs that were updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"CustomerNeed\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomerNeedUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerId\",\n              \"description\": \"The uuid of the customer the need belongs to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"customerExternalId\",\n              \"description\": \"The external ID of the customer the need belongs to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue this need is referencing. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"[INTERNAL] The project this need is referencing.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"priority\",\n              \"description\": \"Whether the customer need is important or not. 0 = Not important, 1 = Important.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Float\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"applyPriorityToRelatedNeeds\",\n              \"description\": \"Whether to also update the priority of needs from the same customer on the same issue/project.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The content of the need in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The content of the need as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"attachmentUrl\",\n              \"description\": \"Optional URL for the attachment associated with the customer need.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomerNeedArchivePayload\",\n          \"description\": \"A generic payload return from entity archive mutations.\",\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"entity\",\n              \"description\": \"The archived/unarchived entity. Null if entity was deleted.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"CustomerNeed\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [\n            {\n              \"kind\": \"INTERFACE\",\n              \"name\": \"ArchivePayload\",\n              \"ofType\": null\n            }\n          ],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CustomViewPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"customView\",\n              \"description\": \"The custom view that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"CustomView\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the custom view.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The id of the team associated with the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"The id of the project associated with the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"The id of the initiative associated with the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The owner of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"filterData\",\n              \"description\": \"The filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectFilterData\",\n              \"description\": \"The project filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeFilterData\",\n              \"description\": \"[ALPHA] The initiative filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"feedItemFilterData\",\n              \"description\": \"The feed item filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"FeedItemFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shared\",\n              \"description\": \"Whether the custom view is shared with everyone in the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CustomViewUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": \"The description of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"icon\",\n              \"description\": \"The icon of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"color\",\n              \"description\": \"The color of the icon of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"teamId\",\n              \"description\": \"The id of the team associated with the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"[Internal] The id of the project associated with the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[Internal] The id of the initiative associated with the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ownerId\",\n              \"description\": \"The owner of the custom view.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"filterData\",\n              \"description\": \"The filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"IssueFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectFilterData\",\n              \"description\": \"The project filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"ProjectFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeFilterData\",\n              \"description\": \"[ALPHA] The initiative filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"InitiativeFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"feedItemFilterData\",\n              \"description\": \"The feed item filter applied to issues in the custom view.\",\n              \"type\": {\n                \"kind\": \"INPUT_OBJECT\",\n                \"name\": \"FeedItemFilter\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"shared\",\n              \"description\": \"Whether the custom view is shared with everyone in the organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"ContactPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ContactCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of support contact.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"message\",\n              \"description\": \"The message the user sent.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"operatingSystem\",\n              \"description\": \"User's operating system.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"browser\",\n              \"description\": \"User's browser information.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"device\",\n              \"description\": \"User's device information.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"clientVersion\",\n              \"description\": \"User's Linear client information.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disappointmentRating\",\n              \"description\": \"How disappointed the user would be if they could no longer use Linear.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Int\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"ContactSalesCreateInput\",\n          \"description\": \"[INTERNAL] Input for sending a message to the Linear Sales team.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"Name of the person requesting information.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"email\",\n              \"description\": \"Work email of the person requesting information.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"companySize\",\n              \"description\": \"Size of the company.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"message\",\n              \"description\": \"The message the user sent.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL this request was sent from.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"distinctId\",\n              \"description\": \"PostHog distinct ID for analytics correlation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sessionId\",\n              \"description\": \"Session ID for analytics correlation.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CommentPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"comment\",\n              \"description\": \"The comment that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Comment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CommentCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"The comment content in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The comment content as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue to associate the comment with. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectUpdateId\",\n              \"description\": \"The project update to associate the comment with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeUpdateId\",\n              \"description\": \"The initiative update to associate the comment with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"postId\",\n              \"description\": \"The post to associate the comment with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"documentContentId\",\n              \"description\": \"The document content to associate the comment with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"projectId\",\n              \"description\": \"[Internal] The project to associate the comment with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"initiativeId\",\n              \"description\": \"[Internal] The initiative to associate the comment with.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"parentId\",\n              \"description\": \"The parent comment under which to nest a current comment.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createAsUser\",\n              \"description\": \"Create comment as a user with the provided name. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"displayIconUrl\",\n              \"description\": \"Provide an external user avatar URL. Can only be used in conjunction with the `createAsUser` options. This option is only available to OAuth applications creating comments in `actor=app` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createdAt\",\n              \"description\": \"The date when the comment was created (e.g. if importing from another system). Must be a date in the past. If none is provided, the backend will generate the time as now.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"doNotSubscribeToIssue\",\n              \"description\": \"Flag to prevent auto subscription to the issue the comment is created on.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createOnSyncedSlackThread\",\n              \"description\": \"Flag to indicate this comment should be created on the issue's synced Slack comment thread. If no synced Slack comment thread exists, the mutation will fail. If there are multiple synced Slack threads on the issue, the oldest one will be targeted.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"quotedText\",\n              \"description\": \"The text that this comment references. Only defined for inline comments.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriberIds\",\n              \"description\": \"[INTERNAL] The identifiers of the users subscribing to this comment thread.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CommentUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"body\",\n              \"description\": \"The comment content.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The comment content as a Prosemirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resolvingUserId\",\n              \"description\": \"[INTERNAL] The user who resolved this thread.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"resolvingCommentId\",\n              \"description\": \"[INTERNAL] The child comment that resolves this thread.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"quotedText\",\n              \"description\": \"The text that this comment references. Only defined for inline comments.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subscriberIds\",\n              \"description\": \"[INTERNAL] The identifiers of the users subscribing to this comment.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"doNotSubscribeToIssue\",\n              \"description\": \"[INTERNAL] Flag to prevent auto subscription to the issue the comment is updated on.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"EmailUserAccountAuthChallengeResponse\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"authType\",\n              \"description\": \"Supported challenge for this user account. Can be either verificationCode or password.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"EmailUserAccountAuthChallengeInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"email\",\n              \"description\": \"The email for which to generate the magic login code.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"isDesktop\",\n              \"description\": \"Whether the login was requested from the desktop app.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"clientAuthCode\",\n              \"description\": \"Auth code for the client initiating the sequence.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inviteLink\",\n              \"description\": \"The organization invite link to associate with this authentication.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"loginCodeOnly\",\n              \"description\": \"Whether to only return the login code. This is used by mobile apps to skip showing the login link.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"challengeResponse\",\n              \"description\": \"Response from the login challenge.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sessionId\",\n              \"description\": \"PostHog session ID for attribution tracking.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"TokenUserAccountAuthInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"email\",\n              \"description\": \"The email which to login via the magic login code.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"token\",\n              \"description\": \"The magic login code.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The timezone of the user's browser.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inviteLink\",\n              \"description\": \"An optional invite link for an organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"GoogleUserAccountAuthInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"code\",\n              \"description\": \"Code returned from Google's OAuth flow.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"redirectUri\",\n              \"description\": \"The URI to redirect the user to.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The timezone of the user's browser.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inviteLink\",\n              \"description\": \"An optional invite link for an organization used to populate available organizations.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"disallowSignup\",\n              \"description\": \"An optional parameter to disable new user signup and force login. Default: false.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sessionId\",\n              \"description\": \"PostHog session ID for attribution tracking.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"PasskeyLoginStartResponse\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"options\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"CreateOrJoinOrganizationResponse\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"organization\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthOrganization\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"user\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AuthUser\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"OnboardingCustomerSurvey\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"companyRole\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"companySize\",\n              \"description\": null,\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"CreateOrganizationInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"name\",\n              \"description\": \"The name of the organization.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"urlKey\",\n              \"description\": \"The URL key of the organization.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"domainAccess\",\n              \"description\": \"Whether the organization should allow email domain access.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"timezone\",\n              \"description\": \"The timezone of the organization, passed in by client.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"utm\",\n              \"description\": \"JSON serialized UTM parameters associated with the creation of the workspace.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"JoinOrganizationInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"organizationId\",\n              \"description\": \"The identifier of the organization.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"inviteLink\",\n              \"description\": \"An optional invite link for an organization.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"LogoutResponse\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AttachmentPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachment\",\n              \"description\": \"The issue attachment that was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Attachment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AttachmentCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"title\",\n              \"description\": \"The attachment title.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"The attachment subtitle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"url\",\n              \"description\": \"Attachment location which is also used as an unique identifier for the attachment. If another attachment is created with the same `url` value, existing record is updated instead.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue to associate the attachment with. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"iconUrl\",\n              \"description\": \"An icon url to display with the attachment. Should be of jpg or png format. Maximum of 1MB in size. Dimensions should be 20x20px for optimal display quality.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Attachment metadata object with string and number values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"groupBySource\",\n              \"description\": \"Indicates if attachments for the same source application should be grouped in the Linear UI.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commentBody\",\n              \"description\": \"Create a linked comment with markdown body.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"commentBodyData\",\n              \"description\": \"[Internal] Create a linked comment with Prosemirror body. Please use `commentBody` instead.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"createAsUser\",\n              \"description\": \"Create attachment as a user with the provided name. This option is only available to OAuth applications creating attachments in `actor=application` mode.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AttachmentUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"title\",\n              \"description\": \"The attachment title.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"subtitle\",\n              \"description\": \"The attachment subtitle.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"metadata\",\n              \"description\": \"Attachment metadata object with string and number values.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"iconUrl\",\n              \"description\": \"An icon url to display with the attachment. Should be of jpg or png format. Maximum of 1MB in size. Dimensions should be 20x20px for optimal display quality.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"GitLinkKind\",\n          \"description\": \"[Internal] The kind of link between an issue and a pull request.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"closes\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"contributes\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"links\",\n              \"description\": null,\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"FrontAttachmentPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"attachment\",\n              \"description\": \"The issue attachment that was created.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"Attachment\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentSessionPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentSession\",\n              \"description\": \"The agent session that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentSession\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionCreateOnComment\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"commentId\",\n              \"description\": \"The root comment that this session will be associated with.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalLink\",\n              \"description\": \"The URL of an external agent-hosted page associated with this session.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUrls\",\n              \"description\": \"URLs of external resources associated with this session.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionExternalUrlInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionExternalUrlInput\",\n          \"description\": \"Input for an external URL associated with an agent session.\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL of the external resource.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"label\",\n              \"description\": \"Label for the URL.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionCreateOnIssue\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue that this session will be associated with. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalLink\",\n              \"description\": \"The URL of an external agent-hosted page associated with this session.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUrls\",\n              \"description\": \"URLs of external resources associated with this session.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionExternalUrlInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"issueId\",\n              \"description\": \"The issue that this session will be associated with. Can be a UUID or issue identifier (e.g., 'LIN-123').\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"appUserId\",\n              \"description\": \"The app user (agent) to create a session for.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"context\",\n              \"description\": \"[Internal] Serialized JSON representing the page contexts this session is related to. Used for direct chat sessions to provide context about the current page (e.g., Issue, Project).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionUpdateExternalUrlInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"externalLink\",\n              \"description\": \"The URL of an external agent-hosted page associated with this session.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUrls\",\n              \"description\": \"URLs of external resources associated with this session. Replaces existing URLs.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionExternalUrlInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedExternalUrls\",\n              \"description\": \"URLs of external resources to be added to this session.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionExternalUrlInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"removedExternalUrls\",\n              \"description\": \"URLs to be removed from this session.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionUpdateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"externalLink\",\n              \"description\": \"The URL of an external agent-hosted page associated with this session. Only updatable by the OAuth application that owns the session.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"externalUrls\",\n              \"description\": \"URLs of external resources associated with this session. Replaces existing URLs. Only updatable by the OAuth application that owns the session. If supplied, addedExternalUrls and removedExternalUrls are ignored.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionExternalUrlInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"addedExternalUrls\",\n              \"description\": \"URLs of external resources to be added to this session. Only updatable by the OAuth application that owns the session.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionExternalUrlInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"removedExternalUrls\",\n              \"description\": \"URLs to be removed from this session. Only updatable by the OAuth application that owns the session.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"String\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"plan\",\n              \"description\": \"A dynamically updated list of the agent's execution strategy. Only updatable by the OAuth application that owns the session.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"dismissedAt\",\n              \"description\": \"[Internal] The time the agent session was dismissed. Only updatable by internal clients.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"userState\",\n              \"description\": \"[Internal] User-specific state for the agent session. Only updatable by internal clients.\",\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"INPUT_OBJECT\",\n                    \"name\": \"AgentSessionUserStateInput\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentSessionUserStateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"userId\",\n              \"description\": \"The ID of the user this state belongs to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"lastReadAt\",\n              \"description\": \"The time at which the user most recently viewed the session.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"DateTime\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"AgentActivityPayload\",\n          \"description\": null,\n          \"fields\": [\n            {\n              \"name\": \"lastSyncId\",\n              \"description\": \"The identifier of the last sync operation.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Float\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"agentActivity\",\n              \"description\": \"The agent activity that was created or updated.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"AgentActivity\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"success\",\n              \"description\": \"Whether the operation was successful.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentActivityCreateInput\",\n          \"description\": null,\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"agentSessionId\",\n              \"description\": \"The agent session this activity belongs to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"signal\",\n              \"description\": \"An optional modifier that provides additional instructions on how the activity should be interpreted.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AgentActivitySignal\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"signalMetadata\",\n              \"description\": \"Metadata about this agent activity's signal.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contextualMetadata\",\n              \"description\": \"[Internal] Metadata about user-provided contextual information for this agent activity.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The content payload of the agent activity. This object is not strictly typed.\\nSee https://linear.app/developers/agent-interaction#activity-content-payload for typing details.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"JSONObject\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"ephemeral\",\n              \"description\": \"Whether the activity is ephemeral, and should disappear after the next activity. Defaults to false.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentActivityCreatePromptInput\",\n          \"description\": \"[Internal] Input for creating prompt-type agent activities (created by users).\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"id\",\n              \"description\": \"The identifier in UUID v4 format. If none is provided, the backend will generate one.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"agentSessionId\",\n              \"description\": \"The agent session this activity belongs to.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"signal\",\n              \"description\": \"An optional modifier that provides additional instructions on how the activity should be interpreted.\",\n              \"type\": {\n                \"kind\": \"ENUM\",\n                \"name\": \"AgentActivitySignal\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"signalMetadata\",\n              \"description\": \"Metadata about this agent activity's signal.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"contextualMetadata\",\n              \"description\": \"[Internal] Metadata about user-provided contextual information for this agent activity.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSONObject\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"content\",\n              \"description\": \"The content payload of the prompt agent activity.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"INPUT_OBJECT\",\n                  \"name\": \"AgentActivityPromptCreateInputContent\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"sourceCommentId\",\n              \"description\": \"The comment that contains the content of this activity.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"INPUT_OBJECT\",\n          \"name\": \"AgentActivityPromptCreateInputContent\",\n          \"description\": \"[Internal] Input for creating prompt-type agent activities (created by users).\",\n          \"fields\": null,\n          \"inputFields\": [\n            {\n              \"name\": \"type\",\n              \"description\": \"The type of activity.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"AgentActivityType\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": \"prompt\"\n            },\n            {\n              \"name\": \"body\",\n              \"description\": \"A message requesting additional information or action from user in markdown format.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            },\n            {\n              \"name\": \"bodyData\",\n              \"description\": \"[Internal] The prompt content as a ProseMirror document.\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"JSON\",\n                \"ofType\": null\n              },\n              \"defaultValue\": null\n            }\n          ],\n          \"interfaces\": null,\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"__Schema\",\n          \"description\": \"A GraphQL Schema defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, as well as the entry points for query, mutation, and subscription operations.\",\n          \"fields\": [\n            {\n              \"name\": \"description\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"types\",\n              \"description\": \"A list of all types supported by this server.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"__Type\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"queryType\",\n              \"description\": \"The type that query operations will be rooted at.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"__Type\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"mutationType\",\n              \"description\": \"If this server supports mutation, the type that mutation operations will be rooted at.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"__Type\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"subscriptionType\",\n              \"description\": \"If this server support subscription, the type that subscription operations will be rooted at.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"__Type\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"directives\",\n              \"description\": \"A list of all directives supported by this server.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"__Directive\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"__Type\",\n          \"description\": \"The fundamental unit of any GraphQL Schema is the type. There are many kinds of types in GraphQL as represented by the `__TypeKind` enum.\\n\\nDepending on the kind of a type, certain fields describe information about that type. Scalar types provide no information beyond a name, description and optional `specifiedByURL`, while Enum types provide their values. Object and Interface types provide the fields they describe. Abstract types, Union and Interface, provide the Object types possible at runtime. List and NonNull types compose other types.\",\n          \"fields\": [\n            {\n              \"name\": \"kind\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"ENUM\",\n                  \"name\": \"__TypeKind\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"specifiedByURL\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"fields\",\n              \"description\": null,\n              \"args\": [\n                {\n                  \"name\": \"includeDeprecated\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"__Field\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"interfaces\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"__Type\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"possibleTypes\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"__Type\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"enumValues\",\n              \"description\": null,\n              \"args\": [\n                {\n                  \"name\": \"includeDeprecated\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"__EnumValue\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"inputFields\",\n              \"description\": null,\n              \"args\": [\n                {\n                  \"name\": \"includeDeprecated\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"LIST\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"NON_NULL\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"OBJECT\",\n                    \"name\": \"__InputValue\",\n                    \"ofType\": null\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ofType\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"OBJECT\",\n                \"name\": \"__Type\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isOneOf\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"Boolean\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"__TypeKind\",\n          \"description\": \"An enum describing what kind of type a given `__Type` is.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"SCALAR\",\n              \"description\": \"Indicates this type is a scalar.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"OBJECT\",\n              \"description\": \"Indicates this type is an object. `fields` and `interfaces` are valid fields.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"INTERFACE\",\n              \"description\": \"Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"UNION\",\n              \"description\": \"Indicates this type is a union. `possibleTypes` is a valid field.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ENUM\",\n              \"description\": \"Indicates this type is an enum. `enumValues` is a valid field.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"INPUT_OBJECT\",\n              \"description\": \"Indicates this type is an input object. `inputFields` is a valid field.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"LIST\",\n              \"description\": \"Indicates this type is a list. `ofType` is a valid field.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"NON_NULL\",\n              \"description\": \"Indicates this type is a non-null. `ofType` is a valid field.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"__Field\",\n          \"description\": \"Object and Interface types are described by a list of Fields, each of which has a name, potentially a list of arguments, and a return type.\",\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": null,\n              \"args\": [\n                {\n                  \"name\": \"includeDeprecated\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"__InputValue\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"__Type\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isDeprecated\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deprecationReason\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"__InputValue\",\n          \"description\": \"Arguments provided to Fields or Directives and the input fields of an InputObject are represented as Input Values which describe their type and optionally a default value.\",\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"type\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"OBJECT\",\n                  \"name\": \"__Type\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"defaultValue\",\n              \"description\": \"A GraphQL-formatted string representing the default value for this input value.\",\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isDeprecated\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deprecationReason\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"__EnumValue\",\n          \"description\": \"One possible value for a given Enum. Enum values are unique values, not a placeholder for a string or numeric value. However an Enum value is returned in a JSON response as a string.\",\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isDeprecated\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"deprecationReason\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"OBJECT\",\n          \"name\": \"__Directive\",\n          \"description\": \"A Directive provides a way to describe alternate runtime execution and type validation behavior in a GraphQL document.\\n\\nIn some cases, you need to provide options to alter GraphQL's execution behavior in ways field arguments will not suffice, such as conditionally including or skipping a field. Directives provide this by describing additional information to the executor.\",\n          \"fields\": [\n            {\n              \"name\": \"name\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"description\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"isRepeatable\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"locations\",\n              \"description\": null,\n              \"args\": [],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"ENUM\",\n                      \"name\": \"__DirectiveLocation\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"args\",\n              \"description\": null,\n              \"args\": [\n                {\n                  \"name\": \"includeDeprecated\",\n                  \"description\": null,\n                  \"type\": {\n                    \"kind\": \"SCALAR\",\n                    \"name\": \"Boolean\",\n                    \"ofType\": null\n                  },\n                  \"defaultValue\": \"false\"\n                }\n              ],\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"LIST\",\n                  \"name\": null,\n                  \"ofType\": {\n                    \"kind\": \"NON_NULL\",\n                    \"name\": null,\n                    \"ofType\": {\n                      \"kind\": \"OBJECT\",\n                      \"name\": \"__InputValue\",\n                      \"ofType\": null\n                    }\n                  }\n                }\n              },\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"inputFields\": null,\n          \"interfaces\": [],\n          \"enumValues\": null,\n          \"possibleTypes\": null\n        },\n        {\n          \"kind\": \"ENUM\",\n          \"name\": \"__DirectiveLocation\",\n          \"description\": \"A Directive can be adjacent to many parts of the GraphQL language, a __DirectiveLocation describes one such possible adjacencies.\",\n          \"fields\": null,\n          \"inputFields\": null,\n          \"interfaces\": null,\n          \"enumValues\": [\n            {\n              \"name\": \"QUERY\",\n              \"description\": \"Location adjacent to a query operation.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"MUTATION\",\n              \"description\": \"Location adjacent to a mutation operation.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SUBSCRIPTION\",\n              \"description\": \"Location adjacent to a subscription operation.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"FIELD\",\n              \"description\": \"Location adjacent to a field.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"FRAGMENT_DEFINITION\",\n              \"description\": \"Location adjacent to a fragment definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"FRAGMENT_SPREAD\",\n              \"description\": \"Location adjacent to a fragment spread.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"INLINE_FRAGMENT\",\n              \"description\": \"Location adjacent to an inline fragment.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"VARIABLE_DEFINITION\",\n              \"description\": \"Location adjacent to a variable definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SCHEMA\",\n              \"description\": \"Location adjacent to a schema definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"SCALAR\",\n              \"description\": \"Location adjacent to a scalar definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"OBJECT\",\n              \"description\": \"Location adjacent to an object type definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"FIELD_DEFINITION\",\n              \"description\": \"Location adjacent to a field definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ARGUMENT_DEFINITION\",\n              \"description\": \"Location adjacent to an argument definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"INTERFACE\",\n              \"description\": \"Location adjacent to an interface definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"UNION\",\n              \"description\": \"Location adjacent to a union definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ENUM\",\n              \"description\": \"Location adjacent to an enum definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"ENUM_VALUE\",\n              \"description\": \"Location adjacent to an enum value definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"INPUT_OBJECT\",\n              \"description\": \"Location adjacent to an input object type definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            },\n            {\n              \"name\": \"INPUT_FIELD_DEFINITION\",\n              \"description\": \"Location adjacent to an input object field definition.\",\n              \"isDeprecated\": false,\n              \"deprecationReason\": null\n            }\n          ],\n          \"possibleTypes\": null\n        }\n      ],\n      \"directives\": [\n        {\n          \"name\": \"include\",\n          \"description\": \"Directs the executor to include this field or fragment only when the `if` argument is true.\",\n          \"locations\": [\n            \"FIELD\",\n            \"FRAGMENT_SPREAD\",\n            \"INLINE_FRAGMENT\"\n          ],\n          \"args\": [\n            {\n              \"name\": \"if\",\n              \"description\": \"Included when true.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ]\n        },\n        {\n          \"name\": \"skip\",\n          \"description\": \"Directs the executor to skip this field or fragment when the `if` argument is true.\",\n          \"locations\": [\n            \"FIELD\",\n            \"FRAGMENT_SPREAD\",\n            \"INLINE_FRAGMENT\"\n          ],\n          \"args\": [\n            {\n              \"name\": \"if\",\n              \"description\": \"Skipped when true.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"Boolean\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ]\n        },\n        {\n          \"name\": \"deprecated\",\n          \"description\": \"Marks an element of a GraphQL schema as no longer supported.\",\n          \"locations\": [\n            \"FIELD_DEFINITION\",\n            \"ARGUMENT_DEFINITION\",\n            \"INPUT_FIELD_DEFINITION\",\n            \"ENUM_VALUE\"\n          ],\n          \"args\": [\n            {\n              \"name\": \"reason\",\n              \"description\": \"Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).\",\n              \"type\": {\n                \"kind\": \"SCALAR\",\n                \"name\": \"String\",\n                \"ofType\": null\n              },\n              \"defaultValue\": \"\\\"No longer supported\\\"\"\n            }\n          ]\n        },\n        {\n          \"name\": \"specifiedBy\",\n          \"description\": \"Exposes a URL that specifies the behavior of this scalar.\",\n          \"locations\": [\n            \"SCALAR\"\n          ],\n          \"args\": [\n            {\n              \"name\": \"url\",\n              \"description\": \"The URL that specifies the behavior of this scalar.\",\n              \"type\": {\n                \"kind\": \"NON_NULL\",\n                \"name\": null,\n                \"ofType\": {\n                  \"kind\": \"SCALAR\",\n                  \"name\": \"String\",\n                  \"ofType\": null\n                }\n              },\n              \"defaultValue\": null\n            }\n          ]\n        },\n        {\n          \"name\": \"oneOf\",\n          \"description\": \"Indicates exactly one field must be supplied and this field must not be `null`.\",\n          \"locations\": [\n            \"INPUT_OBJECT\"\n          ],\n          \"args\": []\n        }\n      ]\n    }\n  }\n}"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/fixtures/neon-openapi.json",
    "content": "{\n    \"openapi\": \"3.0.3\",\n    \"servers\": [\n        {\n            \"url\": \"https://console.neon.tech/api/v2\"\n        }\n    ],\n    \"info\": {\n        \"title\": \"Neon API\",\n        \"description\": \"The Neon API allows you to access and manage Neon programmatically. You can use the Neon API to manage API keys, projects, branches, compute endpoints, databases, roles, and operations. For information about these features, refer to the [Neon documentation](https://neon.tech/docs/manage/overview/).\\n\\nYou can run Neon API requests from this API reference using the **Try It** feature. Enter your API key as a **Bearer** token in the **Authorization** section of the page.\\n\\nYou can create and manage API keys in the Neon Console. See [Manage API keys](https://neon.tech/docs/manage/api-keys/) for instructions.\",\n        \"version\": \"v2\",\n        \"contact\": {\n            \"email\": \"help@databricks.com\"\n        },\n        \"license\": {\n            \"name\": \"Proprietary\"\n        }\n    },\n    \"x-readme\": {\n        \"samples-languages\": [\n            \"shell\"\n        ]\n    },\n    \"security\": [\n        {\n            \"BearerAuth\": []\n        },\n        {\n            \"CookieAuth\": []\n        },\n        {\n            \"TokenCookieAuth\": []\n        }\n    ],\n    \"tags\": [\n        {\n            \"name\": \"API Key\",\n            \"description\": \"These methods allow you to create and manage API keys for your Neon account. For related information, see [Manage API keys](https://neon.tech/docs/manage/api-keys).\"\n        },\n        {\n            \"name\": \"Operation\",\n            \"description\": \"These methods allow you to view operation details for your Neon project. For related information, see [Operations](https://neon.tech/docs/manage/operations).\"\n        },\n        {\n            \"name\": \"Project\",\n            \"description\": \"These methods allow you to create and manage Neon projects. For related information, see [Manage projects](https://neon.tech/docs/manage/projects).\"\n        },\n        {\n            \"name\": \"Branch\",\n            \"description\": \"These methods allow you to create and manage branches in your Neon project. For related information, see [Manage branches](https://neon.tech/docs/manage/branches).\"\n        },\n        {\n            \"name\": \"Endpoint\",\n            \"description\": \"These methods allow you to create and manage compute endpoints in your Neon project. For related information, see [Manage compute endpoints](https://neon.tech/docs/manage/endpoints).\"\n        },\n        {\n            \"name\": \"Snapshot\",\n            \"description\": \"These methods allow you to create and manage snapshots.\"\n        },\n        {\n            \"name\": \"Preview\",\n            \"description\": \"New API methods that are in a Preview state and may be subject to changes.\"\n        },\n        {\n            \"name\": \"Region\",\n            \"description\": \"These methods allow you to inspect Neon regions.\"\n        },\n        {\n            \"name\": \"Users\",\n            \"description\": \"These methods allow you to manage your Neon user account.\"\n        },\n        {\n            \"name\": \"Consumption\",\n            \"description\": \"These methods allow you to view consumption details for your Neon account.\"\n        },\n        {\n            \"name\": \"Organizations\",\n            \"description\": \"These methods allow you to manage your Neon organizations.\"\n        },\n        {\n            \"name\": \"Auth\",\n            \"description\": \"These methods allow you to create and manage Neon Auth projects.\"\n        },\n        {\n            \"name\": \"Auth (legacy)\",\n            \"description\": \"These methods allow you to create and manage Neon Auth projects. Deprecated. See routes with the `Auth` tag instead.\"\n        }\n    ],\n    \"paths\": {\n        \"/projects/{project_id}/advisors\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"description\": \"Neon project ID\",\n                    \"in\": \"path\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get advisor issues\",\n                \"description\": \"Analyzes the database for security and performance issues.\\nReturns a list of issues categorized by severity (ERROR, WARN, INFO).\\n\\nRequires read access to the project.\\n\",\n                \"operationId\": \"getProjectAdvisorSecurityIssues\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"x-stability-level\": \"alpha\",\n                \"parameters\": [\n                    {\n                        \"name\": \"branch_id\",\n                        \"in\": \"query\",\n                        \"required\": false,\n                        \"description\": \"Branch ID to analyze. If not specified, the project's default branch is used.\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"database_name\",\n                        \"in\": \"query\",\n                        \"required\": false,\n                        \"description\": \"Database name to analyze. Required if branch has multiple databases.\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"category\",\n                        \"in\": \"query\",\n                        \"required\": false,\n                        \"description\": \"Filter issues by category\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/AdvisorCategory\"\n                        }\n                    },\n                    {\n                        \"name\": \"min_severity\",\n                        \"in\": \"query\",\n                        \"required\": false,\n                        \"description\": \"Minimum severity level to include. For example, WARN returns WARN and ERROR issues, excluding INFO.\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                                \"INFO\",\n                                \"WARN\",\n                                \"ERROR\"\n                            ]\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Successfully retrieved security advisor issues\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"type\": \"object\",\n                                    \"required\": [\n                                        \"issues\"\n                                    ],\n                                    \"properties\": {\n                                        \"issues\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"$ref\": \"#/components/schemas/AdvisorIssue\"\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/api_keys\": {\n            \"get\": {\n                \"summary\": \"List API keys\",\n                \"description\": \"Retrieves the API keys for your Neon account.\\nThe response does not include API key tokens. A token is only provided when creating an API key.\\nAPI keys can also be managed in the Neon Console.\\nFor more information, see [Manage API keys](https://neon.tech/docs/manage/api-keys/).\\n\",\n                \"tags\": [\n                    \"API Key\"\n                ],\n                \"operationId\": \"listApiKeys\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the API keys for the Neon account\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"$ref\": \"#/components/schemas/ApiKeysListResponseItem\"\n                                    },\n                                    \"example\": [\n                                        {\n                                            \"id\": 165432,\n                                            \"name\": \"mykey_1\",\n                                            \"created_at\": \"2022-11-15T20:13:35Z\",\n                                            \"created_by\": {\n                                                \"id\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                                                \"name\": \"John Smith\",\n                                                \"image\": \"http://link.to.image\"\n                                            },\n                                            \"last_used_at\": \"2022-11-15T20:22:51Z\",\n                                            \"last_used_from_addr\": \"192.0.2.255\"\n                                        },\n                                        {\n                                            \"id\": 165433,\n                                            \"name\": \"mykey_2\",\n                                            \"created_at\": \"2022-11-15T20:12:36Z\",\n                                            \"created_by\": {\n                                                \"id\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                                                \"name\": \"John Smith\",\n                                                \"image\": \"http://link.to.image\"\n                                            },\n                                            \"last_used_at\": \"2022-11-15T20:15:04Z\",\n                                            \"last_used_from_addr\": \"192.0.2.255\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Create API key\",\n                \"description\": \"Creates an API key.\\nThe `key_name` is a user-specified name for the key.\\nThis method returns an `id` and `key`. The `key` is a randomly generated, 64-bit token required to access the Neon API.\\nAPI keys can also be managed in the Neon Console.\\nSee [Manage API keys](https://neon.tech/docs/manage/api-keys/).\\n\",\n                \"tags\": [\n                    \"API Key\"\n                ],\n                \"operationId\": \"createApiKey\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/ApiKeyCreateRequest\"\n                            },\n                            \"example\": {\n                                \"key_name\": \"mykey\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Created an API key\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ApiKeyCreateResponse\"\n                                },\n                                \"example\": {\n                                    \"id\": 165434,\n                                    \"key\": \"9v1faketcjbl4sn1013keyd43n2a8qlfakeog8yvp40hx16keyjo1bpds4y2dfms3\",\n                                    \"name\": \"mykey\",\n                                    \"created_at\": \"2022-11-15T20:13:35Z\",\n                                    \"created_by\": \"629982cc-de05-43db-ae16-28f2399c4910\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/api_keys/{key_id}\": {\n            \"delete\": {\n                \"summary\": \"Revoke API key\",\n                \"description\": \"Revokes the specified API key.\\nAn API key that is no longer needed can be revoked.\\nThis action cannot be reversed.\\nYou can obtain `key_id` values by listing the API keys for your Neon account.\\nAPI keys can also be managed in the Neon Console.\\nSee [Manage API keys](https://neon.tech/docs/manage/api-keys/).\\n\",\n                \"tags\": [\n                    \"API Key\"\n                ],\n                \"operationId\": \"revokeApiKey\",\n                \"parameters\": [\n                    {\n                        \"name\": \"key_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The API key ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"format\": \"int64\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Revoked the specified API key\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ApiKeyRevokeResponse\"\n                                },\n                                \"example\": {\n                                    \"id\": 165435,\n                                    \"name\": \"mykey\",\n                                    \"created_at\": \"2022-11-15T20:13:35Z\",\n                                    \"created_by\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                                    \"last_used_at\": \"2022-11-15T20:15:04Z\",\n                                    \"last_used_from_addr\": \"192.0.2.255\",\n                                    \"revoked\": true\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/operations/{operation_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"operation_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The operation ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve operation details\",\n                \"description\": \"Retrieves details for the specified operation.\\nAn operation is an action performed on a Neon project resource.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain a `operation_id` by listing operations for the project.\\n\",\n                \"tags\": [\n                    \"Operation\"\n                ],\n                \"operationId\": \"getProjectOperation\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned details for the specified operation\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OperationResponse\"\n                                },\n                                \"example\": {\n                                    \"operation\": {\n                                        \"id\": \"a07f8772-1877-4da9-a939-3a3ae62d1d8d\",\n                                        \"project_id\": \"floral-king-961888\",\n                                        \"branch_id\": \"br-bitter-sound-247814\",\n                                        \"endpoint_id\": \"ep-dark-snowflake-942567\",\n                                        \"action\": \"create_timeline\",\n                                        \"status\": \"finished\",\n                                        \"failures_count\": 0,\n                                        \"created_at\": \"2022-10-04T18:20:17Z\",\n                                        \"updated_at\": \"2022-10-04T18:20:18Z\",\n                                        \"total_duration_ms\": 100\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects\": {\n            \"get\": {\n                \"summary\": \"List projects\",\n                \"description\": \"Retrieves a list of projects for an organization.\\nYou may need to specify an org_id parameter depending on your API key type.\\nFor more information, see [Manage projects](https://neon.tech/docs/manage/projects/).\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"listProjects\",\n                \"parameters\": [\n                    {\n                        \"name\": \"cursor\",\n                        \"description\": \"Specify the cursor value from the previous response to retrieve the next batch of projects.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"limit\",\n                        \"description\": \"Specify a value from 1 to 400 to limit number of projects in the response.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"default\": 10,\n                            \"maximum\": 400\n                        }\n                    },\n                    {\n                        \"name\": \"search\",\n                        \"description\": \"Search by project `name` or `id`. You can specify partial `name` or `id` values to filter results.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"org_id\",\n                        \"description\": \"Search for projects by `org_id`.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/TimeoutParam\"\n                    },\n                    {\n                        \"name\": \"recoverable\",\n                        \"description\": \"Show only deleted projects within the recovery window.\\n\",\n                        \"in\": \"query\",\n                        \"x-stability-level\": \"beta\",\n                        \"schema\": {\n                            \"type\": \"boolean\",\n                            \"default\": false\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of projects for the Neon account\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/ProjectsResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/PaginationResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/ProjectsApplicationsMapResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/ProjectsIntegrationsMapResponse\"\n                                        }\n                                    ]\n                                },\n                                \"example\": {\n                                    \"projects\": [\n                                        {\n                                            \"id\": \"shiny-wind-028834\",\n                                            \"platform_id\": \"aws\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"name\": \"shiny-wind-028834\",\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"pg_version\": 15,\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:42:25Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                            \"cpu_used_sec\": 0,\n                                            \"branch_logical_size_limit\": 0,\n                                            \"owner_id\": \"1232111\",\n                                            \"creation_source\": \"console\",\n                                            \"store_passwords\": true,\n                                            \"branch_logical_size_limit_bytes\": 10800,\n                                            \"active_time\": 100\n                                        },\n                                        {\n                                            \"id\": \"winter-boat-259881\",\n                                            \"platform_id\": \"aws\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"name\": \"winter-boat-259881\",\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"pg_version\": 15,\n                                            \"created_at\": \"2022-11-23T17:52:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:52:25Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                            \"cpu_used_sec\": 0,\n                                            \"branch_logical_size_limit\": 0,\n                                            \"owner_id\": \"1232111\",\n                                            \"creation_source\": \"console\",\n                                            \"store_passwords\": true,\n                                            \"branch_logical_size_limit_bytes\": 10800,\n                                            \"active_time\": 100,\n                                            \"org_id\": \"org-morning-bread-81040908\"\n                                        }\n                                    ],\n                                    \"applications\": {\n                                        \"winter-boat-259881\": [\n                                            \"vercel\",\n                                            \"github\"\n                                        ]\n                                    },\n                                    \"integrations\": {\n                                        \"winter-boat-259881\": [\n                                            \"vercel\",\n                                            \"github\"\n                                        ]\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Create project\",\n                \"description\": \"Creates a Neon project within an organization.\\nYou may need to specify an org_id parameter depending on your API key type.\\nPlan limits define how many projects you can create.\\nFor more information, see [Manage projects](https://neon.tech/docs/manage/projects/).\\n\\nYou can specify a region and Postgres version in the request body.\\nNeon currently supports PostgreSQL 14, 15, 16, and 17.\\nFor supported regions and `region_id` values, see [Regions](https://neon.tech/docs/introduction/regions/).\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"createProject\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/ProjectCreateRequest\"\n                            },\n                            \"examples\": {\n                                \"required_attributes_only\": {\n                                    \"summary\": \"Required attributes only\",\n                                    \"value\": {\n                                        \"project\": {\n                                            \"name\": \"myproject\"\n                                        }\n                                    }\n                                },\n                                \"commonly_specified_attributes\": {\n                                    \"summary\": \"Commonly-specified attributes\",\n                                    \"value\": {\n                                        \"project\": {\n                                            \"name\": \"myproject\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"pg_version\": 15\n                                        }\n                                    }\n                                },\n                                \"with_autoscaling\": {\n                                    \"summary\": \"With autoscaling attributes\",\n                                    \"value\": {\n                                        \"project\": {\n                                            \"name\": \"myproject\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"pg_version\": 15,\n                                            \"autoscaling_limit_min_cu\": 0.25,\n                                            \"autoscaling_limit_max_cu\": 1,\n                                            \"provisioner\": \"k8s-neonvm\"\n                                        }\n                                    }\n                                },\n                                \"with_branch_attributes\": {\n                                    \"summary\": \"With branch attributes\",\n                                    \"value\": {\n                                        \"project\": {\n                                            \"name\": \"myproject\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"pg_version\": 15,\n                                            \"branch\": {\n                                                \"name\": \"mybranch\",\n                                                \"role_name\": \"sally\",\n                                                \"database_name\": \"mydb\"\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"$ref\": \"#/components/responses/CreatedProject\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/shared\": {\n            \"get\": {\n                \"summary\": \"List shared projects\",\n                \"description\": \"Retrieves a list of projects shared with your Neon account.\\nFor more information, see [Manage projects](https://neon.tech/docs/manage/projects/).\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"listSharedProjects\",\n                \"parameters\": [\n                    {\n                        \"name\": \"cursor\",\n                        \"description\": \"Specify the cursor value from the previous response to get the next batch of projects.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"limit\",\n                        \"description\": \"Specify a value from 1 to 400 to limit number of projects in the response.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"default\": 10,\n                            \"maximum\": 400\n                        }\n                    },\n                    {\n                        \"name\": \"search\",\n                        \"description\": \"Search query by name or id.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/TimeoutParam\"\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of shared projects for the Neon account\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/ProjectsResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/PaginationResponse\"\n                                        }\n                                    ]\n                                },\n                                \"example\": {\n                                    \"projects\": [\n                                        {\n                                            \"id\": \"shiny-wind-028834\",\n                                            \"platform_id\": \"aws\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"name\": \"shiny-wind-028834\",\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"pg_version\": 15,\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:42:25Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                            \"cpu_used_sec\": 0,\n                                            \"branch_logical_size_limit\": 0,\n                                            \"owner_id\": \"1232111\",\n                                            \"creation_source\": \"console\",\n                                            \"store_passwords\": true,\n                                            \"branch_logical_size_limit_bytes\": 10800,\n                                            \"active_time\": 100\n                                        },\n                                        {\n                                            \"id\": \"winter-boat-259881\",\n                                            \"platform_id\": \"aws\",\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"name\": \"winter-boat-259881\",\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"pg_version\": 15,\n                                            \"created_at\": \"2022-11-23T17:52:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:52:25Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                            \"cpu_used_sec\": 0,\n                                            \"branch_logical_size_limit\": 0,\n                                            \"owner_id\": \"1232111\",\n                                            \"creation_source\": \"console\",\n                                            \"store_passwords\": true,\n                                            \"branch_logical_size_limit_bytes\": 10800,\n                                            \"active_time\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve project details\",\n                \"description\": \"Retrieves information about the specified project.\\nYou can obtain a `project_id` by listing the projects for an organization.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"getProject\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectResponse\"\n                                },\n                                \"example\": {\n                                    \"project\": {\n                                        \"id\": \"shiny-wind-028834\",\n                                        \"platform_id\": \"aws\",\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"name\": \"shiny-wind-028834\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"pg_version\": 15,\n                                        \"history_retention_seconds\": 604800,\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:25Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"branch_logical_size_limit\": 0,\n                                        \"cpu_used_sec\": 10,\n                                        \"owner_id\": \"1232111\",\n                                        \"owner\": {\n                                            \"name\": \"John Smith\",\n                                            \"email\": \"some@email.com\",\n                                            \"branches_limit\": 10,\n                                            \"subscription_type\": \"scale\"\n                                        },\n                                        \"creation_source\": \"console\",\n                                        \"store_passwords\": true,\n                                        \"branch_logical_size_limit_bytes\": 10500,\n                                        \"data_storage_bytes_hour\": 1040,\n                                        \"data_transfer_bytes\": 1000000,\n                                        \"written_data_bytes\": 100800,\n                                        \"compute_time_seconds\": 100,\n                                        \"active_time_seconds\": 100,\n                                        \"consumption_period_start\": \"2023-02-01T00:00:00Z\",\n                                        \"consumption_period_end\": \"2023-03-01T00:00:00Z\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update project\",\n                \"description\": \"Updates the specified project.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"updateProject\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/ProjectUpdateRequest\"\n                            },\n                            \"example\": {\n                                \"project\": {\n                                    \"name\": \"myproject\"\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/ProjectResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                        }\n                                    ]\n                                },\n                                \"example\": {\n                                    \"operations\": [],\n                                    \"project\": {\n                                        \"id\": \"shiny-wind-028834\",\n                                        \"platform_id\": \"aws\",\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"name\": \"myproject\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"pg_version\": 15,\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-12-04T02:39:25Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"branch_logical_size_limit\": 0,\n                                        \"cpu_used_sec\": 213230,\n                                        \"owner_id\": \"1232111\",\n                                        \"creation_source\": \"console\",\n                                        \"store_passwords\": true,\n                                        \"branch_logical_size_limit_bytes\": 10500,\n                                        \"data_storage_bytes_hour\": 1040,\n                                        \"data_transfer_bytes\": 1000000,\n                                        \"written_data_bytes\": 100800,\n                                        \"compute_time_seconds\": 100,\n                                        \"active_time_seconds\": 100,\n                                        \"history_retention_seconds\": 604800,\n                                        \"consumption_period_start\": \"2023-02-01T00:00:00Z\",\n                                        \"consumption_period_end\": \"2023-03-01T00:00:00Z\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete project\",\n                \"description\": \"Deletes the specified project.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nDeleting a project is a permanent action.\\nDeleting a project also deletes endpoints, branches, databases, and users that belong to the project.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"deleteProject\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectResponse\"\n                                },\n                                \"example\": {\n                                    \"project\": {\n                                        \"id\": \"bold-cloud-468218\",\n                                        \"platform_id\": \"aws\",\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"name\": \"bold-cloud-468218\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"pg_version\": 15,\n                                        \"created_at\": \"2022-11-30T18:41:29Z\",\n                                        \"updated_at\": \"2022-11-30T18:41:29Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"cpu_used_sec\": 23004200,\n                                        \"branch_logical_size_limit\": 0,\n                                        \"owner_id\": \"1232111\",\n                                        \"creation_source\": \"console\",\n                                        \"store_passwords\": true,\n                                        \"branch_logical_size_limit_bytes\": 10500,\n                                        \"data_storage_bytes_hour\": 1040,\n                                        \"data_transfer_bytes\": 1000000,\n                                        \"written_data_bytes\": 100800,\n                                        \"compute_time_seconds\": 100,\n                                        \"active_time_seconds\": 100,\n                                        \"history_retention_seconds\": 604800,\n                                        \"consumption_period_start\": \"2023-02-01T00:00:00Z\",\n                                        \"consumption_period_end\": \"2023-03-01T00:00:00Z\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/restore\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Restore a deleted project\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/recover` instead. Restores a deleted project during the deletion grace period.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"restoreProject\",\n                \"deprecated\": true,\n                \"x-stability-level\": \"beta\",\n                \"x-sunset\": \"2026-02-06\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the restored project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectRecoverResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/recover\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Recover a deleted project\",\n                \"description\": \"Recovers a deleted project during the deletion grace period.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"recoverProject\",\n                \"x-stability-level\": \"beta\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the recovered project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectRecoverResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/operations\": {\n            \"get\": {\n                \"summary\": \"List operations\",\n                \"description\": \"Retrieves a list of operations for the specified Neon project.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nThe number of operations returned can be large.\\nTo paginate the response, issue an initial request with a `limit` value.\\nThen, add the `cursor` value that was returned in the response to the next request.\\nOperations older than 6 months may be deleted from our systems.\\nIf you need more history than that, you should store your own history.\\n\",\n                \"tags\": [\n                    \"Operation\"\n                ],\n                \"operationId\": \"listProjectOperations\",\n                \"parameters\": [\n                    {\n                        \"name\": \"cursor\",\n                        \"description\": \"Specify the cursor value from the previous response to get the next batch of operations\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"limit\",\n                        \"description\": \"Specify a value from 1 to 1000 to limit number of operations in the response\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"maximum\": 1000\n                        }\n                    },\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"$ref\": \"#/components/responses/ListOperations\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/permissions\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List project access\",\n                \"description\": \"Retrieves details about users who have access to the project, including the permission `id`, the granted-to email address, and the date project access was granted.\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"listProjectPermissions\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned project access details\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectPermissions\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Grant project access\",\n                \"description\": \"Grants project access to the account associated with the specified email address\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"grantPermissionToProject\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/GrantPermissionToProjectRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Granted project access\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectPermission\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/permissions/{permission_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"permission_id\",\n                    \"in\": \"path\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"delete\": {\n                \"summary\": \"Revoke project access\",\n                \"description\": \"Revokes project access from the user associated with the specified permission `id`. You can retrieve a user's permission `id` by listing project access.\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"revokePermissionFromProject\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Revoked project access\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectPermission\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/available_preload_libraries\": {\n            \"get\": {\n                \"summary\": \"Return available shared preload libraries\",\n                \"description\": \"Return available shared preload libraries\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"getAvailablePreloadLibraries\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Successfully returned available shared preload libraries\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/AvailablePreloadLibraries\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/transfer_requests\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create a project transfer request\",\n                \"description\": \"Creates a transfer request for the specified project. A transfer request allows\\nthe project to be transferred to another account or organization. The request\\nhas an expiration time after which it can no longer be used. To accept/claim\\nthe transfer request, the recipient user/organization must call the\\n`/projects/{project_id}/transfer_requests/{request_id}` API endpoint, or visit\\n`https://console.neon.tech/app/claim?p={project_id}&tr={request_id}&ru={redirect_url}`\\nin the Neon Console. The `ru` parameter is optional and can be used to redirect\\nthe user after accepting the transfer request.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"createProjectTransferRequest\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"ttl_seconds\": {\n                                        \"type\": \"integer\",\n                                        \"format\": \"int64\",\n                                        \"description\": \"Specifies the validity duration of the transfer request in seconds. If not provided,\\nthe request will expire after 24 hours (86,400 seconds).\\n\"\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Project transfer request created successfully\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectTransferRequestResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/transfer_requests/{request_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"request_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project transfer request ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"put\": {\n                \"summary\": \"Accept a project transfer request\",\n                \"description\": \"Accepts a transfer request for the specified project, transferring it to the specified organization\\nor user. If org_id is not passed, the project will be transferred to the current user or organization account.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"acceptProjectTransferRequest\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"org_id\": {\n                                        \"description\": \"The Neon organization ID to transfer the project to. If not provided, the project will be\\ntransferred to the current user or organization account.\\n\",\n                                        \"type\": \"string\",\n                                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"204\": {\n                        \"description\": \"Project transfer request accepted successfully\"\n                    },\n                    \"406\": {\n                        \"description\": \"Account doesn't satisfy the plan requirements to own the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/AcceptProjectTransferRequestSatisfiesPlanError\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/jwks\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List JWKS URLs\",\n                \"description\": \"Returns the JWKS URLs available for verifying JWTs used as the authentication mechanism for the specified project.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"getProjectJWKS\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The JWKS URLs available for the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectJWKSResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Add JWKS URL\",\n                \"description\": \"Add a new JWKS URL to a project, such that it can be used for verifying JWTs used as the authentication mechanism for the specified project.\\n\\nThe URL must be a valid HTTPS URL that returns a JSON Web Key Set.\\n\\nThe `provider_name` field allows you to specify which authentication provider you're using (e.g., Clerk, Auth0, AWS Cognito, etc.).\\n\\nThe `branch_id` can be used to specify on which branches the JWKS URL will be accepted. If not specified, then it will work on any branch.\\n\\nThe `role_names` can be used to specify for which roles the JWKS URL will be accepted. If not specified, then default roles will be used (authenticator, authenticated and anonymous).\\n\\nThe `jwt_audience` can be used to specify which \\\"aud\\\" values should be accepted by Neon in the JWTs that are used for authentication.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"addProjectJWKS\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/AddProjectJWKSRequest\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"The JWKS URL was added to the project's authentication connections\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/JWKSCreationOperation\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/jwks/{jwks_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"jwks_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The JWKS ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"delete\": {\n                \"summary\": \"Delete JWKS URL\",\n                \"description\": \"Deletes a JWKS URL from the specified project\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"deleteProjectJWKS\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted a JWKS URL from the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/JWKS\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/data-api/{database_name}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"database_name\",\n                    \"in\": \"path\",\n                    \"description\": \"The database name\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create Neon Data API\",\n                \"description\": \"Creates a new instance of Neon Data API in the specified branch.\\nYou can obtain the `project_id` and `branch_id` by listing the projects and branches for your Neon account.\\n\",\n                \"tags\": [\n                    \"DataAPI\"\n                ],\n                \"operationId\": \"createProjectBranchDataAPI\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/DataAPICreateRequest\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Creates a new app\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DataAPICreateResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update Neon Data API\",\n                \"description\": \"Updates the Neon Data API configuration for the specified branch.\\nYou can optionally provide settings to update the Data API configuration.\\nThe schema cache is always refreshed as part of this operation.\\nYou can obtain the `project_id` and `branch_id` by listing the projects and branches for your Neon account.\\n\",\n                \"tags\": [\n                    \"DataAPI\"\n                ],\n                \"operationId\": \"updateProjectBranchDataAPI\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/DataAPIUpdateRequest\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Updated the Neon Data API configuration and refreshed the schema cache\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EmptyResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete Neon Data API\",\n                \"description\": \"Deletes the Neon Data API for the specified branch.\\nYou can obtain the `project_id` and `branch_id` by listing the projects and branches for your Neon account.\\n\",\n                \"tags\": [\n                    \"DataAPI\"\n                ],\n                \"operationId\": \"deleteProjectBranchDataAPI\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the Neon Data API for the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EmptyResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"get\": {\n                \"summary\": \"Get Neon Data API\",\n                \"description\": \"Retrieves the Neon Data API for the specified branch.\\n\",\n                \"tags\": [\n                    \"DataAPI\"\n                ],\n                \"operationId\": \"getProjectBranchDataAPI\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the Neon Data API for the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DataAPIReponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/auth/create\": {\n            \"post\": {\n                \"summary\": \"Create Neon Auth integration\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth` instead. Creates a project on a third-party authentication provider's platform for use with Neon Auth.\\nUse this endpoint if the frontend integration flow can't be used.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"operationId\": \"createNeonAuthIntegration\",\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthCreateIntegrationRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Creates Neon Auth integration\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthCreateIntegrationResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get details of Neon Auth for the branch\",\n                \"description\": \"/ Fetches the details of the Neon Auth for the specified branch. You can obtain the `project_id` and `branch_id` by listing the projects and branches for your Neon account.\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"getNeonAuth\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Fetched the details of the Neon Auth integration for the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthIntegration\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Enable Neon Auth for the branch\",\n                \"description\": \"Enables Neon Auth integrationfor the branch.\\nYou can obtain the `project_id` and `branch_id` by listing the projects and branches for your Neon account.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"createNeonAuth\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/EnableNeonAuthIntegrationRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Enables Neon Auth integration for the branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthCreateIntegrationResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Disables Neon Auth for the branch\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"disableNeonAuth\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"delete_data\": {\n                                        \"type\": \"boolean\",\n                                        \"description\": \"If true, deletes the `neon_auth` schema from the database\",\n                                        \"default\": false\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Delete the integration with the authentication provider\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/domains\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List domains in redirect_uri whitelist\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/domains` instead. Lists the domains in the redirect_uri whitelist for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"listNeonAuthRedirectURIWhitelistDomains\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the domains in the redirect_uri whitelist\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthRedirectURIWhitelistResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Add domain to redirect_uri whitelist\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/domains` instead. Adds a domain to the redirect_uri whitelist for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"addNeonAuthDomainToRedirectURIWhitelist\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthAddDomainToRedirectURIWhitelistRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Added the domain to the redirect_uri whitelist\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete domain from redirect_uri whitelist\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/domains` instead. Deletes a domain from the redirect_uri whitelist for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"deleteNeonAuthDomainFromRedirectURIWhitelist\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthDeleteDomainFromRedirectURIWhitelistRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the domain from the redirect_uri whitelist\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/domains\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List domains in redirect_uri whitelist\",\n                \"description\": \"Lists the domains in the redirect_uri whitelist for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"listBranchNeonAuthTrustedDomains\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the domains in the redirect_uri whitelist\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthRedirectURIWhitelistResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Add domain to redirect_uri whitelist\",\n                \"description\": \"Adds a domain to the redirect_uri whitelist for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"addBranchNeonAuthTrustedDomain\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthAddDomainToRedirectURIWhitelistRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Added the domain to the redirect_uri whitelist\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete domain from redirect_uri whitelist\",\n                \"description\": \"Deletes a domain from the redirect_uri whitelist for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"deleteBranchNeonAuthTrustedDomain\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthDeleteDomainFromRedirectURIWhitelistRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the domain from the redirect_uri whitelist\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/auth/keys\": {\n            \"post\": {\n                \"summary\": \"Create Auth Provider SDK keys\",\n                \"description\": \"Generates SDK or API Keys for the auth provider. These might be called different things depending\\non the auth provider you're using, but are generally used for setting up the frontend and backend SDKs.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"operationId\": \"createNeonAuthProviderSDKKeys\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthCreateAuthProviderSDKKeysRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Creates Auth Provider SDK keys\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthCreateIntegrationResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/auth/user\": {\n            \"post\": {\n                \"summary\": \"Create new auth user\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/users` instead. Creates a new user in Neon Auth.\\nThe user will be created in your neon_auth.users_sync table and automatically propagated to your auth project, whether Neon-managed or provider-owned.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"createNeonAuthNewUser\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthCreateNewUserRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Creates new user\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthCreateNewUserResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/users\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create new auth user\",\n                \"description\": \"Creates a new user in Neon Auth.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"createBranchNeonAuthNewUser\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/CreateBranchNeonAuthNewUserRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Creates new user\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthCreateNewUserResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/users/{auth_user_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"auth_user_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon user ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"delete\": {\n                \"summary\": \"Delete auth user\",\n                \"description\": \"Deletes the auth user for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"deleteBranchNeonAuthUser\",\n                \"responses\": {\n                    \"204\": {\n                        \"description\": \"Deleted the auth user\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/users/{auth_user_id}/role\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"auth_user_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon user ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"put\": {\n                \"summary\": \"Update auth user role\",\n                \"description\": \"Updates the role of an auth user for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"updateNeonAuthUserRole\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/UpdateNeonAuthUserRoleRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the auth user role\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/UpdateNeonAuthUserRoleResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/users/{auth_user_id}\": {\n            \"delete\": {\n                \"summary\": \"Delete auth user\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/users/{auth_user_id}` instead. Deletes the auth user for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"deleteNeonAuthUser\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"auth_user_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon user ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"204\": {\n                        \"description\": \"Deleted the auth user\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/auth/transfer_ownership\": {\n            \"post\": {\n                \"summary\": \"Transfer Neon-managed auth project to your own account\",\n                \"description\": \"Transfer ownership of your Neon-managed auth project to your own auth provider account.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"operationId\": \"transferNeonAuthProviderProject\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthTransferAuthProviderProjectRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Transfer initiated. Follow the URL to complete the process in your auth provider's UI.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthTransferAuthProviderProjectResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/integrations\": {\n            \"get\": {\n                \"summary\": \"Lists active integrations with auth providers\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth` instead.\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"operationId\": \"listNeonAuthIntegrations\",\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Return management API keys metadata\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ListNeonAuthIntegrationsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/oauth_providers\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List OAuth providers\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/oauth_providers` instead. Lists the OAuth providers for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"listNeonAuthOauthProviders\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the OAuth providers for the Neon Auth\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ListNeonAuthOauthProvidersResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Add a OAuth provider\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/oauth_providers` instead. Adds a OAuth provider to the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"addNeonAuthOauthProvider\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthAddOAuthProviderRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The OAuth provider has been added to the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthOauthProvider\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/oauth_providers\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List OAuth providers for neon auth for a branch\",\n                \"description\": \"Lists the OAuth providers for the specified project and branch.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"listBranchNeonAuthOauthProviders\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the OAuth providers for the Neon Auth\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ListNeonAuthOauthProvidersResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Add a OAuth provider\",\n                \"description\": \"Adds a OAuth provider to the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"addBranchNeonAuthOauthProvider\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthAddOAuthProviderRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The OAuth provider has been added to the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthOauthProvider\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/oauth_providers/{oauth_provider_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"oauth_provider_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The OAuth provider ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthOauthProviderId\"\n                    }\n                }\n            ],\n            \"patch\": {\n                \"summary\": \"Update OAuth provider\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/oauth_providers/{oauth_provider_id}` instead. Updates a OAuth provider for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"updateNeonAuthOauthProvider\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthUpdateOAuthProviderRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The OAuth provider has been added to the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthOauthProvider\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete OAuth provider\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/oauth_providers/{oauth_provider_id}` instead. Deletes a OAuth provider from the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"deleteNeonAuthOauthProvider\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the OAuth provider from the project\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/oauth_providers/{oauth_provider_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"oauth_provider_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The OAuth provider ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthOauthProviderId\"\n                    }\n                }\n            ],\n            \"patch\": {\n                \"summary\": \"Update OAuth provider\",\n                \"description\": \"Updates a OAuth provider for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"updateBranchNeonAuthOauthProvider\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthUpdateOAuthProviderRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The OAuth provider has been added to the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthOauthProvider\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete OAuth provider\",\n                \"description\": \"Deletes a OAuth provider from the specified project.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"deleteBranchNeonAuthOauthProvider\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the OAuth provider from the project\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/email_server\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get email server configuration\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/email_provider` instead. Gets the email server configuration for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"getNeonAuthEmailServer\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the email server configuration for the Neon Auth\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update email server configuration\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth/email_provider` instead. Updates the email server configuration for the specified project.\\n\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"updateNeonAuthEmailServer\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The OAuth provider has been added to the project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/send_test_email\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Send test email\",\n                \"description\": \"Sends a test email to the specified email address.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"x-stability-level\": \"beta\",\n                \"operationId\": \"sendNeonAuthTestEmail\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/SendNeonAuthTestEmailRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Response with the result of the test email send\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/SendNeonAuthTestEmailResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/email_and_password\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get email and password configuration\",\n                \"description\": \"Gets the email and password authentication configuration for Neon Auth\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"getNeonAuthEmailAndPasswordConfig\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the email and password configuration for Neon Auth\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthEmailAndPasswordConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update email and password configuration\",\n                \"description\": \"Updates the email and password authentication configuration for Neon Auth\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"updateNeonAuthEmailAndPasswordConfig\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthEmailAndPasswordConfigUpdate\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The email and password configuration has been updated\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthEmailAndPasswordConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/email_provider\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get email provider configuration\",\n                \"description\": \"Gets the email provider configuration for the specified branch.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"getNeonAuthEmailProvider\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the email provider configuration for the Neon Auth\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update email provider configuration\",\n                \"description\": \"Updates the email provider configuration for the specified branch.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"updateNeonAuthEmailProvider\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The email provider configuration has been updated\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/auth/integration/{auth_provider}\": {\n            \"delete\": {\n                \"summary\": \"Delete integration with auth provider\",\n                \"description\": \"DEPRECATED, use `/projects/{project_id}/branches/{branch_id}/auth` instead.\",\n                \"tags\": [\n                    \"Auth (legacy)\"\n                ],\n                \"deprecated\": true,\n                \"x-sunset\": \"2026-03-01\",\n                \"operationId\": \"deleteNeonAuthIntegration\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"auth_provider\",\n                        \"in\": \"path\",\n                        \"description\": \"The authentication provider name\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                        }\n                    }\n                ],\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"delete_data\": {\n                                        \"type\": \"boolean\",\n                                        \"description\": \"If true, deletes the `neon_auth` schema from the database\",\n                                        \"default\": false\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Delete the integration with the authentication provider\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/connection_uri\": {\n            \"get\": {\n                \"summary\": \"Retrieve connection URI\",\n                \"description\": \"Retrieves a connection URI for the specified database.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `database_name` by listing the databases for a branch.\\nYou can obtain a `role_name` by listing the roles for a branch.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"getConnectionURI\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"branch_id\",\n                        \"in\": \"query\",\n                        \"description\": \"The branch ID. Defaults to your project's default `branch_id` if not specified.\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"endpoint_id\",\n                        \"in\": \"query\",\n                        \"description\": \"The endpoint ID. Defaults to the read-write `endpoint_id` associated with the `branch_id` if not specified.\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"database_name\",\n                        \"in\": \"query\",\n                        \"description\": \"The database name\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"role_name\",\n                        \"in\": \"query\",\n                        \"description\": \"The role name\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"pooled\",\n                        \"in\": \"query\",\n                        \"description\": \"Adds the `-pooler` option to the connection URI when set to `true`, creating a pooled connection URI.\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"boolean\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the connection URI\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ConnectionURIResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/allow_localhost\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get allow localhost\",\n                \"description\": \"Get the allow localhost configuration for the specified branch.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"getNeonAuthAllowLocalhost\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The allow localhost configuration\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthAllowLocalhostResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update allow localhost\",\n                \"description\": \"Updates the allow localhost configuration for the specified branch.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"updateNeonAuthAllowLocalhost\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/UpdateNeonAuthAllowLocalhostRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the allow localhost configuration\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthAllowLocalhostResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/plugins\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get all plugin configurations\",\n                \"description\": \"Returns all plugin configurations for Neon Auth in a single response.\\nThis endpoint aggregates organization, email provider, email and password,\\nOAuth providers, and localhost settings.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"getNeonAuthPluginConfigs\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns all plugin configurations\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthPluginConfigs\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/plugins/organization\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"patch\": {\n                \"summary\": \"Update organization plugin configuration\",\n                \"description\": \"Updates the organization plugin configuration for Neon Auth.\\nThe organization plugin enables multi-tenant organization support.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"updateNeonAuthOrganizationPlugin\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthOrganizationConfigUpdate\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The organization plugin configuration has been updated\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthOrganizationConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/auth/webhooks\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Get webhook configuration for Neon Auth\",\n                \"description\": \"Returns the webhook configuration for Neon Auth.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"getNeonAuthWebhookConfig\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns webhook configuration for Neon Auth\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthWebhookConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"put\": {\n                \"summary\": \"Update webhook configuration for Neon Auth\",\n                \"description\": \"Updates the webhook configuration for Neon Auth on a specific branch.\\n\",\n                \"tags\": [\n                    \"Auth\"\n                ],\n                \"operationId\": \"updateNeonAuthWebhookConfig\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/NeonAuthWebhookConfig\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returns the updated webhook configuration\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/NeonAuthWebhookConfig\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create branch\",\n                \"description\": \"Creates a branch in the specified project.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nThis method does not require a request body, but you can specify one to create a compute endpoint for the branch or to select a non-default parent branch.\\nBy default, the branch is created from the project's default branch with no compute endpoint, and the branch name is auto-generated.\\nTo access the branch, you must add an endpoint object. A `read_write` endpoint allows you to perform read and write operations on the branch.\\nEach branch supports one read-write endpoint and multiple read-only endpoints.\\nFor related information, see [Manage branches](https://neon.tech/docs/manage/branches/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"createProjectBranch\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"allOf\": [\n                                    {\n                                        \"$ref\": \"#/components/schemas/BranchCreateRequest\"\n                                    },\n                                    {\n                                        \"$ref\": \"#/components/schemas/AnnotationCreateValueRequest\"\n                                    }\n                                ]\n                            },\n                            \"examples\": {\n                                \"branch_only\": {\n                                    \"summary\": \"Branch only\",\n                                    \"value\": {\n                                        \"branch\": {\n                                            \"parent_id\": \"br-aged-salad-637688\",\n                                            \"name\": \"mybranch\"\n                                        }\n                                    }\n                                },\n                                \"branch_with_endpoint\": {\n                                    \"summary\": \"Branch with endpoint\",\n                                    \"value\": {\n                                        \"endpoints\": [\n                                            {\n                                                \"type\": \"read_write\"\n                                            }\n                                        ],\n                                        \"branch\": {\n                                            \"parent_id\": \"br-aged-salad-637688\",\n                                            \"name\": \"mybranch\"\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"required\": false\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"$ref\": \"#/components/responses/CreatedBranch\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"get\": {\n                \"summary\": \"List branches\",\n                \"description\": \"Retrieves a list of branches for the specified project.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\n\\nEach Neon project has a root branch named `main`.\\nA `branch_id` value has a `br-` prefix.\\nA project may contain child branches that were branched from `main` or from another branch.\\nA parent branch is identified by the `parent_id` value, which is the `id` of the parent branch.\\nFor related information, see [Manage branches](https://neon.tech/docs/manage/branches/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"listProjectBranches\",\n                \"parameters\": [\n                    {\n                        \"name\": \"search\",\n                        \"description\": \"Search by branch `name` or `id`. You can specify partial `name` or `id` values to filter results.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"sort_by\",\n                        \"description\": \"Sort the branches by sort_field. If not provided, branches will be sorted by updated_at descending order\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"default\": \"updated_at\",\n                            \"enum\": [\n                                \"name\",\n                                \"created_at\",\n                                \"updated_at\"\n                            ]\n                        }\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/CursorParam\"\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/SortOrderParam\"\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/LimitParam\"\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of branches for the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/BranchesResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/AnnotationsMapResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/CursorPaginationResponse\"\n                                        }\n                                    ]\n                                },\n                                \"example\": {\n                                    \"branches\": [\n                                        {\n                                            \"id\": \"br-aged-salad-637688\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"name\": \"main\",\n                                            \"current_state\": \"ready\",\n                                            \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                            \"logical_size\": 28,\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:42:26Z\",\n                                            \"data_transfer_bytes\": 1000000,\n                                            \"written_data_bytes\": 100800,\n                                            \"compute_time_seconds\": 100,\n                                            \"active_time_seconds\": 100,\n                                            \"cpu_used_sec\": 100,\n                                            \"default\": true,\n                                            \"protected\": false,\n                                            \"creation_source\": \"console\",\n                                            \"init_source\": \"parent-data\"\n                                        },\n                                        {\n                                            \"id\": \"br-sweet-breeze-497520\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"parent_id\": \"br-aged-salad-637688\",\n                                            \"parent_lsn\": \"0/1DE2850\",\n                                            \"name\": \"dev2\",\n                                            \"current_state\": \"ready\",\n                                            \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                            \"logical_size\": 28,\n                                            \"created_at\": \"2022-11-30T19:09:48Z\",\n                                            \"updated_at\": \"2022-11-30T19:09:49Z\",\n                                            \"data_transfer_bytes\": 1000000,\n                                            \"written_data_bytes\": 100800,\n                                            \"compute_time_seconds\": 100,\n                                            \"active_time_seconds\": 100,\n                                            \"cpu_used_sec\": 100,\n                                            \"default\": true,\n                                            \"protected\": false,\n                                            \"creation_source\": \"console\",\n                                            \"init_source\": \"parent-data\"\n                                        },\n                                        {\n                                            \"id\": \"br-raspy-hill-832856\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"parent_id\": \"br-aged-salad-637688\",\n                                            \"parent_lsn\": \"0/19623D8\",\n                                            \"name\": \"dev1\",\n                                            \"current_state\": \"ready\",\n                                            \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                            \"logical_size\": 21,\n                                            \"created_at\": \"2022-11-30T17:36:57Z\",\n                                            \"updated_at\": \"2022-11-30T17:36:57Z\",\n                                            \"data_transfer_bytes\": 1000000,\n                                            \"written_data_bytes\": 100800,\n                                            \"compute_time_seconds\": 100,\n                                            \"active_time_seconds\": 100,\n                                            \"cpu_used_sec\": 100,\n                                            \"default\": true,\n                                            \"protected\": false,\n                                            \"creation_source\": \"console\",\n                                            \"init_source\": \"parent-data\"\n                                        }\n                                    ],\n                                    \"annotations\": {\n                                        \"br-aged-salad-637688\": {\n                                            \"object\": {\n                                                \"type\": \"console/branch\",\n                                                \"id\": \"br-aged-salad-637688\"\n                                            },\n                                            \"value\": {\n                                                \"vercel-commit-ref\": \"test\"\n                                            },\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:42:26Z\"\n                                        }\n                                    },\n                                    \"pagination\": {\n                                        \"next\": \"eyJjcmVhdGV\",\n                                        \"sort_by\": \"updated_at\",\n                                        \"sort_order\": \"desc\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branch_anonymized\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create anonymized branch\",\n                \"description\": \"Creates a new branch with anonymized data using PostgreSQL Anonymizer for static masking.\\nThis allows developers to work with masked production data.\\nOptionally, provide `masking_rules` to set initial masking rules for the branch\\nand `start_anonymization` to automatically start anonymization after creation. This\\ncombines functionality of updating masking rules and starting anonymization into the\\nbranch creation request.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"createProjectBranchAnonymized\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/BranchAnonymizedCreateRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"$ref\": \"#/components/responses/CreatedBranch\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/count\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve number of branches\",\n                \"description\": \"Retrieves the total number of branches in the specified project.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"countProjectBranches\",\n                \"parameters\": [\n                    {\n                        \"name\": \"search\",\n                        \"description\": \"Count branches matching the `name` in search query\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    },\n                    \"200\": {\n                        \"description\": \"Returned a count of branches for the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/BranchesCountResponse\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve branch details\",\n                \"description\": \"Retrieves information about the specified branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain a `branch_id` by listing the project's branches.\\nA `branch_id` value has a `br-` prefix.\\n\\nEach Neon project is initially created with a root and default branch named `main`.\\nA project can contain one or more branches.\\nA parent branch is identified by a `parent_id` value, which is the `id` of the parent branch.\\nFor related information, see [Manage branches](https://neon.tech/docs/manage/branches/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"getProjectBranch\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/BranchResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/AnnotationResponse\"\n                                        }\n                                    ]\n                                },\n                                \"example\": {\n                                    \"branch\": {\n                                        \"id\": \"br-aged-salad-637688\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"name\": \"main\",\n                                        \"current_state\": \"ready\",\n                                        \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                        \"logical_size\": 28,\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:26Z\",\n                                        \"data_transfer_bytes\": 1000000,\n                                        \"written_data_bytes\": 100800,\n                                        \"compute_time_seconds\": 100,\n                                        \"active_time_seconds\": 100,\n                                        \"cpu_used_sec\": 100,\n                                        \"default\": true,\n                                        \"protected\": false,\n                                        \"creation_source\": \"console\",\n                                        \"init_source\": \"parent-data\"\n                                    },\n                                    \"annotation\": {\n                                        \"object\": {\n                                            \"type\": \"console/branch\",\n                                            \"id\": \"br-aged-salad-637688\"\n                                        },\n                                        \"value\": {\n                                            \"vercel-commit-ref\": \"test\"\n                                        },\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:26Z\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete branch\",\n                \"description\": \"Deletes the specified branch from a project, and places\\nall compute endpoints into an idle state, breaking existing client connections.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain a `branch_id` by listing the project's branches.\\nFor related information, see [Manage branches](https://neon.tech/docs/manage/branches/).\\n\\nWhen a successful response status is received, the compute endpoints are still active,\\nand the branch is not yet deleted from storage.\\nThe deletion occurs after all operations finish.\\nYou cannot delete a project's root or default branch, and you cannot delete a branch that has a child branch.\\nA project must have at least one branch.\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"deleteProjectBranch\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/BranchOperations\"\n                                },\n                                \"example\": {\n                                    \"branch\": {\n                                        \"id\": \"br-aged-salad-637688\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"name\": \"main\",\n                                        \"current_state\": \"ready\",\n                                        \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                        \"logical_size\": 28,\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:26Z\",\n                                        \"data_transfer_bytes\": 1000000,\n                                        \"written_data_bytes\": 100800,\n                                        \"compute_time_seconds\": 100,\n                                        \"active_time_seconds\": 100,\n                                        \"cpu_used_sec\": 100,\n                                        \"default\": true,\n                                        \"protected\": false,\n                                        \"creation_source\": \"console\",\n                                        \"init_source\": \"parent-data\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"b6afbc21-2990-4a76-980b-b57d8c2948f2\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-sweet-breeze-497520\",\n                                            \"endpoint_id\": \"ep-soft-violet-752733\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-01T19:53:05Z\",\n                                            \"updated_at\": \"2022-12-01T19:53:05Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"b6afbc21-2990-4a76-980b-b57d8c2948f2\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-sweet-breeze-497520\",\n                                            \"action\": \"delete_timeline\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-01T19:53:05Z\",\n                                            \"updated_at\": \"2022-12-01T19:53:05Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"204\": {\n                        \"description\": \"Returned if the branch doesn't exist or has already been deleted\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Update branch\",\n                \"description\": \"Updates the specified branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nFor more information, see [Manage branches](https://neon.tech/docs/manage/branches/).\\n\",\n                \"operationId\": \"updateProjectBranch\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/BranchUpdateRequest\"\n                            },\n                            \"example\": {\n                                \"branch\": {\n                                    \"name\": \"mybranch\"\n                                }\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/BranchOperations\"\n                                },\n                                \"example\": {\n                                    \"branch\": {\n                                        \"id\": \"br-icy-dream-250089\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"parent_id\": \"br-aged-salad-637688\",\n                                        \"parent_lsn\": \"0/1E19478\",\n                                        \"name\": \"mybranch\",\n                                        \"current_state\": \"ready\",\n                                        \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:26Z\",\n                                        \"data_transfer_bytes\": 1000000,\n                                        \"written_data_bytes\": 100800,\n                                        \"compute_time_seconds\": 100,\n                                        \"active_time_seconds\": 100,\n                                        \"cpu_used_sec\": 100,\n                                        \"default\": true,\n                                        \"protected\": false,\n                                        \"creation_source\": \"console\",\n                                        \"init_source\": \"parent-data\"\n                                    },\n                                    \"operations\": []\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/restore\": {\n            \"post\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Restore branch\",\n                \"description\": \"Restores a branch to an earlier state in its own or another branch's history\",\n                \"operationId\": \"restoreProjectBranch\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"branch_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The branch ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    }\n                ],\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/BranchRestoreRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/BranchOperations\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/schema\": {\n            \"get\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Retrieve database schema\",\n                \"description\": \"Retrieves the schema from the specified database. The `lsn` and `timestamp` values cannot be specified at the same time. If both are omitted, the database schema is retrieved from database's head.\",\n                \"operationId\": \"getProjectBranchSchema\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"branch_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The branch ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"db_name\",\n                        \"in\": \"query\",\n                        \"description\": \"Name of the database for which the schema is retrieved\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"lsn\",\n                        \"in\": \"query\",\n                        \"description\": \"The Log Sequence Number (LSN) for which the schema is retrieved\\n\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"timestamp\",\n                        \"in\": \"query\",\n                        \"description\": \"The point in time for which the schema is retrieved\\n\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"example\": \"2022-11-30T20:09:48Z\"\n                        }\n                    },\n                    {\n                        \"name\": \"format\",\n                        \"in\": \"query\",\n                        \"description\": \"The format of the schema to retrieve. Possible values:\\n- `sql` (default)\\n- `json`\\n\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Schema definition\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/BranchSchemaResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/compare_schema\": {\n            \"get\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Compare database schema\",\n                \"description\": \"Compares the schema from the specified database with another branch's schema.\",\n                \"operationId\": \"getProjectBranchSchemaComparison\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"branch_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The branch ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"base_branch_id\",\n                        \"in\": \"query\",\n                        \"description\": \"The branch ID to compare the schema with\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"db_name\",\n                        \"in\": \"query\",\n                        \"description\": \"Name of the database for which the schema is retrieved\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"lsn\",\n                        \"in\": \"query\",\n                        \"description\": \"The Log Sequence Number (LSN) for which the schema is retrieved\\n\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"timestamp\",\n                        \"in\": \"query\",\n                        \"description\": \"The point in time for which the schema is retrieved\\n\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"example\": \"2022-11-30T20:09:48Z\"\n                        }\n                    },\n                    {\n                        \"name\": \"base_lsn\",\n                        \"in\": \"query\",\n                        \"description\": \"The Log Sequence Number (LSN) for the base branch schema\\n\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"base_timestamp\",\n                        \"in\": \"query\",\n                        \"description\": \"The point in time for the base branch schema\\n\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"example\": \"2022-11-30T20:09:48Z\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Difference between the schemas\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/BranchSchemaCompareResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/masking_rules\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Get masking rules\",\n                \"description\": \"Retrieves the masking rules for the specified anonymized branch.\\nMasking rules define how sensitive data should be anonymized using PostgreSQL Anonymizer.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"operationId\": \"getMaskingRules\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Masking rules retrieved successfully\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/MaskingRulesResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Update masking rules\",\n                \"description\": \"Updates the masking rules for the specified anonymized branch.\\nMasking rules define how sensitive data should be anonymized using PostgreSQL Anonymizer.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"operationId\": \"updateMaskingRules\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/MaskingRulesUpdateRequest\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Masking rules updated successfully\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/MaskingRulesResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/anonymized_status\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Get anonymized branch status\",\n                \"description\": \"Retrieves the current status of an anonymized branch, including its state and progress information.\\nThis endpoint allows you to monitor the anonymization process from initialization through completion.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nOnly anonymized branches will have status information available.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"operationId\": \"getAnonymizedBranchStatus\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Anonymized branch status retrieved successfully\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/AnonymizedBranchStatusResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/anonymize\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Start anonymization\",\n                \"description\": \"Starts the anonymization process for an anonymized branch that is in the initialized, error, or anonymized state.\\nThis will apply all defined masking rules to anonymize sensitive data in the branch databases.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nThe branch must be an anonymized branch to start anonymization.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"operationId\": \"startAnonymization\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Anonymization started successfully\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/AnonymizedBranchStatusResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/set_as_default\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Set branch as default\",\n                \"description\": \"Sets the specified branch as the project's default branch.\\nThe default designation is automatically removed from the previous default branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nFor more information, see [Manage branches](https://neon.tech/docs/manage/branches/).\\n\",\n                \"operationId\": \"setDefaultProjectBranch\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/BranchOperations\"\n                                },\n                                \"example\": {\n                                    \"branch\": {\n                                        \"cpu_used_sec\": 1,\n                                        \"active_time_seconds\": 1,\n                                        \"compute_time_seconds\": 1,\n                                        \"written_data_bytes\": 100,\n                                        \"data_transfer_bytes\": 100,\n                                        \"id\": \"br-icy-dream-250089\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"parent_id\": \"br-aged-salad-637688\",\n                                        \"parent_lsn\": \"0/1E19478\",\n                                        \"name\": \"mybranch\",\n                                        \"current_state\": \"ready\",\n                                        \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:26Z\",\n                                        \"default\": true,\n                                        \"protected\": false,\n                                        \"creation_source\": \"console\",\n                                        \"init_source\": \"parent-data\"\n                                    },\n                                    \"operations\": []\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/finalize_restore\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Finalize restore\",\n                \"description\": \"Finalize the restore operation for a branch created from a snapshot.\\nThis operation updates the branch so it functions as the original branch it replaced.\\nThis includes:\\n  - Reassigning any computes from the original branch to the restored branch (this will restart the computes)\\n  - Renaming the restored branch to the original branch's name\\n  - Renaming the original branch so it no longer uses the original name\\n\\nThis operation only applies to branches created using the `restoreSnapshot` endpoint with `finalize_restore: false`.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"finalizeRestoreBranch\",\n                \"requestBody\": {\n                    \"required\": false,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"name\": {\n                                        \"type\": \"string\",\n                                        \"description\": \"used to rename the existing branch when it is replaced. if omitted, a default name is generated and used\"\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"OK\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/endpoints\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List branch endpoints\",\n                \"description\": \"Retrieves a list of compute endpoints for the specified branch.\\nNeon permits only one read-write compute endpoint per branch.\\nA branch can have multiple read-only compute endpoints.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"listProjectBranchEndpoints\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of endpoints for the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointsResponse\"\n                                },\n                                \"example\": {\n                                    \"endpoints\": [\n                                        {\n                                            \"host\": \"ep-little-smoke-851426.us-east-2.aws.neon.tech\",\n                                            \"id\": \"ep-little-smoke-851426\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"autoscaling_limit_min_cu\": 1,\n                                            \"autoscaling_limit_max_cu\": 1,\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"type\": \"read_write\",\n                                            \"current_state\": \"idle\",\n                                            \"settings\": {\n                                                \"pg_settings\": {}\n                                            },\n                                            \"pooler_enabled\": false,\n                                            \"pooler_mode\": \"transaction\",\n                                            \"disabled\": false,\n                                            \"passwordless_access\": true,\n                                            \"last_active\": \"2022-11-23T17:00:00Z\",\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-30T18:25:21Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                            \"creation_source\": \"console\",\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"suspend_timeout_seconds\": 10800\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/databases\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List databases\",\n                \"description\": \"Retrieves a list of databases for the specified branch.\\nA branch can have multiple databases.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nFor related information, see [Manage databases](https://neon.tech/docs/manage/databases/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"listProjectBranchDatabases\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of databases of the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DatabasesResponse\"\n                                },\n                                \"example\": {\n                                    \"databases\": [\n                                        {\n                                            \"id\": 834686,\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"name\": \"main\",\n                                            \"owner_name\": \"casey\",\n                                            \"created_at\": \"2022-11-30T18:25:15Z\",\n                                            \"updated_at\": \"2022-11-30T18:25:15Z\"\n                                        },\n                                        {\n                                            \"id\": 834686,\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"name\": \"mydb\",\n                                            \"owner_name\": \"casey\",\n                                            \"created_at\": \"2022-10-30T17:14:13Z\",\n                                            \"updated_at\": \"2022-10-30T17:14:13Z\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Create database\",\n                \"description\": \"Creates a database in the specified branch.\\nA branch can have multiple databases.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nFor related information, see [Manage databases](https://neon.tech/docs/manage/databases/).\\n\",\n                \"operationId\": \"createProjectBranchDatabase\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/DatabaseCreateRequest\"\n                            },\n                            \"example\": {\n                                \"database\": {\n                                    \"name\": \"mydb\",\n                                    \"owner_name\": \"casey\"\n                                }\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Created a database in the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DatabaseOperations\"\n                                },\n                                \"example\": {\n                                    \"database\": {\n                                        \"id\": 876692,\n                                        \"branch_id\": \"br-aged-salad-637688\",\n                                        \"name\": \"mydb\",\n                                        \"owner_name\": \"casey\",\n                                        \"created_at\": \"2022-12-04T00:15:04Z\",\n                                        \"updated_at\": \"2022-12-04T00:15:04Z\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"39426015-db00-40fa-85c5-1c7072df46d0\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"endpoint_id\": \"ep-little-smoke-851426\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-04T00:15:04Z\",\n                                            \"updated_at\": \"2022-12-04T00:15:04Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"b7483d4e-33da-4d40-b319-ac858d4d3e69\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"endpoint_id\": \"ep-little-smoke-851426\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-04T00:15:04Z\",\n                                            \"updated_at\": \"2022-12-04T00:15:04Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/databases/{database_name}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"database_name\",\n                    \"in\": \"path\",\n                    \"description\": \"The database name\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve database details\",\n                \"description\": \"Retrieves information about the specified database.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` and `database_name` by listing the branch's databases.\\nFor related information, see [Manage databases](https://neon.tech/docs/manage/databases/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"getProjectBranchDatabase\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the database details\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DatabaseResponse\"\n                                },\n                                \"example\": {\n                                    \"database\": {\n                                        \"id\": 834686,\n                                        \"branch_id\": \"br-aged-salad-637688\",\n                                        \"name\": \"main\",\n                                        \"owner_name\": \"casey\",\n                                        \"created_at\": \"2022-11-30T18:25:15Z\",\n                                        \"updated_at\": \"2022-11-30T18:25:15Z\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"summary\": \"Update database\",\n                \"description\": \"Updates the specified database in the branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` and `database_name` by listing the branch's databases.\\nFor related information, see [Manage databases](https://neon.tech/docs/manage/databases/).\\n\",\n                \"operationId\": \"updateProjectBranchDatabase\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/DatabaseUpdateRequest\"\n                            },\n                            \"example\": {\n                                \"database\": {\n                                    \"name\": \"mydb\",\n                                    \"owner_name\": \"sally\"\n                                }\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the database\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DatabaseOperations\"\n                                },\n                                \"example\": {\n                                    \"database\": {\n                                        \"id\": 876692,\n                                        \"branch_id\": \"br-aged-salad-637688\",\n                                        \"name\": \"mydb\",\n                                        \"owner_name\": \"sally\",\n                                        \"created_at\": \"2022-12-04T00:15:04Z\",\n                                        \"updated_at\": \"2022-12-04T00:15:04Z\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"9ef1c2ed-dce4-43aa-bae8-78aea636bf8a\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"endpoint_id\": \"ep-little-smoke-851426\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-04T00:21:01Z\",\n                                            \"updated_at\": \"2022-12-04T00:21:01Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"42dafb46-f861-497b-ae89-f2bec54f4966\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"endpoint_id\": \"ep-little-smoke-851426\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-04T00:21:01Z\",\n                                            \"updated_at\": \"2022-12-04T00:21:01Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete database\",\n                \"description\": \"Deletes the specified database from the branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` and `database_name` by listing the branch's databases.\\nFor related information, see [Manage databases](https://neon.tech/docs/manage/databases/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"deleteProjectBranchDatabase\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the specified database\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/DatabaseOperations\"\n                                },\n                                \"example\": {\n                                    \"database\": {\n                                        \"id\": 851537,\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"name\": \"mydb\",\n                                        \"owner_name\": \"casey\",\n                                        \"created_at\": \"2022-12-01T19:41:46Z\",\n                                        \"updated_at\": \"2022-12-01T19:41:46Z\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"9ef1c2ed-dce4-43aa-bae8-78aea636bf8a\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-raspy-hill-832856\",\n                                            \"endpoint_id\": \"ep-steep-bush-777093\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-01T19:51:41Z\",\n                                            \"updated_at\": \"2022-12-01T19:51:41Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"42dafb46-f861-497b-ae89-f2bec54f4966\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-raspy-hill-832856\",\n                                            \"endpoint_id\": \"ep-steep-bush-777093\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-01T19:51:41Z\",\n                                            \"updated_at\": \"2022-12-01T19:51:41Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"204\": {\n                        \"description\": \"Returned if the database doesn't exist or has already been deleted\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/roles\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List roles\",\n                \"description\": \"Retrieves a list of Postgres roles from the specified branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nFor related information, see [Manage roles](https://neon.tech/docs/manage/roles/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"listProjectBranchRoles\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of roles from the specified branch.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/RolesResponse\"\n                                },\n                                \"example\": {\n                                    \"roles\": [\n                                        {\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"name\": \"casey\",\n                                            \"protected\": false,\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-23T17:42:25Z\"\n                                        },\n                                        {\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"name\": \"thomas\",\n                                            \"protected\": false,\n                                            \"created_at\": \"2022-10-22T17:38:21Z\",\n                                            \"updated_at\": \"2022-10-22T17:38:21Z\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Create role\",\n                \"description\": \"Creates a Postgres role in the specified branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nFor related information, see [Manage roles](https://neon.tech/docs/manage/roles/).\\n\\nConnections established to the active compute endpoint will be dropped.\\nIf the compute endpoint is idle, the endpoint becomes active for a short period of time and is suspended afterward.\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"createProjectBranchRole\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/RoleCreateRequest\"\n                            },\n                            \"example\": {\n                                \"role\": {\n                                    \"name\": \"sally\"\n                                }\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Created a role in the specified branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/RoleOperations\"\n                                },\n                                \"example\": {\n                                    \"role\": {\n                                        \"branch_id\": \"br-noisy-sunset-458773\",\n                                        \"name\": \"sally\",\n                                        \"password\": \"Onf1AjayKwe0\",\n                                        \"protected\": false,\n                                        \"created_at\": \"2022-12-03T11:58:29Z\",\n                                        \"updated_at\": \"2022-12-03T11:58:29Z\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"2c2be371-d5ac-4db5-8b68-79f05e8bc287\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-noisy-sunset-458773\",\n                                            \"endpoint_id\": \"ep-small-pine-767857\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T11:58:29Z\",\n                                            \"updated_at\": \"2022-12-03T11:58:29Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/roles/{role_name}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"role_name\",\n                    \"in\": \"path\",\n                    \"description\": \"The role name\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve role details\",\n                \"description\": \"Retrieves details about the specified role.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nYou can obtain the `role_name` by listing the roles for a branch.\\nIn Neon, the terms \\\"role\\\" and \\\"user\\\" are synonymous.\\nFor related information, see [Manage roles](https://neon.tech/docs/manage/roles/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"getProjectBranchRole\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned details for the specified role\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/RoleResponse\"\n                                },\n                                \"example\": {\n                                    \"role\": {\n                                        \"branch_id\": \"br-noisy-sunset-458773\",\n                                        \"name\": \"casey\",\n                                        \"protected\": false,\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-23T17:42:25Z\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete role\",\n                \"description\": \"Deletes the specified Postgres role from the branch.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nYou can obtain the `role_name` by listing the roles for a branch.\\nFor related information, see [Manage roles](https://neon.tech/docs/manage/roles/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"deleteProjectBranchRole\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the specified role from the branch\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/RoleOperations\"\n                                },\n                                \"example\": {\n                                    \"role\": {\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"name\": \"thomas\",\n                                        \"protected\": false,\n                                        \"created_at\": \"2022-12-01T14:36:23Z\",\n                                        \"updated_at\": \"2022-12-01T14:36:23Z\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"db646be3-eace-4910-9f60-8150823c5cb8\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-raspy-hill-832856\",\n                                            \"endpoint_id\": \"ep-steep-bush-777093\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-01T19:48:11Z\",\n                                            \"updated_at\": \"2022-12-01T19:48:11Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"ab94cdad-7630-4943-a55e-5a0952d2e598\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-raspy-hill-832856\",\n                                            \"endpoint_id\": \"ep-steep-bush-777093\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-01T19:48:11Z\",\n                                            \"updated_at\": \"2022-12-01T19:48:11Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"204\": {\n                        \"description\": \"Returned if the role doesn't exist or has already been deleted\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/roles/{role_name}/reveal_password\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"role_name\",\n                    \"in\": \"path\",\n                    \"description\": \"The role name\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve role password\",\n                \"description\": \"Retrieves the password for the specified Postgres role, if possible.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nYou can obtain the `role_name` by listing the roles for a branch.\\nFor related information, see [Manage roles](https://neon.tech/docs/manage/roles/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"getProjectBranchRolePassword\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned password for the specified role\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/RolePasswordResponse\"\n                                },\n                                \"example\": {\n                                    \"password\": \"mypass\"\n                                }\n                            }\n                        }\n                    },\n                    \"404\": {\n                        \"description\": \"Role not found\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"412\": {\n                        \"description\": \"Storing passwords is disabled\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/roles/{role_name}/reset_password\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"role_name\",\n                    \"in\": \"path\",\n                    \"description\": \"The role name\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Reset role password\",\n                \"description\": \"Resets the password for the specified Postgres role.\\nReturns a new password and operations. The new password is ready to use when the last operation finishes.\\nThe old password remains valid until last operation finishes.\\nConnections to the compute endpoint are dropped. If idle,\\nthe compute endpoint becomes active for a short period of time.\\n\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain the `branch_id` by listing the project's branches.\\nYou can obtain the `role_name` by listing the roles for a branch.\\nFor related information, see [Manage roles](https://neon.tech/docs/manage/roles/).\\n\",\n                \"tags\": [\n                    \"Branch\"\n                ],\n                \"operationId\": \"resetProjectBranchRolePassword\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Reset the password for the specified role\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/RoleOperations\"\n                                },\n                                \"example\": {\n                                    \"role\": {\n                                        \"branch_id\": \"br-noisy-sunset-458773\",\n                                        \"name\": \"sally\",\n                                        \"password\": \"ClfD0aVuK3eK\",\n                                        \"protected\": false,\n                                        \"created_at\": \"2022-12-03T12:39:39Z\",\n                                        \"updated_at\": \"2022-12-03T12:58:18Z\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"6bef07a0-ebca-40cd-9100-7324036cfff2\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-noisy-sunset-458773\",\n                                            \"endpoint_id\": \"ep-small-pine-767857\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T12:58:18Z\",\n                                            \"updated_at\": \"2022-12-03T12:58:18Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"16b5bfca-4697-4194-a338-d2cdc9aca2af\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-noisy-sunset-458773\",\n                                            \"endpoint_id\": \"ep-small-pine-767857\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T12:58:18Z\",\n                                            \"updated_at\": \"2022-12-03T12:58:18Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/vpc_endpoints\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List VPC endpoint restrictions\",\n                \"description\": \"Lists VPC endpoint restrictions for the specified Neon project.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"listProjectVPCEndpoints\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned VPC endpoint restrictions for the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/VPCEndpointsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/vpc_endpoints/{vpc_endpoint_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"vpc_endpoint_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The VPC endpoint ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Set VPC endpoint restriction\",\n                \"description\": \"Sets or updates a VPC endpoint restriction for a Neon project.\\nWhen a VPC endpoint restriction is set, the project only accepts connections\\nfrom the specified VPC.\\nA VPC endpoint can be set as a restriction only after it is assigned to the\\nparent organization of the Neon project.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"assignProjectVPCEndpoint\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/VPCEndpointAssignment\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Configured the specified VPC endpoint as a restriction for the specified project.\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete VPC endpoint restriction\",\n                \"description\": \"Removes the specified VPC endpoint restriction from a Neon project.\\n\",\n                \"tags\": [\n                    \"Project\"\n                ],\n                \"operationId\": \"deleteProjectVPCEndpoint\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Removed the VPC endpoint restriction from the specified Neon project\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/endpoints\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create compute endpoint\",\n                \"description\": \"Creates a compute endpoint for the specified branch.\\nAn endpoint is a Neon compute instance.\\nThere is a maximum of one read-write compute endpoint per branch.\\nIf the specified branch already has a read-write compute endpoint, the operation fails.\\nA branch can have multiple read-only compute endpoints.\\n\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain `branch_id` by listing the project's branches.\\nA `branch_id` has a `br-` prefix.\\nFor supported regions and `region_id` values, see [Regions](https://neon.tech/docs/introduction/regions/).\\nFor more information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"createProjectEndpoint\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/EndpointCreateRequest\"\n                            },\n                            \"examples\": {\n                                \"required_attributes_only\": {\n                                    \"summary\": \"Required attributes only\",\n                                    \"value\": {\n                                        \"endpoint\": {\n                                            \"branch_id\": \"br-floral-mountain-251143\",\n                                            \"type\": \"read_write\"\n                                        }\n                                    }\n                                },\n                                \"with_region_attribute\": {\n                                    \"summary\": \"With region attribute\",\n                                    \"value\": {\n                                        \"endpoint\": {\n                                            \"branch_id\": \"br-floral-mountain-251143\",\n                                            \"type\": \"read_write\",\n                                            \"region_id\": \"aws-us-east-2\"\n                                        }\n                                    }\n                                },\n                                \"with_pooler_attribute\": {\n                                    \"summary\": \"With pooler attribute\",\n                                    \"value\": {\n                                        \"endpoint\": {\n                                            \"branch_id\": \"br-floral-mountain-251143\",\n                                            \"type\": \"read_write\",\n                                            \"pooler_enabled\": true\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"201\": {\n                        \"description\": \"Created a compute endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointOperations\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-shrill-thunder-454069.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-shrill-thunder-454069\",\n                                        \"project_id\": \"bitter-meadow-966132\",\n                                        \"branch_id\": \"br-proud-paper-090813\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"init\",\n                                        \"pending_state\": \"active\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"created_at\": \"2022-12-03T15:37:07Z\",\n                                        \"updated_at\": \"2022-12-03T15:37:07Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"suspend_timeout_seconds\": 10800,\n                                        \"provisioner\": \"k8s-pod\"\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"874f8bfe-f51d-4c61-85af-a29bea73e0e2\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"start_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:37:07Z\",\n                                            \"updated_at\": \"2022-12-03T15:37:07Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"get\": {\n                \"summary\": \"List compute endpoints\",\n                \"description\": \"Retrieves a list of compute endpoints for the specified project.\\nA compute endpoint is a Neon compute instance.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nFor information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"listProjectEndpoints\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned a list of endpoints for the specified project\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointsResponse\"\n                                },\n                                \"example\": {\n                                    \"endpoints\": [\n                                        {\n                                            \"host\": \"ep-little-smoke-851426.us-east-2.aws.neon.tech\",\n                                            \"creation_source\": \"console\",\n                                            \"suspend_timeout_seconds\": 10800,\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"id\": \"ep-little-smoke-851426\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-aged-salad-637688\",\n                                            \"autoscaling_limit_min_cu\": 1,\n                                            \"autoscaling_limit_max_cu\": 1,\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"type\": \"read_write\",\n                                            \"current_state\": \"idle\",\n                                            \"settings\": {\n                                                \"pg_settings\": {}\n                                            },\n                                            \"pooler_enabled\": false,\n                                            \"pooler_mode\": \"transaction\",\n                                            \"disabled\": false,\n                                            \"passwordless_access\": true,\n                                            \"last_active\": \"2022-11-23T17:00:00Z\",\n                                            \"created_at\": \"2022-11-23T17:42:25Z\",\n                                            \"updated_at\": \"2022-11-30T18:25:21Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\"\n                                        },\n                                        {\n                                            \"host\": \"ep-steep-bush-777093.us-east-2.aws.neon.tech\",\n                                            \"creation_source\": \"console\",\n                                            \"suspend_timeout_seconds\": 10800,\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"id\": \"ep-steep-bush-777093\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-raspy-hill-832856\",\n                                            \"autoscaling_limit_min_cu\": 1,\n                                            \"autoscaling_limit_max_cu\": 1,\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"type\": \"read_write\",\n                                            \"current_state\": \"idle\",\n                                            \"settings\": {\n                                                \"pg_settings\": {}\n                                            },\n                                            \"pooler_enabled\": false,\n                                            \"pooler_mode\": \"transaction\",\n                                            \"disabled\": false,\n                                            \"passwordless_access\": true,\n                                            \"last_active\": \"2022-11-30T17:00:00Z\",\n                                            \"created_at\": \"2022-11-30T17:36:57Z\",\n                                            \"updated_at\": \"2022-11-30T18:42:58Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\"\n                                        },\n                                        {\n                                            \"host\": \"ep-soft-violet-752733.us-east-2.aws.neon.tech\",\n                                            \"creation_source\": \"console\",\n                                            \"suspend_timeout_seconds\": 10800,\n                                            \"provisioner\": \"k8s-pod\",\n                                            \"id\": \"ep-soft-violet-752733\",\n                                            \"project_id\": \"shiny-wind-028834\",\n                                            \"branch_id\": \"br-sweet-breeze-497520\",\n                                            \"autoscaling_limit_min_cu\": 1,\n                                            \"autoscaling_limit_max_cu\": 1,\n                                            \"region_id\": \"aws-us-east-2\",\n                                            \"type\": \"read_write\",\n                                            \"current_state\": \"idle\",\n                                            \"settings\": {\n                                                \"pg_settings\": {}\n                                            },\n                                            \"pooler_enabled\": false,\n                                            \"pooler_mode\": \"transaction\",\n                                            \"disabled\": false,\n                                            \"passwordless_access\": true,\n                                            \"last_active\": \"2022-11-30T19:00:00Z\",\n                                            \"created_at\": \"2022-11-30T19:09:48Z\",\n                                            \"updated_at\": \"2022-11-30T19:14:51Z\",\n                                            \"proxy_host\": \"us-east-2.aws.neon.tech\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/endpoints/{endpoint_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"endpoint_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The endpoint ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve compute endpoint details\",\n                \"description\": \"Retrieves information about the specified compute endpoint.\\nA compute endpoint is a Neon compute instance.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain an `endpoint_id` by listing your project's compute endpoints.\\nAn `endpoint_id` has an `ep-` prefix.\\nFor information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"getProjectEndpoint\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the specified endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointResponse\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-little-smoke-851426.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-little-smoke-851426\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"branch_id\": \"br-aged-salad-637688\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"idle\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"last_active\": \"2022-11-23T17:00:00Z\",\n                                        \"created_at\": \"2022-11-23T17:42:25Z\",\n                                        \"updated_at\": \"2022-11-30T18:25:21Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"suspend_timeout_seconds\": 10800\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete compute endpoint\",\n                \"description\": \"Delete the specified compute endpoint.\\nA compute endpoint is a Neon compute instance.\\nDeleting a compute endpoint drops existing network connections to the compute endpoint.\\nThe deletion is completed when last operation in the chain finishes successfully.\\n\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain an `endpoint_id` by listing your project's compute endpoints.\\nAn `endpoint_id` has an `ep-` prefix.\\nFor information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"deleteProjectEndpoint\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the specified compute endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointOperations\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-steep-bush-777093.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-steep-bush-777093\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"idle\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"last_active\": \"2022-12-03T15:00:00Z\",\n                                        \"created_at\": \"2022-12-03T15:37:07Z\",\n                                        \"updated_at\": \"2022-12-03T15:49:10Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"suspend_timeout_seconds\": 10800\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"fd11748e-3c68-458f-b9e3-66d409e3eef0\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"204\": {\n                        \"description\": \"Returned if the endpoint doesn't exist or has already been deleted\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"summary\": \"Update compute endpoint\",\n                \"description\": \"Updates the specified compute endpoint.\\n\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain an `endpoint_id` and `branch_id` by listing your project's compute endpoints.\\nAn `endpoint_id` has an `ep-` prefix. A `branch_id` has a `br-` prefix.\\n For more information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\\nIf the returned list of operations is not empty, the compute endpoint is not ready to use.\\nThe client must wait for the last operation to finish before using the compute endpoint.\\nIf the compute endpoint was idle before the update, it becomes active for a short period of time,\\nand the control plane suspends it again after the update.\\n\",\n                \"operationId\": \"updateProjectEndpoint\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/EndpointUpdateRequest\"\n                            },\n                            \"example\": {\n                                \"endpoint\": {\n                                    \"suspend_timeout_seconds\": 300\n                                }\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Updated the specified compute endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointOperations\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-steep-bush-777093.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-steep-bush-777093\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"idle\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"last_active\": \"2022-12-03T15:00:00Z\",\n                                        \"created_at\": \"2022-12-03T15:37:07Z\",\n                                        \"updated_at\": \"2022-12-03T15:49:10Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"suspend_timeout_seconds\": 10800\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"3fc98ab8-f191-47b8-a427-5eb668ccc5b9\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"apply_config\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"9ffda74b-a582-4cff-b0f0-aaa8d14b8e6a\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"scheduling\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/endpoints/{endpoint_id}/start\": {\n            \"post\": {\n                \"summary\": \"Start compute endpoint\",\n                \"description\": \"Starts a compute endpoint. The compute endpoint is ready to use\\nafter the last operation in chain finishes successfully.\\n\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain an `endpoint_id` by listing your project's compute endpoints.\\nAn `endpoint_id` has an `ep-` prefix.\\nFor information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"startProjectEndpoint\",\n                \"parameters\": [\n                    {\n                        \"name\": \"project_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The Neon project ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"endpoint_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The endpoint ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Started the specified compute endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointOperations\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-steep-bush-777093.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-steep-bush-777093\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"idle\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"last_active\": \"2022-12-03T15:00:00Z\",\n                                        \"created_at\": \"2022-12-03T15:37:07Z\",\n                                        \"updated_at\": \"2022-12-03T15:49:10Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"suspend_timeout_seconds\": 10800\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"e061087e-3c99-4856-b9c8-6b7751a253af\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"start_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/endpoints/{endpoint_id}/suspend\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"endpoint_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The endpoint ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Suspend compute endpoint\",\n                \"description\": \"Suspend the specified compute endpoint\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain an `endpoint_id` by listing your project's compute endpoints.\\nAn `endpoint_id` has an `ep-` prefix.\\nFor information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"suspendProjectEndpoint\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Suspended the specified endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointOperations\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-steep-bush-777093.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-steep-bush-777093\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"idle\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"last_active\": \"2022-12-03T15:00:00Z\",\n                                        \"created_at\": \"2022-12-03T15:37:07Z\",\n                                        \"updated_at\": \"2022-12-03T15:49:10Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"suspend_timeout_seconds\": 10800\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"e061087e-3c99-4856-b9c8-6b7751a253af\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/endpoints/{endpoint_id}/restart\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"endpoint_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The endpoint ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Restart compute endpoint\",\n                \"description\": \"Restart the specified compute endpoint: suspend immediately followed by start operations.\\nYou can obtain a `project_id` by listing the projects for your Neon account.\\nYou can obtain an `endpoint_id` by listing your project's compute endpoints.\\nAn `endpoint_id` has an `ep-` prefix.\\nFor information about compute endpoints, see [Manage computes](https://neon.tech/docs/manage/endpoints/).\\n\",\n                \"tags\": [\n                    \"Endpoint\"\n                ],\n                \"operationId\": \"restartProjectEndpoint\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Restarted endpoint\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EndpointOperations\"\n                                },\n                                \"example\": {\n                                    \"endpoint\": {\n                                        \"host\": \"ep-steep-bush-777093.us-east-2.aws.neon.tech\",\n                                        \"id\": \"ep-steep-bush-777093\",\n                                        \"project_id\": \"shiny-wind-028834\",\n                                        \"branch_id\": \"br-raspy-hill-832856\",\n                                        \"autoscaling_limit_min_cu\": 1,\n                                        \"autoscaling_limit_max_cu\": 1,\n                                        \"region_id\": \"aws-us-east-2\",\n                                        \"type\": \"read_write\",\n                                        \"current_state\": \"idle\",\n                                        \"settings\": {\n                                            \"pg_settings\": {}\n                                        },\n                                        \"pooler_enabled\": false,\n                                        \"pooler_mode\": \"transaction\",\n                                        \"disabled\": false,\n                                        \"passwordless_access\": true,\n                                        \"last_active\": \"2022-12-03T15:00:00Z\",\n                                        \"created_at\": \"2022-12-03T15:37:07Z\",\n                                        \"updated_at\": \"2022-12-03T15:49:10Z\",\n                                        \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                                        \"creation_source\": \"console\",\n                                        \"provisioner\": \"k8s-pod\",\n                                        \"suspend_timeout_seconds\": 10800\n                                    },\n                                    \"operations\": [\n                                        {\n                                            \"id\": \"e061087e-3c99-4856-b9c8-6b7751a253af\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"suspend_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        },\n                                        {\n                                            \"id\": \"e061087e-3c99-4856-b9c8-6b7751a253af\",\n                                            \"project_id\": \"bitter-meadow-966132\",\n                                            \"branch_id\": \"br-proud-paper-090813\",\n                                            \"endpoint_id\": \"ep-shrill-thunder-454069\",\n                                            \"action\": \"start_compute\",\n                                            \"status\": \"running\",\n                                            \"failures_count\": 0,\n                                            \"created_at\": \"2022-12-03T15:51:06Z\",\n                                            \"updated_at\": \"2022-12-03T15:51:06Z\",\n                                            \"total_duration_ms\": 100\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/consumption_history/account\": {\n            \"get\": {\n                \"summary\": \"Retrieve account consumption metrics (legacy plans)\",\n                \"description\": \"Retrieves consumption metrics for Scale and Enterprise plan accounts, and for legacy Scale, Business, and Enterprise plan accounts.\\nConsumption history begins at the time the account was upgraded to a supported plan.\\n\",\n                \"tags\": [\n                    \"Consumption\"\n                ],\n                \"operationId\": \"getConsumptionHistoryPerAccount\",\n                \"parameters\": [\n                    {\n                        \"name\": \"from\",\n                        \"description\": \"Specify the start `date-time` for the consumption period.\\nThe `date-time` value is rounded according to the specified `granularity`.\\nFor example, `2024-03-15T15:30:00Z` for `daily` granularity will be rounded to `2024-03-15T00:00:00Z`.\\nThe specified `date-time` value must respect the specified granularity:\\n- For `hourly`, consumption metrics are limited to the last 168 hours.\\n- For `daily`, consumption metrics are limited to the last 60 days.\\n- For `monthly`, consumption metrics are limited to the past year.\\n\\nThe consumption history is available starting from `March 1, 2024, at 00:00:00 UTC`.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"to\",\n                        \"description\": \"Specify the end `date-time` for the consumption period.\\nThe `date-time` value is rounded according to the specified granularity.\\nFor example, `2024-03-15T15:30:00Z` for `daily` granularity will be rounded to `2024-03-15T00:00:00Z`.\\nThe specified `date-time` value must respect the specified granularity:\\n- For `hourly`, consumption metrics are limited to the last 168 hours.\\n- For `daily`, consumption metrics are limited to the last 60 days.\\n- For `monthly`, consumption metrics are limited to the past year.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"granularity\",\n                        \"description\": \"Specify the granularity of consumption metrics.\\nHourly, daily, and monthly metrics are available for the last 168 hours, 60 days,\\nand 1 year, respectively.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryGranularity\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"org_id\",\n                        \"description\": \"Specify the organization for which the consumption metrics should be returned.\\nIf this parameter is not provided, the endpoint will return the metrics for the\\nauthenticated user's account.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"include_v1_metrics\",\n                        \"description\": \"The field is deprecated. Please use `metrics` instead.\\nIf `metrics` is specified, this field is ignored.\\nInclude metrics utilized in previous pricing models.\\n- **data_storage_bytes_hour**: The sum of the maximum observed storage values for each hour\\n  for each project, which never decreases.\\n\",\n                        \"in\": \"query\",\n                        \"deprecated\": true,\n                        \"schema\": {\n                            \"type\": \"boolean\"\n                        }\n                    },\n                    {\n                        \"name\": \"metrics\",\n                        \"description\": \"Specify a list of metrics to include in the response.\\nIf omitted, active_time, compute_time, written_data, synthetic_storage_size are returned.\\nPossible values:\\n- `active_time_seconds`\\n- `compute_time_seconds`\\n- `written_data_bytes`\\n- `synthetic_storage_size_bytes`\\n- `data_storage_bytes_hour`\\n\\nA list of metrics can be specified as an array of parameter values or as a comma-separated list in a single parameter value.\\n- As an array of parameter values: `metrics=cpu_seconds&metrics=ram_bytes`\\n- As a comma-separated list in a single parameter value: `metrics=cpu_seconds,ram_bytes`\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryQueryMetrics\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned consumption metrics for the Neon account\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ConsumptionHistoryPerAccountResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"403\": {\n                        \"description\": \"This endpoint is not available. It is only supported for Scale, Business, and Enterprise plan accounts.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"404\": {\n                        \"description\": \"Account is not a member of the organization specified by `org_id`.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"406\": {\n                        \"description\": \"The specified `date-time` range is outside the boundaries of the specified `granularity`.\\nAdjust your `from` and `to` values or select a different `granularity`.\\n\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"429\": {\n                        \"description\": \"Too many requests\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/consumption_history/projects\": {\n            \"get\": {\n                \"summary\": \"Retrieve project consumption metrics (legacy plans)\",\n                \"description\": \"Retrieves consumption metrics for Scale, Business, and Enterprise plan projects. History begins at the time of upgrade.\\nResults are ordered by time in ascending order (oldest to newest).\\nIssuing a call to this API does not wake a project's compute endpoint.\\n\",\n                \"tags\": [\n                    \"Consumption\"\n                ],\n                \"operationId\": \"getConsumptionHistoryPerProject\",\n                \"parameters\": [\n                    {\n                        \"name\": \"cursor\",\n                        \"description\": \"Specify the cursor value from the previous response to get the next batch of projects.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"limit\",\n                        \"description\": \"Specify a value from 1 to 100 to limit number of projects in the response.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"default\": 10,\n                            \"maximum\": 100\n                        }\n                    },\n                    {\n                        \"name\": \"project_ids\",\n                        \"description\": \"Specify a list of project IDs to filter the response.\\nIf omitted, the response will contain all projects.\\nA list of project IDs can be specified as an array of parameter values or as a comma-separated list in a single parameter value.\\n- As an array of parameter values: `project_ids=cold-poetry-09157238%20&project_ids=quiet-snow-71788278`\\n- As a comma-separated list in a single parameter value: `project_ids=cold-poetry-09157238,quiet-snow-71788278`\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                                \"pattern\": \"^([a-z0-9-]{1,60}(,[a-z0-9-]{1,60}){0,99})?$\",\n                                \"type\": \"string\"\n                            },\n                            \"minItems\": 0,\n                            \"maxItems\": 100\n                        }\n                    },\n                    {\n                        \"name\": \"from\",\n                        \"description\": \"Specify the start `date-time` for the consumption period.\\nThe `date-time` value is rounded according to the specified `granularity`.\\nFor example, `2024-03-15T15:30:00Z` for `daily` granularity will be rounded to `2024-03-15T00:00:00Z`.\\nThe specified `date-time` value must respect the specified `granularity`:\\n- For `hourly`, consumption metrics are limited to the last 168 hours.\\n- For `daily`, consumption metrics are limited to the last 60 days.\\n- For `monthly`, consumption metrics are limited to the last year.\\n\\nThe consumption history is available starting from `March 1, 2024, at 00:00:00 UTC`.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"to\",\n                        \"description\": \"Specify the end `date-time` for the consumption period.\\nThe `date-time` value is rounded according to the specified granularity.\\nFor example, `2024-03-15T15:30:00Z` for `daily` granularity will be rounded to `2024-03-15T00:00:00Z`.\\nThe specified `date-time` value must respect the specified `granularity`:\\n- For `hourly`, consumption metrics are limited to the last 168 hours.\\n- For `daily`, consumption metrics are limited to the last 60 days.\\n- For `monthly`, consumption metrics are limited to the last year.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"granularity\",\n                        \"description\": \"Specify the granularity of consumption metrics.\\nHourly, daily, and monthly metrics are available for the last 168 hours, 60 days,\\nand 1 year, respectively.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryGranularity\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"org_id\",\n                        \"description\": \"Specify the organization for which the project consumption metrics should be returned.\\nIf this parameter is not provided, the endpoint will return the metrics for the\\nauthenticated user's projects.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    },\n                    {\n                        \"name\": \"include_v1_metrics\",\n                        \"description\": \"The field is deprecated. Please use `metrics` instead.\\nIf `metrics` is specified, this field is ignored.\\nInclude metrics utilized in previous pricing models.\\n- **data_storage_bytes_hour**: The sum of the maximum observed storage values for each hour,\\n  which never decreases.\\n\",\n                        \"in\": \"query\",\n                        \"deprecated\": true,\n                        \"schema\": {\n                            \"type\": \"boolean\"\n                        }\n                    },\n                    {\n                        \"name\": \"metrics\",\n                        \"description\": \"Specify a list of metrics to include in the response.\\nIf omitted, active_time, compute_time, written_data, synthetic_storage_size are returned.\\nPossible values:\\n- `active_time_seconds`\\n- `compute_time_seconds`\\n- `written_data_bytes`\\n- `synthetic_storage_size_bytes`\\n- `data_storage_bytes_hour`\\n- `logical_size_bytes`\\n- `logical_size_bytes_hour`\\n\\nA list of metrics can be specified as an array of parameter values or as a comma-separated list in a single parameter value.\\n- As an array of parameter values: `metrics=cpu_seconds&metrics=ram_bytes`\\n- As a comma-separated list in a single parameter value: `metrics=cpu_seconds,ram_bytes`\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryQueryMetrics\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned project consumption metrics for the Neon account\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerProjectResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/PaginationResponse\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"403\": {\n                        \"description\": \"This endpoint is not available. It is only supported with Scale, Business, and Enterprise plan accounts.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"404\": {\n                        \"description\": \"Account is not a member of the organization specified by `org_id`.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"406\": {\n                        \"description\": \"The specified `date-time` range is outside the boundaries of the specified `granularity`.\\nAdjust your `from` and `to` values or select a different `granularity`.\\n\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"429\": {\n                        \"description\": \"Too many requests\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/consumption_history/v2/projects\": {\n            \"get\": {\n                \"summary\": \"Retrieve project consumption metrics\",\n                \"description\": \"Retrieves consumption metrics for Launch, Scale, Agent, and Enterprise plan projects. History begins at the time of upgrade.\\nResults are ordered by time in ascending order (oldest to newest).\\nIssuing a call to this API does not wake a project's compute endpoint.\\n\",\n                \"tags\": [\n                    \"Consumption\"\n                ],\n                \"operationId\": \"getConsumptionHistoryPerProjectV2\",\n                \"parameters\": [\n                    {\n                        \"name\": \"cursor\",\n                        \"description\": \"Specify the cursor value from the previous response to get the next batch of projects.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"limit\",\n                        \"description\": \"Specify a value from 1 to 100 to limit number of projects in the response.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"default\": 10,\n                            \"maximum\": 100\n                        }\n                    },\n                    {\n                        \"name\": \"project_ids\",\n                        \"description\": \"Specify a list of project IDs to filter the response.\\nIf omitted, the response will contain all projects.\\nA list of project IDs can be specified as an array of parameter values or as a comma-separated list in a single parameter value.\\n- As an array of parameter values: `project_ids=cold-poetry-09157238%20&project_ids=quiet-snow-71788278`\\n- As a comma-separated list in a single parameter value: `project_ids=cold-poetry-09157238,quiet-snow-71788278`\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                                \"pattern\": \"^([a-z0-9-]{1,60}(,[a-z0-9-]{1,60}){0,99})?$\",\n                                \"type\": \"string\"\n                            },\n                            \"minItems\": 0,\n                            \"maxItems\": 100\n                        }\n                    },\n                    {\n                        \"name\": \"from\",\n                        \"description\": \"Specify the start `date-time` for the consumption period.\\nThe `date-time` value is rounded according to the specified `granularity`.\\nFor example, `2024-03-15T15:30:00Z` for `daily` granularity will be rounded to `2024-03-15T00:00:00Z`.\\nThe specified `date-time` value must respect the specified `granularity`:\\n- For `hourly`, consumption metrics are limited to the last 168 hours.\\n- For `daily`, consumption metrics are limited to the last 60 days.\\n- For `monthly`, consumption metrics are limited to the last year.\\n\\nThe consumption history is available starting from `March 1, 2024, at 00:00:00 UTC`.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"to\",\n                        \"description\": \"Specify the end `date-time` for the consumption period.\\nThe `date-time` value is rounded according to the specified granularity.\\nFor example, `2024-03-15T15:30:00Z` for `daily` granularity will be rounded to `2024-03-15T00:00:00Z`.\\nThe specified `date-time` value must respect the specified `granularity`:\\n- For `hourly`, consumption metrics are limited to the last 168 hours.\\n- For `daily`, consumption metrics are limited to the last 60 days.\\n- For `monthly`, consumption metrics are limited to the last year.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"granularity\",\n                        \"description\": \"Specify the granularity of consumption metrics.\\nHourly, daily, and monthly metrics are available for the last 168 hours, 60 days,\\nand 1 year, respectively.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryGranularity\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"org_id\",\n                        \"description\": \"Specify the organization for which the project consumption metrics should be returned.\\nIf this parameter is not provided, the endpoint will return the metrics for the\\nauthenticated user's projects.\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        },\n                        \"required\": true\n                    },\n                    {\n                        \"name\": \"metrics\",\n                        \"description\": \"Specify a list of metrics to include in the response.\\nPossible values:\\n- `compute_unit_seconds`\\n- `root_branch_bytes_month`\\n- `child_branch_bytes_month`\\n- `instant_restore_bytes_month`\\n- `public_network_transfer_bytes`\\n- `private_network_transfer_bytes`\\n- `extra_branches_month`\\n\\nA list of metrics can be specified as an array of parameter values or as a comma-separated list in a single parameter value.\\n- As an array of parameter values: `metrics=compute_unit_seconds&metrics=extra_branches_month`\\n- As a comma-separated list in a single parameter value: `metrics=compute_unit_seconds,extra_branches_month`\\n\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryQueryMetrics\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned project consumption metrics for the Neon account.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerProjectV2Response\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/PaginationResponse\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"403\": {\n                        \"description\": \"This endpoint is not available. It is only supported with Scale, Business, and Enterprise plan accounts.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"404\": {\n                        \"description\": \"Account is not a member of the organization specified by `org_id`.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"406\": {\n                        \"description\": \"The specified `date-time` range is outside the boundaries of the specified `granularity`.\\nAdjust your `from` and `to` values or select a different `granularity`.\\n\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"429\": {\n                        \"description\": \"Too many requests\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/GeneralError\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve organization details\",\n                \"description\": \"Retrieves information about the specified organization.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"getOrganization\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the organization\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/Organization\"\n                                },\n                                \"example\": {\n                                    \"id\": \"my-organization-morning-bread-81040908\",\n                                    \"name\": \"my-organization\",\n                                    \"handle\": \"my-organization-my-organization-morning-bread-81040908\",\n                                    \"plan\": \"scale\",\n                                    \"managed_by\": \"console\",\n                                    \"created_at\": \"2024-02-23T17:42:25Z\",\n                                    \"updated_at\": \"2024-02-26T20:41:25Z\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/api_keys\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List organization API keys\",\n                \"description\": \"Retrieves the API keys for the specified organization.\\nThe response does not include API key tokens. A token is only provided when creating an API key.\\nAPI keys can also be managed in the Neon Console.\\nFor more information, see [Manage API keys](https://neon.tech/docs/manage/api-keys/).\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"listOrgApiKeys\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the API keys for the specified organization\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"$ref\": \"#/components/schemas/OrgApiKeysListResponseItem\"\n                                    },\n                                    \"example\": [\n                                        {\n                                            \"id\": 165432,\n                                            \"name\": \"orgkey_1\",\n                                            \"created_at\": \"2022-11-15T20:13:35Z\",\n                                            \"created_by\": {\n                                                \"id\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                                                \"name\": \"John Smith\",\n                                                \"image\": \"http://link.to.image\"\n                                            },\n                                            \"last_used_at\": \"2022-11-15T20:22:51Z\",\n                                            \"last_used_from_addr\": \"192.0.2.255\"\n                                        },\n                                        {\n                                            \"id\": 165433,\n                                            \"name\": \"orgkey_2\",\n                                            \"created_at\": \"2022-11-15T20:12:36Z\",\n                                            \"created_by\": {\n                                                \"id\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                                                \"name\": \"John Smith\",\n                                                \"image\": \"http://link.to.image\"\n                                            },\n                                            \"last_used_at\": \"2022-11-15T20:15:04Z\",\n                                            \"last_used_from_addr\": \"192.0.2.255\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Create organization API key\",\n                \"description\": \"Creates an API key for the specified organization.\\nThe `key_name` is a user-specified name for the key.\\nThis method returns an `id` and `key`. The `key` is a randomly generated, 64-bit token required to access the Neon API.\\nAPI keys can also be managed in the Neon Console.\\nSee [Manage API keys](https://neon.tech/docs/manage/api-keys/).\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"createOrgApiKey\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/OrgApiKeyCreateRequest\"\n                            },\n                            \"example\": {\n                                \"key_name\": \"orgkey\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Created an organization API key\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OrgApiKeyCreateResponse\"\n                                },\n                                \"example\": {\n                                    \"id\": 165434,\n                                    \"key\": \"9v1faketcjbl4sn1013keyd43n2a8qlfakeog8yvp40hx16keyjo1bpds4y2dfms3\",\n                                    \"name\": \"orgkey\",\n                                    \"created_at\": \"2022-11-15T20:13:35Z\",\n                                    \"created_by\": \"629982cc-de05-43db-ae16-28f2399c4910\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/api_keys/{key_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"delete\": {\n                \"summary\": \"Revoke organization API key\",\n                \"description\": \"Revokes the specified organization API key.\\nAn API key that is no longer needed can be revoked.\\nThis action cannot be reversed.\\nYou can obtain `key_id` values by listing the API keys for an organization.\\nAPI keys can also be managed in the Neon Console.\\nSee [Manage API keys](https://neon.tech/docs/manage/api-keys/).\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"revokeOrgApiKey\",\n                \"parameters\": [\n                    {\n                        \"name\": \"key_id\",\n                        \"in\": \"path\",\n                        \"description\": \"The API key ID\",\n                        \"required\": true,\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"format\": \"int64\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Revoked the specified organization API key\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OrgApiKeyRevokeResponse\"\n                                },\n                                \"example\": {\n                                    \"id\": 165435,\n                                    \"name\": \"orgkey\",\n                                    \"created_at\": \"2022-11-15T20:13:35Z\",\n                                    \"created_by\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                                    \"last_used_at\": \"2022-11-15T20:15:04Z\",\n                                    \"last_used_from_addr\": \"192.0.2.255\",\n                                    \"revoked\": true\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/members\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve organization members details\",\n                \"description\": \"Retrieves a paginated list of members for the specified organization.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"getOrganizationMembers\",\n                \"parameters\": [\n                    {\n                        \"name\": \"sort_by\",\n                        \"description\": \"Sort the members by the specified field. Defaults to `joined_at`.\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"string\",\n                            \"default\": \"joined_at\",\n                            \"enum\": [\n                                \"email\",\n                                \"role\",\n                                \"joined_at\"\n                            ]\n                        }\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/CursorParam\"\n                    },\n                    {\n                        \"$ref\": \"#/components/parameters/SortOrderParam\"\n                    },\n                    {\n                        \"name\": \"limit\",\n                        \"description\": \"The maximum number of members to return in the response\",\n                        \"in\": \"query\",\n                        \"schema\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"maximum\": 500\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about organization members\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"allOf\": [\n                                        {\n                                            \"$ref\": \"#/components/schemas/OrganizationMembersResponse\"\n                                        },\n                                        {\n                                            \"$ref\": \"#/components/schemas/CursorPaginationResponse\"\n                                        }\n                                    ]\n                                },\n                                \"example\": {\n                                    \"members\": [\n                                        {\n                                            \"member\": {\n                                                \"id\": \"d57833f2-d308-4ede-9d2e-468d9d013d1b\",\n                                                \"user_id\": \"b107d689-6dd2-4c9a-8b9e-0b25e457cf56\",\n                                                \"org_id\": \"my-organization-morning-bread-81040908\",\n                                                \"role\": \"admin\",\n                                                \"joined_at\": \"2024-02-23T17:42:25Z\"\n                                            },\n                                            \"user\": {\n                                                \"email\": \"user1@email.com\"\n                                            }\n                                        },\n                                        {\n                                            \"member\": {\n                                                \"id\": \"5fee13ac-957b-40cd-8de0-4d494cc28e28\",\n                                                \"user_id\": \"6df052ac-ca9a-4321-8963-b6507b2d7dee\",\n                                                \"org_id\": \"my-organization-morning-bread-81040908\",\n                                                \"role\": \"member\",\n                                                \"joined_at\": \"2024-02-21T16:42:25Z\"\n                                            },\n                                            \"user\": {\n                                                \"email\": \"user2@email.com\"\n                                            }\n                                        }\n                                    ],\n                                    \"pagination\": {\n                                        \"next\": \"eyJtZW1iZXJfaWQiOiI1ZmVlMTNhYy05NTdiLTQwY2QtOGRlMC00ZDQ5NGNjMjhlMjgiLCJzb3J0X2J5Ijoiam9pbmVkX2F0In0=\",\n                                        \"sort_by\": \"joined_at\",\n                                        \"sort_order\": \"desc\"\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/members/{member_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"member_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization member ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve organization member details\",\n                \"description\": \"Retrieves information about the specified organization member.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"getOrganizationMember\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the organization member\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/Member\"\n                                },\n                                \"example\": {\n                                    \"id\": \"d57833f2-d308-4ede-9d2e-468d9d013d1b\",\n                                    \"user_id\": \"b107d689-6dd2-4c9a-8b9e-0b25e457cf56\",\n                                    \"org_id\": \"my-organization-morning-bread-81040908\",\n                                    \"role\": \"admin\",\n                                    \"joined_at\": \"2024-02-23T17:42:25Z\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update role for organization member\",\n                \"description\": \"Only an admin can perform this action.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"updateOrganizationMember\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/OrganizationMemberUpdateRequest\"\n                            },\n                            \"example\": {\n                                \"role\": \"admin\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The updated organization member\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/Member\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Remove member from the organization\",\n                \"description\": \"Remove member from the organization.\\nOnly an admin of the organization can perform this action.\\nIf another admin is being removed, it will not be allows in case it is the only admin left in the organization.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"removeOrganizationMember\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Removed organization member\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EmptyResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/invitations\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve organization invitation details\",\n                \"description\": \"Retrieves information about extended invitations for the specified organization\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"getOrganizationInvitations\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the organization invitations\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OrganizationInvitationsResponse\"\n                                },\n                                \"example\": {\n                                    \"invitations\": [\n                                        {\n                                            \"id\": \"db8faf32-b07f-4b0f-94c8-5c288909f5d3\",\n                                            \"email\": \"invited1@email.com\",\n                                            \"org_id\": \"my-organization-morning-bread-81040908\",\n                                            \"invited_by\": \"some@email.com\",\n                                            \"role\": \"admin\",\n                                            \"invited_at\": \"2024-02-23T17:42:25Z\"\n                                        },\n                                        {\n                                            \"id\": \"c52f0d22-ebd9-4708-ae44-2872cae49a83\",\n                                            \"email\": \"invited2@email.com\",\n                                            \"org_id\": \"my-organization-morning-bread-81040908\",\n                                            \"invited_by\": \"some@email.com\",\n                                            \"role\": \"member\",\n                                            \"invited_at\": \"2024-02-23T12:42:25Z\"\n                                        }\n                                    ]\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Create organization invitations\",\n                \"description\": \"Creates invitations for a specific organization.\\nIf the invited user has an existing account, they automatically join as a member.\\nIf they don't yet have an account, they are invited to create one, after which they become a member.\\nEach invited user receives an email notification.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"createOrganizationInvitations\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/OrganizationInvitesCreateRequest\"\n                            },\n                            \"example\": {\n                                \"invitations\": [\n                                    {\n                                        \"email\": \"invited-user@email.com\",\n                                        \"role\": \"member\"\n                                    }\n                                ]\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The created organization invitation\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OrganizationInvitationsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{source_org_id}/projects/transfer\": {\n            \"parameters\": [\n                {\n                    \"name\": \"source_org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID (source org, which currently owns the project)\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Transfer projects between organizations\",\n                \"description\": \"Transfers selected projects, identified by their IDs, from your organization to another specified organization.\\n\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/TransferProjectsToOrganizationRequest\"\n                            }\n                        }\n                    }\n                },\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"transferProjectsFromOrgToOrg\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Projects successfully transferred from organization to organization\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EmptyResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"406\": {\n                        \"description\": \"Transfer failed - the target organization has too many projects or its plan is incompatible with the source organization. Reduce projects or upgrade the organization.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/LimitsUnsatisfiedResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"422\": {\n                        \"description\": \"One or more of the provided project IDs have GitHub or Vercel integrations installed. Transferring integration projects is currently not supported\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectsWithIntegrationResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/vpc/vpc_endpoints\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List VPC endpoints across all regions\",\n                \"description\": \"Retrieves the list of VPC endpoints for the specified Neon organization across all regions.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"listOrganizationVPCEndpointsAllRegions\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The list of configured VPC endpoint IDs for the specified organization across all regions\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/VPCEndpointsWithRegionResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/vpc/region/{region_id}/vpc_endpoints\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"region_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon region ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List VPC endpoints\",\n                \"description\": \"Retrieves the list of VPC endpoints for the specified Neon organization.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"listOrganizationVPCEndpoints\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The list of configured VPC endpoint IDs for the specified organization\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/VPCEndpointsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/organizations/{org_id}/vpc/region/{region_id}/vpc_endpoints/{vpc_endpoint_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"org_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon organization ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"region_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon region ID.\\nAzure regions are currently not supported.\\n\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                },\n                {\n                    \"name\": \"vpc_endpoint_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The VPC endpoint ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"Retrieve VPC endpoint details\",\n                \"description\": \"Retrieves the current state and configuration details of a specified VPC endpoint.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"getOrganizationVPCEndpointDetails\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned the current status and configuration details of the specified VPC endpoint.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/VPCEndpointDetails\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"post\": {\n                \"summary\": \"Assign or update VPC endpoint\",\n                \"description\": \"Assigns a VPC endpoint to a Neon organization or updates its existing assignment.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"assignOrganizationVPCEndpoint\",\n                \"requestBody\": {\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/VPCEndpointAssignment\"\n                            }\n                        }\n                    },\n                    \"required\": true\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Assigned the VPC endpoint to the specified Neon organization\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"delete\": {\n                \"summary\": \"Delete VPC endpoint\",\n                \"description\": \"Deletes the VPC endpoint from the specified Neon organization.\\nIf you delete a VPC endpoint from a Neon organization, that VPC endpoint cannot\\nbe added back to the Neon organization.\\n\",\n                \"tags\": [\n                    \"Organizations\"\n                ],\n                \"operationId\": \"deleteOrganizationVPCEndpoint\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Deleted the VPC endpoint from the specified Neon organization\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/regions\": {\n            \"get\": {\n                \"summary\": \"List supported regions\",\n                \"description\": \"Lists supported Neon regions\\n\",\n                \"tags\": [\n                    \"Region\"\n                ],\n                \"operationId\": \"getActiveRegions\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"The list of active regions\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ActiveRegionsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/users/me\": {\n            \"get\": {\n                \"summary\": \"Retrieve current user details\",\n                \"description\": \"Retrieves information about the current Neon user account.\\n\",\n                \"tags\": [\n                    \"Users\"\n                ],\n                \"operationId\": \"getCurrentUserInfo\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the current user\\n\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/CurrentUserInfoResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/users/me/organizations\": {\n            \"get\": {\n                \"summary\": \"Retrieve current user organizations list\",\n                \"description\": \"Retrieves information about the current Neon user's organizations\\n\",\n                \"operationId\": \"getCurrentUserOrganizations\",\n                \"tags\": [\n                    \"Users\",\n                    \"Organizations\"\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned information about the current user organizations\\n\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OrganizationsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/users/me/projects/transfer\": {\n            \"post\": {\n                \"summary\": \"Transfer projects from personal account to organization\",\n                \"description\": \"Transfers selected projects, identified by their IDs, from your personal account to a specified organization.\\n\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/TransferProjectsToOrganizationRequest\"\n                            }\n                        }\n                    }\n                },\n                \"tags\": [\n                    \"Users\"\n                ],\n                \"operationId\": \"transferProjectsFromUserToOrg\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Projects successfully transferred from personal account to organization\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/EmptyResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"406\": {\n                        \"description\": \"Transfer failed - the target organization has too many projects or its plan is incompatible with the source account. Reduce the number of projects or upgrade the target organization to increase its capacity.\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/LimitsUnsatisfiedResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"422\": {\n                        \"description\": \"One or more of the provided project IDs have GitHub or Vercel integrations installed. Transferring integration projects is currently not supported\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/ProjectsWithIntegrationResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/auth\": {\n            \"get\": {\n                \"summary\": \"Get request authentication details\",\n                \"description\": \"Returns auth information about the passed credentials. It can refer to an API key, Bearer token or OAuth session.\\n\",\n                \"tags\": [\n                    \"Users\"\n                ],\n                \"operationId\": \"getAuthDetails\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Returned auth information about the current auth entity\\n\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/AuthDetailsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/snapshot\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"summary\": \"Create snapshot\",\n                \"description\": \"Create a snapshot from the specified branch using the provided parameters.\\nThis endpoint may initiate an asynchronous operation.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"createSnapshot\",\n                \"parameters\": [\n                    {\n                        \"name\": \"lsn\",\n                        \"in\": \"query\",\n                        \"description\": \"The target Log Sequence Number (LSN) to take the snapshot from.\\nMust fall within the restore window. Cannot be used with `timestamp`\\n\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"timestamp\",\n                        \"in\": \"query\",\n                        \"description\": \"The target timestamp for the snapshot. Must fall within the restore window.\\nUse ISO 8601 format (e.g. 2025-08-05T22:00:00Z). Cannot be used with `lsn`.\\n\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"name\",\n                        \"in\": \"query\",\n                        \"description\": \"A name for the snapshot.\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    {\n                        \"name\": \"expires_at\",\n                        \"in\": \"query\",\n                        \"description\": \"The time at which the snapshot will be automatically deleted.\\nUse ISO 8601 format (e.g. 2025-08-05T22:00:00Z).\\n\",\n                        \"required\": false,\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                ],\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Successfully created the snapshot\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"required\": [\n                                        \"snapshot\",\n                                        \"operations\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                        \"snapshot\": {\n                                            \"$ref\": \"#/components/schemas/Snapshot\"\n                                        },\n                                        \"operations\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"$ref\": \"#/components/schemas/Operation\"\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/snapshots\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"List project snapshots\",\n                \"description\": \"List the snapshots for the specified project.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"listSnapshots\",\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Projects snapshots\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"required\": [\n                                        \"snapshots\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                        \"snapshots\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                                \"$ref\": \"#/components/schemas/Snapshot\"\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/snapshots/{snapshot_id}\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"snapshot_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The snapshot ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"delete\": {\n                \"summary\": \"Delete snapshot\",\n                \"description\": \"Delete the specified snapshot.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"deleteSnapshot\",\n                \"responses\": {\n                    \"202\": {\n                        \"description\": \"OK\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"patch\": {\n                \"summary\": \"Update snapshot\",\n                \"description\": \"Update the specified snapshot.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"updateSnapshot\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/SnapshotUpdateRequest\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"description\": \"Successfully updated the snapshot\",\n                        \"content\": {\n                            \"application/json\": {\n                                \"schema\": {\n                                    \"required\": [\n                                        \"snapshot\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                        \"snapshot\": {\n                                            \"$ref\": \"#/components/schemas/Snapshot\"\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/snapshots/{snapshot_id}/restore\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"snapshot_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The snapshot ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"post\": {\n                \"x-stability-level\": \"beta\",\n                \"summary\": \"Restore snapshot\",\n                \"description\": \"Restore the specified snapshot to a new branch and optionally finalize the restore operation.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"parameters\": [\n                    {\n                        \"name\": \"name\",\n                        \"in\": \"query\",\n                        \"description\": \"DEPRECATED. Use the `name` field in the request body instead.\\nA name for the newly restored branch. If omitted, a default name will be generated.\\n\",\n                        \"required\": false,\n                        \"deprecated\": true,\n                        \"x-sunset\": \"2025-11-29\",\n                        \"schema\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                ],\n                \"requestBody\": {\n                    \"required\": false,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"name\": {\n                                        \"description\": \"A name for the newly restored branch.\\nIf omitted, a default name will be generated.\\n\",\n                                        \"type\": \"string\"\n                                    },\n                                    \"target_branch_id\": {\n                                        \"description\": \"The ID of the branch to restore the snapshot into.\\nIf not specified, the branch from which the snapshot was originally\\ncreated (`snapshot.source_branch_id`) will be used.\\n\",\n                                        \"type\": \"string\"\n                                    },\n                                    \"finalize_restore\": {\n                                        \"description\": \"Set to `true` to finalize the restore operation immediately.\\nThis will complete the restore and move any associated computes to the new branch,\\nsimilar to the `finalizeRestoreBranch` operation.\\nDefaults to `false` to allow previewing the restored snapshot data first.\\n\",\n                                        \"type\": \"boolean\",\n                                        \"default\": false\n                                    }\n                                }\n                            }\n                        }\n                    }\n                },\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"restoreSnapshot\",\n                \"responses\": {\n                    \"200\": {\n                        \"$ref\": \"#/components/responses/RestoredSnapshot\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        },\n        \"/projects/{project_id}/branches/{branch_id}/backup_schedule\": {\n            \"parameters\": [\n                {\n                    \"name\": \"project_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The Neon project ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                },\n                {\n                    \"name\": \"branch_id\",\n                    \"in\": \"path\",\n                    \"description\": \"The branch ID\",\n                    \"required\": true,\n                    \"schema\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    }\n                }\n            ],\n            \"get\": {\n                \"summary\": \"View backup schedule\",\n                \"description\": \"View the backup schedule for the specified branch.\\n\\n**Note**: This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"getSnapshotSchedule\",\n                \"responses\": {\n                    \"200\": {\n                        \"$ref\": \"#/components/responses/SnapshotSchedule\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            },\n            \"put\": {\n                \"summary\": \"Update backup schedule\",\n                \"description\": \"Update the backup schedule for the specified branch.\\n\\n**Note** : This endpoint is currently in Beta.\\n\",\n                \"tags\": [\n                    \"Snapshot\"\n                ],\n                \"operationId\": \"setSnapshotSchedule\",\n                \"requestBody\": {\n                    \"required\": true,\n                    \"content\": {\n                        \"application/json\": {\n                            \"schema\": {\n                                \"$ref\": \"#/components/schemas/BackupSchedule\"\n                            }\n                        }\n                    }\n                },\n                \"responses\": {\n                    \"200\": {\n                        \"$ref\": \"#/components/responses/EmptyResponse\"\n                    },\n                    \"default\": {\n                        \"$ref\": \"#/components/responses/GeneralError\"\n                    }\n                }\n            }\n        }\n    },\n    \"components\": {\n        \"responses\": {\n            \"EmptyResponse\": {\n                \"description\": \"Empty response\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/EmptyResponse\"\n                        }\n                    }\n                }\n            },\n            \"ListOperations\": {\n                \"description\": \"Returned a list of operations\\n\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"allOf\": [\n                                {\n                                    \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/PaginationResponse\"\n                                }\n                            ]\n                        }\n                    }\n                }\n            },\n            \"CreatedProject\": {\n                \"description\": \"Created a project.\\nThe project includes a connection URI with a database, password, and role.\\nAt least one non-protected role is created with a password.\\nWait until the operations are finished before attempting to connect to a project database.\\n\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"allOf\": [\n                                {\n                                    \"$ref\": \"#/components/schemas/ProjectResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/ConnectionURIsResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/RolesResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/DatabasesResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/BranchResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/EndpointsResponse\"\n                                }\n                            ]\n                        }\n                    }\n                }\n            },\n            \"CreatedBranch\": {\n                \"description\": \"Created a branch. An endpoint is only created if it was specified in the request.\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"allOf\": [\n                                {\n                                    \"$ref\": \"#/components/schemas/BranchResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/EndpointsResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/RolesResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/DatabasesResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/ConnectionURIsOptionalResponse\"\n                                }\n                            ]\n                        }\n                    }\n                }\n            },\n            \"RestoredSnapshot\": {\n                \"description\": \"Branch restored from snapshot and its operations.\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"allOf\": [\n                                {\n                                    \"$ref\": \"#/components/schemas/BranchResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/EndpointsOptionalResponse\"\n                                },\n                                {\n                                    \"$ref\": \"#/components/schemas/OperationsResponse\"\n                                }\n                            ]\n                        }\n                    }\n                }\n            },\n            \"SnapshotSchedule\": {\n                \"description\": \"Schedule of frequencies to create snapshots\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/BackupSchedule\"\n                        }\n                    }\n                }\n            },\n            \"GeneralError\": {\n                \"description\": \"General Error.\\n\\nThe request may or may not be safe to retry, depending on the HTTP method, response status code,\\nand whether a response was received.\\n\\n- If no response is returned from the API, a network error or timeout likely occurred.\\n- In some cases, the request may have reached the server and been successfully processed, but the response failed to reach the client. As a result, retrying non-idempotent requests can lead to unintended results.\\n\\nThe following HTTP methods are considered non-idempotent: `POST`, `PATCH`, `DELETE`, and `PUT`. Retrying these methods is generally **not safe**.\\nThe following methods are considered idempotent: `GET`, `HEAD`, and `OPTIONS`. Retrying these methods is **safe** in the event of a network error or timeout.\\n\\nAny request that returns a `503 Service Unavailable` response is always safe to retry.\\n\\nAny request that returns a `423 Locked` response is safe to retry. `423 Locked` indicates that the resource is temporarily locked, for example, due to another operation in progress.\\n\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/GeneralError\"\n                        }\n                    }\n                }\n            },\n            \"HealthCheck\": {\n                \"description\": \"Service is running\",\n                \"content\": {\n                    \"application/json\": {\n                        \"schema\": {\n                            \"$ref\": \"#/components/schemas/HealthCheck\"\n                        }\n                    }\n                }\n            }\n        },\n        \"securitySchemes\": {\n            \"BearerAuth\": {\n                \"type\": \"http\",\n                \"scheme\": \"bearer\",\n                \"description\": \"The Neon API requires an API key to authorize your requests, which you can enter below.\\nRefer to our documentation to find out how to generate and use [API keys](https://neon.tech/docs/manage/api-keys).\\n\"\n            },\n            \"CookieAuth\": {\n                \"type\": \"apiKey\",\n                \"in\": \"cookie\",\n                \"name\": \"zenith\"\n            },\n            \"TokenCookieAuth\": {\n                \"type\": \"apiKey\",\n                \"in\": \"cookie\",\n                \"name\": \"keycloak_token\"\n            }\n        },\n        \"schemas\": {\n            \"Features\": {\n                \"type\": \"object\",\n                \"additionalProperties\": {\n                    \"type\": \"boolean\"\n                }\n            },\n            \"FeatureFlags\": {\n                \"type\": \"object\",\n                \"additionalProperties\": {\n                    \"oneOf\": [\n                        {\n                            \"type\": \"boolean\"\n                        },\n                        {\n                            \"type\": \"string\"\n                        }\n                    ]\n                }\n            },\n            \"TelemetryConnection\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"protocol\",\n                    \"endpoint\",\n                    \"authentication\"\n                ],\n                \"properties\": {\n                    \"protocol\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                            \"grpc\",\n                            \"http\"\n                        ],\n                        \"description\": \"Required. Communication protocol used to send telemetry data. Options: grpc, http.\\n\"\n                    },\n                    \"endpoint\": {\n                        \"type\": \"string\",\n                        \"description\": \"Required. URI of the OpenTelemetry Collector (e.g., https://collector.customer.com:4317).\\n\"\n                    },\n                    \"authentication\": {\n                        \"$ref\": \"#/components/schemas/TelemetryAuthentication\",\n                        \"description\": \"Required. Authentication configuration to securely send telemetry.\\nOptions include bearer token, basic auth, or API key.\\n\"\n                    }\n                }\n            },\n            \"TelemetryAuthentication\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"bearer_token\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"token\"\n                        ],\n                        \"x-sensitive\": [\n                            \"token\"\n                        ],\n                        \"properties\": {\n                            \"token\": {\n                                \"type\": \"string\"\n                            }\n                        }\n                    },\n                    \"basic\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"username\",\n                            \"password\"\n                        ],\n                        \"x-sensitive\": [\n                            \"password\"\n                        ],\n                        \"properties\": {\n                            \"username\": {\n                                \"type\": \"string\"\n                            },\n                            \"password\": {\n                                \"type\": \"string\"\n                            }\n                        }\n                    },\n                    \"api_key\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"key\"\n                        ],\n                        \"x-sensitive\": [\n                            \"key\"\n                        ],\n                        \"properties\": {\n                            \"key\": {\n                                \"type\": \"string\"\n                            },\n                            \"header_name\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional. Custom header name for the API key. If not specified, defaults to \\\"X-API-Key\\\".\\nThis allows using custom header names like \\\"Authorization\\\", \\\"X-Custom-Key\\\", etc.\\n\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"TelemetryConfig\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"types\"\n                ],\n                \"properties\": {\n                    \"types\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                                \"metrics\",\n                                \"logs\"\n                            ]\n                        },\n                        \"description\": \"Required. The telemetry data types to enable. One or both of: metrics, logs.\\n\"\n                    },\n                    \"metrics_endpoint_override\": {\n                        \"type\": \"string\",\n                        \"description\": \"Optional. Overrides the default endpoint for metrics (e.g., https://metrics.customer.com:4317).\\n\"\n                    },\n                    \"logs_endpoint_override\": {\n                        \"type\": \"string\",\n                        \"description\": \"Optional. Overrides the default endpoint for logs (e.g., https://logs.customer.com:4318).\\n\"\n                    }\n                }\n            },\n            \"TelemetryResource\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"attributes\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                            \"type\": \"string\"\n                        },\n                        \"description\": \"Optional. Key-value attributes that describe the source of telemetry (e.g., service.name: neon-test).\\nSee: @https://opentelemetry.io/docs/specs/semconv/resource/#services\\n\"\n                    }\n                }\n            },\n            \"ComputeUnit\": {\n                \"type\": \"number\",\n                \"minimum\": 0.25\n            },\n            \"Provisioner\": {\n                \"type\": \"string\",\n                \"description\": \"The Neon compute provisioner.\\nSpecify the `k8s-neonvm` provisioner to create a compute endpoint that supports Autoscaling.\\n\\nProvisioner can be one of the following values:\\n* k8s-pod\\n* k8s-neonvm\\n\\nClients must expect, that any string value that is not documented in the description above should be treated as a error. UNKNOWN value if safe to treat as an error too.\\n\"\n            },\n            \"PaginationResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"pagination\": {\n                        \"$ref\": \"#/components/schemas/Pagination\"\n                    }\n                }\n            },\n            \"Pagination\": {\n                \"description\": \"Cursor based pagination is used. The user must pass the cursor as is to the backend.\\nFor more information about cursor based pagination, see\\nhttps://learn.microsoft.com/en-us/ef/core/querying/pagination#keyset-pagination\\n\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"cursor\"\n                ],\n                \"properties\": {\n                    \"cursor\": {\n                        \"type\": \"string\",\n                        \"minLength\": 1\n                    }\n                },\n                \"example\": {\n                    \"cursor\": \"2022-12-07T00:45:05.262011Z\"\n                }\n            },\n            \"EmptyResponse\": {\n                \"type\": \"object\",\n                \"description\": \"Empty response.\",\n                \"properties\": {}\n            },\n            \"PlanDetails\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"name\": {\n                        \"type\": \"string\"\n                    },\n                    \"version\": {\n                        \"$ref\": \"#/components/schemas/PlanVersion\"\n                    }\n                }\n            },\n            \"PlanVersion\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"major\",\n                    \"minor\"\n                ],\n                \"properties\": {\n                    \"major\": {\n                        \"type\": \"integer\"\n                    },\n                    \"minor\": {\n                        \"type\": \"integer\"\n                    }\n                }\n            },\n            \"AddProjectJWKSRequest\": {\n                \"description\": \"Add a new JWKS to a specific endpoint of a project\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"jwks_url\",\n                    \"provider_name\"\n                ],\n                \"properties\": {\n                    \"jwks_url\": {\n                        \"description\": \"The URL that lists the JWKS\",\n                        \"type\": \"string\"\n                    },\n                    \"provider_name\": {\n                        \"description\": \"The name of the authentication provider (e.g., Clerk, Stytch, Auth0)\",\n                        \"type\": \"string\"\n                    },\n                    \"branch_id\": {\n                        \"description\": \"Branch ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"jwt_audience\": {\n                        \"description\": \"The name of the required JWT Audience to be used\",\n                        \"type\": \"string\"\n                    },\n                    \"role_names\": {\n                        \"type\": \"array\",\n                        \"description\": \"DEPRECATED. This field should only be used when using Neon RLS. The roles the JWKS should be mapped to. By default, the JWKS is mapped to the `authenticator`, `authenticated` and `anonymous` roles.\",\n                        \"deprecated\": true,\n                        \"minItems\": 0,\n                        \"maxItems\": 10,\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"skip_role_creation\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"DEPRECATED. This field should only be used when using Neon RLS. If true, the role creation will be skipped.\",\n                        \"default\": false\n                    }\n                }\n            },\n            \"JWKS\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"project_id\",\n                    \"jwks_url\",\n                    \"provider_name\",\n                    \"created_at\",\n                    \"updated_at\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"JWKS ID\",\n                        \"type\": \"string\"\n                    },\n                    \"project_id\": {\n                        \"description\": \"Project ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"branch_id\": {\n                        \"description\": \"Branch ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"jwks_url\": {\n                        \"description\": \"The URL that lists the JWKS\",\n                        \"type\": \"string\"\n                    },\n                    \"provider_name\": {\n                        \"description\": \"The name of the authentication provider (e.g., Clerk, Stytch, Auth0)\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"The date and time when the JWKS was created\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"The date and time when the JWKS was last modified\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"jwt_audience\": {\n                        \"description\": \"The name of the required JWT Audience to be used\",\n                        \"type\": \"string\"\n                    },\n                    \"role_names\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                }\n            },\n            \"ProjectJWKSResponse\": {\n                \"description\": \"The list of configured JWKS definitions for a project\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"jwks\"\n                ],\n                \"properties\": {\n                    \"jwks\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/JWKS\"\n                        }\n                    }\n                }\n            },\n            \"AdvisorCategory\": {\n                \"type\": \"string\",\n                \"description\": \"Category of an advisor issue\",\n                \"enum\": [\n                    \"SECURITY\",\n                    \"PERFORMANCE\"\n                ]\n            },\n            \"AdvisorIssue\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"name\",\n                    \"title\",\n                    \"level\",\n                    \"facing\",\n                    \"categories\",\n                    \"description\",\n                    \"detail\",\n                    \"remediation\",\n                    \"metadata\",\n                    \"cache_key\"\n                ],\n                \"properties\": {\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"Unique identifier for the issue type\",\n                        \"example\": \"rls_disabled_in_public\"\n                    },\n                    \"title\": {\n                        \"type\": \"string\",\n                        \"description\": \"Human-readable title\",\n                        \"example\": \"RLS Disabled in Public\"\n                    },\n                    \"level\": {\n                        \"type\": \"string\",\n                        \"description\": \"Severity level of the issue\",\n                        \"example\": \"ERROR\"\n                    },\n                    \"facing\": {\n                        \"type\": \"string\",\n                        \"description\": \"Whether this issue affects external API exposure or is internal only\",\n                        \"enum\": [\n                            \"EXTERNAL\",\n                            \"INTERNAL\"\n                        ],\n                        \"example\": \"EXTERNAL\"\n                    },\n                    \"categories\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/AdvisorCategory\"\n                        },\n                        \"description\": \"Categories this issue belongs to\",\n                        \"example\": [\n                            \"SECURITY\"\n                        ]\n                    },\n                    \"description\": {\n                        \"type\": \"string\",\n                        \"description\": \"Detailed description of what this check detects\"\n                    },\n                    \"detail\": {\n                        \"type\": \"string\",\n                        \"description\": \"Specific details about this instance of the issue\",\n                        \"example\": \"Table `public.users` is public, but RLS has not been enabled.\"\n                    },\n                    \"remediation\": {\n                        \"type\": \"string\",\n                        \"description\": \"URL to documentation on how to fix this issue\",\n                        \"example\": \"https://neon.tech/docs/guides/database-advisor\"\n                    },\n                    \"metadata\": {\n                        \"type\": \"object\",\n                        \"description\": \"Additional context-specific metadata\",\n                        \"additionalProperties\": true\n                    },\n                    \"cache_key\": {\n                        \"type\": \"string\",\n                        \"description\": \"Unique key for caching this issue result\"\n                    }\n                }\n            },\n            \"ApiKeyCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"key_name\"\n                ],\n                \"properties\": {\n                    \"key_name\": {\n                        \"type\": \"string\",\n                        \"description\": \"A user-specified API key name. This value is required when creating an API key.\",\n                        \"maxLength\": 64\n                    }\n                }\n            },\n            \"OrgApiKeyCreateRequest\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/ApiKeyCreateRequest\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"project_id\": {\n                                \"description\": \"If set, the API key can access only this project\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            }\n                        }\n                    }\n                ]\n            },\n            \"ApiKeyCreateResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"key\",\n                    \"id\",\n                    \"name\",\n                    \"created_at\",\n                    \"created_by\"\n                ],\n                \"x-sensitive\": [\n                    \"key\",\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The API key ID\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"key\": {\n                        \"description\": \"The generated 64-bit token required to access the Neon API\",\n                        \"type\": \"string\"\n                    },\n                    \"name\": {\n                        \"description\": \"The user-specified API key name\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the API key was created\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"created_by\": {\n                        \"description\": \"ID of the user who created this API key\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    }\n                }\n            },\n            \"OrgApiKeyCreateResponse\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/ApiKeyCreateResponse\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"project_id\": {\n                                \"description\": \"If set, the API key can access only this project\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            }\n                        }\n                    }\n                ]\n            },\n            \"ApiKeyRevokeResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"name\",\n                    \"created_at\",\n                    \"created_by\",\n                    \"last_used_from_addr\",\n                    \"revoked\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The API key ID\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"name\": {\n                        \"description\": \"The user-specified API key name\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the API key was created\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"created_by\": {\n                        \"description\": \"ID of the user who created this API key\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"last_used_at\": {\n                        \"description\": \"A timestamp indicating when the API was last used\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"nullable\": true\n                    },\n                    \"last_used_from_addr\": {\n                        \"description\": \"The IP address from which the API key was last used\",\n                        \"type\": \"string\"\n                    },\n                    \"revoked\": {\n                        \"description\": \"A `true` or `false` value indicating whether the API key is revoked\",\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"OrgApiKeyRevokeResponse\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/ApiKeyRevokeResponse\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"project_id\": {\n                                \"description\": \"If set, the API key can access only this project\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            }\n                        }\n                    }\n                ]\n            },\n            \"ApiKeysListResponseItem\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"name\",\n                    \"created_at\",\n                    \"created_by\",\n                    \"last_used_from_addr\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The API key ID\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"name\": {\n                        \"description\": \"The user-specified API key name\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the API key was created\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"created_by\": {\n                        \"$ref\": \"#/components/schemas/ApiKeyCreatorData\"\n                    },\n                    \"last_used_at\": {\n                        \"description\": \"A timestamp indicating when the API was last used\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"nullable\": true\n                    },\n                    \"last_used_from_addr\": {\n                        \"description\": \"The IP address from which the API key was last used\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"OrgApiKeysListResponseItem\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/ApiKeysListResponseItem\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"project_id\": {\n                                \"description\": \"If set, the API key can access only this project\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            }\n                        }\n                    }\n                ]\n            },\n            \"ApiKeyCreatorData\": {\n                \"description\": \"The user data of the user that created this API key.\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"name\",\n                    \"image\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\",\n                        \"description\": \"ID of the user who created this API key\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"The name of the user.\"\n                    },\n                    \"image\": {\n                        \"type\": \"string\",\n                        \"description\": \"The URL to the user's avatar image.\"\n                    }\n                }\n            },\n            \"Operation\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"project_id\",\n                    \"action\",\n                    \"status\",\n                    \"failures_count\",\n                    \"created_at\",\n                    \"updated_at\",\n                    \"total_duration_ms\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The operation ID\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"project_id\": {\n                        \"description\": \"The Neon project ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"branch_id\": {\n                        \"description\": \"The branch ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"endpoint_id\": {\n                        \"description\": \"The endpoint ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"action\": {\n                        \"$ref\": \"#/components/schemas/OperationAction\"\n                    },\n                    \"status\": {\n                        \"$ref\": \"#/components/schemas/OperationStatus\"\n                    },\n                    \"error\": {\n                        \"description\": \"The error that occurred\",\n                        \"type\": \"string\"\n                    },\n                    \"failures_count\": {\n                        \"description\": \"The number of times the operation failed\",\n                        \"type\": \"integer\",\n                        \"format\": \"int32\"\n                    },\n                    \"retry_at\": {\n                        \"description\": \"A timestamp indicating when the operation was last retried\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the operation was created\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the operation status was last updated\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"total_duration_ms\": {\n                        \"description\": \"The total duration of the operation in milliseconds\",\n                        \"type\": \"integer\",\n                        \"format\": \"int32\"\n                    }\n                },\n                \"example\": {\n                    \"id\": \"d8ac46eb-a757-42b1-9907-f78322ee394e\",\n                    \"project_id\": \"spring-example-302709\",\n                    \"branch_id\": \"br-wispy-meadow-118737\",\n                    \"endpoint_id\": \"ep-silent-smoke-806639\",\n                    \"action\": \"start_compute\",\n                    \"status\": \"finished\",\n                    \"failures_count\": 0,\n                    \"created_at\": \"2022-11-15T20:02:00Z\",\n                    \"updated_at\": \"2022-11-15T20:02:02Z\",\n                    \"total_duration_ms\": 200\n                }\n            },\n            \"OperationResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"operation\"\n                ],\n                \"properties\": {\n                    \"operation\": {\n                        \"$ref\": \"#/components/schemas/Operation\"\n                    }\n                }\n            },\n            \"OperationsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"operations\"\n                ],\n                \"properties\": {\n                    \"operations\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Operation\"\n                        }\n                    }\n                }\n            },\n            \"OperationAction\": {\n                \"description\": \"The action performed by the operation\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"create_compute\",\n                    \"create_timeline\",\n                    \"start_compute\",\n                    \"suspend_compute\",\n                    \"apply_config\",\n                    \"check_availability\",\n                    \"delete_timeline\",\n                    \"create_branch\",\n                    \"import_data\",\n                    \"tenant_ignore\",\n                    \"tenant_attach\",\n                    \"tenant_detach\",\n                    \"tenant_reattach\",\n                    \"replace_safekeeper\",\n                    \"disable_maintenance\",\n                    \"apply_storage_config\",\n                    \"prepare_secondary_pageserver\",\n                    \"switch_pageserver\",\n                    \"detach_parent_branch\",\n                    \"timeline_archive\",\n                    \"timeline_unarchive\",\n                    \"start_reserved_compute\",\n                    \"sync_dbs_and_roles_from_compute\",\n                    \"apply_schema_from_branch\",\n                    \"timeline_mark_invisible\",\n                    \"prewarm_replica\",\n                    \"promote_replica\",\n                    \"set_storage_non_dirty\",\n                    \"swap_binding_id\"\n                ]\n            },\n            \"OperationStatus\": {\n                \"description\": \"The status of the operation\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"scheduling\",\n                    \"running\",\n                    \"finished\",\n                    \"failed\",\n                    \"error\",\n                    \"cancelling\",\n                    \"cancelled\",\n                    \"skipped\"\n                ]\n            },\n            \"ProjectListItem\": {\n                \"description\": \"Essential data about the project. Full data is available at the getProject endpoint.\\n\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"active_time\",\n                    \"id\",\n                    \"platform_id\",\n                    \"region_id\",\n                    \"name\",\n                    \"pg_version\",\n                    \"proxy_host\",\n                    \"branch_logical_size_limit\",\n                    \"branch_logical_size_limit_bytes\",\n                    \"provisioner\",\n                    \"store_passwords\",\n                    \"cpu_used_sec\",\n                    \"creation_source\",\n                    \"created_at\",\n                    \"updated_at\",\n                    \"owner_id\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The project ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"platform_id\": {\n                        \"description\": \"The cloud platform identifier. Currently, only AWS is supported, for which the identifier is `aws`.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"region_id\": {\n                        \"description\": \"The region identifier\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"name\": {\n                        \"description\": \"The project name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"provisioner\": {\n                        \"$ref\": \"#/components/schemas/Provisioner\"\n                    },\n                    \"default_endpoint_settings\": {\n                        \"$ref\": \"#/components/schemas/DefaultEndpointSettings\"\n                    },\n                    \"settings\": {\n                        \"$ref\": \"#/components/schemas/ProjectSettingsData\"\n                    },\n                    \"pg_version\": {\n                        \"$ref\": \"#/components/schemas/PgVersion\"\n                    },\n                    \"proxy_host\": {\n                        \"description\": \"The proxy host for the project. This value combines the `region_id`, the `platform_id`, and the Neon domain (`neon.tech`).\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"branch_logical_size_limit\": {\n                        \"description\": \"The logical size limit for a branch. The value is in MiB.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"branch_logical_size_limit_bytes\": {\n                        \"description\": \"The logical size limit for a branch. The value is in B.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"store_passwords\": {\n                        \"description\": \"Whether or not passwords are stored for roles in the Neon project. Storing passwords facilitates access to Neon features that require authorization.\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"active_time\": {\n                        \"description\": \"Control plane observed endpoints of this project being active this amount of wall-clock time.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"cpu_used_sec\": {\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. Use data from the getProject endpoint instead.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"maintenance_starts_at\": {\n                        \"description\": \"A timestamp indicating when project maintenance begins. If set, the project is placed into maintenance mode at this time.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"creation_source\": {\n                        \"description\": \"The project creation source\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the project was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the project was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"synthetic_storage_size\": {\n                        \"description\": \"The current space occupied by the project in storage, in bytes. Synthetic storage size combines the logical data size and Write-Ahead Log (WAL) size for all branches in a project.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"quota_reset_at\": {\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. Use `consumption_period_end` from the getProject endpoint instead.\\nA timestamp indicating when the project quota resets\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"owner_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"compute_last_active_at\": {\n                        \"description\": \"The most recent time when any endpoint of this project was active.\\n\\nOmitted when observed no activity for endpoints of this project.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"org_id\": {\n                        \"description\": \"Organization id if the project belongs to an organization.\\nPermissions for the project will be given to organization members as defined by the organization admins.\\nThe permissions of the project do not depend on the user that created the project if a project belongs to an organization.\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"org_name\": {\n                        \"type\": \"string\",\n                        \"description\": \"Organization name if the project belongs to an organization.\\n\"\n                    },\n                    \"history_retention_seconds\": {\n                        \"description\": \"The number of seconds to retain the shared history for all branches in this project.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int32\"\n                    },\n                    \"hipaa_enabled_at\": {\n                        \"description\": \"A timestamp indicating when HIPAA was enabled for this project\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"deleted_at\": {\n                        \"description\": \"A timestamp indicating when the project was deleted\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"recoverable_until\": {\n                        \"description\": \"A timestamp indicating the project will be recoverable until this date and time.\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                },\n                \"example\": {\n                    \"active_time\": 750111,\n                    \"branch_logical_size_limit\": 10,\n                    \"branch_logical_size_limit_bytes\": 10485760,\n                    \"cpu_used_sec\": 523011,\n                    \"id\": \"spring-example-302709\",\n                    \"owner_id\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                    \"platform_id\": \"aws\",\n                    \"region_id\": \"aws-us-east-2\",\n                    \"name\": \"spring-example-302709\",\n                    \"provisioner\": \"k8s-pod\",\n                    \"pg_version\": 15,\n                    \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                    \"store_passwords\": true,\n                    \"creation_source\": \"console\",\n                    \"created_at\": \"2022-12-13T01:30:55Z\",\n                    \"updated_at\": \"2022-12-13T01:30:55Z\"\n                }\n            },\n            \"Project\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"consumption_period_end\",\n                    \"consumption_period_start\",\n                    \"active_time_seconds\",\n                    \"compute_time_seconds\",\n                    \"written_data_bytes\",\n                    \"data_transfer_bytes\",\n                    \"data_storage_bytes_hour\",\n                    \"id\",\n                    \"platform_id\",\n                    \"region_id\",\n                    \"name\",\n                    \"pg_version\",\n                    \"proxy_host\",\n                    \"branch_logical_size_limit\",\n                    \"branch_logical_size_limit_bytes\",\n                    \"store_passwords\",\n                    \"cpu_used_sec\",\n                    \"provisioner\",\n                    \"creation_source\",\n                    \"history_retention_seconds\",\n                    \"created_at\",\n                    \"updated_at\",\n                    \"owner_id\"\n                ],\n                \"properties\": {\n                    \"data_storage_bytes_hour\": {\n                        \"description\": \"Bytes-Hour. Project consumed that much storage hourly during the billing period. The value has some lag.\\nThe value is reset at the beginning of each billing period.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"data_transfer_bytes\": {\n                        \"description\": \"Bytes. Egress traffic from the Neon cloud to the client for given project over the billing period.\\nIncludes deleted endpoints. The value has some lag. The value is reset at the beginning of each billing period.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"written_data_bytes\": {\n                        \"description\": \"Bytes. Amount of WAL that travelled through storage for given project across all branches.\\nThe value has some lag. The value is reset at the beginning of each billing period.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"compute_time_seconds\": {\n                        \"description\": \"Seconds. The number of CPU seconds used by the project's compute endpoints, including compute endpoints that have been deleted.\\nThe value has some lag. The value is reset at the beginning of each billing period.\\nExamples:\\n1. An endpoint that uses 1 CPU for 1 second is equal to `compute_time=1`.\\n2. An endpoint that uses 2 CPUs simultaneously for 1 second is equal to `compute_time=2`.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"active_time_seconds\": {\n                        \"description\": \"Seconds. Control plane observed endpoints of this project being active this amount of wall-clock time.\\nThe value has some lag.\\nThe value is reset at the beginning of each billing period.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"cpu_used_sec\": {\n                        \"description\": \"DEPRECATED, use compute_time instead.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"deprecated\": true\n                    },\n                    \"id\": {\n                        \"description\": \"The project ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"platform_id\": {\n                        \"description\": \"The cloud platform identifier. Currently, only AWS is supported, for which the identifier is `aws`.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"region_id\": {\n                        \"description\": \"The region identifier\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"name\": {\n                        \"description\": \"The project name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"provisioner\": {\n                        \"$ref\": \"#/components/schemas/Provisioner\"\n                    },\n                    \"default_endpoint_settings\": {\n                        \"$ref\": \"#/components/schemas/DefaultEndpointSettings\"\n                    },\n                    \"settings\": {\n                        \"$ref\": \"#/components/schemas/ProjectSettingsData\"\n                    },\n                    \"pg_version\": {\n                        \"$ref\": \"#/components/schemas/PgVersion\"\n                    },\n                    \"proxy_host\": {\n                        \"description\": \"The proxy host for the project. This value combines the `region_id`, the `platform_id`, and the Neon domain (`neon.tech`).\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"branch_logical_size_limit\": {\n                        \"description\": \"The logical size limit for a branch. The value is in MiB.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"branch_logical_size_limit_bytes\": {\n                        \"description\": \"The logical size limit for a branch. The value is in B.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"store_passwords\": {\n                        \"description\": \"Whether or not passwords are stored for roles in the Neon project. Storing passwords facilitates access to Neon features that require authorization.\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"maintenance_starts_at\": {\n                        \"description\": \"A timestamp indicating when project maintenance begins. If set, the project is placed into maintenance mode at this time.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"creation_source\": {\n                        \"description\": \"The project creation source\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"history_retention_seconds\": {\n                        \"description\": \"The number of seconds to retain the shared history for all branches in this project.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int32\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the project was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the project was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"synthetic_storage_size\": {\n                        \"description\": \"The current space occupied by the project in storage, in bytes. Synthetic storage size combines the logical data size and Write-Ahead Log (WAL) size for all branches in a project.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"consumption_period_start\": {\n                        \"description\": \"A date-time indicating when Neon Cloud started measuring consumption for current consumption period.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"consumption_period_end\": {\n                        \"description\": \"A date-time indicating when Neon Cloud plans to stop measuring consumption for current consumption period.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"quota_reset_at\": {\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. Use `consumption_period_end` from the getProject endpoint instead.\\nA timestamp indicating when the project quota resets.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"owner_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"owner\": {\n                        \"$ref\": \"#/components/schemas/ProjectOwnerData\"\n                    },\n                    \"compute_last_active_at\": {\n                        \"description\": \"The most recent time when any endpoint of this project was active.\\n\\nOmitted when observed no activity for endpoints of this project.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"org_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"maintenance_scheduled_for\": {\n                        \"description\": \"A timestamp indicating when project update begins. If set, computes might experience a brief restart around this time.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"hipaa_enabled_at\": {\n                        \"description\": \"A timestamp indicating when HIPAA was enabled for this project\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                },\n                \"example\": {\n                    \"id\": \"spring-example-302709\",\n                    \"platform_id\": \"aws\",\n                    \"region_id\": \"aws-us-east-2\",\n                    \"name\": \"spring-example-302709\",\n                    \"provisioner\": \"k8s-pod\",\n                    \"pg_version\": 15,\n                    \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                    \"store_passwords\": true,\n                    \"creation_source\": \"console\",\n                    \"history_retention_seconds\": 604800,\n                    \"created_at\": \"2022-12-13T01:30:55Z\",\n                    \"updated_at\": \"2022-12-13T01:30:55Z\",\n                    \"owner\": {\n                        \"name\": \"John Smith\",\n                        \"email\": \"some@email.com\",\n                        \"branches_limit\": 10,\n                        \"subscription_type\": \"scale\"\n                    },\n                    \"org_id\": \"org-morning-bread-81040908\",\n                    \"owner_id\": \"629982cc-de05-43db-ae16-28f2399c4910\",\n                    \"data_storage_bytes_hour\": 2831928,\n                    \"branch_logical_size_limit\": 10,\n                    \"branch_logical_size_limit_bytes\": 10485760,\n                    \"data_transfer_bytes\": 1000,\n                    \"written_data_bytes\": 193990002,\n                    \"compute_time_seconds\": 2485760,\n                    \"active_time_seconds\": 621440,\n                    \"cpu_used_sec\": 155350,\n                    \"consumption_period_start\": \"2022-11-01T00:00:00Z\",\n                    \"consumption_period_end\": \"2022-12-01T00:00:00Z\"\n                }\n            },\n            \"ProjectCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project\"\n                ],\n                \"properties\": {\n                    \"project\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"settings\": {\n                                \"$ref\": \"#/components/schemas/ProjectSettingsData\"\n                            },\n                            \"name\": {\n                                \"description\": \"The project name. If not specified, the name will be identical to the generated project ID\",\n                                \"type\": \"string\",\n                                \"minLength\": 1,\n                                \"maxLength\": 256\n                            },\n                            \"branch\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                    \"name\": {\n                                        \"description\": \"The default branch name. If not specified, the default branch name, `main`, will be used.\\n\",\n                                        \"type\": \"string\",\n                                        \"minLength\": 1,\n                                        \"maxLength\": 256\n                                    },\n                                    \"role_name\": {\n                                        \"description\": \"The role name. If not specified, the default role name, `{database_name}_owner`, will be used.\\n\",\n                                        \"type\": \"string\"\n                                    },\n                                    \"database_name\": {\n                                        \"description\": \"The database name. If not specified, the default database name, `neondb`, will be used.\\n\",\n                                        \"type\": \"string\"\n                                    },\n                                    \"annotations\": {\n                                        \"description\": \"The annotations for the branch.\\n\",\n                                        \"$ref\": \"#/components/schemas/AnnotationValueData\"\n                                    }\n                                }\n                            },\n                            \"autoscaling_limit_min_cu\": {\n                                \"deprecated\": true,\n                                \"description\": \"DEPRECATED, use default_endpoint_settings.autoscaling_limit_min_cu instead.\\n\\nThe minimum number of Compute Units. The minimum value is `0.25`.\\nSee [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                                \"$ref\": \"#/components/schemas/ComputeUnit\"\n                            },\n                            \"autoscaling_limit_max_cu\": {\n                                \"deprecated\": true,\n                                \"description\": \"DEPRECATED, use default_endpoint_settings.autoscaling_limit_max_cu instead.\\n\\nThe maximum number of Compute Units. See [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                                \"$ref\": \"#/components/schemas/ComputeUnit\"\n                            },\n                            \"provisioner\": {\n                                \"$ref\": \"#/components/schemas/Provisioner\"\n                            },\n                            \"region_id\": {\n                                \"description\": \"The region identifier. Refer to our [Regions](https://neon.tech/docs/introduction/regions) documentation for supported regions. Values are specified in this format: `aws-us-east-1`\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"default_endpoint_settings\": {\n                                \"$ref\": \"#/components/schemas/DefaultEndpointSettings\"\n                            },\n                            \"pg_version\": {\n                                \"$ref\": \"#/components/schemas/PgVersion\"\n                            },\n                            \"store_passwords\": {\n                                \"description\": \"Whether or not passwords are stored for roles in the Neon project. Storing passwords facilitates access to Neon features that require authorization.\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"history_retention_seconds\": {\n                                \"description\": \"The number of seconds to retain the shared history for all branches in this project.\\nThe default is 1 day (86400 seconds).\\n\",\n                                \"type\": \"integer\",\n                                \"format\": \"int32\",\n                                \"minimum\": 0,\n                                \"maximum\": 2592000\n                            },\n                            \"org_id\": {\n                                \"description\": \"Organization id in case the project created belongs to an organization.\\nIf not present, project is owned by a user and not by org.\\n\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"ProjectUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project\"\n                ],\n                \"properties\": {\n                    \"project\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"settings\": {\n                                \"$ref\": \"#/components/schemas/ProjectSettingsData\"\n                            },\n                            \"name\": {\n                                \"description\": \"The project name\",\n                                \"type\": \"string\",\n                                \"minLength\": 1,\n                                \"maxLength\": 256\n                            },\n                            \"default_endpoint_settings\": {\n                                \"$ref\": \"#/components/schemas/DefaultEndpointSettings\"\n                            },\n                            \"history_retention_seconds\": {\n                                \"description\": \"The number of seconds to retain the shared history for all branches in this project.\\nThe default is 1 day (604800 seconds).\\n\",\n                                \"type\": \"integer\",\n                                \"format\": \"int32\",\n                                \"minimum\": 0,\n                                \"maximum\": 2592000\n                            }\n                        }\n                    }\n                }\n            },\n            \"ProjectTransferRequestResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"project_id\",\n                    \"created_at\",\n                    \"expires_at\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\",\n                        \"description\": \"The unique identifier for the transfer request\"\n                    },\n                    \"project_id\": {\n                        \"description\": \"The ID of the project that is being transferred\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"created_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"The timestamp when the transfer request was created\"\n                    },\n                    \"expires_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"The timestamp when the transfer request will expire\"\n                    }\n                }\n            },\n            \"AcceptProjectTransferRequestSatisfiesPlanError\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"reasons\"\n                ],\n                \"properties\": {\n                    \"reasons\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                                \"message\",\n                                \"code\"\n                            ],\n                            \"properties\": {\n                                \"message\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Description of why the plan is not satisfied\"\n                                },\n                                \"code\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A short code identifying the reason\"\n                                }\n                            }\n                        }\n                    }\n                }\n            },\n            \"ProjectSettingsData\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"quota\": {\n                        \"$ref\": \"#/components/schemas/ProjectQuota\"\n                    },\n                    \"allowed_ips\": {\n                        \"$ref\": \"#/components/schemas/AllowedIps\"\n                    },\n                    \"enable_logical_replication\": {\n                        \"description\": \"Sets wal_level=logical for all compute endpoints in this project.\\nAll active endpoints will be suspended.\\nOnce enabled, logical replication cannot be disabled.\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"maintenance_window\": {\n                        \"$ref\": \"#/components/schemas/MaintenanceWindow\"\n                    },\n                    \"block_public_connections\": {\n                        \"description\": \"When set, connections from the public internet\\nare disallowed. This supersedes the AllowedIPs list.\\nThis parameter is under active development and its semantics may change in the future.\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"block_vpc_connections\": {\n                        \"description\": \"When set, connections using VPC endpoints are disallowed.\\nThis parameter is under active development and its semantics may change in the future.\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"audit_log_level\": {\n                        \"$ref\": \"#/components/schemas/ProjectAuditLogLevel\"\n                    },\n                    \"hipaa\": {\n                        \"type\": \"boolean\"\n                    },\n                    \"preload_libraries\": {\n                        \"$ref\": \"#/components/schemas/PreloadLibraries\"\n                    }\n                }\n            },\n            \"ProjectResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project\"\n                ],\n                \"properties\": {\n                    \"project\": {\n                        \"$ref\": \"#/components/schemas/Project\"\n                    }\n                }\n            },\n            \"ProjectRecoverResponse\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/ProjectResponse\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/BranchesResponse\"\n                    }\n                ]\n            },\n            \"ProjectsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"projects\"\n                ],\n                \"properties\": {\n                    \"projects\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ProjectListItem\"\n                        }\n                    },\n                    \"unavailable_project_ids\": {\n                        \"description\": \"A list of project IDs indicating which projects are known to exist, but whose details could not\\nbe fetched within the requested (or implicit) time limit\\n\",\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        }\n                    }\n                }\n            },\n            \"ProjectsCountResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"count\"\n                ],\n                \"properties\": {\n                    \"count\": {\n                        \"description\": \"The total number of projects matching the query criteria.\",\n                        \"type\": \"integer\",\n                        \"minimum\": 0,\n                        \"example\": 42\n                    }\n                }\n            },\n            \"ProjectPermission\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"granted_to_email\",\n                    \"granted_at\"\n                ],\n                \"x-sensitive\": [\n                    \"granted_to_email\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\"\n                    },\n                    \"granted_to_email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"granted_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"revoked_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                }\n            },\n            \"ProjectPermissions\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project_permissions\"\n                ],\n                \"properties\": {\n                    \"project_permissions\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ProjectPermission\"\n                        }\n                    }\n                }\n            },\n            \"GrantPermissionToProjectRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"email\"\n                ],\n                \"x-sensitive\": [\n                    \"email\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    }\n                }\n            },\n            \"ConsumptionHistoryPerAccountResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"periods\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerPeriod\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"periods\"\n                ]\n            },\n            \"ConsumptionHistoryPerProjectResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"projects\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerProject\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"projects\"\n                ]\n            },\n            \"ConsumptionHistoryPerProjectV2Response\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"projects\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerProjectV2\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"projects\"\n                ]\n            },\n            \"ConsumptionHistoryPerProject\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"project_id\": {\n                        \"description\": \"The project ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"periods\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerPeriod\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"project_id\",\n                    \"periods\"\n                ]\n            },\n            \"ConsumptionHistoryPerProjectV2\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"project_id\": {\n                        \"description\": \"The project ID\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"periods\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerPeriodV2\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"project_id\",\n                    \"periods\"\n                ]\n            },\n            \"ConsumptionHistoryPerPeriod\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"period_id\": {\n                        \"description\": \"The ID assigned to the specified billing period.\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"period_plan\": {\n                        \"description\": \"The billing plan applicable during the billing period.\",\n                        \"type\": \"string\"\n                    },\n                    \"period_start\": {\n                        \"description\": \"The start date-time of the billing period.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"period_end\": {\n                        \"description\": \"The end date-time of the billing period, available for the past periods only.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"consumption\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerTimeframe\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"period_id\",\n                    \"period_plan\",\n                    \"period_start\",\n                    \"consumption\"\n                ],\n                \"example\": {\n                    \"period_id\": \"79ec829f-1828-4006-ac82-9f1828a0067d\",\n                    \"period_plan\": \"scale\",\n                    \"period_start\": \"2024-03-01T00:00:00Z\",\n                    \"consumption\": [\n                        {\n                            \"timeframe_start\": \"2024-03-22T00:00:00Z\",\n                            \"timeframe_end\": \"2024-03-23T00:00:00Z\",\n                            \"active_time_seconds\": 27853,\n                            \"compute_time_seconds\": 18346,\n                            \"written_data_bytes\": 1073741824,\n                            \"synthetic_storage_size_bytes\": 5368709120\n                        },\n                        {\n                            \"timeframe_start\": \"2024-03-23T00:00:00Z\",\n                            \"timeframe_end\": \"2024-03-24T00:00:00Z\",\n                            \"active_time_seconds\": 17498,\n                            \"compute_time_seconds\": 3378,\n                            \"written_data_bytes\": 5741824,\n                            \"synthetic_storage_size_bytes\": 2370912\n                        }\n                    ]\n                }\n            },\n            \"ConsumptionHistoryPerPeriodV2\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"period_id\": {\n                        \"description\": \"The ID assigned to the specified billing period.\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"period_plan\": {\n                        \"description\": \"The billing plan applicable during the billing period.\",\n                        \"type\": \"string\"\n                    },\n                    \"period_start\": {\n                        \"description\": \"The start date-time of the billing period.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"period_end\": {\n                        \"description\": \"The end date-time of the billing period, available for the past periods only.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"consumption\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionHistoryPerTimeframeV2\"\n                        }\n                    }\n                },\n                \"required\": [\n                    \"period_id\",\n                    \"period_plan\",\n                    \"period_start\",\n                    \"consumption\"\n                ],\n                \"example\": {\n                    \"period_id\": \"79ec829f-1828-4006-ac82-9f1828a0067d\",\n                    \"period_plan\": \"scale\",\n                    \"period_start\": \"2024-03-01T00:00:00Z\",\n                    \"consumption\": [\n                        {\n                            \"timeframe_start\": \"2024-03-22T00:00:00Z\",\n                            \"timeframe_end\": \"2024-03-23T00:00:00Z\",\n                            \"metrics\": [\n                                {\n                                    \"metric_name\": \"compute_unit_seconds\",\n                                    \"value\": 100\n                                },\n                                {\n                                    \"metric_name\": \"root_branch_bytes_month\",\n                                    \"value\": 1000000\n                                },\n                                {\n                                    \"metric_name\": \"child_branch_bytes_month\",\n                                    \"value\": 1000000\n                                }\n                            ]\n                        }\n                    ]\n                }\n            },\n            \"ConsumptionHistoryPerTimeframe\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"timeframe_start\": {\n                        \"description\": \"The specified start date-time for the reported consumption.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"timeframe_end\": {\n                        \"description\": \"The specified end date-time for the reported consumption.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"active_time_seconds\": {\n                        \"description\": \"Seconds. The amount of time the compute endpoints have been active.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"compute_time_seconds\": {\n                        \"description\": \"Seconds. The number of CPU seconds used by compute endpoints, including compute endpoints that have been deleted.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"written_data_bytes\": {\n                        \"description\": \"Bytes. The amount of written data for all branches.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"synthetic_storage_size_bytes\": {\n                        \"description\": \"Bytes. The space occupied in storage. Synthetic storage size combines the logical data size and Write-Ahead Log (WAL) size for all branches.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"data_storage_bytes_hour\": {\n                        \"description\": \"Bytes-Hour. The amount of storage consumed hourly.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"logical_size_bytes\": {\n                        \"description\": \"Bytes. The amount of logical size consumed.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"logical_size_bytes_hour\": {\n                        \"description\": \"Bytes-Hour. The amount of logical size consumed hourly.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    }\n                },\n                \"required\": [\n                    \"timeframe_start\",\n                    \"timeframe_end\",\n                    \"active_time_seconds\",\n                    \"compute_time_seconds\",\n                    \"written_data_bytes\",\n                    \"synthetic_storage_size_bytes\"\n                ]\n            },\n            \"ConsumptionHistoryPerTimeframeV2\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"timeframe_start\": {\n                        \"description\": \"The specified start date-time for the reported consumption.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"timeframe_end\": {\n                        \"description\": \"The specified end date-time for the reported consumption.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"metrics\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConsumptionMetricValue\"\n                        }\n                    }\n                }\n            },\n            \"ConsumptionMetricValue\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"metric_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"value\": {\n                        \"type\": \"integer\"\n                    }\n                },\n                \"required\": [\n                    \"metric_name\",\n                    \"value\"\n                ]\n            },\n            \"ConsumptionHistoryGranularity\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"hourly\",\n                    \"daily\",\n                    \"monthly\"\n                ]\n            },\n            \"ConsumptionHistoryQueryMetrics\": {\n                \"type\": \"array\",\n                \"items\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"ProjectLimits\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"limits\",\n                    \"features\"\n                ],\n                \"properties\": {\n                    \"limits\": {\n                        \"$ref\": \"#/components/schemas/Limits\"\n                    },\n                    \"features\": {\n                        \"$ref\": \"#/components/schemas/Features\"\n                    }\n                }\n            },\n            \"Limits\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"active_time\",\n                    \"max_projects\",\n                    \"max_branches\",\n                    \"max_snapshots\",\n                    \"max_protected_branches\",\n                    \"max_autoscaling_cu\",\n                    \"max_fixed_size_cu\",\n                    \"cpu_seconds\",\n                    \"max_compute_time_non_primary\",\n                    \"max_active_endpoints\",\n                    \"max_read_only_endpoints\",\n                    \"max_allowed_ips\",\n                    \"max_vpc_endpoints_per_region\",\n                    \"max_monitoring_retention_hours\",\n                    \"max_history_retention_seconds\",\n                    \"min_autosuspend_seconds\",\n                    \"max_data_transfer\",\n                    \"min_idle_seconds_to_autoarchive\",\n                    \"min_age_seconds_to_autoarchive\",\n                    \"max_branch_roles\",\n                    \"max_branch_databases\",\n                    \"max_concurrent_scheduled_operation_chains_per_project\",\n                    \"max_concurrent_executing_operation_chains_per_project\",\n                    \"max_root_branches\",\n                    \"max_import_size\",\n                    \"max_organization_members\",\n                    \"schema_only_branches_size_limit\",\n                    \"per_project\"\n                ],\n                \"properties\": {\n                    \"active_time\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"max_projects\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_branches\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_snapshots\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_protected_branches\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_autoscaling_cu\": {\n                        \"type\": \"number\",\n                        \"format\": \"double\"\n                    },\n                    \"max_fixed_size_cu\": {\n                        \"type\": \"number\",\n                        \"format\": \"double\"\n                    },\n                    \"cpu_seconds\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"max_compute_time_non_primary\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"max_active_endpoints\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_read_only_endpoints\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_allowed_ips\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_vpc_endpoints_per_region\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_monitoring_retention_hours\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_history_retention_seconds\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int32\"\n                    },\n                    \"min_autosuspend_seconds\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_data_transfer\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"min_idle_seconds_to_autoarchive\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"min_age_seconds_to_autoarchive\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"max_branch_roles\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_branch_databases\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_concurrent_scheduled_operation_chains_per_project\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_concurrent_executing_operation_chains_per_project\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_root_branches\": {\n                        \"type\": \"integer\"\n                    },\n                    \"max_import_size\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"max_organization_members\": {\n                        \"type\": \"integer\"\n                    },\n                    \"schema_only_branches_size_limit\": {\n                        \"type\": \"integer\"\n                    },\n                    \"per_project\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"compute_time_seconds\": {\n                                \"type\": \"integer\",\n                                \"format\": \"int64\"\n                            },\n                            \"written_data_bytes\": {\n                                \"type\": \"integer\",\n                                \"format\": \"int64\"\n                            },\n                            \"data_transfer_bytes\": {\n                                \"type\": \"integer\",\n                                \"format\": \"int64\"\n                            },\n                            \"suspend_default_branch\": {\n                                \"type\": \"boolean\"\n                            }\n                        },\n                        \"required\": [\n                            \"compute_time_seconds\",\n                            \"written_data_bytes\",\n                            \"data_transfer_bytes\",\n                            \"suspend_default_branch\"\n                        ]\n                    }\n                }\n            },\n            \"ProjectAuditLogLevel\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"base\",\n                    \"extended\",\n                    \"full\"\n                ]\n            },\n            \"AvailablePreloadLibrary\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"library_name\",\n                    \"description\",\n                    \"is_default\",\n                    \"is_experimental\",\n                    \"version\"\n                ],\n                \"properties\": {\n                    \"library_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"description\": {\n                        \"type\": \"string\"\n                    },\n                    \"is_default\": {\n                        \"type\": \"boolean\"\n                    },\n                    \"is_experimental\": {\n                        \"type\": \"boolean\"\n                    },\n                    \"version\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"AvailablePreloadLibraries\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"libraries\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/AvailablePreloadLibrary\"\n                        }\n                    }\n                }\n            },\n            \"Branch\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"project_id\",\n                    \"name\",\n                    \"current_state\",\n                    \"state_changed_at\",\n                    \"creation_source\",\n                    \"created_at\",\n                    \"updated_at\",\n                    \"default\",\n                    \"protected\",\n                    \"cpu_used_sec\",\n                    \"active_time_seconds\",\n                    \"compute_time_seconds\",\n                    \"written_data_bytes\",\n                    \"data_transfer_bytes\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The branch ID. This value is generated when a branch is created. A `branch_id` value has a `br` prefix. For example: `br-small-term-683261`.\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"project_id\": {\n                        \"description\": \"The ID of the project to which the branch belongs\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"parent_id\": {\n                        \"description\": \"The `branch_id` of the parent branch\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"parent_lsn\": {\n                        \"description\": \"The Log Sequence Number (LSN) on the parent branch from which this branch was created.\\nWhen restoring a branch using the [Restore branch](https://api-docs.neon.tech/reference/restoreprojectbranch) endpoint,\\nthis value isn\\u2019t finalized until all operations related to the restore have completed successfully.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"parent_timestamp\": {\n                        \"description\": \"The point in time on the parent branch from which this branch was created.\\nWhen restoring a branch using the [Restore branch](https://api-docs.neon.tech/reference/restoreprojectbranch) endpoint,\\nthis value isn\\u2019t finalized until all operations related to the restore have completed successfully.\\nAfter all the operations completed, this value might stay empty.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"name\": {\n                        \"description\": \"The branch name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"current_state\": {\n                        \"$ref\": \"#/components/schemas/BranchState\"\n                    },\n                    \"pending_state\": {\n                        \"$ref\": \"#/components/schemas/BranchState\"\n                    },\n                    \"state_changed_at\": {\n                        \"description\": \"A UTC timestamp indicating when the `current_state` began\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"logical_size\": {\n                        \"description\": \"The logical size of the branch, in bytes\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"creation_source\": {\n                        \"description\": \"The branch creation source\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"primary\": {\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. Use `default` field.\\nWhether the branch is the project's primary branch\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"default\": {\n                        \"description\": \"Whether the branch is the project's default branch\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"protected\": {\n                        \"description\": \"Whether the branch is protected\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"cpu_used_sec\": {\n                        \"deprecated\": true,\n                        \"description\": \"CPU seconds used by all of the branch's compute endpoints, including deleted ones.\\nThis value is reset at the beginning of each billing period.\\nExamples:\\n1. A branch that uses 1 CPU for 1 second is equal to `cpu_used_sec=1`.\\n2. A branch that uses 2 CPUs simultaneously for 1 second is equal to `cpu_used_sec=2`.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"compute_time_seconds\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"active_time_seconds\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"written_data_bytes\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"data_transfer_bytes\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the branch was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the branch was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"ttl_interval_seconds\": {\n                        \"description\": \"The time-to-live (TTL) duration originally configured for the branch, in seconds. This read-only value represents the interval between the time `expires_at` was set and the expiration timestamp itself. It is preserved to ensure the same TTL duration is reapplied when resetting the branch from its parent, and only updates when a new `expires_at` value is set.\\n\\nAccess to this feature is currently limited to participants in the Early Access Program.\\n\",\n                        \"type\": \"integer\",\n                        \"example\": 3600\n                    },\n                    \"expires_at\": {\n                        \"description\": \"The timestamp when the branch is scheduled to expire and be automatically deleted. Must be set by the client following the [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6) format with precision up to seconds (such as 2025-06-09T18:02:16Z). Deletion is performed by a background job and may not occur exactly at the specified time.\\n\\nAccess to this feature is currently limited to participants in the Early Access Program.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"example\": \"2025-06-09T18:02:16Z\"\n                    },\n                    \"last_reset_at\": {\n                        \"description\": \"A timestamp indicating when the branch was last reset\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"created_by\": {\n                        \"description\": \"The resolved user model that contains details of the user/org/integration/api_key used for branch creation. This field is filled only in listing/get/create/get/update/delete methods, if it is empty when calling other handlers, it does not mean that it is empty in the system.\\n\",\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"The name of the user.\"\n                            },\n                            \"image\": {\n                                \"type\": \"string\",\n                                \"description\": \"The URL to the user's avatar image.\"\n                            }\n                        }\n                    },\n                    \"init_source\": {\n                        \"description\": \"The source of initialization for the branch. Valid values are `schema-only` and `parent-data` (default).\\n  * `schema-only` - creates a new root branch containing only the schema. Use `parent_id` to specify the source branch. Optionally, you can provide `parent_lsn` or `parent_timestamp` to branch from a specific point in time or LSN. These fields define which branch to copy the schema from and at what point\\u2014they do not establish a parent-child relationship between the `parent_id` branch and the new schema-only branch.\\n  * `parent-data` - creates the branch with both schema and data from the parent.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"restore_status\": {\n                        \"$ref\": \"#/components/schemas/BranchRestoreStatus\"\n                    },\n                    \"restored_from\": {\n                        \"description\": \"ID of the snapshot that was the restore source for this branch\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"restored_as\": {\n                        \"description\": \"ID of the target branch which was replaced when this branch was restored\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"restricted_actions\": {\n                        \"description\": \"A list of actions that are currently restricted for this branch and the reason why.\\n\",\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/BranchRestrictedAction\"\n                        }\n                    }\n                },\n                \"example\": {\n                    \"id\": \"br-wispy-meadow-118737\",\n                    \"project_id\": \"spring-example-302709\",\n                    \"parent_id\": \"br-aged-salad-637688\",\n                    \"parent_lsn\": \"0/1DE2850\",\n                    \"name\": \"dev2\",\n                    \"protected\": false,\n                    \"current_state\": \"ready\",\n                    \"state_changed_at\": \"2022-11-30T20:09:48Z\",\n                    \"creation_source\": \"console\",\n                    \"created_at\": \"2022-11-30T19:09:48Z\",\n                    \"updated_at\": \"2022-12-01T19:53:05Z\",\n                    \"default\": true,\n                    \"init_source\": \"parent-data\",\n                    \"data_transfer_bytes\": 72911987,\n                    \"written_data_bytes\": 542998300,\n                    \"compute_time_seconds\": 823880990,\n                    \"active_time_seconds\": 922200,\n                    \"cpu_used_sec\": 461100\n                }\n            },\n            \"BranchState\": {\n                \"description\": \"The branch\\u2019s state, indicating if it is initializing, ready for use, or archived.\\n  * 'init' - the branch is being created but is not available for querying.\\n  * 'resetting' - the branch is being reset to a specific point in time or LSN and is not yet available for querying.\\n  * 'ready' - the branch is fully operational and ready for querying. Expect normal query response times.\\n  * 'archived' - the branch is stored in cost-effective archival storage. Expect slow query response times.\\n\",\n                \"type\": \"string\"\n            },\n            \"BranchRestoreStatus\": {\n                \"description\": \"Could be `restored`, `finalized` or `detaching`.\\nA `restored` branch becomes permanently `finalized` when you call `finalizeRestoreBranch`\\nA `restored` or `finalized` branch may begin `detaching` as a one-time performance optimisation, after which it will continue in its original state\\n\",\n                \"type\": \"string\"\n            },\n            \"BranchRestrictedAction\": {\n                \"description\": \"An action that is currently restricted for the branch and the reason why.\\n\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"name\",\n                    \"reason\"\n                ],\n                \"properties\": {\n                    \"name\": {\n                        \"description\": \"The name of a restricted action. Possible values include `restore`, `delete-rw-endpoint`.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"reason\": {\n                        \"description\": \"A human-readable explanation of why the action is restricted.\\n\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"BranchConsumption\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"compute_time_seconds\",\n                    \"data_transfer_bytes\",\n                    \"logical_size_bytes\",\n                    \"written_size_since_parent_bytes\",\n                    \"pitr_history_size_since_parent_bytes\"\n                ],\n                \"properties\": {\n                    \"compute_time_seconds\": {\n                        \"description\": \"Seconds. The number of CPU seconds used by the branch's compute endpoints, including compute endpoints that have been deleted.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"data_transfer_bytes\": {\n                        \"description\": \"Bytes. The number of bytes transferred to and from the branch.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"logical_size_bytes\": {\n                        \"description\": \"Bytes. The logical size of the branch.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"written_size_since_parent_bytes\": {\n                        \"description\": \"Bytes. The number of bytes written to the branch since the parent branch.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    },\n                    \"pitr_history_size_since_parent_bytes\": {\n                        \"description\": \"Bytes. The number of bytes in the PITR history of the branch since the parent branch.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"uint64\"\n                    }\n                },\n                \"example\": {\n                    \"compute_time_seconds\": 3600,\n                    \"data_transfer_bytes\": 104857600,\n                    \"logical_size_bytes\": 1073741824,\n                    \"written_size_since_parent_bytes\": 536870912,\n                    \"pitr_history_size_since_parent_bytes\": 268435456\n                }\n            },\n            \"BranchCreateRequestEndpointOptions\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"type\"\n                ],\n                \"properties\": {\n                    \"type\": {\n                        \"$ref\": \"#/components/schemas/EndpointType\"\n                    },\n                    \"settings\": {\n                        \"$ref\": \"#/components/schemas/EndpointSettingsData\"\n                    },\n                    \"autoscaling_limit_min_cu\": {\n                        \"description\": \"The minimum number of Compute Units. The minimum value is `0.25`.\\n    See [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\n    for more information.\\n\",\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"autoscaling_limit_max_cu\": {\n                        \"description\": \"The maximum number of Compute Units.\\n    See [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\n    for more information.\\n\",\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"provisioner\": {\n                        \"$ref\": \"#/components/schemas/Provisioner\"\n                    },\n                    \"suspend_timeout_seconds\": {\n                        \"$ref\": \"#/components/schemas/SuspendTimeoutSeconds\"\n                    }\n                }\n            },\n            \"BranchAnonymizedCreateRequest\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/AnnotationCreateValueRequest\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"branch_create\": {\n                                \"$ref\": \"#/components/schemas/BranchCreateRequest\"\n                            },\n                            \"masking_rules\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                    \"$ref\": \"#/components/schemas/MaskingRule\"\n                                },\n                                \"description\": \"List of masking rules to apply to the branch.\\n\"\n                            },\n                            \"start_anonymization\": {\n                                \"description\": \"If true, automatically start anonymization after the branch is created.\\nDefaults to false.\\n\",\n                                \"type\": \"boolean\"\n                            }\n                        }\n                    }\n                ]\n            },\n            \"BranchCreateRequest\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"endpoints\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/BranchCreateRequestEndpointOptions\"\n                        }\n                    },\n                    \"branch\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"parent_id\": {\n                                \"description\": \"The `branch_id` of the parent branch. If omitted or empty, the branch will be created from the project's default branch.\\n\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            },\n                            \"name\": {\n                                \"description\": \"The branch name\\n\",\n                                \"type\": \"string\",\n                                \"minLength\": 1,\n                                \"maxLength\": 256\n                            },\n                            \"parent_lsn\": {\n                                \"description\": \"A Log Sequence Number (LSN) on the parent branch. The branch will be created with data from this LSN.\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"parent_timestamp\": {\n                                \"description\": \"A timestamp identifying a point in time on the parent branch. The branch will be created with data starting from this point in time.\\nThe timestamp must be provided in ISO 8601 format; for example: `2024-02-26T12:00:00Z`.\\n\",\n                                \"type\": \"string\",\n                                \"format\": \"date-time\"\n                            },\n                            \"protected\": {\n                                \"description\": \"Whether the branch is protected\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"archived\": {\n                                \"description\": \"Whether to create the branch as archived\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"init_source\": {\n                                \"description\": \"The source of initialization for the branch. Valid values are `schema-only` and `parent-data` (default).\\n  * `schema-only` - creates a new root branch containing only the schema. Use `parent_id` to specify the source branch. Optionally, you can provide `parent_lsn` or `parent_timestamp` to branch from a specific point in time or LSN. These fields define which branch to copy the schema from and at what point\\u2014they do not establish a parent-child relationship between the `parent_id` branch and the new schema-only branch.\\n  * `parent-data` - creates the branch with both schema and data from the parent.\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"expires_at\": {\n                                \"description\": \"The timestamp when the branch is scheduled to expire and be automatically deleted. Must be set by the client following the [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6) format with precision up to seconds (such as 2025-06-09T18:02:16Z). Deletion is performed by a background job and may not occur exactly at the specified time.\\n\\nAccess to this feature is currently limited to participants in the Early Access Program.\\n\",\n                                \"type\": \"string\",\n                                \"format\": \"date-time\",\n                                \"example\": \"2025-06-09T18:02:16Z\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"BranchUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"branch\"\n                ],\n                \"properties\": {\n                    \"branch\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"name\": {\n                                \"type\": \"string\",\n                                \"minLength\": 1,\n                                \"maxLength\": 256\n                            },\n                            \"protected\": {\n                                \"type\": \"boolean\"\n                            },\n                            \"expires_at\": {\n                                \"description\": \"The timestamp when the branch is scheduled to expire and be automatically deleted. Must be set by the client following the [RFC 3339, section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6) format with precision up to seconds (such as 2025-06-09T18:02:16Z). Deletion is performed by a background job and may not occur exactly at the specified time. If this field is set to null, the expiration timestamp is removed.\\n\\nAccess to this feature is currently limited to participants in the Early Access Program.\\n\",\n                                \"type\": \"string\",\n                                \"format\": \"date-time\",\n                                \"nullable\": true,\n                                \"example\": \"2025-06-09T18:02:16Z\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"BranchRestoreRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"source_branch_id\"\n                ],\n                \"properties\": {\n                    \"source_branch_id\": {\n                        \"description\": \"The `branch_id` of the restore source branch.\\nIf `source_timestamp` and `source_lsn` are omitted, the branch will be restored to head.\\nIf `source_branch_id` is equal to the branch's id, `source_timestamp` or `source_lsn` is required.\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"source_lsn\": {\n                        \"description\": \"A Log Sequence Number (LSN) on the source branch. The branch will be restored with data from this LSN.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"source_timestamp\": {\n                        \"description\": \"A timestamp identifying a point in time on the source branch. The branch will be restored with data starting from this point in time.\\nThe timestamp must be provided in ISO 8601 format; for example: `2024-02-26T12:00:00Z`.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"preserve_under_name\": {\n                        \"description\": \"If not empty, the previous state of the branch will be saved to a branch with this name.\\nIf the branch has children or the `source_branch_id` is equal to the branch id, this field is required. All existing child branches will be moved to the newly created branch under the name `preserve_under_name`.\\n\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"BranchResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"branch\"\n                ],\n                \"properties\": {\n                    \"branch\": {\n                        \"$ref\": \"#/components/schemas/Branch\"\n                    }\n                }\n            },\n            \"BranchConsumptionResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"consumption\"\n                ],\n                \"properties\": {\n                    \"consumption\": {\n                        \"$ref\": \"#/components/schemas/BranchConsumption\"\n                    }\n                }\n            },\n            \"BranchSchemaResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"sql\": {\n                        \"type\": \"string\"\n                    },\n                    \"json\": {\n                        \"$ref\": \"#/components/schemas/BranchSchemaJSON\"\n                    }\n                }\n            },\n            \"BranchSchemaCompareResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"diff\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"BranchesResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"branches\"\n                ],\n                \"properties\": {\n                    \"branches\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Branch\"\n                        }\n                    }\n                }\n            },\n            \"BranchesCountResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"count\"\n                ],\n                \"properties\": {\n                    \"count\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int\"\n                    }\n                }\n            },\n            \"ProjectsBranchesCountResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"projects\"\n                ],\n                \"properties\": {\n                    \"projects\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                                \"count\"\n                            ],\n                            \"properties\": {\n                                \"count\": {\n                                    \"type\": \"integer\",\n                                    \"format\": \"int\"\n                                }\n                            }\n                        }\n                    }\n                }\n            },\n            \"MaskingRule\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"database_name\",\n                    \"schema_name\",\n                    \"table_name\",\n                    \"column_name\"\n                ],\n                \"x-sensitive\": [\n                    \"database_name\",\n                    \"schema_name\",\n                    \"table_name\",\n                    \"column_name\",\n                    \"masking_function\",\n                    \"masking_value\"\n                ],\n                \"properties\": {\n                    \"database_name\": {\n                        \"description\": \"The name of the database containing the table to be masked\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"schema_name\": {\n                        \"description\": \"The name of the schema containing the table to be masked\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"table_name\": {\n                        \"description\": \"The name of the table containing the column to be masked\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"column_name\": {\n                        \"description\": \"The name of the column to be masked\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"masking_function\": {\n                        \"description\": \"The PostgreSQL Anonymizer masking function to apply.\\nCan be a predefined function (e.g., 'anon.random_string(10)', 'anon.fake_email()')\\nor a custom function definition (e.g., 'anon.hash(column_name)')\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"masking_value\": {\n                        \"description\": \"A literal value to set on the column when masking.\\n\",\n                        \"type\": \"string\"\n                    }\n                },\n                \"example\": {\n                    \"database_name\": \"neondb\",\n                    \"schema_name\": \"public\",\n                    \"table_name\": \"users\",\n                    \"column_name\": \"email\",\n                    \"masking_function\": \"anon.fake_email()\"\n                }\n            },\n            \"MaskingRulesResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"masking_rules\"\n                ],\n                \"properties\": {\n                    \"masking_rules\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/MaskingRule\"\n                        },\n                        \"description\": \"List of masking rules for the branch\\n\"\n                    }\n                }\n            },\n            \"MaskingRulesUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"masking_rules\"\n                ],\n                \"properties\": {\n                    \"masking_rules\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/MaskingRule\"\n                        },\n                        \"description\": \"List of masking rules to apply to the branch.\\nThis will replace all existing masking rules for the branch.\\n\"\n                    }\n                }\n            },\n            \"AnonymizedBranchStatusResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project_id\",\n                    \"branch_id\",\n                    \"state\",\n                    \"created_at\",\n                    \"updated_at\"\n                ],\n                \"x-sensitive\": [\n                    \"state\"\n                ],\n                \"properties\": {\n                    \"project_id\": {\n                        \"description\": \"The ID of the project\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"branch_id\": {\n                        \"description\": \"The ID of the anonymized branch\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"state\": {\n                        \"description\": \"The current state of the anonymized branch. Possible values: created, initialized, initialization_error, anonymizing, anonymized, error\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"status_message\": {\n                        \"description\": \"A descriptive message about the current status or any errors\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the anonymized branch was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the anonymized branch status was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"failed_at\": {\n                        \"description\": \"A timestamp indicating when the anonymized branch operation failed (if applicable)\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"last_run\": {\n                        \"$ref\": \"#/components/schemas/AnonymizationRunMetadata\"\n                    }\n                },\n                \"example\": {\n                    \"branch_id\": \"br-aged-salad-637688\",\n                    \"project_id\": \"simple-truth-637688\",\n                    \"state\": \"anonymizing\",\n                    \"status_message\": \"Anonymizing table mydb.public.users (3/5)\",\n                    \"created_at\": \"2022-11-30T18:25:15Z\",\n                    \"updated_at\": \"2022-11-30T18:30:22Z\",\n                    \"last_run\": {\n                        \"started_at\": \"2022-11-30T18:25:15Z\",\n                        \"completed_at\": \"2022-11-30T18:30:22Z\",\n                        \"triggered_by\": \"df6c5f70-6cbf-4c8c-9e7a-74c3ddbd8f9f\",\n                        \"masked_columns\": 12\n                    }\n                }\n            },\n            \"AnonymizationRunMetadata\": {\n                \"type\": \"object\",\n                \"description\": \"Metadata about the most recent anonymization attempt for the branch.\",\n                \"properties\": {\n                    \"started_at\": {\n                        \"description\": \"Timestamp indicating when the latest anonymization attempt started.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"completed_at\": {\n                        \"description\": \"Timestamp indicating when the latest anonymization attempt completed.\\nPopulated even if the attempt failed.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"triggered_by\": {\n                        \"description\": \"UUID of the user who triggered the latest anonymization attempt.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"triggered_by_username\": {\n                        \"description\": \"Username of the user who triggered the latest anonymization attempt.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"masked_columns\": {\n                        \"description\": \"Number of columns that had masking rules applied during the attempt.\\n\",\n                        \"type\": \"integer\"\n                    }\n                }\n            },\n            \"ConnectionParameters\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"database\",\n                    \"password\",\n                    \"role\",\n                    \"host\",\n                    \"pooler_host\"\n                ],\n                \"x-sensitive\": [\n                    \"database\",\n                    \"host\",\n                    \"pooler_host\",\n                    \"password\"\n                ],\n                \"properties\": {\n                    \"database\": {\n                        \"description\": \"Database name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"password\": {\n                        \"description\": \"Password for the role\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"role\": {\n                        \"description\": \"Role name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"host\": {\n                        \"description\": \"Hostname\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"pooler_host\": {\n                        \"description\": \"Pooler hostname\\n\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"ConnectionDetails\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"connection_uri\",\n                    \"connection_parameters\"\n                ],\n                \"x-sensitive\": [\n                    \"connection_uri\"\n                ],\n                \"properties\": {\n                    \"connection_uri\": {\n                        \"description\": \"The connection URI is defined as specified here: [Connection URIs](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS)\\nThe connection URI can be used to connect to a Postgres database with psql or defined in a DATABASE_URL environment variable.\\nWhen creating a branch from a parent with more than one role or database, the response body does not include a connection URI.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"connection_parameters\": {\n                        \"$ref\": \"#/components/schemas/ConnectionParameters\"\n                    }\n                }\n            },\n            \"ConnectionURIResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"uri\"\n                ],\n                \"properties\": {\n                    \"uri\": {\n                        \"description\": \"The connection URI.\\n\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"Endpoint\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"host\",\n                    \"id\",\n                    \"project_id\",\n                    \"branch_id\",\n                    \"region_id\",\n                    \"autoscaling_limit_max_cu\",\n                    \"autoscaling_limit_min_cu\",\n                    \"type\",\n                    \"current_state\",\n                    \"pooler_enabled\",\n                    \"pooler_mode\",\n                    \"disabled\",\n                    \"passwordless_access\",\n                    \"creation_source\",\n                    \"created_at\",\n                    \"updated_at\",\n                    \"settings\",\n                    \"proxy_host\",\n                    \"suspend_timeout_seconds\",\n                    \"provisioner\"\n                ],\n                \"x-sensitive\": [\n                    \"host\"\n                ],\n                \"properties\": {\n                    \"host\": {\n                        \"description\": \"The hostname of the compute endpoint. This is the hostname specified when connecting to a Neon database.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"id\": {\n                        \"description\": \"The compute endpoint ID. Compute endpoint IDs have an `ep-` prefix. For example: `ep-little-smoke-851426`\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"Optional name of the compute endpoint\\n\"\n                    },\n                    \"project_id\": {\n                        \"description\": \"The ID of the project to which the compute endpoint belongs\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"branch_id\": {\n                        \"description\": \"The ID of the branch that the compute endpoint is associated with\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"autoscaling_limit_min_cu\": {\n                        \"description\": \"The minimum number of Compute Units\\n\",\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"autoscaling_limit_max_cu\": {\n                        \"description\": \"The maximum number of Compute Units\\n\",\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"region_id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The region identifier\\n\"\n                    },\n                    \"type\": {\n                        \"$ref\": \"#/components/schemas/EndpointType\"\n                    },\n                    \"current_state\": {\n                        \"$ref\": \"#/components/schemas/EndpointState\"\n                    },\n                    \"pending_state\": {\n                        \"$ref\": \"#/components/schemas/EndpointState\"\n                    },\n                    \"settings\": {\n                        \"$ref\": \"#/components/schemas/EndpointSettingsData\"\n                    },\n                    \"pooler_enabled\": {\n                        \"description\": \"Whether connection pooling is enabled for the compute endpoint\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"pooler_mode\": {\n                        \"$ref\": \"#/components/schemas/EndpointPoolerMode\"\n                    },\n                    \"disabled\": {\n                        \"description\": \"Whether to restrict connections to the compute endpoint.\\nEnabling this option schedules a suspend compute operation.\\nA disabled compute endpoint cannot be enabled by a connection or\\nconsole action.\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"passwordless_access\": {\n                        \"description\": \"Whether to permit passwordless access to the compute endpoint\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"last_active\": {\n                        \"description\": \"A timestamp indicating when the compute endpoint was last active\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"creation_source\": {\n                        \"description\": \"The compute endpoint creation source\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the compute endpoint was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the compute endpoint was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"started_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"A timestamp indicating when the compute endpoint was last started\\n\"\n                    },\n                    \"suspended_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"A timestamp indicating when the compute endpoint was last suspended\\n\"\n                    },\n                    \"proxy_host\": {\n                        \"description\": \"DEPRECATED. Use the \\\"host\\\" property instead.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"suspend_timeout_seconds\": {\n                        \"$ref\": \"#/components/schemas/SuspendTimeoutSeconds\"\n                    },\n                    \"provisioner\": {\n                        \"$ref\": \"#/components/schemas/Provisioner\"\n                    },\n                    \"compute_release_version\": {\n                        \"description\": \"Attached compute's release version number.\\n\",\n                        \"type\": \"string\"\n                    }\n                },\n                \"example\": {\n                    \"host\": \"ep-silent-smoke-806639.us-east-2.aws.neon.tech\",\n                    \"id\": \"ep-silent-smoke-806639\",\n                    \"name\": \"My cool compute\",\n                    \"project_id\": \"spring-example-302709\",\n                    \"branch_id\": \"br-wispy-meadow-118737\",\n                    \"autoscaling_limit_min_cu\": 1,\n                    \"autoscaling_limit_max_cu\": 1,\n                    \"region_id\": \"aws-us-east-2\",\n                    \"type\": \"read_write\",\n                    \"current_state\": \"init\",\n                    \"pending_state\": \"active\",\n                    \"settings\": {\n                        \"pg_settings\": {}\n                    },\n                    \"pooler_enabled\": false,\n                    \"pooler_mode\": \"transaction\",\n                    \"disabled\": false,\n                    \"passwordless_access\": true,\n                    \"creation_source\": \"console\",\n                    \"created_at\": \"2022-12-03T15:37:07Z\",\n                    \"updated_at\": \"2022-12-03T15:37:07Z\",\n                    \"proxy_host\": \"us-east-2.aws.neon.tech\",\n                    \"suspend_timeout_seconds\": 0,\n                    \"provisioner\": \"k8s-neonvm\"\n                }\n            },\n            \"EndpointState\": {\n                \"description\": \"The state of the compute endpoint\\n\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"init\",\n                    \"active\",\n                    \"idle\"\n                ]\n            },\n            \"EndpointType\": {\n                \"description\": \"The compute endpoint type. Either `read_write` or `read_only`.\\n\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"read_only\",\n                    \"read_write\"\n                ]\n            },\n            \"EndpointPoolerMode\": {\n                \"description\": \"The connection pooler mode. Neon supports PgBouncer in `transaction` mode only.\\n\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"transaction\"\n                ]\n            },\n            \"SuspendTimeoutSeconds\": {\n                \"description\": \"Duration of inactivity in seconds after which the compute endpoint is\\nautomatically suspended. The value `0` means use the default value.\\nThe value `-1` means never suspend. The default value is `300` seconds (5 minutes).\\nThe minimum value is `60` seconds (1 minute).\\nThe maximum value is `604800` seconds (1 week). For more information, see\\n[Scale to zero configuration](https://neon.tech/docs/manage/endpoints#scale-to-zero-configuration).\\n\",\n                \"type\": \"integer\",\n                \"format\": \"int64\",\n                \"minimum\": -1,\n                \"maximum\": 604800\n            },\n            \"AllowedIps\": {\n                \"description\": \"A list of IP addresses that are allowed to connect to the compute endpoint.\\nIf the list is empty or not set, all IP addresses are allowed.\\nIf protected_branches_only is true, the list will be applied only to protected branches.\\n\",\n                \"type\": \"object\",\n                \"properties\": {\n                    \"ips\": {\n                        \"description\": \"A list of IP addresses that are allowed to connect to the endpoint.\",\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"protected_branches_only\": {\n                        \"description\": \"If true, the list will be applied only to protected branches.\",\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"MaintenanceWindow\": {\n                \"description\": \"A maintenance window is a time period during which Neon may perform maintenance on the project's infrastructure.\\nDuring this time, the project's compute endpoints may be unavailable and existing connections can be\\ninterrupted.\\n\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"weekdays\",\n                    \"start_time\",\n                    \"end_time\"\n                ],\n                \"properties\": {\n                    \"weekdays\": {\n                        \"description\": \"A list of weekdays when the maintenance window is active.\\nEncoded as ints, where 1 - Monday, and 7 - Sunday.\\n\",\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"integer\"\n                        }\n                    },\n                    \"start_time\": {\n                        \"description\": \"Start time of the maintenance window, in the format of \\\"HH:MM\\\". Uses UTC.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"end_time\": {\n                        \"description\": \"End time of the maintenance window, in the format of \\\"HH:MM\\\". Uses UTC.\\n\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"PreloadLibraries\": {\n                \"description\": \"The shared libraries to preload into the project's compute instances.\\n\",\n                \"type\": \"object\",\n                \"properties\": {\n                    \"use_defaults\": {\n                        \"type\": \"boolean\"\n                    },\n                    \"enabled_libraries\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                }\n            },\n            \"EndpointCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"endpoint\"\n                ],\n                \"properties\": {\n                    \"endpoint\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"branch_id\",\n                            \"type\"\n                        ],\n                        \"properties\": {\n                            \"branch_id\": {\n                                \"description\": \"The ID of the branch the compute endpoint will be associated with\\n\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            },\n                            \"region_id\": {\n                                \"description\": \"The region where the compute endpoint will be created. Only the project's `region_id` is permitted.\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"type\": {\n                                \"$ref\": \"#/components/schemas/EndpointType\"\n                            },\n                            \"settings\": {\n                                \"$ref\": \"#/components/schemas/EndpointSettingsData\"\n                            },\n                            \"autoscaling_limit_min_cu\": {\n                                \"description\": \"The minimum number of Compute Units. The minimum value is `0.25`.\\nSee [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                                \"$ref\": \"#/components/schemas/ComputeUnit\"\n                            },\n                            \"autoscaling_limit_max_cu\": {\n                                \"description\": \"The maximum number of Compute Units.\\nSee [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                                \"$ref\": \"#/components/schemas/ComputeUnit\"\n                            },\n                            \"provisioner\": {\n                                \"$ref\": \"#/components/schemas/Provisioner\"\n                            },\n                            \"pooler_enabled\": {\n                                \"deprecated\": true,\n                                \"description\": \"Whether to enable connection pooling for the compute endpoint\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"pooler_mode\": {\n                                \"$ref\": \"#/components/schemas/EndpointPoolerMode\"\n                            },\n                            \"disabled\": {\n                                \"type\": \"boolean\",\n                                \"description\": \"Whether to restrict connections to the compute endpoint.\\nEnabling this option schedules a suspend compute operation.\\nA disabled compute endpoint cannot be enabled by a connection or\\nconsole action. However, the compute endpoint is periodically\\nenabled by check_availability operations.\\n\"\n                            },\n                            \"passwordless_access\": {\n                                \"type\": \"boolean\",\n                                \"description\": \"NOT YET IMPLEMENTED. Whether to permit passwordless access to the compute endpoint.\\n\"\n                            },\n                            \"suspend_timeout_seconds\": {\n                                \"$ref\": \"#/components/schemas/SuspendTimeoutSeconds\"\n                            },\n                            \"name\": {\n                                \"type\": \"string\",\n                                \"minLength\": 1,\n                                \"maxLength\": 64,\n                                \"description\": \"Optional name of the compute endpoint\\n\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"EndpointUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"endpoint\"\n                ],\n                \"properties\": {\n                    \"endpoint\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"branch_id\": {\n                                \"deprecated\": true,\n                                \"description\": \"DEPRECATED: This field will be removed in a future release.\\nThe destination branch ID. The destination branch must not have an existing read-write endpoint.\\n\",\n                                \"type\": \"string\",\n                                \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                            },\n                            \"autoscaling_limit_min_cu\": {\n                                \"description\": \"The minimum number of Compute Units. The minimum value is `0.25`.\\nSee [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                                \"$ref\": \"#/components/schemas/ComputeUnit\"\n                            },\n                            \"autoscaling_limit_max_cu\": {\n                                \"description\": \"The maximum number of Compute Units.\\nSee [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                                \"$ref\": \"#/components/schemas/ComputeUnit\"\n                            },\n                            \"provisioner\": {\n                                \"$ref\": \"#/components/schemas/Provisioner\"\n                            },\n                            \"settings\": {\n                                \"$ref\": \"#/components/schemas/EndpointSettingsData\"\n                            },\n                            \"pooler_enabled\": {\n                                \"deprecated\": true,\n                                \"description\": \"Whether to enable connection pooling for the compute endpoint\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"pooler_mode\": {\n                                \"$ref\": \"#/components/schemas/EndpointPoolerMode\"\n                            },\n                            \"disabled\": {\n                                \"description\": \"Whether to restrict connections to the compute endpoint.\\nEnabling this option schedules a suspend compute operation.\\nA disabled compute endpoint cannot be enabled by a connection or\\nconsole action. However, the compute endpoint is periodically\\nenabled by check_availability operations.\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"passwordless_access\": {\n                                \"description\": \"NOT YET IMPLEMENTED. Whether to permit passwordless access to the compute endpoint.\\n\",\n                                \"type\": \"boolean\"\n                            },\n                            \"suspend_timeout_seconds\": {\n                                \"$ref\": \"#/components/schemas/SuspendTimeoutSeconds\"\n                            },\n                            \"name\": {\n                                \"type\": \"string\",\n                                \"minLength\": 1,\n                                \"maxLength\": 64,\n                                \"description\": \"Optional name of the compute endpoint\\n\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"EndpointResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"endpoint\"\n                ],\n                \"properties\": {\n                    \"endpoint\": {\n                        \"$ref\": \"#/components/schemas/Endpoint\"\n                    }\n                }\n            },\n            \"ConnectionURIsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"connection_uris\"\n                ],\n                \"x-sensitive\": [\n                    \"connection_uris\"\n                ],\n                \"properties\": {\n                    \"connection_uris\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConnectionDetails\"\n                        }\n                    }\n                }\n            },\n            \"ConnectionURIsOptionalResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"connection_uris\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ConnectionDetails\"\n                        }\n                    }\n                }\n            },\n            \"VPCEndpointsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"endpoints\"\n                ],\n                \"properties\": {\n                    \"endpoints\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/VPCEndpoint\"\n                        }\n                    }\n                }\n            },\n            \"VPCEndpointsWithRegionResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"endpoints\"\n                ],\n                \"properties\": {\n                    \"endpoints\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/VPCEndpointWithRegion\"\n                        }\n                    }\n                }\n            },\n            \"VPCEndpoint\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"vpc_endpoint_id\",\n                    \"label\"\n                ],\n                \"properties\": {\n                    \"vpc_endpoint_id\": {\n                        \"description\": \"The VPC endpoint ID\",\n                        \"type\": \"string\"\n                    },\n                    \"label\": {\n                        \"description\": \"A descriptive label for the VPC endpoint\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"VPCEndpointWithRegion\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/VPCEndpoint\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"region_id\"\n                        ],\n                        \"properties\": {\n                            \"region_id\": {\n                                \"description\": \"The region where the VPC endpoint is located\",\n                                \"type\": \"string\"\n                            }\n                        }\n                    }\n                ]\n            },\n            \"VPCEndpointDetails\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"vpc_endpoint_id\",\n                    \"label\",\n                    \"state\",\n                    \"num_restricted_projects\",\n                    \"example_restricted_projects\"\n                ],\n                \"x-sensitive\": [\n                    \"state\"\n                ],\n                \"properties\": {\n                    \"vpc_endpoint_id\": {\n                        \"description\": \"The VPC endpoint ID\",\n                        \"type\": \"string\"\n                    },\n                    \"label\": {\n                        \"description\": \"A descriptive label for the VPC endpoint\",\n                        \"type\": \"string\"\n                    },\n                    \"state\": {\n                        \"description\": \"The current state of the VPC endpoint. Possible values are\\n`new` (just configured, pending acceptance) or `accepted`\\n(VPC connection was accepted by Neon).\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"num_restricted_projects\": {\n                        \"description\": \"The number of projects that are restricted to use this VPC endpoint.\\n\",\n                        \"type\": \"integer\"\n                    },\n                    \"example_restricted_projects\": {\n                        \"description\": \"A list of example projects that are restricted to use this VPC endpoint.\\nThere are at most 3 projects in the list, even if more projects are restricted.\\n\",\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                }\n            },\n            \"VPCEndpointAssignment\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"label\"\n                ],\n                \"properties\": {\n                    \"label\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"EndpointsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"endpoints\"\n                ],\n                \"properties\": {\n                    \"endpoints\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Endpoint\"\n                        }\n                    }\n                }\n            },\n            \"EndpointsOptionalResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"endpoints\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Endpoint\"\n                        }\n                    }\n                }\n            },\n            \"EndpointPasswordlessSessionAuthRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"session_id\"\n                ],\n                \"properties\": {\n                    \"session_id\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"Duration\": {\n                \"description\": \"A Duration represents the elapsed time between two instants\\nas an int64 nanosecond count. The representation limits the\\nlargest representable duration to approximately 290 years.\",\n                \"type\": \"integer\",\n                \"format\": \"int64\"\n            },\n            \"StatementResult\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"query\"\n                ],\n                \"x-sensitive\": [\n                    \"query\"\n                ],\n                \"properties\": {\n                    \"data\": {\n                        \"$ref\": \"#/components/schemas/StatementData\"\n                    },\n                    \"error\": {\n                        \"type\": \"string\"\n                    },\n                    \"explain_data\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/ExplainData\"\n                        }\n                    },\n                    \"query\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"StatementData\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"truncated\"\n                ],\n                \"properties\": {\n                    \"fields\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    },\n                    \"rows\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                                \"type\": \"string\"\n                            }\n                        }\n                    },\n                    \"truncated\": {\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"ExplainData\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"QUERY PLAN\"\n                ],\n                \"properties\": {\n                    \"QUERY PLAN\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"Role\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"branch_id\",\n                    \"name\",\n                    \"created_at\",\n                    \"updated_at\"\n                ],\n                \"x-sensitive\": [\n                    \"password\"\n                ],\n                \"properties\": {\n                    \"branch_id\": {\n                        \"description\": \"The ID of the branch to which the role belongs\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"name\": {\n                        \"description\": \"The role name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"password\": {\n                        \"description\": \"The role password\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"protected\": {\n                        \"description\": \"Whether or not the role is system-protected\\n\",\n                        \"type\": \"boolean\"\n                    },\n                    \"authentication_method\": {\n                        \"description\": \"Authentication method configured for this role. Valid options: `password`, `oauth`, `no_login`\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the role was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the role was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                },\n                \"example\": {\n                    \"branch_id\": \"br-wispy-meadow-118737\",\n                    \"name\": \"casey\",\n                    \"protected\": false,\n                    \"created_at\": \"2022-11-23T17:42:25Z\",\n                    \"updated_at\": \"2022-11-23T17:42:25Z\"\n                }\n            },\n            \"RoleCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"role\"\n                ],\n                \"properties\": {\n                    \"role\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"name\"\n                        ],\n                        \"properties\": {\n                            \"name\": {\n                                \"description\": \"The role name. Cannot exceed 63 bytes in length.\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"no_login\": {\n                                \"description\": \"Whether to create a role that cannot login.\\n\",\n                                \"type\": \"boolean\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"RoleResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"role\"\n                ],\n                \"properties\": {\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/Role\"\n                    }\n                }\n            },\n            \"JWKSResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"jwks\"\n                ],\n                \"properties\": {\n                    \"jwks\": {\n                        \"$ref\": \"#/components/schemas/JWKS\"\n                    }\n                }\n            },\n            \"RolesResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"roles\"\n                ],\n                \"x-sensitive\": [\n                    \"roles\"\n                ],\n                \"properties\": {\n                    \"roles\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Role\"\n                        }\n                    }\n                }\n            },\n            \"RolePasswordResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"password\"\n                ],\n                \"x-sensitive\": [\n                    \"password\"\n                ],\n                \"properties\": {\n                    \"password\": {\n                        \"description\": \"The role password\\n\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"PaymentSourceBankCard\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"last4\"\n                ],\n                \"properties\": {\n                    \"last4\": {\n                        \"type\": \"string\",\n                        \"description\": \"Last 4 digits of the card.\\n\"\n                    },\n                    \"brand\": {\n                        \"type\": \"string\",\n                        \"description\": \"Brand of credit card.\\n\",\n                        \"enum\": [\n                            \"amex\",\n                            \"diners\",\n                            \"discover\",\n                            \"jcb\",\n                            \"mastercard\",\n                            \"unionpay\",\n                            \"unknown\",\n                            \"visa\"\n                        ]\n                    },\n                    \"exp_month\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"description\": \"Credit card expiration month\\n\"\n                    },\n                    \"exp_year\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"description\": \"Credit card expiration year\\n\"\n                    }\n                }\n            },\n            \"PaymentSource\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"type\"\n                ],\n                \"properties\": {\n                    \"type\": {\n                        \"type\": \"string\",\n                        \"description\": \"Type of payment source. E.g. \\\"card\\\".\\n\"\n                    },\n                    \"card\": {\n                        \"$ref\": \"#/components/schemas/PaymentSourceBankCard\"\n                    }\n                }\n            },\n            \"BillingAccount\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"state\",\n                    \"payment_source\",\n                    \"subscription_type\",\n                    \"payment_method\",\n                    \"quota_reset_at_last\",\n                    \"name\",\n                    \"email\",\n                    \"address_city\",\n                    \"address_country\",\n                    \"address_line1\",\n                    \"address_line2\",\n                    \"address_postal_code\",\n                    \"address_state\"\n                ],\n                \"x-sensitive\": [\n                    \"name\",\n                    \"email\",\n                    \"state\",\n                    \"tax_id\",\n                    \"address_city\",\n                    \"address_country\",\n                    \"address_line1\",\n                    \"address_line2\",\n                    \"address_postal_code\",\n                    \"address_state\"\n                ],\n                \"properties\": {\n                    \"state\": {\n                        \"$ref\": \"#/components/schemas/BillingAccountState\"\n                    },\n                    \"payment_source\": {\n                        \"$ref\": \"#/components/schemas/PaymentSource\"\n                    },\n                    \"subscription_type\": {\n                        \"$ref\": \"#/components/schemas/BillingSubscriptionType\"\n                    },\n                    \"payment_method\": {\n                        \"$ref\": \"#/components/schemas/BillingPaymentMethod\"\n                    },\n                    \"quota_reset_at_last\": {\n                        \"description\": \"The last time the quota was reset. Defaults to the date-time the account is created.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"name\": {\n                        \"description\": \"The full name of the individual or entity that owns the billing account. This name appears on invoices.\",\n                        \"type\": \"string\"\n                    },\n                    \"email\": {\n                        \"description\": \"Billing email, to receive emails related to invoices and subscriptions.\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"address_city\": {\n                        \"description\": \"Billing address city.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"address_country\": {\n                        \"description\": \"Billing address country code defined by ISO 3166-1 alpha-2.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"address_country_name\": {\n                        \"description\": \"Billing address country name.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"address_line1\": {\n                        \"description\": \"Billing address line 1.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"address_line2\": {\n                        \"description\": \"Billing address line 2.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"address_postal_code\": {\n                        \"description\": \"Billing address postal code.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"address_state\": {\n                        \"description\": \"Billing address state or region.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"orb_portal_url\": {\n                        \"description\": \"Orb user portal url\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"tax_id\": {\n                        \"description\": \"The tax identification number for the billing account, displayed on invoices.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"tax_id_type\": {\n                        \"description\": \"The type of the tax identification number based on the country.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"plan_details\": {\n                        \"$ref\": \"#/components/schemas/PlanDetails\"\n                    }\n                }\n            },\n            \"BillingAccountState\": {\n                \"type\": \"string\",\n                \"description\": \"State of the billing account.\\n\",\n                \"enum\": [\n                    \"UNKNOWN\",\n                    \"active\",\n                    \"suspended\",\n                    \"deactivated\",\n                    \"deleted\"\n                ]\n            },\n            \"BillingSubscriptionType\": {\n                \"type\": \"string\",\n                \"description\": \"Type of subscription to Neon Cloud.\\nNotice that for users without billing account this will be \\\"UNKNOWN\\\"\\n\",\n                \"enum\": [\n                    \"UNKNOWN\",\n                    \"direct_sales\",\n                    \"direct_sales_v3\",\n                    \"aws_marketplace\",\n                    \"free_v2\",\n                    \"free_v3\",\n                    \"launch\",\n                    \"launch_v3\",\n                    \"scale\",\n                    \"scale_v3\",\n                    \"business\",\n                    \"vercel_pg_legacy\"\n                ]\n            },\n            \"BillingPaymentMethod\": {\n                \"type\": \"string\",\n                \"description\": \"Indicates whether and how an account makes payments.\\n\",\n                \"enum\": [\n                    \"UNKNOWN\",\n                    \"none\",\n                    \"stripe\",\n                    \"direct_payment\",\n                    \"aws_mp\",\n                    \"azure_mp\",\n                    \"vercel_mp\",\n                    \"staff\",\n                    \"trial\",\n                    \"sponsorship\"\n                ]\n            },\n            \"Database\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"branch_id\",\n                    \"name\",\n                    \"owner_name\",\n                    \"created_at\",\n                    \"updated_at\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"The database ID\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"branch_id\": {\n                        \"description\": \"The ID of the branch to which the database belongs\\n\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"name\": {\n                        \"description\": \"The database name\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"owner_name\": {\n                        \"description\": \"The name of role that owns the database\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicating when the database was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the database was last updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                },\n                \"example\": {\n                    \"id\": 834686,\n                    \"branch_id\": \"br-wispy-meadow-118737\",\n                    \"name\": \"neondb\",\n                    \"owner_name\": \"casey\",\n                    \"created_at\": \"2022-11-30T18:25:15Z\",\n                    \"updated_at\": \"2022-11-30T18:25:15Z\"\n                }\n            },\n            \"DatabaseCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"database\"\n                ],\n                \"x-sensitive\": [\n                    \"database\"\n                ],\n                \"properties\": {\n                    \"database\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"name\",\n                            \"owner_name\"\n                        ],\n                        \"properties\": {\n                            \"name\": {\n                                \"description\": \"The name of the database\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"owner_name\": {\n                                \"description\": \"The name of the role that owns the database\\n\",\n                                \"type\": \"string\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"DatabaseUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"database\"\n                ],\n                \"x-sensitive\": [\n                    \"database\"\n                ],\n                \"properties\": {\n                    \"database\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"name\": {\n                                \"description\": \"The name of the database\\n\",\n                                \"type\": \"string\"\n                            },\n                            \"owner_name\": {\n                                \"description\": \"The name of the role that owns the database\\n\",\n                                \"type\": \"string\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"DatabaseResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"database\"\n                ],\n                \"x-sensitive\": [\n                    \"database\"\n                ],\n                \"properties\": {\n                    \"database\": {\n                        \"$ref\": \"#/components/schemas/Database\"\n                    }\n                }\n            },\n            \"DatabasesResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"databases\"\n                ],\n                \"properties\": {\n                    \"databases\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Database\"\n                        }\n                    }\n                }\n            },\n            \"Invitation\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"email\",\n                    \"org_id\",\n                    \"invited_by\",\n                    \"invited_at\",\n                    \"role\"\n                ],\n                \"x-sensitive\": [\n                    \"email\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"email\": {\n                        \"description\": \"Email of the invited user\",\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"org_id\": {\n                        \"description\": \"Organization id as it is stored in Neon\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"invited_by\": {\n                        \"description\": \"UUID for the user_id who extended the invitation\",\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"invited_at\": {\n                        \"description\": \"Timestamp when the invitation was created\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    }\n                }\n            },\n            \"MemberRole\": {\n                \"description\": \"The role of the organization member\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"admin\",\n                    \"member\"\n                ]\n            },\n            \"Member\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"user_id\",\n                    \"org_id\",\n                    \"role\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"user_id\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"org_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    },\n                    \"joined_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                }\n            },\n            \"MemberUserInfo\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"email\"\n                ],\n                \"x-sensitive\": [\n                    \"email\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"has_mfa\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether the member has MFA (TOTP) enabled\"\n                    }\n                }\n            },\n            \"MemberWithUser\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"member\",\n                    \"user\"\n                ],\n                \"properties\": {\n                    \"member\": {\n                        \"$ref\": \"#/components/schemas/Member\"\n                    },\n                    \"user\": {\n                        \"$ref\": \"#/components/schemas/MemberUserInfo\"\n                    }\n                }\n            },\n            \"Organization\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"name\",\n                    \"handle\",\n                    \"plan\",\n                    \"created_at\",\n                    \"updated_at\",\n                    \"managed_by\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\"\n                    },\n                    \"handle\": {\n                        \"type\": \"string\"\n                    },\n                    \"plan\": {\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"description\": \"A timestamp indicting when the organization was created\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"managed_by\": {\n                        \"description\": \"Organizations created via the Console or the API are managed by `console`.\\nOrganizations created by other methods can't be deleted via the Console or the API.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"updated_at\": {\n                        \"description\": \"A timestamp indicating when the organization was updated\\n\",\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"allow_hipaa_projects\": {\n                        \"description\": \"If true, allow account to mark projects as HIPAA\",\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"EnableOrganizationFeatureRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"feature\"\n                ],\n                \"properties\": {\n                    \"feature\": {\n                        \"description\": \"The feature to enable for the organization\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                            \"allow_hipaa_projects\"\n                        ]\n                    }\n                }\n            },\n            \"OrganizationsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"organizations\"\n                ],\n                \"properties\": {\n                    \"organizations\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Organization\"\n                        }\n                    }\n                }\n            },\n            \"OrganizationMembership\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"organization\",\n                    \"role\"\n                ],\n                \"properties\": {\n                    \"organization\": {\n                        \"$ref\": \"#/components/schemas/Organization\"\n                    },\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    }\n                }\n            },\n            \"OrganizationMembershipsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"memberships\"\n                ],\n                \"properties\": {\n                    \"memberships\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/OrganizationMembership\"\n                        }\n                    }\n                }\n            },\n            \"OrganizationsUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"maxLength\": 64\n                    }\n                }\n            },\n            \"OrganizationInvitationsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"invitations\"\n                ],\n                \"properties\": {\n                    \"invitations\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/Invitation\"\n                        }\n                    }\n                }\n            },\n            \"OrganizationInviteCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"email\",\n                    \"role\"\n                ],\n                \"x-sensitive\": [\n                    \"email\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    }\n                }\n            },\n            \"OrganizationInvitesCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"invitations\"\n                ],\n                \"properties\": {\n                    \"invitations\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/OrganizationInviteCreateRequest\"\n                        }\n                    }\n                }\n            },\n            \"OrganizationInviteUpdateRequest\": {\n                \"type\": \"object\",\n                \"x-sensitive\": [\n                    \"email\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    },\n                    \"resend\": {\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"OrganizationGuestsResponse\": {\n                \"description\": \"A list of details for guests of an organization\\n\",\n                \"type\": \"array\",\n                \"items\": {\n                    \"$ref\": \"#/components/schemas/OrganizationGuest\"\n                }\n            },\n            \"OrganizationGuest\": {\n                \"description\": \"Details of an organization guest, who is not directly a member of\\nan organization but has been shared one of the projects it owns\\n\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"permission_id\",\n                    \"user_email\",\n                    \"project_id\",\n                    \"project_name\"\n                ],\n                \"properties\": {\n                    \"permission_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"user_email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"project_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"project_name\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"OrganizationMemberUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"role\"\n                ],\n                \"properties\": {\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    }\n                }\n            },\n            \"OrganizationMembersResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"members\"\n                ],\n                \"properties\": {\n                    \"members\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/MemberWithUser\"\n                        }\n                    }\n                }\n            },\n            \"InvitationCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"email\",\n                    \"role\"\n                ],\n                \"x-sensitive\": [\n                    \"email\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"description\": \"Email to invite\",\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"role\": {\n                        \"$ref\": \"#/components/schemas/MemberRole\"\n                    }\n                }\n            },\n            \"OrganizationCreateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"organization\",\n                    \"subscription_type\"\n                ],\n                \"properties\": {\n                    \"organization\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"name\": {\n                                \"description\": \"The organization name\",\n                                \"type\": \"string\",\n                                \"maxLength\": 64\n                            },\n                            \"invitations\": {\n                                \"description\": \"Emails with roles to invite to the organization\",\n                                \"type\": \"array\",\n                                \"items\": {\n                                    \"$ref\": \"#/components/schemas/InvitationCreateRequest\"\n                                }\n                            }\n                        }\n                    },\n                    \"subscription_type\": {\n                        \"$ref\": \"#/components/schemas/BillingSubscriptionType\"\n                    },\n                    \"transfer_credits\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to transfer credits from the user account to the newly created organization account.\\n\"\n                    }\n                }\n            },\n            \"ActiveRegionsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"regions\"\n                ],\n                \"properties\": {\n                    \"regions\": {\n                        \"type\": \"array\",\n                        \"description\": \"The list of active regions\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/RegionResponse\"\n                        }\n                    }\n                }\n            },\n            \"RegionResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"region_id\",\n                    \"name\",\n                    \"default\",\n                    \"geo_lat\",\n                    \"geo_long\"\n                ],\n                \"properties\": {\n                    \"region_id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The region ID as used in other API endpoints\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"A short description of the region.\"\n                    },\n                    \"default\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether this region is used by default in new projects.\"\n                    },\n                    \"geo_lat\": {\n                        \"type\": \"string\",\n                        \"description\": \"The geographical latitude (approximate) for the region. Empty if unknown.\"\n                    },\n                    \"geo_long\": {\n                        \"type\": \"string\",\n                        \"description\": \"The geographical longitude (approximate) for the region. Empty if unknown.\"\n                    }\n                }\n            },\n            \"CurrentUserAuthAccount\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"provider\",\n                    \"email\",\n                    \"name\",\n                    \"login\",\n                    \"image\"\n                ],\n                \"x-sensitive\": [\n                    \"email\",\n                    \"name\",\n                    \"login\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"image\": {\n                        \"type\": \"string\"\n                    },\n                    \"login\": {\n                        \"type\": \"string\",\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. Use `email` field.\\n\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\"\n                    },\n                    \"provider\": {\n                        \"$ref\": \"#/components/schemas/IdentityProviderId\"\n                    }\n                }\n            },\n            \"LinkedAuthAccount\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"provider\",\n                    \"provider_display_name\",\n                    \"username\"\n                ],\n                \"properties\": {\n                    \"provider\": {\n                        \"$ref\": \"#/components/schemas/IdentityProviderId\"\n                    },\n                    \"provider_display_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"username\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"UpdateUserInfoRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\"\n                ],\n                \"x-sensitive\": [\n                    \"email\",\n                    \"first_name\",\n                    \"last_name\",\n                    \"password\",\n                    \"new_password\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"format\": \"uuid\"\n                    },\n                    \"image\": {\n                        \"type\": \"string\",\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. This field is ignored.\\n\"\n                    },\n                    \"first_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"last_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"password\": {\n                        \"type\": \"string\"\n                    },\n                    \"new_password\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"CurrentUserInfoResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"active_seconds_limit\",\n                    \"id\",\n                    \"email\",\n                    \"login\",\n                    \"name\",\n                    \"last_name\",\n                    \"image\",\n                    \"projects_limit\",\n                    \"branches_limit\",\n                    \"max_autoscaling_limit\",\n                    \"auth_accounts\",\n                    \"plan\"\n                ],\n                \"x-sensitive\": [\n                    \"email\",\n                    \"name\",\n                    \"last_name\",\n                    \"login\"\n                ],\n                \"properties\": {\n                    \"active_seconds_limit\": {\n                        \"description\": \"Control plane observes active endpoints of a user this amount of wall-clock time.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"billing_account\": {\n                        \"$ref\": \"#/components/schemas/BillingAccount\"\n                    },\n                    \"auth_accounts\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/CurrentUserAuthAccount\"\n                        }\n                    },\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"id\": {\n                        \"type\": \"string\"\n                    },\n                    \"image\": {\n                        \"type\": \"string\"\n                    },\n                    \"login\": {\n                        \"type\": \"string\",\n                        \"deprecated\": true,\n                        \"description\": \"DEPRECATED. Use `email` field.\\n\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\"\n                    },\n                    \"last_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"projects_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"branches_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"max_autoscaling_limit\": {\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"compute_seconds_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int64\"\n                    },\n                    \"plan\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"ConvertUserToOrgRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"maxLength\": 64\n                    }\n                }\n            },\n            \"CurrentUserInfoAuthResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"password_stored\",\n                    \"auth_accounts\",\n                    \"linked_accounts\",\n                    \"provider\"\n                ],\n                \"properties\": {\n                    \"password_stored\": {\n                        \"type\": \"boolean\"\n                    },\n                    \"auth_accounts\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/CurrentUserAuthAccount\"\n                        }\n                    },\n                    \"linked_accounts\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/LinkedAuthAccount\"\n                        }\n                    },\n                    \"provider\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"AuthDetailsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"account_id\",\n                    \"auth_method\"\n                ],\n                \"properties\": {\n                    \"account_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"auth_method\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                            \"keycloak\",\n                            \"session_cookie\",\n                            \"api_key_user\",\n                            \"api_key_org\",\n                            \"oauth\"\n                        ]\n                    },\n                    \"auth_data\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"TransferProjectsToOrganizationRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"destination_org_id\",\n                    \"project_ids\"\n                ],\n                \"properties\": {\n                    \"destination_org_id\": {\n                        \"description\": \"The destination organization identifier\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"project_ids\": {\n                        \"type\": \"array\",\n                        \"minItems\": 1,\n                        \"maxItems\": 400,\n                        \"items\": {\n                            \"type\": \"string\",\n                            \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                        },\n                        \"description\": \"The list of projects ids to transfer. Maximum of 400 project ids\"\n                    }\n                }\n            },\n            \"VerifyUserPasswordRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"password\"\n                ],\n                \"x-sensitive\": [\n                    \"password\"\n                ],\n                \"properties\": {\n                    \"password\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"IdentityProviderId\": {\n                \"description\": \"Identity provider id from keycloak\",\n                \"type\": \"string\",\n                \"enum\": [\n                    \"github\",\n                    \"google\",\n                    \"hasura\",\n                    \"microsoft\",\n                    \"microsoftv2\",\n                    \"vercelmp\",\n                    \"keycloak\"\n                ]\n            },\n            \"EndpointSettingsData\": {\n                \"type\": \"object\",\n                \"description\": \"A collection of settings for a compute endpoint\",\n                \"properties\": {\n                    \"pg_settings\": {\n                        \"$ref\": \"#/components/schemas/PgSettingsData\"\n                    },\n                    \"pgbouncer_settings\": {\n                        \"$ref\": \"#/components/schemas/PgbouncerSettingsData\"\n                    },\n                    \"preload_libraries\": {\n                        \"$ref\": \"#/components/schemas/PreloadLibraries\"\n                    }\n                }\n            },\n            \"ProjectQuota\": {\n                \"type\": \"object\",\n                \"description\": \"Per-project consumption quotas. If a quota is exceeded, all active computes\\nare automatically suspended and cannot be started via API calls or incoming connections.\\n\\nThe exception is `logical_size_bytes`, which is enforced per branch.\\nIf a branch exceeds its `logical_size_bytes` quota, computes can still be started,\\nbut write operations will fail\\u2014allowing data to be deleted to free up space.\\nComputes on other branches are not affected.\\n\\nSetting `logical_size_bytes` overrides any lower value set by the `neon.max_cluster_size` Postgres setting.\\n\\nQuotas are enforced using per-project consumption metrics with the same names.\\nThese metrics reset at the start of each billing period. `logical_size_bytes`\\nis also an exception\\u2014it reflects the total data stored in a branch and does not reset.\\n\\nA zero or empty quota value means \\u201cunlimited.\\u201d\\n\",\n                \"properties\": {\n                    \"active_time_seconds\": {\n                        \"description\": \"The total amount of wall-clock time allowed to be spent by the project's compute endpoints.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"compute_time_seconds\": {\n                        \"description\": \"The total amount of CPU seconds allowed to be spent by the project's compute endpoints.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"written_data_bytes\": {\n                        \"description\": \"Total amount of data written to all of a project's branches.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"data_transfer_bytes\": {\n                        \"description\": \"Total amount of data transferred from all of a project's branches using the proxy.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    },\n                    \"logical_size_bytes\": {\n                        \"description\": \"Limit on the logical size of every project's branch.\\n\\nIf a branch exceeds its `logical_size_bytes` quota, computes can still be started,\\nbut write operations will fail\\u2014allowing data to be deleted to free up space.\\nComputes on other branches are not affected.\\n\\nSetting `logical_size_bytes` overrides any lower value set by the `neon.max_cluster_size` Postgres setting.\\n\",\n                        \"type\": \"integer\",\n                        \"format\": \"int64\",\n                        \"minimum\": 0\n                    }\n                }\n            },\n            \"DefaultEndpointSettings\": {\n                \"type\": \"object\",\n                \"description\": \"A collection of settings for a Neon endpoint\",\n                \"properties\": {\n                    \"pg_settings\": {\n                        \"$ref\": \"#/components/schemas/PgSettingsData\"\n                    },\n                    \"pgbouncer_settings\": {\n                        \"$ref\": \"#/components/schemas/PgbouncerSettingsData\"\n                    },\n                    \"autoscaling_limit_min_cu\": {\n                        \"description\": \"The minimum number of Compute Units. The minimum value is `0.25`.\\nSee [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"autoscaling_limit_max_cu\": {\n                        \"description\": \"The maximum number of Compute Units. See [Compute size and Autoscaling configuration](https://neon.tech/docs/manage/endpoints#compute-size-and-autoscaling-configuration)\\nfor more information.\\n\",\n                        \"$ref\": \"#/components/schemas/ComputeUnit\"\n                    },\n                    \"suspend_timeout_seconds\": {\n                        \"$ref\": \"#/components/schemas/SuspendTimeoutSeconds\"\n                    }\n                }\n            },\n            \"PgSettingsData\": {\n                \"description\": \"A raw representation of Postgres settings\",\n                \"type\": \"object\",\n                \"additionalProperties\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"PgbouncerSettingsData\": {\n                \"description\": \"A raw representation of PgBouncer settings\",\n                \"type\": \"object\",\n                \"additionalProperties\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"PgVersion\": {\n                \"description\": \"The major Postgres version number. Currently supported versions are `14`, `15`, `16`, `17`, and `18`.\",\n                \"type\": \"integer\",\n                \"minimum\": 14,\n                \"maximum\": 18,\n                \"default\": 17\n            },\n            \"HealthCheck\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"status\"\n                ],\n                \"properties\": {\n                    \"status\": {\n                        \"description\": \"Service status\",\n                        \"type\": \"string\"\n                    }\n                },\n                \"example\": {\n                    \"status\": \"ok\"\n                }\n            },\n            \"ProjectOwnerData\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"email\",\n                    \"name\",\n                    \"branches_limit\",\n                    \"subscription_type\"\n                ],\n                \"x-sensitive\": [\n                    \"email\",\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"name\": {\n                        \"type\": \"string\"\n                    },\n                    \"branches_limit\": {\n                        \"type\": \"integer\"\n                    },\n                    \"subscription_type\": {\n                        \"$ref\": \"#/components/schemas/BillingSubscriptionType\"\n                    }\n                }\n            },\n            \"LimitsUnsatisfiedResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"limits\"\n                ],\n                \"properties\": {\n                    \"limits\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                                \"name\",\n                                \"expected\",\n                                \"actual\"\n                            ],\n                            \"properties\": {\n                                \"name\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Identifier of the unsatisfied limit. Possible values are:\\n- subscription_type\\n- projects_count\\n- project_region\\n\"\n                                },\n                                \"expected\": {\n                                    \"type\": \"string\"\n                                },\n                                \"actual\": {\n                                    \"type\": \"string\"\n                                }\n                            }\n                        }\n                    }\n                },\n                \"example\": {\n                    \"limits\": [\n                        {\n                            \"name\": \"projects_count\",\n                            \"actual\": \"2\",\n                            \"expected\": \"1\"\n                        },\n                        {\n                            \"name\": \"subscription_type\",\n                            \"actual\": \"launch\",\n                            \"expected\": \"scale\"\n                        }\n                    ]\n                }\n            },\n            \"ProjectsWithIntegrationResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"projects\"\n                ],\n                \"properties\": {\n                    \"projects\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                                \"id\",\n                                \"integration\"\n                            ],\n                            \"properties\": {\n                                \"id\": {\n                                    \"type\": \"string\",\n                                    \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                                },\n                                \"integration\": {\n                                    \"type\": \"string\"\n                                }\n                            }\n                        }\n                    }\n                },\n                \"example\": {\n                    \"projects\": [\n                        {\n                            \"id\": \"round-frog-53611540\",\n                            \"integration\": \"github\"\n                        },\n                        {\n                            \"id\": \"long-leaf-72329067\",\n                            \"integration\": \"vercel\"\n                        }\n                    ]\n                }\n            },\n            \"UserDeletionConditionName\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"project_count\",\n                    \"org_admin_membership_count\",\n                    \"subscription_type\"\n                ]\n            },\n            \"OrgDeletionConditionName\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"project_count\"\n                ]\n            },\n            \"DataAPISettings\": {\n                \"x-tags\": [\n                    \"DataAPI\"\n                ],\n                \"description\": \"Configuration settings for the Neon Data API\",\n                \"type\": \"object\",\n                \"properties\": {\n                    \"db_aggregates_enabled\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Enable aggregates feature\",\n                        \"default\": true\n                    },\n                    \"db_anon_role\": {\n                        \"type\": \"string\",\n                        \"description\": \"Database role to use for anonymous requests\",\n                        \"default\": \"anonymous\"\n                    },\n                    \"db_extra_search_path\": {\n                        \"type\": \"string\",\n                        \"description\": \"Extra schemas to add to the search path\"\n                    },\n                    \"db_max_rows\": {\n                        \"type\": \"integer\",\n                        \"description\": \"Maximum number of rows that can be returned in a single request\"\n                    },\n                    \"db_schemas\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        },\n                        \"description\": \"List of schemas to expose via the API. Default: [\\\"public\\\"]\"\n                    },\n                    \"jwt_role_claim_key\": {\n                        \"type\": \"string\",\n                        \"description\": \"JWT claim key to use for role extraction\",\n                        \"default\": \".\\\"role\\\"\"\n                    },\n                    \"jwt_cache_max_lifetime\": {\n                        \"type\": \"integer\",\n                        \"description\": \"Maximum lifetime for JWT cache in seconds\"\n                    },\n                    \"openapi_mode\": {\n                        \"type\": \"string\",\n                        \"description\": \"OpenAPI specification mode (ignore-privileges, disabled)\",\n                        \"default\": \"disabled\"\n                    },\n                    \"server_cors_allowed_origins\": {\n                        \"type\": \"string\",\n                        \"description\": \"CORS allowed origins\"\n                    },\n                    \"server_timing_enabled\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Enable server timing headers\"\n                    }\n                }\n            },\n            \"DataAPICreateRequest\": {\n                \"x-tags\": [\n                    \"DataAPI\"\n                ],\n                \"description\": \"Create Neon Data API\",\n                \"type\": \"object\",\n                \"properties\": {\n                    \"auth_provider\": {\n                        \"type\": \"string\",\n                        \"description\": \"The authentication provider to use for the Neon Data API\",\n                        \"enum\": [\n                            \"neon_auth\",\n                            \"external\"\n                        ]\n                    },\n                    \"jwks_url\": {\n                        \"description\": \"The URL that lists the JWKS\",\n                        \"type\": \"string\",\n                        \"format\": \"uri\"\n                    },\n                    \"provider_name\": {\n                        \"description\": \"The name of the authentication provider (e.g., Clerk, Stytch, Auth0)\",\n                        \"type\": \"string\"\n                    },\n                    \"jwt_audience\": {\n                        \"description\": \"WARNING - using this setting will only reject tokens with a\\ndifferent audience claim. Tokens without audience claim will still\\nbe accepted.\\n\",\n                        \"type\": \"string\"\n                    },\n                    \"add_default_grants\": {\n                        \"description\": \"Grant all permissions to the tables in the public schema to authenticated users\",\n                        \"type\": \"boolean\",\n                        \"default\": false\n                    },\n                    \"skip_auth_schema\": {\n                        \"description\": \"Skip creating the auth schema and RLS functions\",\n                        \"type\": \"boolean\",\n                        \"default\": false\n                    },\n                    \"settings\": {\n                        \"$ref\": \"#/components/schemas/DataAPISettings\",\n                        \"description\": \"Configuration settings for the Data API\"\n                    }\n                }\n            },\n            \"DataAPICreateResponse\": {\n                \"x-tags\": [\n                    \"DataAPI\"\n                ],\n                \"description\": \"Neon Data API created successfully\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"url\"\n                ],\n                \"properties\": {\n                    \"url\": {\n                        \"type\": \"string\",\n                        \"format\": \"uri\"\n                    }\n                }\n            },\n            \"DataAPIReponse\": {\n                \"x-tags\": [\n                    \"DataAPI\"\n                ],\n                \"description\": \"Neon Data API response\",\n                \"type\": \"object\",\n                \"required\": [\n                    \"url\",\n                    \"status\"\n                ],\n                \"properties\": {\n                    \"url\": {\n                        \"type\": \"string\",\n                        \"description\": \"The URL of the Neon Data API\",\n                        \"format\": \"uri\"\n                    },\n                    \"status\": {\n                        \"type\": \"string\",\n                        \"description\": \"The status of the Neon Data API deployment\"\n                    },\n                    \"settings\": {\n                        \"allOf\": [\n                            {\n                                \"$ref\": \"#/components/schemas/DataAPISettings\"\n                            }\n                        ],\n                        \"type\": \"object\",\n                        \"nullable\": true,\n                        \"description\": \"Configuration settings for the Data API (SubZero only)\"\n                    },\n                    \"available_schemas\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        },\n                        \"nullable\": true,\n                        \"description\": \"List of available database schemas (SubZero only)\"\n                    }\n                }\n            },\n            \"DataAPIUpdateRequest\": {\n                \"x-tags\": [\n                    \"DataAPI\"\n                ],\n                \"description\": \"Update Neon Data API\",\n                \"type\": \"object\",\n                \"properties\": {\n                    \"settings\": {\n                        \"$ref\": \"#/components/schemas/DataAPISettings\",\n                        \"description\": \"Configuration settings for the Data API\"\n                    }\n                }\n            },\n            \"NeonAuthSupportedAuthProvider\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"mock\",\n                    \"stack\",\n                    \"stack_v2\",\n                    \"better_auth\"\n                ]\n            },\n            \"NeonAuthProviderProjectOwnedBy\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"user\",\n                    \"neon\"\n                ]\n            },\n            \"NeonAuthProviderProjectTransferStatus\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"initiated\",\n                    \"finished\"\n                ]\n            },\n            \"NeonAuthRedirectURIWhitelistDomain\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"domain\",\n                    \"auth_provider\"\n                ],\n                \"properties\": {\n                    \"domain\": {\n                        \"type\": \"string\"\n                    },\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    }\n                }\n            },\n            \"NeonAuthRedirectURIWhitelistResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"domains\"\n                ],\n                \"properties\": {\n                    \"domains\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/NeonAuthRedirectURIWhitelistDomain\"\n                        }\n                    }\n                }\n            },\n            \"NeonAuthAddDomainToRedirectURIWhitelistRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"domain\",\n                    \"auth_provider\"\n                ],\n                \"properties\": {\n                    \"domain\": {\n                        \"type\": \"string\",\n                        \"format\": \"uri\"\n                    },\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    }\n                }\n            },\n            \"NeonAuthDeleteDomainFromRedirectURIWhitelistRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"domains\",\n                    \"auth_provider\"\n                ],\n                \"properties\": {\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    },\n                    \"domains\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/NeonAuthDeleteDomainFromRedirectURIWhitelistItem\"\n                        }\n                    }\n                }\n            },\n            \"NeonAuthDeleteDomainFromRedirectURIWhitelistItem\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"domain\"\n                ],\n                \"properties\": {\n                    \"domain\": {\n                        \"type\": \"string\",\n                        \"format\": \"uri\"\n                    }\n                }\n            },\n            \"NeonAuthCreateIntegrationRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"auth_provider\",\n                    \"project_id\",\n                    \"branch_id\"\n                ],\n                \"x-sensitive\": [\n                    \"database_name\"\n                ],\n                \"properties\": {\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    },\n                    \"project_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"branch_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"database_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"role_name\": {\n                        \"type\": \"string\",\n                        \"deprecated\": true\n                    }\n                }\n            },\n            \"EnableNeonAuthIntegrationRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"auth_provider\"\n                ],\n                \"x-sensitive\": [\n                    \"database_name\"\n                ],\n                \"properties\": {\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    },\n                    \"database_name\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"NeonAuthCreateIntegrationResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"auth_provider\",\n                    \"auth_provider_project_id\",\n                    \"pub_client_key\",\n                    \"secret_server_key\",\n                    \"jwks_url\",\n                    \"schema_name\",\n                    \"table_name\"\n                ],\n                \"x-sensitive\": [\n                    \"pub_client_key\",\n                    \"secret_server_key\"\n                ],\n                \"properties\": {\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    },\n                    \"auth_provider_project_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"pub_client_key\": {\n                        \"type\": \"string\"\n                    },\n                    \"secret_server_key\": {\n                        \"type\": \"string\"\n                    },\n                    \"jwks_url\": {\n                        \"type\": \"string\"\n                    },\n                    \"schema_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"table_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"base_url\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"NeonAuthCreateAuthProviderSDKKeysRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project_id\",\n                    \"auth_provider\"\n                ],\n                \"properties\": {\n                    \"project_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    }\n                }\n            },\n            \"NeonAuthCreateNewUserRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project_id\",\n                    \"auth_provider\",\n                    \"email\"\n                ],\n                \"x-sensitive\": [\n                    \"email\",\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"project_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    },\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"minLength\": 1,\n                        \"maxLength\": 255\n                    }\n                }\n            },\n            \"CreateBranchNeonAuthNewUserRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"email\"\n                ],\n                \"x-sensitive\": [\n                    \"email\",\n                    \"name\"\n                ],\n                \"properties\": {\n                    \"email\": {\n                        \"type\": \"string\",\n                        \"format\": \"email\",\n                        \"minLength\": 1,\n                        \"maxLength\": 256\n                    },\n                    \"name\": {\n                        \"type\": \"string\",\n                        \"minLength\": 1,\n                        \"maxLength\": 255\n                    }\n                }\n            },\n            \"NeonAuthCreateNewUserResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"ID of newly created user\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"UpdateNeonAuthUserRoleRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"roles\"\n                ],\n                \"properties\": {\n                    \"roles\": {\n                        \"type\": \"array\",\n                        \"description\": \"Array of roles to assign to the user\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        },\n                        \"minItems\": 1,\n                        \"example\": [\n                            \"admin\"\n                        ]\n                    }\n                }\n            },\n            \"UpdateNeonAuthUserRoleResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"description\": \"ID of the updated user\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"NeonAuthAllowLocalhostResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"allow_localhost\"\n                ],\n                \"properties\": {\n                    \"allow_localhost\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to allow localhost connections\"\n                    }\n                }\n            },\n            \"UpdateNeonAuthAllowLocalhostRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"allow_localhost\"\n                ],\n                \"properties\": {\n                    \"allow_localhost\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to allow localhost connections\"\n                    }\n                }\n            },\n            \"NeonAuthOrganizationConfig\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"enabled\",\n                    \"organization_limit\",\n                    \"membership_limit\",\n                    \"creator_role\",\n                    \"send_invitation_email\"\n                ],\n                \"properties\": {\n                    \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether the organization plugin is enabled\",\n                        \"default\": true\n                    },\n                    \"organization_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int32\",\n                        \"minimum\": 1,\n                        \"default\": 10,\n                        \"description\": \"Maximum number of organizations a user can create\"\n                    },\n                    \"membership_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int32\",\n                        \"minimum\": 1,\n                        \"default\": 100,\n                        \"description\": \"Maximum number of members per organization\"\n                    },\n                    \"creator_role\": {\n                        \"type\": \"string\",\n                        \"description\": \"The role assigned to the user who creates an organization\",\n                        \"default\": \"owner\",\n                        \"enum\": [\n                            \"admin\",\n                            \"owner\"\n                        ]\n                    },\n                    \"send_invitation_email\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to send invitation emails when inviting members to an organization\",\n                        \"default\": false\n                    }\n                }\n            },\n            \"NeonAuthOrganizationConfigUpdate\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether the organization plugin is enabled\"\n                    },\n                    \"organization_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int32\",\n                        \"minimum\": 1,\n                        \"description\": \"Maximum number of organizations a user can create\"\n                    },\n                    \"membership_limit\": {\n                        \"type\": \"integer\",\n                        \"format\": \"int32\",\n                        \"minimum\": 1,\n                        \"description\": \"Maximum number of members per organization\"\n                    },\n                    \"creator_role\": {\n                        \"type\": \"string\",\n                        \"description\": \"The role assigned to the user who creates an organization\",\n                        \"enum\": [\n                            \"admin\",\n                            \"owner\"\n                        ]\n                    },\n                    \"send_invitation_email\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to send invitation emails when inviting members to an organization\"\n                    }\n                }\n            },\n            \"NeonAuthTransferAuthProviderProjectRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"project_id\",\n                    \"auth_provider\"\n                ],\n                \"properties\": {\n                    \"project_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    }\n                }\n            },\n            \"NeonAuthTransferAuthProviderProjectResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"url\"\n                ],\n                \"properties\": {\n                    \"url\": {\n                        \"description\": \"URL for completing the process of ownership transfer\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"ListNeonAuthIntegrationsResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"data\"\n                ],\n                \"properties\": {\n                    \"data\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/NeonAuthIntegration\"\n                        }\n                    }\n                }\n            },\n            \"ListNeonAuthOauthProvidersResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"providers\"\n                ],\n                \"properties\": {\n                    \"providers\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/NeonAuthOauthProvider\"\n                        }\n                    }\n                }\n            },\n            \"NeonAuthPluginConfigs\": {\n                \"type\": \"object\",\n                \"description\": \"Aggregated plugin configurations for Neon Auth\",\n                \"properties\": {\n                    \"organization\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthOrganizationConfig\"\n                    },\n                    \"email_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthEmailServerConfig\"\n                    },\n                    \"email_and_password\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthEmailAndPasswordConfig\"\n                    },\n                    \"oauth_providers\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/NeonAuthOauthProvider\"\n                        }\n                    },\n                    \"allow_localhost\": {\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"NeonAuthWebhookConfig\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"enabled\"\n                ],\n                \"properties\": {\n                    \"enabled\": {\n                        \"type\": \"boolean\"\n                    },\n                    \"webhook_url\": {\n                        \"type\": \"string\"\n                    },\n                    \"enabled_events\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                                \"user.before_create\",\n                                \"user.created\",\n                                \"send.otp\",\n                                \"send.magic_link\"\n                            ]\n                        }\n                    },\n                    \"timeout_seconds\": {\n                        \"type\": \"integer\",\n                        \"default\": 5,\n                        \"minimum\": 1,\n                        \"maximum\": 10\n                    }\n                }\n            },\n            \"NeonAuthOauthProvider\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"type\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthOauthProviderId\"\n                    },\n                    \"type\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthOauthProviderType\"\n                    },\n                    \"client_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"client_secret\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"NeonAuthOauthProviderId\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"google\",\n                    \"github\",\n                    \"microsoft\",\n                    \"vercel\"\n                ]\n            },\n            \"NeonAuthOauthProviderType\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"standard\",\n                    \"shared\"\n                ]\n            },\n            \"NeonAuthAddOAuthProviderRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthOauthProviderId\"\n                    },\n                    \"client_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"client_secret\": {\n                        \"type\": \"string\"\n                    },\n                    \"microsoft_tenant_id\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"NeonAuthUpdateOAuthProviderRequest\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"client_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"client_secret\": {\n                        \"type\": \"string\"\n                    },\n                    \"microsoft_tenant_id\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"SharedEmailServer\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"sender_email\": {\n                        \"type\": \"string\"\n                    },\n                    \"sender_name\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"StandardEmailServer\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"host\",\n                    \"port\",\n                    \"username\",\n                    \"password\",\n                    \"sender_email\",\n                    \"sender_name\"\n                ],\n                \"x-sensitive\": [\n                    \"host\",\n                    \"password\",\n                    \"username\"\n                ],\n                \"properties\": {\n                    \"host\": {\n                        \"type\": \"string\"\n                    },\n                    \"port\": {\n                        \"type\": \"integer\"\n                    },\n                    \"username\": {\n                        \"type\": \"string\"\n                    },\n                    \"password\": {\n                        \"type\": \"string\"\n                    },\n                    \"sender_email\": {\n                        \"type\": \"string\"\n                    },\n                    \"sender_name\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"NeonAuthEmailServerConfig\": {\n                \"type\": \"object\",\n                \"discriminator\": {\n                    \"propertyName\": \"type\",\n                    \"mapping\": {\n                        \"standard\": \"#/components/schemas/StandardEmailServer\",\n                        \"shared\": \"#/components/schemas/SharedEmailServer\"\n                    }\n                },\n                \"oneOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/StandardEmailServer\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/SharedEmailServer\"\n                    }\n                ]\n            },\n            \"SendNeonAuthTestEmailRequest\": {\n                \"type\": \"object\",\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/StandardEmailServer\"\n                    },\n                    {\n                        \"type\": \"object\",\n                        \"required\": [\n                            \"recipient_email\"\n                        ],\n                        \"properties\": {\n                            \"recipient_email\": {\n                                \"description\": \"The email address to send the test email to.\",\n                                \"type\": \"string\",\n                                \"format\": \"email\",\n                                \"minLength\": 1,\n                                \"maxLength\": 256\n                            }\n                        }\n                    }\n                ]\n            },\n            \"SendNeonAuthTestEmailResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"success\"\n                ],\n                \"properties\": {\n                    \"success\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether the test email was sent successfully.\"\n                    },\n                    \"error_message\": {\n                        \"type\": \"string\",\n                        \"description\": \"The error message from the email server.\"\n                    }\n                }\n            },\n            \"NeonAuthEmailVerificationMethod\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"link\",\n                    \"otp\"\n                ],\n                \"description\": \"The email verification method to use.\\n- `link`: Sends a verification link via email\\n- `otp`: Sends a one-time password (OTP) via email\\n\"\n            },\n            \"NeonAuthEmailAndPasswordConfig\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"enabled\",\n                    \"email_verification_method\",\n                    \"require_email_verification\",\n                    \"auto_sign_in_after_verification\",\n                    \"send_verification_email_on_sign_up\",\n                    \"send_verification_email_on_sign_in\",\n                    \"disable_sign_up\"\n                ],\n                \"properties\": {\n                    \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether email and password authentication is enabled\"\n                    },\n                    \"email_verification_method\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthEmailVerificationMethod\",\n                        \"description\": \"The email verification method to use\"\n                    },\n                    \"require_email_verification\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether email verification is required before users can sign in\"\n                    },\n                    \"auto_sign_in_after_verification\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether users are automatically signed in after verifying their email\"\n                    },\n                    \"send_verification_email_on_sign_up\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to send a verification email when users sign up\"\n                    },\n                    \"send_verification_email_on_sign_in\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to send a verification email when users sign in\"\n                    },\n                    \"disable_sign_up\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to disable new user sign ups\"\n                    }\n                }\n            },\n            \"NeonAuthEmailAndPasswordConfigUpdate\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether email and password authentication is enabled\"\n                    },\n                    \"email_verification_method\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthEmailVerificationMethod\",\n                        \"description\": \"The email verification method to use\"\n                    },\n                    \"require_email_verification\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether email verification is required before users can sign in\"\n                    },\n                    \"auto_sign_in_after_verification\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether users are automatically signed in after verifying their email\"\n                    },\n                    \"send_verification_email_on_sign_up\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to send a verification email when users sign up\"\n                    },\n                    \"send_verification_email_on_sign_in\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to send a verification email when users sign in\"\n                    },\n                    \"disable_sign_up\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether to disable new user sign ups\"\n                    }\n                }\n            },\n            \"NeonAuthIntegration\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"auth_provider\",\n                    \"auth_provider_project_id\",\n                    \"branch_id\",\n                    \"db_name\",\n                    \"created_at\",\n                    \"owned_by\",\n                    \"jwks_url\"\n                ],\n                \"x-sensitive\": [\n                    \"db_name\"\n                ],\n                \"properties\": {\n                    \"auth_provider\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthSupportedAuthProvider\"\n                    },\n                    \"auth_provider_project_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"branch_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"db_name\": {\n                        \"type\": \"string\"\n                    },\n                    \"created_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"owned_by\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthProviderProjectOwnedBy\"\n                    },\n                    \"transfer_status\": {\n                        \"$ref\": \"#/components/schemas/NeonAuthProviderProjectTransferStatus\"\n                    },\n                    \"jwks_url\": {\n                        \"type\": \"string\"\n                    },\n                    \"base_url\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"GeneralError\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"message\",\n                    \"code\"\n                ],\n                \"properties\": {\n                    \"request_id\": {\n                        \"type\": \"string\",\n                        \"description\": \"Unique identifier for the request, useful for debugging.\\nYou can set this value manually by including an `X-Request-ID` header in the request. If not provided, the value will be generated automatically.\\n\"\n                    },\n                    \"code\": {\n                        \"$ref\": \"#/components/schemas/ErrorCode\"\n                    },\n                    \"message\": {\n                        \"description\": \"Error message\",\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"ErrorCode\": {\n                \"type\": \"string\",\n                \"default\": \"\"\n            },\n            \"BranchOperations\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/BranchResponse\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/OperationsResponse\"\n                    }\n                ]\n            },\n            \"EndpointOperations\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/EndpointResponse\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/OperationsResponse\"\n                    }\n                ]\n            },\n            \"DatabaseOperations\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/DatabaseResponse\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/OperationsResponse\"\n                    }\n                ]\n            },\n            \"RoleOperations\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/RoleResponse\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/OperationsResponse\"\n                    }\n                ]\n            },\n            \"JWKSCreationOperation\": {\n                \"allOf\": [\n                    {\n                        \"$ref\": \"#/components/schemas/JWKSResponse\"\n                    },\n                    {\n                        \"$ref\": \"#/components/schemas/OperationsResponse\"\n                    }\n                ]\n            },\n            \"SupportTicketSeverity\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"low\",\n                    \"normal\",\n                    \"high\",\n                    \"critical\",\n                    \"urgent\"\n                ]\n            },\n            \"AnnotationData\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Branch\"\n                ],\n                \"required\": [\n                    \"object\",\n                    \"value\"\n                ],\n                \"properties\": {\n                    \"object\": {\n                        \"$ref\": \"#/components/schemas/AnnotationObjectData\"\n                    },\n                    \"value\": {\n                        \"$ref\": \"#/components/schemas/AnnotationValueData\"\n                    },\n                    \"created_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    },\n                    \"updated_at\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                    }\n                }\n            },\n            \"AnnotationValueData\": {\n                \"type\": \"object\",\n                \"description\": \"Annotation properties.\",\n                \"x-tags\": [\n                    \"Branch\"\n                ],\n                \"maxProperties\": 50,\n                \"additionalProperties\": {\n                    \"type\": \"string\"\n                },\n                \"example\": {\n                    \"github-commit-ref\": \"github-branch-name\"\n                }\n            },\n            \"AnnotationObjectData\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Branch\"\n                ],\n                \"required\": [\n                    \"type\",\n                    \"id\"\n                ],\n                \"properties\": {\n                    \"type\": {\n                        \"type\": \"string\"\n                    },\n                    \"id\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"AnnotationCreateValueRequest\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Branch\"\n                ],\n                \"properties\": {\n                    \"annotation_value\": {\n                        \"$ref\": \"#/components/schemas/AnnotationValueData\"\n                    }\n                }\n            },\n            \"AnnotationResponse\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Branch\"\n                ],\n                \"required\": [\n                    \"annotation\"\n                ],\n                \"properties\": {\n                    \"annotation\": {\n                        \"$ref\": \"#/components/schemas/AnnotationData\"\n                    }\n                }\n            },\n            \"AnnotationsMapResponse\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Branch\"\n                ],\n                \"required\": [\n                    \"annotations\"\n                ],\n                \"properties\": {\n                    \"annotations\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                            \"$ref\": \"#/components/schemas/AnnotationData\"\n                        }\n                    }\n                }\n            },\n            \"ApplicationType\": {\n                \"type\": \"string\",\n                \"enum\": [\n                    \"vercel\",\n                    \"github\",\n                    \"datadog\",\n                    \"opentelemetry\"\n                ],\n                \"description\": \"Type of application integration\"\n            },\n            \"ProjectsApplicationsMapResponse\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Project\"\n                ],\n                \"description\": \"A map where key is a project ID and a value is a list of installed applications.\\n\",\n                \"required\": [\n                    \"applications\"\n                ],\n                \"properties\": {\n                    \"applications\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                                \"type\": \"string\",\n                                \"$ref\": \"#/components/schemas/ApplicationType\"\n                            }\n                        }\n                    }\n                },\n                \"example\": {\n                    \"applications\": {\n                        \"winter-boat-259881\": [\n                            \"vercel\",\n                            \"github\",\n                            \"datadog\",\n                            \"opentelemetry\"\n                        ]\n                    }\n                }\n            },\n            \"ProjectsIntegrationsMapResponse\": {\n                \"type\": \"object\",\n                \"x-tags\": [\n                    \"Project\"\n                ],\n                \"description\": \"A map where key is a project ID and a value is a list of installed integrations.\\n\",\n                \"required\": [\n                    \"integrations\"\n                ],\n                \"properties\": {\n                    \"integrations\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                                \"$ref\": \"#/components/schemas/ApplicationType\"\n                            }\n                        }\n                    }\n                },\n                \"example\": {\n                    \"integrations\": {\n                        \"winter-boat-259881\": [\n                            \"vercel\",\n                            \"github\",\n                            \"datadog\",\n                            \"opentelemetry\"\n                        ]\n                    }\n                }\n            },\n            \"CursorPaginationResponse\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"pagination\": {\n                        \"$ref\": \"#/components/schemas/CursorPagination\"\n                    }\n                }\n            },\n            \"CursorPagination\": {\n                \"type\": \"object\",\n                \"description\": \"To paginate the response, issue an initial request with `limit` value. Then, add the value returned in the response `.pagination.next` attribute into the request under the `cursor` query parameter to the subsequent request to retrieve next page in pagination. The contents on cursor `next` are opaque, clients are not expected to make any assumptions on the format of the data inside the cursor.\",\n                \"properties\": {\n                    \"next\": {\n                        \"type\": \"string\"\n                    },\n                    \"sort_by\": {\n                        \"type\": \"string\"\n                    },\n                    \"sort_order\": {\n                        \"type\": \"string\"\n                    }\n                }\n            },\n            \"Snapshot\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"id\",\n                    \"name\",\n                    \"created_at\"\n                ],\n                \"properties\": {\n                    \"id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"name\": {\n                        \"type\": \"string\"\n                    },\n                    \"lsn\": {\n                        \"type\": \"string\"\n                    },\n                    \"timestamp\": {\n                        \"type\": \"string\"\n                    },\n                    \"source_branch_id\": {\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-z0-9-]{1,60}$\"\n                    },\n                    \"created_at\": {\n                        \"type\": \"string\"\n                    },\n                    \"expires_at\": {\n                        \"type\": \"string\"\n                    },\n                    \"manual\": {\n                        \"type\": \"boolean\"\n                    }\n                }\n            },\n            \"SnapshotUpdateRequest\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"snapshot\"\n                ],\n                \"properties\": {\n                    \"snapshot\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                            \"name\": {\n                                \"type\": \"string\"\n                            }\n                        }\n                    }\n                }\n            },\n            \"BackupScheduleItem\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"frequency\"\n                ],\n                \"properties\": {\n                    \"frequency\": {\n                        \"type\": \"string\",\n                        \"description\": \"How often to take snapshots. Must be one of the following values:\\n  - `hourly`\\n  - `daily`\\n  - `weekly`\\n  - `monthly`\\n  - `yearly`\\n\"\n                    },\n                    \"hour\": {\n                        \"type\": \"integer\",\n                        \"minimum\": 0,\n                        \"maximum\": 23,\n                        \"description\": \"The hour of the day to take the snapshot (if applicable).\\n\"\n                    },\n                    \"day\": {\n                        \"type\": \"integer\",\n                        \"minimum\": 1,\n                        \"maximum\": 31,\n                        \"description\": \"The day of the week or month to take the snapshot (if applicable).\\n\"\n                    },\n                    \"month\": {\n                        \"type\": \"integer\",\n                        \"minimum\": 1,\n                        \"maximum\": 12,\n                        \"description\": \"The month of the year to take the snapshot (if applicable).\\n\"\n                    },\n                    \"retention_seconds\": {\n                        \"type\": \"integer\",\n                        \"minimum\": 3600,\n                        \"description\": \"How long to keep a snapshot (in seconds) before it's automatically deleted.\\nIf not set, the snapshot is kept indefinitely.\\n\"\n                    }\n                }\n            },\n            \"BackupSchedule\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"schedule\"\n                ],\n                \"properties\": {\n                    \"schedule\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"$ref\": \"#/components/schemas/BackupScheduleItem\"\n                        }\n                    }\n                }\n            },\n            \"SupportTicket\": {\n                \"type\": \"object\",\n                \"properties\": {\n                    \"salesforce_id\": {\n                        \"type\": \"string\"\n                    },\n                    \"failed_uploads\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"string\"\n                        }\n                    }\n                }\n            },\n            \"BranchSchemaJSON\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"tables\"\n                ],\n                \"properties\": {\n                    \"tables\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                                \"schema\",\n                                \"name\",\n                                \"columns\"\n                            ],\n                            \"properties\": {\n                                \"schema\": {\n                                    \"type\": \"string\"\n                                },\n                                \"name\": {\n                                    \"type\": \"string\"\n                                },\n                                \"columns\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                            \"name\",\n                                            \"type\"\n                                        ],\n                                        \"properties\": {\n                                            \"name\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"type\": {\n                                                \"type\": \"string\"\n                                            },\n                                            \"nullable\": {\n                                                \"type\": \"boolean\",\n                                                \"description\": \"Whether the column allows NULL values\"\n                                            },\n                                            \"generated\": {\n                                                \"type\": \"boolean\",\n                                                \"description\": \"Whether the column is a generated (computed) column\"\n                                            }\n                                        }\n                                    }\n                                },\n                                \"constraints\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                            \"type\",\n                                            \"columns\"\n                                        ],\n                                        \"properties\": {\n                                            \"type\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"Type of constraint. Possible values: `primary_key`, `unique`, `foreign_key`\\n\"\n                                            },\n                                            \"columns\": {\n                                                \"type\": \"array\",\n                                                \"items\": {\n                                                    \"type\": \"string\"\n                                                },\n                                                \"minItems\": 1,\n                                                \"description\": \"Column names participating in this constraint\"\n                                            },\n                                            \"name\": {\n                                                \"type\": \"string\",\n                                                \"description\": \"Optional name of the constraint\"\n                                            },\n                                            \"referenced_table\": {\n                                                \"type\": \"object\",\n                                                \"required\": [\n                                                    \"schema\",\n                                                    \"table\",\n                                                    \"columns\"\n                                                ],\n                                                \"properties\": {\n                                                    \"schema\": {\n                                                        \"type\": \"string\",\n                                                        \"description\": \"Schema of the referenced table\"\n                                                    },\n                                                    \"table\": {\n                                                        \"type\": \"string\",\n                                                        \"description\": \"Name of the referenced table\"\n                                                    },\n                                                    \"columns\": {\n                                                        \"type\": \"array\",\n                                                        \"items\": {\n                                                            \"type\": \"string\"\n                                                        },\n                                                        \"description\": \"Names of the referenced columns\"\n                                                    }\n                                                },\n                                                \"description\": \"For foreign keys - the referenced table information\"\n                                            }\n                                        }\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n            },\n            \"SystemStatusSummaryResponse\": {\n                \"type\": \"object\",\n                \"required\": [\n                    \"ongoing_incidents\",\n                    \"in_progress_maintenances\",\n                    \"scheduled_maintenances\"\n                ],\n                \"properties\": {\n                    \"ongoing_incidents\": {\n                        \"type\": \"integer\"\n                    },\n                    \"in_progress_maintenances\": {\n                        \"type\": \"integer\"\n                    },\n                    \"scheduled_maintenances\": {\n                        \"type\": \"integer\"\n                    }\n                }\n            }\n        },\n        \"parameters\": {\n            \"CursorParam\": {\n                \"name\": \"cursor\",\n                \"description\": \"A cursor to use in pagination. A cursor defines your place in the data list. Include `response.pagination.next` in subsequent API calls to fetch next page of the list.\",\n                \"in\": \"query\",\n                \"schema\": {\n                    \"type\": \"string\"\n                }\n            },\n            \"LimitParam\": {\n                \"name\": \"limit\",\n                \"description\": \"The maximum number of records to be returned in the response\",\n                \"in\": \"query\",\n                \"schema\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1,\n                    \"maximum\": 10000\n                }\n            },\n            \"SortOrderParam\": {\n                \"name\": \"sort_order\",\n                \"description\": \"Defines the sorting order of entities.\",\n                \"in\": \"query\",\n                \"schema\": {\n                    \"type\": \"string\",\n                    \"default\": \"desc\",\n                    \"enum\": [\n                        \"asc\",\n                        \"desc\"\n                    ]\n                }\n            },\n            \"TimeoutParam\": {\n                \"name\": \"timeout\",\n                \"in\": \"query\",\n                \"description\": \"Specify an explicit timeout in milliseconds to limit response delay.\\nAfter timing out, the incomplete list of project data fetched so far will be returned.\\nProjects still being fetched when the timeout occurred are listed in the \\\"unavailable\\\" attribute of the response.\\nIf not specified, an implicit implementation defined timeout is chosen with the same behaviour as above\\n\",\n                \"schema\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 100,\n                    \"maximum\": 30000\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/fixtures/vercel-openapi.json",
    "content": "{\n  \"openapi\": \"3.0.3\",\n  \"info\": {\n    \"title\": \"Vercel API\",\n    \"description\": \"Vercel combines the best developer experience with an obsessive focus on end-user performance. Our platform enables frontend teams to do their best work.\",\n    \"contact\": {\n      \"email\": \"support@vercel.com\",\n      \"name\": \"Vercel Support\",\n      \"url\": \"https://vercel.com/support\"\n    },\n    \"version\": \"0.0.1\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.vercel.com\",\n      \"description\": \"Production API\"\n    }\n  ],\n  \"paths\": {\n    \"/v1/access-groups/{idOrName}\": {\n      \"get\": {\n        \"description\": \"Allows to read an access group\",\n        \"operationId\": \"readAccessGroup\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Reads an access group\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamPermissions\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"IntegrationManager\",\n                          \"CreateProject\",\n                          \"FullProductionDeployment\",\n                          \"UsageViewer\",\n                          \"EnvVariableManager\",\n                          \"EnvironmentManager\",\n                          \"V0Builder\",\n                          \"V0Chatter\",\n                          \"V0Viewer\"\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"entitlements\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"v0\"\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"isDsyncManaged\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of this access group.\",\n                      \"example\": \"my-access-group\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Timestamp in milliseconds when the access group was created.\",\n                      \"example\": 1588720733602\n                    },\n                    \"teamId\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the team that this access group belongs to.\",\n                      \"example\": \"team_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Timestamp in milliseconds when the access group was last updated.\",\n                      \"example\": 1588720733602\n                    },\n                    \"accessGroupId\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the access group.\",\n                      \"example\": \"ag_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                    },\n                    \"membersCount\": {\n                      \"type\": \"number\",\n                      \"description\": \"Number of members in the access group.\",\n                      \"example\": 5\n                    },\n                    \"projectsCount\": {\n                      \"type\": \"number\",\n                      \"description\": \"Number of projects in the access group.\",\n                      \"example\": 2\n                    },\n                    \"teamRoles\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Roles that the team has in the access group.\",\n                      \"example\": [\n                        \"DEVELOPER\",\n                        \"BILLING\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"accessGroupId\",\n                    \"createdAt\",\n                    \"isDsyncManaged\",\n                    \"membersCount\",\n                    \"name\",\n                    \"projectsCount\",\n                    \"teamId\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"examples\": {\n              \"id\": {\n                \"summary\": \"Access group ID\",\n                \"value\": \"ag_1a2b3c4d5e6f7g8h9i0j\"\n              },\n              \"name\": {\n                \"summary\": \"Access group name\",\n                \"value\": \"My Access Group\"\n              }\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Allows to update an access group metadata\",\n        \"operationId\": \"updateAccessGroup\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update an access group\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"entitlements\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"v0\"\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of this access group.\",\n                      \"example\": \"my-access-group\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Timestamp in milliseconds when the access group was created.\",\n                      \"example\": 1588720733602\n                    },\n                    \"teamId\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the team that this access group belongs to.\",\n                      \"example\": \"team_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Timestamp in milliseconds when the access group was last updated.\",\n                      \"example\": 1588720733602\n                    },\n                    \"accessGroupId\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the access group.\",\n                      \"example\": \"ag_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                    },\n                    \"membersCount\": {\n                      \"type\": \"number\",\n                      \"description\": \"Number of members in the access group.\",\n                      \"example\": 5\n                    },\n                    \"projectsCount\": {\n                      \"type\": \"number\",\n                      \"description\": \"Number of projects in the access group.\",\n                      \"example\": 2\n                    },\n                    \"teamRoles\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Roles that the team has in the access group.\",\n                      \"example\": [\n                        \"DEVELOPER\",\n                        \"BILLING\"\n                      ]\n                    },\n                    \"teamPermissions\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Permissions that the team has in the access group.\",\n                      \"example\": [\n                        \"CreateProject\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"accessGroupId\",\n                    \"createdAt\",\n                    \"entitlements\",\n                    \"membersCount\",\n                    \"name\",\n                    \"projectsCount\",\n                    \"teamId\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the access group\",\n                    \"maxLength\": 50,\n                    \"pattern\": \"^[A-z0-9_ -]+$\",\n                    \"example\": \"My access group\"\n                  },\n                  \"projects\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"role\",\n                        \"projectId\"\n                      ],\n                      \"properties\": {\n                        \"projectId\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 256,\n                          \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n                          \"description\": \"The ID of the project.\"\n                        },\n                        \"role\": {\n                          \"type\": \"string\",\n                          \"example\": \"ADMIN\",\n                          \"description\": \"The project role that will be added to this Access Group. \\\\\\\"null\\\\\\\" will remove this project level role.\",\n                          \"nullable\": true,\n                          \"enum\": [\n                            \"ADMIN\",\n                            \"PROJECT_VIEWER\",\n                            \"PROJECT_DEVELOPER\",\n                            null\n                          ]\n                        }\n                      }\n                    }\n                  },\n                  \"membersToAdd\": {\n                    \"description\": \"List of members to add to the access group.\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"example\": [\n                      \"usr_1a2b3c4d5e6f7g8h9i0j\",\n                      \"usr_2b3c4d5e6f7g8h9i0j1k\"\n                    ]\n                  },\n                  \"membersToRemove\": {\n                    \"description\": \"List of members to remove from the access group.\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"example\": [\n                      \"usr_1a2b3c4d5e6f7g8h9i0j\",\n                      \"usr_2b3c4d5e6f7g8h9i0j1k\"\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"delete\": {\n        \"description\": \"Allows to delete an access group\",\n        \"operationId\": \"deleteAccessGroup\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Deletes an access group\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/access-groups/{idOrName}/members\": {\n      \"get\": {\n        \"description\": \"List members of an access group\",\n        \"operationId\": \"listAccessGroupMembers\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List members of an access group\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"members\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"avatar\": {\n                            \"type\": \"string\"\n                          },\n                          \"email\": {\n                            \"type\": \"string\"\n                          },\n                          \"uid\": {\n                            \"type\": \"string\"\n                          },\n                          \"username\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"string\"\n                          },\n                          \"teamRole\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"OWNER\",\n                              \"MEMBER\",\n                              \"DEVELOPER\",\n                              \"SECURITY\",\n                              \"BILLING\",\n                              \"VIEWER\",\n                              \"VIEWER_FOR_PLUS\",\n                              \"CONTRIBUTOR\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"email\",\n                          \"teamRole\",\n                          \"uid\",\n                          \"username\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"count\": {\n                          \"type\": \"number\"\n                        },\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"count\",\n                        \"next\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"members\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The ID or name of the Access Group.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID or name of the Access Group.\",\n              \"example\": \"ag_pavWOn1iLObbXLRiwVvzmPrTWyTf\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Limit how many access group members should be returned.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Limit how many access group members should be returned.\",\n              \"example\": 20,\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"next\",\n            \"description\": \"Continuation cursor to retrieve the next page of results.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Continuation cursor to retrieve the next page of results.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search project members by their name, username, and email.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Search project members by their name, username, and email.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/access-groups\": {\n      \"get\": {\n        \"description\": \"List access groups\",\n        \"operationId\": \"listAccessGroups\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List access groups for a team, project or member\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"accessGroups\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"members\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"projects\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"entitlements\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"teamPermissions\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"isDsyncManaged\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"The name of this access group.\",\n                                \"example\": \"my-access-group\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"string\",\n                                \"description\": \"Timestamp in milliseconds when the access group was created.\",\n                                \"example\": 1588720733602\n                              },\n                              \"teamId\": {\n                                \"type\": \"string\",\n                                \"description\": \"ID of the team that this access group belongs to.\",\n                                \"example\": \"team_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"string\",\n                                \"description\": \"Timestamp in milliseconds when the access group was last updated.\",\n                                \"example\": 1588720733602\n                              },\n                              \"accessGroupId\": {\n                                \"type\": \"string\",\n                                \"description\": \"ID of the access group.\",\n                                \"example\": \"ag_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                              },\n                              \"membersCount\": {\n                                \"type\": \"number\",\n                                \"description\": \"Number of members in the access group.\",\n                                \"example\": 5\n                              },\n                              \"projectsCount\": {\n                                \"type\": \"number\",\n                                \"description\": \"Number of projects in the access group.\",\n                                \"example\": 2\n                              },\n                              \"teamRoles\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\",\n                                \"description\": \"Roles that the team has in the access group.\",\n                                \"example\": [\n                                  \"DEVELOPER\",\n                                  \"BILLING\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"accessGroupId\",\n                              \"createdAt\",\n                              \"isDsyncManaged\",\n                              \"membersCount\",\n                              \"name\",\n                              \"projectsCount\",\n                              \"teamId\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"properties\": {\n                            \"count\": {\n                              \"type\": \"number\"\n                            },\n                            \"next\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"count\",\n                            \"next\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"accessGroups\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"description\": \"Filter access groups by project.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter access groups by project.\",\n              \"example\": \"prj_pavWOn1iLObbx3RowVvzmPrTWyTf\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search for access groups by name.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Search for access groups by name.\",\n              \"example\": \"example\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"membersLimit\",\n            \"description\": \"Number of members to include in the response.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Number of members to include in the response.\",\n              \"example\": 20,\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"projectsLimit\",\n            \"description\": \"Number of projects to include in the response.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Number of projects to include in the response.\",\n              \"example\": 20,\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Limit how many access group should be returned.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Limit how many access group should be returned.\",\n              \"example\": 20,\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"next\",\n            \"description\": \"Continuation cursor to retrieve the next page of results.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Continuation cursor to retrieve the next page of results.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Allows to create an access group\",\n        \"operationId\": \"createAccessGroup\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Creates an access group\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"entitlements\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"v0\"\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"membersCount\": {\n                      \"type\": \"number\"\n                    },\n                    \"projectsCount\": {\n                      \"type\": \"number\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of this access group.\",\n                      \"example\": \"my-access-group\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Timestamp in milliseconds when the access group was created.\",\n                      \"example\": 1588720733602\n                    },\n                    \"teamId\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the team that this access group belongs to.\",\n                      \"example\": \"team_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Timestamp in milliseconds when the access group was last updated.\",\n                      \"example\": 1588720733602\n                    },\n                    \"accessGroupId\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the access group.\",\n                      \"example\": \"ag_123a6c5209bc3778245d011443644c8d27dc2c50\"\n                    },\n                    \"teamRoles\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Roles that the team has in the access group.\",\n                      \"example\": [\n                        \"DEVELOPER\",\n                        \"BILLING\"\n                      ]\n                    },\n                    \"teamPermissions\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Permissions that the team has in the access group.\",\n                      \"example\": [\n                        \"CreateProject\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"accessGroupId\",\n                    \"createdAt\",\n                    \"entitlements\",\n                    \"membersCount\",\n                    \"name\",\n                    \"projectsCount\",\n                    \"teamId\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"name\"\n                ],\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the access group\",\n                    \"maxLength\": 50,\n                    \"pattern\": \"^[A-z0-9_ -]+$\",\n                    \"example\": \"My access group\"\n                  },\n                  \"projects\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"role\",\n                        \"projectId\"\n                      ],\n                      \"properties\": {\n                        \"projectId\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 256,\n                          \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n                          \"description\": \"The ID of the project.\"\n                        },\n                        \"role\": {\n                          \"type\": \"string\",\n                          \"example\": \"ADMIN\",\n                          \"description\": \"The project role that will be added to this Access Group. \\\\\\\"null\\\\\\\" will remove this project level role.\",\n                          \"nullable\": true,\n                          \"enum\": [\n                            \"ADMIN\",\n                            \"PROJECT_VIEWER\",\n                            \"PROJECT_DEVELOPER\",\n                            null\n                          ]\n                        }\n                      }\n                    }\n                  },\n                  \"membersToAdd\": {\n                    \"description\": \"List of members to add to the access group.\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"example\": [\n                      \"usr_1a2b3c4d5e6f7g8h9i0j\",\n                      \"usr_2b3c4d5e6f7g8h9i0j1k\"\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/access-groups/{idOrName}/projects\": {\n      \"get\": {\n        \"description\": \"List projects of an access group\",\n        \"operationId\": \"listAccessGroupProjects\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List projects of an access group\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"projects\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"role\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"ADMIN\",\n                              \"PROJECT_DEVELOPER\",\n                              \"PROJECT_VIEWER\",\n                              \"PROJECT_GUEST\"\n                            ]\n                          },\n                          \"createdAt\": {\n                            \"type\": \"string\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"string\"\n                          },\n                          \"project\": {\n                            \"properties\": {\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"framework\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"latestDeploymentId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"project\",\n                          \"projectId\",\n                          \"role\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"count\": {\n                          \"type\": \"number\"\n                        },\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"count\",\n                        \"next\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"pagination\",\n                    \"projects\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The ID or name of the Access Group.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID or name of the Access Group.\",\n              \"example\": \"ag_pavWOn1iLObbXLRiwVvzmPrTWyTf\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Limit how many access group projects should be returned.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Limit how many access group projects should be returned.\",\n              \"example\": 20,\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"next\",\n            \"description\": \"Continuation cursor to retrieve the next page of results.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Continuation cursor to retrieve the next page of results.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/access-groups/{accessGroupIdOrName}/projects\": {\n      \"post\": {\n        \"description\": \"Allows creation of an access group project\",\n        \"operationId\": \"createAccessGroupProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create an access group project\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamId\": {\n                      \"type\": \"string\"\n                    },\n                    \"accessGroupId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"role\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ADMIN\",\n                        \"PROJECT_DEVELOPER\",\n                        \"PROJECT_VIEWER\",\n                        \"PROJECT_GUEST\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"accessGroupId\",\n                    \"createdAt\",\n                    \"projectId\",\n                    \"role\",\n                    \"teamId\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"accessGroupIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"role\",\n                  \"projectId\"\n                ],\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256,\n                    \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n                    \"description\": \"The ID of the project.\"\n                  },\n                  \"role\": {\n                    \"type\": \"string\",\n                    \"example\": \"ADMIN\",\n                    \"description\": \"The project role that will be added to this Access Group.\",\n                    \"enum\": [\n                      \"ADMIN\",\n                      \"PROJECT_VIEWER\",\n                      \"PROJECT_DEVELOPER\"\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\": {\n      \"get\": {\n        \"description\": \"Allows reading an access group project\",\n        \"operationId\": \"readAccessGroupProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Reads an access group project\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamId\": {\n                      \"type\": \"string\"\n                    },\n                    \"accessGroupId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"role\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ADMIN\",\n                        \"PROJECT_DEVELOPER\",\n                        \"PROJECT_VIEWER\",\n                        \"PROJECT_GUEST\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"accessGroupId\",\n                    \"createdAt\",\n                    \"projectId\",\n                    \"role\",\n                    \"teamId\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"accessGroupIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"examples\": {\n              \"id\": {\n                \"summary\": \"Access group ID\",\n                \"value\": \"ag_1a2b3c4d5e6f7g8h9i0j\"\n              },\n              \"name\": {\n                \"summary\": \"Access group name\",\n                \"value\": \"My Access Group\"\n              }\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\"\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Allows update of an access group project\",\n        \"operationId\": \"updateAccessGroupProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update an access group project\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamId\": {\n                      \"type\": \"string\"\n                    },\n                    \"accessGroupId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"role\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ADMIN\",\n                        \"PROJECT_DEVELOPER\",\n                        \"PROJECT_VIEWER\",\n                        \"PROJECT_GUEST\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"accessGroupId\",\n                    \"createdAt\",\n                    \"projectId\",\n                    \"role\",\n                    \"teamId\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"accessGroupIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"examples\": {\n              \"id\": {\n                \"summary\": \"Access group ID\",\n                \"value\": \"ag_1a2b3c4d5e6f7g8h9i0j\"\n              },\n              \"name\": {\n                \"summary\": \"Access group name\",\n                \"value\": \"My Access Group\"\n              }\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\"\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"role\"\n                ],\n                \"properties\": {\n                  \"role\": {\n                    \"type\": \"string\",\n                    \"example\": \"ADMIN\",\n                    \"description\": \"The project role that will be added to this Access Group.\",\n                    \"enum\": [\n                      \"ADMIN\",\n                      \"PROJECT_VIEWER\",\n                      \"PROJECT_DEVELOPER\",\n                      null\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"delete\": {\n        \"description\": \"Allows deletion of an access group project\",\n        \"operationId\": \"deleteAccessGroupProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an access group project\",\n        \"tags\": [\n          \"access-groups\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"accessGroupIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"examples\": {\n              \"id\": {\n                \"summary\": \"Access group ID\",\n                \"value\": \"ag_1a2b3c4d5e6f7g8h9i0j\"\n              },\n              \"name\": {\n                \"summary\": \"Access group name\",\n                \"value\": \"My Access Group\"\n              }\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\"\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v8/artifacts/events\": {\n      \"post\": {\n        \"description\": \"Records an artifacts cache usage event. The body of this request is an array of cache usage events. The supported event types are `HIT` and `MISS`. The source is either `LOCAL` the cache event was on the users filesystem cache or `REMOTE` if the cache event is for a remote cache. When the event is a `HIT` the request also accepts a number `duration` which is the time taken to generate the artifact in the cache.\",\n        \"operationId\": \"recordEvents\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Record an artifacts cache usage event\",\n        \"tags\": [\n          \"artifacts\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success. Event recorded.\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the headers is invalid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\\nYou do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"in\": \"header\",\n            \"description\": \"The continuous integration or delivery environment where this artifact is downloaded.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The continuous integration or delivery environment where this artifact is downloaded.\",\n              \"example\": \"VERCEL\",\n              \"maxLength\": 50\n            },\n            \"name\": \"x-artifact-client-ci\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"1 if the client is an interactive shell. Otherwise 0\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"description\": \"1 if the client is an interactive shell. Otherwise 0\",\n              \"example\": 0,\n              \"minimum\": 0,\n              \"maximum\": 1\n            },\n            \"name\": \"x-artifact-client-interactive\"\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"additionalProperties\": false,\n                  \"required\": [\n                    \"sessionId\",\n                    \"source\",\n                    \"hash\",\n                    \"event\"\n                  ],\n                  \"properties\": {\n                    \"sessionId\": {\n                      \"type\": \"string\",\n                      \"description\": \"A UUID (universally unique identifer) for the session that generated this event.\"\n                    },\n                    \"source\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LOCAL\",\n                        \"REMOTE\"\n                      ],\n                      \"description\": \"One of `LOCAL` or `REMOTE`. `LOCAL` specifies that the cache event was from the user's filesystem cache. `REMOTE` specifies that the cache event is from a remote cache.\"\n                    },\n                    \"event\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"HIT\",\n                        \"MISS\"\n                      ],\n                      \"description\": \"One of `HIT` or `MISS`. `HIT` specifies that a cached artifact for `hash` was found in the cache. `MISS` specifies that a cached artifact with `hash` was not found.\"\n                    },\n                    \"hash\": {\n                      \"type\": \"string\",\n                      \"example\": \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n                      \"description\": \"The artifact hash\"\n                    },\n                    \"duration\": {\n                      \"type\": \"number\",\n                      \"description\": \"The time taken to generate the artifact. This should be sent as a body parameter on `HIT` events.\",\n                      \"example\": 400\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v8/artifacts/status\": {\n      \"get\": {\n        \"description\": \"Check the status of Remote Caching for this principal. Returns a JSON-encoded status indicating if Remote Caching is enabled, disabled, or disabled due to usage limits.\",\n        \"operationId\": \"status\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get status of Remote Caching for this principal\",\n        \"tags\": [\n          \"artifacts\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"disabled\",\n                        \"enabled\",\n                        \"over_limit\",\n                        \"paused\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"status\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v8/artifacts/{hash}\": {\n      \"put\": {\n        \"description\": \"Uploads a cache artifact identified by the `hash` specified on the path. The cache artifact can then be downloaded with the provided `hash`.\",\n        \"operationId\": \"uploadArtifact\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Upload a cache artifact\",\n        \"tags\": [\n          \"artifacts\"\n        ],\n        \"responses\": {\n          \"202\": {\n            \"description\": \"File successfully uploaded\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"urls\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Array of URLs where the artifact was updated\",\n                      \"example\": [\n                        \"https://api.vercel.com/v2/now/artifact/12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"urls\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\\nOne of the provided values in the headers is invalid\\nFile size is not valid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\\nYou do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"in\": \"header\",\n            \"description\": \"The artifact size in bytes\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The artifact size in bytes\",\n              \"type\": \"number\"\n            },\n            \"name\": \"Content-Length\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"The time taken to generate the uploaded artifact in milliseconds.\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"description\": \"The time taken to generate the uploaded artifact in milliseconds.\",\n              \"example\": 400\n            },\n            \"name\": \"x-artifact-duration\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"The continuous integration or delivery environment where this artifact was generated.\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The continuous integration or delivery environment where this artifact was generated.\",\n              \"example\": \"VERCEL\",\n              \"maxLength\": 50\n            },\n            \"name\": \"x-artifact-client-ci\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"1 if the client is an interactive shell. Otherwise 0\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"integer\",\n              \"description\": \"1 if the client is an interactive shell. Otherwise 0\",\n              \"example\": 0,\n              \"minimum\": 0,\n              \"maximum\": 1\n            },\n            \"name\": \"x-artifact-client-interactive\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"The base64 encoded tag for this artifact. The value is sent back to clients when the artifact is downloaded as the header `x-artifact-tag`\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The base64 encoded tag for this artifact. The value is sent back to clients when the artifact is downloaded as the header `x-artifact-tag`\",\n              \"example\": \"Tc0BmHvJYMIYJ62/zx87YqO0Flxk+5Ovip25NY825CQ=\",\n              \"maxLength\": 600\n            },\n            \"name\": \"x-artifact-tag\"\n          },\n          {\n            \"name\": \"hash\",\n            \"description\": \"The artifact hash\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"description\": \"The artifact hash\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/octet-stream\": {\n              \"schema\": {\n                \"type\": \"string\",\n                \"format\": \"binary\"\n              }\n            }\n          },\n          \"required\": true\n        },\n        \"x-speakeasy-test\": false\n      },\n      \"get\": {\n        \"description\": \"Downloads a cache artifact indentified by its `hash` specified on the request path. The artifact is downloaded as an octet-stream. The client should verify the content-length header and response body.\",\n        \"operationId\": \"downloadArtifact\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Download a cache artifact\",\n        \"tags\": [\n          \"artifacts\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The artifact was found and is downloaded as a stream. Content-Length should be verified.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"string\",\n                  \"format\": \"binary\",\n                  \"description\": \"An octet stream response that will be piped to the response stream.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\\nOne of the provided values in the headers is invalid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\\nYou do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The artifact was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"in\": \"header\",\n            \"description\": \"The continuous integration or delivery environment where this artifact is downloaded.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The continuous integration or delivery environment where this artifact is downloaded.\",\n              \"example\": \"VERCEL\",\n              \"maxLength\": 50\n            },\n            \"name\": \"x-artifact-client-ci\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"1 if the client is an interactive shell. Otherwise 0\",\n            \"schema\": {\n              \"type\": \"integer\",\n              \"description\": \"1 if the client is an interactive shell. Otherwise 0\",\n              \"example\": 0,\n              \"minimum\": 0,\n              \"maximum\": 1\n            },\n            \"name\": \"x-artifact-client-interactive\"\n          },\n          {\n            \"name\": \"hash\",\n            \"description\": \"The artifact hash\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"description\": \"The artifact hash\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"head\": {\n        \"description\": \"Check that a cache artifact with the given `hash` exists. This request returns response headers only and is equivalent to a `GET` request to this endpoint where the response contains no body.\",\n        \"operationId\": \"artifactExists\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Check if a cache artifact exists\",\n        \"tags\": [\n          \"artifacts\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The artifact was found and headers are returned\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\\nYou do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The artifact was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"hash\",\n            \"description\": \"The artifact hash\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"description\": \"The artifact hash\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v8/artifacts\": {\n      \"post\": {\n        \"description\": \"Query information about an array of artifacts.\",\n        \"operationId\": \"artifactQuery\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Query information about an artifact\",\n        \"tags\": [\n          \"artifacts\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"additionalProperties\": {\n                    \"nullable\": true,\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"size\": {\n                            \"type\": \"number\"\n                          },\n                          \"taskDurationMs\": {\n                            \"type\": \"number\"\n                          },\n                          \"tag\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"size\",\n                          \"taskDurationMs\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"error\": {\n                            \"properties\": {\n                              \"message\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"message\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"error\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    ]\n                  },\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"The customer has reached their spend cap limit and has been paused. An owner can disable the cap or raise the limit in settings.\\nThe Remote Caching usage limit has been reached for this account for this billing cycle.\\nRemote Caching has been disabled for this team or user. An owner can enable it in the billing settings.\\nYou do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"hashes\"\n                ],\n                \"properties\": {\n                  \"hashes\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"description\": \"artifact hashes\",\n                    \"type\": \"array\",\n                    \"example\": [\n                      \"12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n                      \"34HKQaOmR5t5Uy6vasdasdasdasd\"\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/billing/charges\": {\n      \"get\": {\n        \"description\": \"Returns the billing charge data in FOCUS v1.3 JSONL format for a specified Vercel team, within a date range specified by `from` and `to` query parameters. Supports 1-day granularity with a maximum date range of 1 year. The response is streamed as newline-delimited JSON (JSONL) and can be optionally compressed with gzip if the `Accept-Encoding: gzip` header is provided. This is only available for Owner, Member, Developer, Security, Billing, and Enterprise Viewer roles for the supplied team.\",\n        \"operationId\": \"listBillingCharges\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List FOCUS billing charges\",\n        \"tags\": [\n          \"billing\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/jsonl\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"BilledCost\": {\n                      \"type\": \"number\",\n                      \"description\": \"Charge amount serving as the basis for invoicing\"\n                    },\n                    \"BillingCurrency\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"USD\"\n                      ],\n                      \"description\": \"Currency used for billing (ISO 4217)\"\n                    },\n                    \"ChargeCategory\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"Adjustment\",\n                        \"Credit\",\n                        \"Purchase\",\n                        \"Tax\",\n                        \"Usage\"\n                      ],\n                      \"description\": \"Classification of the charge\"\n                    },\n                    \"ChargePeriodStart\": {\n                      \"type\": \"string\",\n                      \"description\": \"Inclusive start of the charge period (ISO 8601 UTC)\"\n                    },\n                    \"ChargePeriodEnd\": {\n                      \"type\": \"string\",\n                      \"description\": \"Exclusive end of the charge period (ISO 8601 UTC) - Required in v1.3\"\n                    },\n                    \"ConsumedQuantity\": {\n                      \"type\": \"number\",\n                      \"description\": \"Volume of resource consumed\"\n                    },\n                    \"ConsumedUnit\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unit of measurement for consumed quantity\"\n                    },\n                    \"EffectiveCost\": {\n                      \"type\": \"number\",\n                      \"description\": \"Amortized cost representation including discounts, pre-commitment credit purchase amount, etc.\"\n                    },\n                    \"RegionId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Provider-assigned region identifier\"\n                    },\n                    \"RegionName\": {\n                      \"type\": \"string\",\n                      \"description\": \"Display name for the region\"\n                    },\n                    \"ServiceName\": {\n                      \"type\": \"string\",\n                      \"description\": \"Display name for the service/product\"\n                    },\n                    \"ServiceCategory\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"AI and Machine Learning\",\n                        \"Analytics\",\n                        \"Business Applications\",\n                        \"Compute\",\n                        \"Databases\",\n                        \"Developer Tools\",\n                        \"Multicloud\",\n                        \"Identity\",\n                        \"Integration\",\n                        \"Internet of Things\",\n                        \"Management and Governance\",\n                        \"Media\",\n                        \"Migration\",\n                        \"Mobile\",\n                        \"Networking\",\n                        \"Security\",\n                        \"Storage\",\n                        \"Web\",\n                        \"Other\"\n                      ],\n                      \"description\": \"High-level category of the service\"\n                    },\n                    \"ServiceProviderName\": {\n                      \"type\": \"string\",\n                      \"description\": \"Entity making the resource/service available for purchase (v1.3)\"\n                    },\n                    \"Tags\": {\n                      \"additionalProperties\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Charge metadata including the Vercel ProjectId and ProjectName information\"\n                    },\n                    \"PricingCategory\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"Other\",\n                        \"Standard\",\n                        \"Dynamic\",\n                        \"Committed\"\n                      ],\n                      \"description\": \"Pricing model used for the charge.\"\n                    },\n                    \"PricingCurrency\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"USD\"\n                      ]\n                    },\n                    \"PricingQuantity\": {\n                      \"type\": \"number\"\n                    },\n                    \"PricingUnit\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"BilledCost\",\n                    \"BillingCurrency\",\n                    \"ChargeCategory\",\n                    \"ChargePeriodEnd\",\n                    \"ChargePeriodStart\",\n                    \"ConsumedQuantity\",\n                    \"ConsumedUnit\",\n                    \"EffectiveCost\",\n                    \"PricingCategory\",\n                    \"PricingCurrency\",\n                    \"PricingQuantity\",\n                    \"PricingUnit\",\n                    \"ServiceName\",\n                    \"ServiceProviderName\",\n                    \"Tags\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Extension of the base schema for Focus charges. Includes pricing information for all customers.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          },\n          \"503\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"from\",\n            \"description\": \"Inclusive start of the date range as an ISO 8601 date-time string in UTC.\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"Inclusive start of the date range as an ISO 8601 date-time string in UTC.\",\n              \"example\": \"2025-01-01T00:00:00.000Z\"\n            }\n          },\n          {\n            \"name\": \"to\",\n            \"description\": \"Exclusive end of the date range as an ISO 8601 date-time string in UTC.\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"Exclusive end of the date range as an ISO 8601 date-time string in UTC.\",\n              \"example\": \"2025-01-31T00:00:00.000Z\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-codeSamples\": [\n          {\n            \"lang\": \"curl\",\n            \"label\": \"cURL\",\n            \"source\": \"curl -N --request GET \\\\\\n  --url 'https://api.vercel.com/v1/billing/charges?teamId=\\u003cteam\\u003e\\u0026from=\\u003cfrom_date\\u003e\\u0026to=\\u003cto_date\\u003e' \\\\\\n  --header 'Authorization: Bearer \\u003ctoken\\u003e' \\\\\\n  --header 'Accept-Encoding: gzip' \\\\\\n  --compressed\\n\"\n          }\n        ]\n      }\n    },\n    \"/v1/billing/contract-commitments\": {\n      \"get\": {\n        \"description\": \"Returns commitment allocations per contract period in FOCUS v1.3 JSONL format for a specified Vercel team. The response is streamed as newline-delimited JSON (JSONL). This endpoint is only applicable to Enterprise Vercel customers. An empty response is returned for non-Enterprise (Pro/Flex) customers.\",\n        \"operationId\": \"listContractCommitments\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List FOCUS contract commitments\",\n        \"tags\": [\n          \"billing\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/jsonl\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"ContractCommitmentCategory\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"Usage\",\n                        \"Spend\"\n                      ],\n                      \"description\": \"Highest-level classification of the contract commitment. 'Spend' for Pro ($20/month), 'Usage' for Enterprise (MIU allocation).\"\n                    },\n                    \"ContractCommitmentCost\": {\n                      \"type\": \"number\",\n                      \"description\": \"Monetary value of the contract commitment (in BillingCurrency). Required when ContractCommitmentCategory is 'Spend'. For Pro: 20 (USD)\"\n                    },\n                    \"ContractCommitmentDescription\": {\n                      \"type\": \"string\",\n                      \"description\": \"Self-contained summary of the contract commitment's terms\"\n                    },\n                    \"ContractCommitmentId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unique identifier for a single contract term within a contract. Maps to specific commitment period or allocation ID.\"\n                    },\n                    \"ContractCommitmentPeriodStart\": {\n                      \"type\": \"string\",\n                      \"description\": \"Inclusive start of the commitment term period (ISO 8601 UTC)\"\n                    },\n                    \"ContractCommitmentPeriodEnd\": {\n                      \"type\": \"string\",\n                      \"description\": \"Exclusive end of the commitment term period (ISO 8601 UTC)\"\n                    },\n                    \"ContractCommitmentQuantity\": {\n                      \"type\": \"number\",\n                      \"description\": \"Amount associated with the commitment (in ContractCommitmentUnit). Required when ContractCommitmentCategory is 'Usage'. For Enterprise: MIU allocation amount.\"\n                    },\n                    \"ContractCommitmentType\": {\n                      \"type\": \"string\",\n                      \"description\": \"Service-provider-assigned name identifying the commitment type. 'Pro' or 'Enterprise' for Vercel.\"\n                    },\n                    \"ContractCommitmentUnit\": {\n                      \"type\": \"string\",\n                      \"description\": \"Measurement unit for ContractCommitmentQuantity. 'MIUs' for Enterprise, 'USD' for Pro spend commitments.\"\n                    },\n                    \"ContractId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Service-provider-assigned identifier for a contract. Maps to Orb Subscription ID for Vercel.\"\n                    },\n                    \"ContractPeriodStart\": {\n                      \"type\": \"string\",\n                      \"description\": \"Inclusive start of the overall contract period (ISO 8601 UTC)\"\n                    },\n                    \"ContractPeriodEnd\": {\n                      \"type\": \"string\",\n                      \"description\": \"Exclusive end of the overall contract period (ISO 8601 UTC)\"\n                    },\n                    \"BillingCurrency\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"BillingCurrency\",\n                    \"ContractCommitmentCategory\",\n                    \"ContractCommitmentId\",\n                    \"ContractCommitmentPeriodEnd\",\n                    \"ContractCommitmentPeriodStart\",\n                    \"ContractCommitmentType\",\n                    \"ContractCommitmentUnit\",\n                    \"ContractId\",\n                    \"ContractPeriodEnd\",\n                    \"ContractPeriodStart\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Contract commitment information describing terms within a contract. New in FOCUS v1.3 - tracks commitment terms separate from cost/usage rows. For Vercel: - Pro: $20 monthly spend commitment - Enterprise: MIU allocation per period (usage commitment)\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/bulk-redirects\": {\n      \"put\": {\n        \"description\": \"Stages new redirects for a project and returns the new version.\",\n        \"operationId\": \"stageRedirects\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Stages new redirects for a project.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"alias\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier for the version.\"\n                        },\n                        \"key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"redirectCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of redirects in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging link for previewing redirects in this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"key\",\n                        \"lastModified\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"alias\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"projectId\",\n                  \"teamId\"\n                ],\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"teamId\": {\n                    \"type\": \"string\"\n                  },\n                  \"overwrite\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"redirects\": {\n                    \"type\": \"array\",\n                    \"default\": [],\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"source\",\n                        \"destination\"\n                      ],\n                      \"properties\": {\n                        \"source\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 2048\n                        },\n                        \"destination\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 2048\n                        },\n                        \"statusCode\": {\n                          \"oneOf\": [\n                            {\n                              \"type\": \"number\"\n                            },\n                            {\n                              \"type\": \"string\"\n                            }\n                          ]\n                        },\n                        \"permanent\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"caseSensitive\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"query\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"preserveQueryParams\": {\n                          \"type\": \"boolean\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"get\": {\n        \"description\": \"Get the version history for a project's bulk redirects\",\n        \"operationId\": \"getRedirects\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Gets project-level redirects.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\",\n                      \"additionalProperties\": true\n                    },\n                    {\n                      \"properties\": {\n                        \"redirects\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"statusCode\": {\n                                \"type\": \"number\"\n                              },\n                              \"permanent\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"sensitive\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"caseSensitive\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"query\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"preserveQueryParams\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"source\": {\n                                \"type\": \"string\"\n                              },\n                              \"destination\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"destination\",\n                              \"source\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"The unique identifier for the version.\"\n                            },\n                            \"key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"redirectCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of redirects in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging link for previewing redirects in this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"key\",\n                            \"lastModified\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"pagination\": {\n                          \"properties\": {\n                            \"page\": {\n                              \"type\": \"number\"\n                            },\n                            \"per_page\": {\n                              \"type\": \"number\"\n                            },\n                            \"numPages\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"numPages\",\n                            \"page\",\n                            \"per_page\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"pagination\",\n                        \"redirects\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"versionId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"q\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"diff\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"oneOf\": [\n                {\n                  \"type\": \"boolean\"\n                },\n                {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"only\"\n                  ]\n                }\n              ]\n            }\n          },\n          {\n            \"name\": \"page\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"integer\",\n              \"minimum\": 1\n            }\n          },\n          {\n            \"name\": \"per_page\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"integer\",\n              \"minimum\": 10,\n              \"maximum\": 250\n            }\n          },\n          {\n            \"name\": \"sort_by\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"source\",\n                \"destination\",\n                \"statusCode\"\n              ]\n            }\n          },\n          {\n            \"name\": \"sort_order\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"asc\",\n                \"desc\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Deletes the provided redirects from the latest version of the projects' bulk redirects. Stages a new change with the new redirects and returns the alias for the new version in the response.\",\n        \"operationId\": \"deleteRedirects\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete project-level redirects.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"alias\": {\n                          \"type\": \"string\"\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"The unique identifier for the version.\"\n                            },\n                            \"key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"redirectCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of redirects in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging link for previewing redirects in this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"key\",\n                            \"lastModified\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"alias\": {\n                          \"nullable\": true\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"The unique identifier for the version.\"\n                            },\n                            \"key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"redirectCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of redirects in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging link for previewing redirects in this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"key\",\n                            \"lastModified\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"alias\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"alias\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"The unique identifier for the version.\"\n                            },\n                            \"key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"redirectCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of redirects in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging link for previewing redirects in this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"key\",\n                            \"lastModified\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"alias\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"redirects\": {\n                    \"description\": \"The redirects to delete. The source of the redirect is used to match the redirect to delete.\",\n                    \"type\": \"array\",\n                    \"minItems\": 1,\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                },\n                \"required\": [\n                  \"redirects\"\n                ]\n              }\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"description\": \"Edits a single redirect identified by its source path. Stages a new change with the modified redirect and returns the alias for the new version in the response.\",\n        \"operationId\": \"editRedirect\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Edit a project-level redirect.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"alias\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier for the version.\"\n                        },\n                        \"key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"redirectCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of redirects in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging link for previewing redirects in this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"key\",\n                        \"lastModified\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"alias\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"redirect\": {\n                    \"description\": \"The redirect object to edit. The source field is used to match the redirect to modify.\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"source\": {\n                        \"type\": \"string\"\n                      },\n                      \"destination\": {\n                        \"type\": \"string\"\n                      },\n                      \"statusCode\": {\n                        \"type\": \"number\"\n                      },\n                      \"permanent\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"caseSensitive\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"query\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"preserveQueryParams\": {\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"required\": [\n                      \"source\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  \"restore\": {\n                    \"description\": \"If true, restores the redirect from the latest production version to staging.\",\n                    \"type\": \"boolean\"\n                  }\n                },\n                \"required\": [\n                  \"redirect\"\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/bulk-redirects/restore\": {\n      \"post\": {\n        \"description\": \"Restores the provided redirects in the staging version to the value in the production version. If no production version exists, removes the redirects from staging.\",\n        \"operationId\": \"restoreRedirects\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Restore staged project-level redirects to their production version.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier for the version.\"\n                        },\n                        \"key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"redirectCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of redirects in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging link for previewing redirects in this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"key\",\n                        \"lastModified\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"restored\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"failedToRestore\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"failedToRestore\",\n                    \"restored\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"redirects\": {\n                    \"description\": \"The redirects to restore. The source of the redirect is used to match the redirect to restore.\",\n                    \"type\": \"array\",\n                    \"minItems\": 1,\n                    \"maxItems\": 100,\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                },\n                \"required\": [\n                  \"redirects\"\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/bulk-redirects/versions\": {\n      \"get\": {\n        \"description\": \"Get the version history for a project's bulk redirects\",\n        \"operationId\": \"getVersions\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get the version history for a project's redirects.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"versions\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier for the version.\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\",\n                            \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                          },\n                          \"lastModified\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                          },\n                          \"isStaging\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                          },\n                          \"isLive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Whether this version is currently live in production.\"\n                          },\n                          \"redirectCount\": {\n                            \"type\": \"number\",\n                            \"description\": \"The number of redirects in this version.\"\n                          },\n                          \"alias\": {\n                            \"type\": \"string\",\n                            \"description\": \"The staging link for previewing redirects in this version.\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdBy\",\n                          \"id\",\n                          \"key\",\n                          \"lastModified\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"versions\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Update a version by promoting staging to production or restoring a previous production version\",\n        \"operationId\": \"updateVersion\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Promote a staging version to production or restore a previous production version.\",\n        \"tags\": [\n          \"bulk-redirects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier for the version.\"\n                        },\n                        \"key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The key of the version. The key may be duplicated across versions if the contents are the same as a different version.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Optional name for the version. If not provided, defaults to an ISO timestamp string.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version has not been promoted to production yet and is not serving end users.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"redirectCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of redirects in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging link for previewing redirects in this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"key\",\n                        \"lastModified\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"id\",\n                  \"action\"\n                ],\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"promote\",\n                      \"restore\",\n                      \"discard\"\n                    ]\n                  },\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v2/projects/{projectIdOrName}/checks\": {\n      \"get\": {\n        \"description\": \"List all checks for a project, optionally filtered by target.\",\n        \"operationId\": \"listProjectChecks\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List all checks for a project\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"checks\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"isRerequestable\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"requires\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"build-ready\",\n                              \"deployment-url\",\n                              \"none\"\n                            ]\n                          },\n                          \"source\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration\"\n                                    ]\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"resourceId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"externalResourceId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"webhook\"\n                                    ]\n                                  },\n                                  \"webhookId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"git-provider\"\n                                    ]\n                                  },\n                                  \"provider\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"github\",\n                                      \"gitlab\",\n                                      \"bitbucket\"\n                                    ]\n                                  },\n                                  \"externalCheckName\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"externalCheckName\",\n                                  \"kind\",\n                                  \"provider\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"blocks\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"none\",\n                              \"build-start\",\n                              \"deployment-start\",\n                              \"deployment-alias\",\n                              \"deployment-promotion\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"sourceKind\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"integration\",\n                              \"webhook\",\n                              \"git-provider\",\n                              \"vercel\",\n                              \"integration\",\n                              \"webhook\",\n                              \"git-provider\"\n                            ]\n                          },\n                          \"sourceIntegrationConfigurationId\": {\n                            \"type\": \"string\"\n                          },\n                          \"timeout\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"deletedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"blocks\",\n                          \"createdAt\",\n                          \"id\",\n                          \"isRerequestable\",\n                          \"name\",\n                          \"ownerId\",\n                          \"projectId\",\n                          \"requires\",\n                          \"source\",\n                          \"sourceKind\",\n                          \"targets\",\n                          \"timeout\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"checks\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"blocks\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"build-start\",\n                \"deployment-start\",\n                \"deployment-alias\",\n                \"deployment-promotion\",\n                \"none\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates a new check for a project.\",\n        \"operationId\": \"createProjectCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a check\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"isRerequestable\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"requires\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"build-ready\",\n                        \"deployment-url\",\n                        \"none\"\n                      ]\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"webhook\"\n                              ]\n                            },\n                            \"webhookId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"git-provider\"\n                              ]\n                            },\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"externalCheckName\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"externalCheckName\",\n                            \"kind\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"blocks\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"none\",\n                        \"build-start\",\n                        \"deployment-start\",\n                        \"deployment-alias\",\n                        \"deployment-promotion\"\n                      ]\n                    },\n                    \"targets\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"sourceKind\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"integration\",\n                        \"webhook\",\n                        \"git-provider\",\n                        \"vercel\",\n                        \"integration\",\n                        \"webhook\",\n                        \"git-provider\"\n                      ]\n                    },\n                    \"sourceIntegrationConfigurationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"timeout\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"deletedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"blocks\",\n                    \"createdAt\",\n                    \"id\",\n                    \"isRerequestable\",\n                    \"name\",\n                    \"ownerId\",\n                    \"projectId\",\n                    \"requires\",\n                    \"source\",\n                    \"sourceKind\",\n                    \"targets\",\n                    \"timeout\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"isRerequestable\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"requires\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"build-ready\",\n                      \"deployment-url\",\n                      \"none\"\n                    ],\n                    \"default\": \"deployment-url\"\n                  },\n                  \"targets\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"uniqueItems\": true\n                  },\n                  \"blocks\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"build-start\",\n                      \"deployment-start\",\n                      \"deployment-alias\",\n                      \"deployment-promotion\",\n                      \"none\"\n                    ],\n                    \"default\": \"deployment-alias\"\n                  },\n                  \"source\": {\n                    \"type\": \"object\",\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\",\n                            \"default\": \"integration\"\n                          },\n                          \"externalResourceId\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      },\n                      {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\"\n                          },\n                          \"webhookId\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"kind\"\n                        ]\n                      },\n                      {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\"\n                          },\n                          \"externalCheckName\": {\n                            \"type\": \"string\"\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"github\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"kind\",\n                          \"externalCheckName\",\n                          \"provider\"\n                        ]\n                      }\n                    ]\n                  },\n                  \"timeout\": {\n                    \"type\": \"number\",\n                    \"default\": 300\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"requires\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v2/projects/{projectIdOrName}/checks/{checkId}\": {\n      \"get\": {\n        \"description\": \"Return a detailed response for a single check.\",\n        \"operationId\": \"getProjectCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a check\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"isRerequestable\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"requires\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"build-ready\",\n                        \"deployment-url\",\n                        \"none\"\n                      ]\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"webhook\"\n                              ]\n                            },\n                            \"webhookId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"git-provider\"\n                              ]\n                            },\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"externalCheckName\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"externalCheckName\",\n                            \"kind\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"blocks\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"none\",\n                        \"build-start\",\n                        \"deployment-start\",\n                        \"deployment-alias\",\n                        \"deployment-promotion\"\n                      ]\n                    },\n                    \"targets\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"sourceKind\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"integration\",\n                        \"webhook\",\n                        \"git-provider\",\n                        \"vercel\",\n                        \"integration\",\n                        \"webhook\",\n                        \"git-provider\"\n                      ]\n                    },\n                    \"sourceIntegrationConfigurationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"timeout\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"deletedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"blocks\",\n                    \"createdAt\",\n                    \"id\",\n                    \"isRerequestable\",\n                    \"name\",\n                    \"ownerId\",\n                    \"projectId\",\n                    \"requires\",\n                    \"source\",\n                    \"sourceKind\",\n                    \"targets\",\n                    \"timeout\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"description\": \"The ID of the resource that will be updated.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the resource that will be updated.\",\n              \"example\": \"stf_89ha9sdhh9a9\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update an existing check.\",\n        \"operationId\": \"updateProjectCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a check\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"isRerequestable\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"requires\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"build-ready\",\n                        \"deployment-url\",\n                        \"none\"\n                      ]\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"webhook\"\n                              ]\n                            },\n                            \"webhookId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"git-provider\"\n                              ]\n                            },\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"externalCheckName\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"externalCheckName\",\n                            \"kind\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"blocks\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"none\",\n                        \"build-start\",\n                        \"deployment-start\",\n                        \"deployment-alias\",\n                        \"deployment-promotion\"\n                      ]\n                    },\n                    \"targets\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"sourceKind\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"integration\",\n                        \"webhook\",\n                        \"git-provider\",\n                        \"vercel\",\n                        \"integration\",\n                        \"webhook\",\n                        \"git-provider\"\n                      ]\n                    },\n                    \"sourceIntegrationConfigurationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"timeout\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"deletedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"blocks\",\n                    \"createdAt\",\n                    \"id\",\n                    \"isRerequestable\",\n                    \"name\",\n                    \"ownerId\",\n                    \"projectId\",\n                    \"requires\",\n                    \"source\",\n                    \"sourceKind\",\n                    \"targets\",\n                    \"timeout\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"isRerequestable\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"requires\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"build-ready\",\n                      \"deployment-url\"\n                    ],\n                    \"default\": \"deployment-url\"\n                  },\n                  \"targets\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"blocks\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"build-start\",\n                      \"deployment-start\",\n                      \"deployment-alias\",\n                      \"deployment-promotion\",\n                      \"none\"\n                    ],\n                    \"default\": \"deployment-alias\"\n                  },\n                  \"timeout\": {\n                    \"type\": \"number\",\n                    \"default\": 300\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"description\": \"Delete an existing check and all of its runs.\",\n        \"operationId\": \"deleteProjectCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a check\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"success\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"success\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/projects/{projectIdOrName}/checks/{checkId}/runs\": {\n      \"get\": {\n        \"description\": \"List all runs associated with a given check.\",\n        \"operationId\": \"listCheckRuns\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List runs for a check\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"runs\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"checkId\": {\n                            \"type\": \"string\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\"\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"source\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration\"\n                                    ]\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"resourceId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"externalResourceId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"webhook\"\n                                    ]\n                                  },\n                                  \"webhookId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"git-provider\"\n                                    ]\n                                  },\n                                  \"provider\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"github\",\n                                      \"gitlab\",\n                                      \"bitbucket\"\n                                    ]\n                                  },\n                                  \"externalCheckName\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"externalCheckName\",\n                                  \"kind\",\n                                  \"provider\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"requires\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"build-ready\",\n                              \"deployment-url\",\n                              \"none\"\n                            ]\n                          },\n                          \"blocks\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"none\",\n                              \"build-start\",\n                              \"deployment-start\",\n                              \"deployment-alias\",\n                              \"deployment-promotion\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"queued\",\n                              \"running\",\n                              \"completed\"\n                            ]\n                          },\n                          \"conclusion\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"timeout\",\n                              \"canceled\",\n                              \"skipped\",\n                              \"failed\",\n                              \"neutral\",\n                              \"succeeded\"\n                            ]\n                          },\n                          \"conclusionText\": {\n                            \"type\": \"string\"\n                          },\n                          \"externalId\": {\n                            \"type\": \"string\"\n                          },\n                          \"externalUrl\": {\n                            \"type\": \"string\"\n                          },\n                          \"output\": {\n                            \"additionalProperties\": true,\n                            \"type\": \"object\"\n                          },\n                          \"timeout\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"completedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"checkId\",\n                          \"createdAt\",\n                          \"deploymentId\",\n                          \"id\",\n                          \"name\",\n                          \"ownerId\",\n                          \"source\",\n                          \"status\",\n                          \"timeout\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"runs\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"description\": \"The ID of the resource that will be updated.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the resource that will be updated.\",\n              \"example\": \"ckr_89ha9sdhh9a9\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/deployments/{deploymentId}/check-runs\": {\n      \"get\": {\n        \"description\": \"List all check runs for a deployment.\",\n        \"operationId\": \"listDeploymentCheckRuns\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List check runs for a deployment\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"runs\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"checkId\": {\n                            \"type\": \"string\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\"\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"source\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration\"\n                                    ]\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"resourceId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"externalResourceId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"webhook\"\n                                    ]\n                                  },\n                                  \"webhookId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"git-provider\"\n                                    ]\n                                  },\n                                  \"provider\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"github\",\n                                      \"gitlab\",\n                                      \"bitbucket\"\n                                    ]\n                                  },\n                                  \"externalCheckName\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"externalCheckName\",\n                                  \"kind\",\n                                  \"provider\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"requires\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"build-ready\",\n                              \"deployment-url\",\n                              \"none\"\n                            ]\n                          },\n                          \"blocks\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"none\",\n                              \"build-start\",\n                              \"deployment-start\",\n                              \"deployment-alias\",\n                              \"deployment-promotion\"\n                            ]\n                          },\n                          \"targets\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"queued\",\n                              \"running\",\n                              \"completed\"\n                            ]\n                          },\n                          \"conclusion\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"timeout\",\n                              \"canceled\",\n                              \"skipped\",\n                              \"failed\",\n                              \"neutral\",\n                              \"succeeded\"\n                            ]\n                          },\n                          \"conclusionText\": {\n                            \"type\": \"string\"\n                          },\n                          \"externalId\": {\n                            \"type\": \"string\"\n                          },\n                          \"externalUrl\": {\n                            \"type\": \"string\"\n                          },\n                          \"output\": {\n                            \"additionalProperties\": true,\n                            \"type\": \"object\"\n                          },\n                          \"timeout\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"completedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"checkId\",\n                          \"createdAt\",\n                          \"deploymentId\",\n                          \"id\",\n                          \"name\",\n                          \"ownerId\",\n                          \"source\",\n                          \"status\",\n                          \"timeout\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"runs\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates a new check run for a deployment.\",\n        \"operationId\": \"createDeploymentCheckRun\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a check run\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"checkId\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"deploymentId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"webhook\"\n                              ]\n                            },\n                            \"webhookId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"git-provider\"\n                              ]\n                            },\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"externalCheckName\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"externalCheckName\",\n                            \"kind\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"requires\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"build-ready\",\n                        \"deployment-url\",\n                        \"none\"\n                      ]\n                    },\n                    \"blocks\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"none\",\n                        \"build-start\",\n                        \"deployment-start\",\n                        \"deployment-alias\",\n                        \"deployment-promotion\"\n                      ]\n                    },\n                    \"targets\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"queued\",\n                        \"running\",\n                        \"completed\"\n                      ]\n                    },\n                    \"conclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"timeout\",\n                        \"canceled\",\n                        \"skipped\",\n                        \"failed\",\n                        \"neutral\",\n                        \"succeeded\"\n                      ]\n                    },\n                    \"conclusionText\": {\n                      \"type\": \"string\"\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\"\n                    },\n                    \"externalUrl\": {\n                      \"type\": \"string\"\n                    },\n                    \"output\": {\n                      \"additionalProperties\": true,\n                      \"type\": \"object\"\n                    },\n                    \"timeout\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"completedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"checkId\",\n                    \"createdAt\",\n                    \"deploymentId\",\n                    \"id\",\n                    \"name\",\n                    \"ownerId\",\n                    \"source\",\n                    \"status\",\n                    \"timeout\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"checkId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"checkId\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v2/deployments/{deploymentId}/check-runs/{checkRunId}\": {\n      \"get\": {\n        \"description\": \"Return a detailed response for a single check run.\",\n        \"operationId\": \"getDeploymentCheckRun\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a check run\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"checkId\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"deploymentId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"webhook\"\n                              ]\n                            },\n                            \"webhookId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"git-provider\"\n                              ]\n                            },\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"externalCheckName\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"externalCheckName\",\n                            \"kind\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"requires\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"build-ready\",\n                        \"deployment-url\",\n                        \"none\"\n                      ]\n                    },\n                    \"blocks\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"none\",\n                        \"build-start\",\n                        \"deployment-start\",\n                        \"deployment-alias\",\n                        \"deployment-promotion\"\n                      ]\n                    },\n                    \"targets\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"queued\",\n                        \"running\",\n                        \"completed\"\n                      ]\n                    },\n                    \"conclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"timeout\",\n                        \"canceled\",\n                        \"skipped\",\n                        \"failed\",\n                        \"neutral\",\n                        \"succeeded\"\n                      ]\n                    },\n                    \"conclusionText\": {\n                      \"type\": \"string\"\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\"\n                    },\n                    \"externalUrl\": {\n                      \"type\": \"string\"\n                    },\n                    \"output\": {\n                      \"additionalProperties\": true,\n                      \"type\": \"object\"\n                    },\n                    \"timeout\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"completedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"checkId\",\n                    \"createdAt\",\n                    \"deploymentId\",\n                    \"id\",\n                    \"name\",\n                    \"ownerId\",\n                    \"source\",\n                    \"status\",\n                    \"timeout\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkRunId\",\n            \"description\": \"The ID of the resource that will be updated.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the resource that will be updated.\",\n              \"example\": \"ckr_89ha9sdhh9a9\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update an existing check run for a deployment.\",\n        \"operationId\": \"updateDeploymentCheckRun\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a check run\",\n        \"tags\": [\n          \"checks-v2\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"checkId\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"deploymentId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"webhook\"\n                              ]\n                            },\n                            \"webhookId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"git-provider\"\n                              ]\n                            },\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"externalCheckName\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"externalCheckName\",\n                            \"kind\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"requires\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"build-ready\",\n                        \"deployment-url\",\n                        \"none\"\n                      ]\n                    },\n                    \"blocks\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"none\",\n                        \"build-start\",\n                        \"deployment-start\",\n                        \"deployment-alias\",\n                        \"deployment-promotion\"\n                      ]\n                    },\n                    \"targets\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"queued\",\n                        \"running\",\n                        \"completed\"\n                      ]\n                    },\n                    \"conclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"timeout\",\n                        \"canceled\",\n                        \"skipped\",\n                        \"failed\",\n                        \"neutral\",\n                        \"succeeded\"\n                      ]\n                    },\n                    \"conclusionText\": {\n                      \"type\": \"string\"\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\"\n                    },\n                    \"externalUrl\": {\n                      \"type\": \"string\"\n                    },\n                    \"output\": {\n                      \"additionalProperties\": true,\n                      \"type\": \"object\"\n                    },\n                    \"timeout\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"completedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"checkId\",\n                    \"createdAt\",\n                    \"deploymentId\",\n                    \"id\",\n                    \"name\",\n                    \"ownerId\",\n                    \"source\",\n                    \"status\",\n                    \"timeout\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"413\": {\n            \"description\": \"The output provided is too large\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkRunId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"externalId\": {\n                    \"type\": \"string\"\n                  },\n                  \"externalUrl\": {\n                    \"type\": \"string\",\n                    \"format\": \"uri\",\n                    \"pattern\": \"^https?://|^sso:\"\n                  },\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"queued\",\n                      \"running\",\n                      \"completed\"\n                    ]\n                  },\n                  \"output\": {\n                    \"type\": \"object\"\n                  },\n                  \"completedAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"conclusion\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"canceled\",\n                      \"skipped\",\n                      \"timeout\",\n                      \"failed\",\n                      \"neutral\",\n                      \"succeeded\"\n                    ]\n                  },\n                  \"conclusionText\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/deployments/{deploymentId}/checks\": {\n      \"post\": {\n        \"description\": \"Creates a new check. This endpoint must be called with an OAuth2 or it will produce a 400 error.\",\n        \"operationId\": \"createCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Creates a new Check\",\n        \"tags\": [\n          \"checks\"\n        ],\n        \"deprecated\": true,\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"example\": \"chk_1a2b3c4d5e6f7g8h9i0j\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"example\": \"Performance Check\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"deploymentId\": {\n                      \"type\": \"string\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"running\",\n                        \"completed\",\n                        \"registered\"\n                      ],\n                      \"example\": \"completed\"\n                    },\n                    \"conclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"canceled\",\n                        \"skipped\",\n                        \"failed\",\n                        \"neutral\",\n                        \"succeeded\",\n                        \"stale\"\n                      ],\n                      \"example\": \"succeeded\"\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\"\n                    },\n                    \"output\": {\n                      \"properties\": {\n                        \"metrics\": {\n                          \"properties\": {\n                            \"FCP\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"LCP\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"CLS\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"TBT\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"virtualExperienceScore\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"CLS\",\n                            \"FCP\",\n                            \"LCP\",\n                            \"TBT\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"completedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"path\": {\n                      \"type\": \"string\",\n                      \"example\": \"/api/users\"\n                    },\n                    \"blocking\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"detailsUrl\": {\n                      \"type\": \"string\"\n                    },\n                    \"integrationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"startedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"rerequestable\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"blocking\",\n                    \"createdAt\",\n                    \"deploymentId\",\n                    \"id\",\n                    \"integrationId\",\n                    \"name\",\n                    \"status\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nCannot create check for finished deployment\\nThe provided token is not from an OAuth2 Client\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The deployment was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"description\": \"The deployment to create the check for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The deployment to create the check for.\",\n              \"example\": \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"name\": {\n                    \"description\": \"The name of the check being created\",\n                    \"maxLength\": 100,\n                    \"example\": \"Performance Check\",\n                    \"type\": \"string\"\n                  },\n                  \"path\": {\n                    \"description\": \"Path of the page that is being checked\",\n                    \"type\": \"string\",\n                    \"maxLength\": 255,\n                    \"example\": \"/\"\n                  },\n                  \"blocking\": {\n                    \"description\": \"Whether the check should block a deployment from succeeding\",\n                    \"type\": \"boolean\",\n                    \"example\": true\n                  },\n                  \"detailsUrl\": {\n                    \"description\": \"URL to display for further details\",\n                    \"type\": \"string\",\n                    \"example\": \"http://example.com\"\n                  },\n                  \"externalId\": {\n                    \"description\": \"An identifier that can be used as an external reference\",\n                    \"type\": \"string\",\n                    \"example\": \"1234abc\"\n                  },\n                  \"rerequestable\": {\n                    \"description\": \"Whether a user should be able to request for the check to be rerun if it fails\",\n                    \"type\": \"boolean\",\n                    \"example\": true\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"blocking\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"get\": {\n        \"description\": \"List all of the checks created for a deployment.\",\n        \"operationId\": \"getAllChecks\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve a list of all checks\",\n        \"tags\": [\n          \"checks\"\n        ],\n        \"deprecated\": true,\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"checks\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"completedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"conclusion\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"canceled\",\n                              \"skipped\",\n                              \"failed\",\n                              \"neutral\",\n                              \"succeeded\",\n                              \"stale\"\n                            ]\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"detailsUrl\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"integrationId\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"output\": {\n                            \"properties\": {\n                              \"metrics\": {\n                                \"properties\": {\n                                  \"FCP\": {\n                                    \"properties\": {\n                                      \"value\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\"\n                                      },\n                                      \"previousValue\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"source\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"web-vitals\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"source\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"LCP\": {\n                                    \"properties\": {\n                                      \"value\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\"\n                                      },\n                                      \"previousValue\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"source\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"web-vitals\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"source\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"CLS\": {\n                                    \"properties\": {\n                                      \"value\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\"\n                                      },\n                                      \"previousValue\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"source\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"web-vitals\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"source\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"TBT\": {\n                                    \"properties\": {\n                                      \"value\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\"\n                                      },\n                                      \"previousValue\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"source\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"web-vitals\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"source\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"virtualExperienceScore\": {\n                                    \"properties\": {\n                                      \"value\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\"\n                                      },\n                                      \"previousValue\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"source\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"web-vitals\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"source\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"CLS\",\n                                  \"FCP\",\n                                  \"LCP\",\n                                  \"TBT\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"path\": {\n                            \"type\": \"string\"\n                          },\n                          \"rerequestable\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"blocking\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"startedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"running\",\n                              \"completed\",\n                              \"registered\"\n                            ]\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"blocking\",\n                          \"createdAt\",\n                          \"id\",\n                          \"integrationId\",\n                          \"name\",\n                          \"rerequestable\",\n                          \"status\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"checks\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The deployment was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"description\": \"The deployment to get all checks for\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The deployment to get all checks for\",\n              \"example\": \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/deployments/{deploymentId}/checks/{checkId}\": {\n      \"get\": {\n        \"description\": \"Return a detailed response for a single check.\",\n        \"operationId\": \"getCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a single check\",\n        \"tags\": [\n          \"checks\"\n        ],\n        \"deprecated\": true,\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"deploymentId\": {\n                      \"type\": \"string\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"running\",\n                        \"completed\",\n                        \"registered\"\n                      ]\n                    },\n                    \"conclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"canceled\",\n                        \"skipped\",\n                        \"failed\",\n                        \"neutral\",\n                        \"succeeded\",\n                        \"stale\"\n                      ]\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\"\n                    },\n                    \"output\": {\n                      \"properties\": {\n                        \"metrics\": {\n                          \"properties\": {\n                            \"FCP\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"LCP\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"CLS\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"TBT\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"virtualExperienceScore\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"CLS\",\n                            \"FCP\",\n                            \"LCP\",\n                            \"TBT\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"completedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"path\": {\n                      \"type\": \"string\"\n                    },\n                    \"blocking\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"detailsUrl\": {\n                      \"type\": \"string\"\n                    },\n                    \"integrationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"startedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"rerequestable\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"blocking\",\n                    \"createdAt\",\n                    \"deploymentId\",\n                    \"id\",\n                    \"integrationId\",\n                    \"name\",\n                    \"status\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nThe provided token is not from an OAuth2 Client that created the Check\"\n          },\n          \"404\": {\n            \"description\": \"Check was not found\\nThe deployment was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"description\": \"The deployment to get the check for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The deployment to get the check for.\",\n              \"example\": \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"description\": \"The check to fetch\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The check to fetch\",\n              \"example\": \"check_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update an existing check. This endpoint must be called with an OAuth2 or it will produce a 400 error.\",\n        \"operationId\": \"updateCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a check\",\n        \"tags\": [\n          \"checks\"\n        ],\n        \"deprecated\": true,\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"deploymentId\": {\n                      \"type\": \"string\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"running\",\n                        \"completed\",\n                        \"registered\"\n                      ]\n                    },\n                    \"conclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"canceled\",\n                        \"skipped\",\n                        \"failed\",\n                        \"neutral\",\n                        \"succeeded\",\n                        \"stale\"\n                      ]\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\"\n                    },\n                    \"output\": {\n                      \"properties\": {\n                        \"metrics\": {\n                          \"properties\": {\n                            \"FCP\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"LCP\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"CLS\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"TBT\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"virtualExperienceScore\": {\n                              \"properties\": {\n                                \"value\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"previousValue\": {\n                                  \"type\": \"number\"\n                                },\n                                \"source\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"web-vitals\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"source\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"CLS\",\n                            \"FCP\",\n                            \"LCP\",\n                            \"TBT\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"completedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"path\": {\n                      \"type\": \"string\"\n                    },\n                    \"blocking\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"detailsUrl\": {\n                      \"type\": \"string\"\n                    },\n                    \"integrationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"startedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"rerequestable\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"blocking\",\n                    \"createdAt\",\n                    \"deploymentId\",\n                    \"id\",\n                    \"integrationId\",\n                    \"name\",\n                    \"status\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nThe provided token is not from an OAuth2 Client\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"Check was not found\\nThe deployment was not found\"\n          },\n          \"413\": {\n            \"description\": \"The output provided is too large\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"description\": \"The deployment to update the check for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The deployment to update the check for.\",\n              \"example\": \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"description\": \"The check being updated\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The check being updated\",\n              \"example\": \"check_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"name\": {\n                    \"description\": \"The name of the check being created\",\n                    \"maxLength\": 100,\n                    \"example\": \"Performance Check\",\n                    \"type\": \"string\"\n                  },\n                  \"path\": {\n                    \"description\": \"Path of the page that is being checked\",\n                    \"type\": \"string\",\n                    \"maxLength\": 255,\n                    \"example\": \"/\"\n                  },\n                  \"status\": {\n                    \"description\": \"The current status of the check\",\n                    \"enum\": [\n                      \"running\",\n                      \"completed\"\n                    ]\n                  },\n                  \"conclusion\": {\n                    \"description\": \"The result of the check being run\",\n                    \"enum\": [\n                      \"canceled\",\n                      \"failed\",\n                      \"neutral\",\n                      \"succeeded\",\n                      \"skipped\"\n                    ]\n                  },\n                  \"detailsUrl\": {\n                    \"description\": \"A URL a user may visit to see more information about the check\",\n                    \"type\": \"string\",\n                    \"example\": \"https://example.com/check/run/1234abc\"\n                  },\n                  \"output\": {\n                    \"description\": \"The results of the check Run\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"metrics\": {\n                        \"type\": \"object\",\n                        \"description\": \"Metrics about the page\",\n                        \"required\": [\n                          \"FCP\",\n                          \"LCP\",\n                          \"CLS\",\n                          \"TBT\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"properties\": {\n                          \"FCP\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"value\",\n                              \"source\"\n                            ],\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"number\",\n                                \"example\": 1200,\n                                \"description\": \"First Contentful Paint value\",\n                                \"nullable\": true\n                              },\n                              \"previousValue\": {\n                                \"type\": \"number\",\n                                \"example\": 900,\n                                \"description\": \"Previous First Contentful Paint value to display a delta\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"web-vitals\"\n                                ]\n                              }\n                            }\n                          },\n                          \"LCP\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"value\",\n                              \"source\"\n                            ],\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"number\",\n                                \"example\": 1200,\n                                \"description\": \"Largest Contentful Paint value\",\n                                \"nullable\": true\n                              },\n                              \"previousValue\": {\n                                \"type\": \"number\",\n                                \"example\": 1000,\n                                \"description\": \"Previous Largest Contentful Paint value to display a delta\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"web-vitals\"\n                                ]\n                              }\n                            }\n                          },\n                          \"CLS\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"value\",\n                              \"source\"\n                            ],\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"number\",\n                                \"example\": 4,\n                                \"description\": \"Cumulative Layout Shift value\",\n                                \"nullable\": true\n                              },\n                              \"previousValue\": {\n                                \"type\": \"number\",\n                                \"example\": 2,\n                                \"description\": \"Previous Cumulative Layout Shift value to display a delta\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"web-vitals\"\n                                ]\n                              }\n                            }\n                          },\n                          \"TBT\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"value\",\n                              \"source\"\n                            ],\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"number\",\n                                \"example\": 3000,\n                                \"description\": \"Total Blocking Time value\",\n                                \"nullable\": true\n                              },\n                              \"previousValue\": {\n                                \"type\": \"number\",\n                                \"example\": 3500,\n                                \"description\": \"Previous Total Blocking Time value to display a delta\"\n                              },\n                              \"source\": {\n                                \"enum\": [\n                                  \"web-vitals\"\n                                ]\n                              }\n                            }\n                          },\n                          \"virtualExperienceScore\": {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"value\",\n                              \"source\"\n                            ],\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"integer\",\n                                \"maximum\": 100,\n                                \"minimum\": 0,\n                                \"example\": 30,\n                                \"description\": \"The calculated Virtual Experience Score value, between 0 and 100\",\n                                \"nullable\": true\n                              },\n                              \"previousValue\": {\n                                \"type\": \"integer\",\n                                \"maximum\": 100,\n                                \"minimum\": 0,\n                                \"example\": 35,\n                                \"description\": \"A previous Virtual Experience Score value to display a delta, between 0 and 100\"\n                              },\n                              \"source\": {\n                                \"enum\": [\n                                  \"web-vitals\"\n                                ]\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"externalId\": {\n                    \"description\": \"An identifier that can be used as an external reference\",\n                    \"type\": \"string\",\n                    \"example\": \"1234abc\"\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/deployments/{deploymentId}/checks/{checkId}/rerequest\": {\n      \"post\": {\n        \"description\": \"Rerequest a selected check that has failed.\",\n        \"operationId\": \"rerequestCheck\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Rerequest a check\",\n        \"tags\": [\n          \"checks\"\n        ],\n        \"deprecated\": true,\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The deployment was not found\\nCheck was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"description\": \"The deployment to rerun the check for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The deployment to rerun the check for.\",\n              \"example\": \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"checkId\",\n            \"description\": \"The check to rerun\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The check to rerun\",\n              \"example\": \"check_2qn7PZrx89yxY34vEZPD31Y9XVj6\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"autoUpdate\",\n            \"description\": \"Mark the check as running\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Mark the check as running\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/connect/networks\": {\n      \"get\": {\n        \"description\": \"Allows to list Secure Compute networks.\",\n        \"operationId\": \"listNetworks\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List Secure Compute networks\",\n        \"tags\": [\n          \"connect\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"items\": {\n                    \"$ref\": \"#/components/schemas/Network\"\n                  },\n                  \"type\": \"array\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"includeHostedZones\",\n            \"description\": \"Whether to include Hosted Zones in the response\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include Hosted Zones in the response\",\n              \"default\": true\n            }\n          },\n          {\n            \"name\": \"includePeeringConnections\",\n            \"description\": \"Whether to include VPC Peering connections in the response\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include VPC Peering connections in the response\",\n              \"default\": true\n            }\n          },\n          {\n            \"name\": \"includeProjects\",\n            \"description\": \"Whether to include projects in the response\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include projects in the response\",\n              \"default\": true\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"The query to use as a filter for returned networks\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The query to use as a filter for returned networks\",\n              \"maxLength\": 255\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Allows to create a Secure Compute network.\",\n        \"operationId\": \"createNetwork\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a Secure Compute network\",\n        \"tags\": [\n          \"connect\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Network\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"awsAvailabilityZoneIds\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"description\": \"An AWS Availability Zone ID to use for the network\",\n                      \"example\": \"use1-az1\"\n                    },\n                    \"minItems\": 2,\n                    \"maxItems\": 2\n                  },\n                  \"cidr\": {\n                    \"type\": \"string\",\n                    \"description\": \"The CIDR block of the network\",\n                    \"example\": \"192.168.0.0/16\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the network\",\n                    \"maxLength\": 255\n                  },\n                  \"region\": {\n                    \"type\": \"string\",\n                    \"description\": \"The region where the network will be created\",\n                    \"example\": \"iad1\"\n                  }\n                },\n                \"required\": [\n                  \"cidr\",\n                  \"name\",\n                  \"region\"\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/connect/networks/{networkId}\": {\n      \"delete\": {\n        \"description\": \"Allows to delete a Secure Compute network.\",\n        \"operationId\": \"deleteNetwork\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a Secure Compute network\",\n        \"tags\": [\n          \"connect\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"networkId\",\n            \"description\": \"The ID of the network to delete\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the network to delete\",\n              \"example\": \"uzrmorq7bn05z-fz\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Allows to update a Secure Compute network.\",\n        \"operationId\": \"updateNetwork\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a Secure Compute network\",\n        \"tags\": [\n          \"connect\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Network\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"networkId\",\n            \"description\": \"The unique identifier of the Secure Compute network\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the Secure Compute network\",\n              \"example\": \"uzrmorq7bn05z-fz\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the Secure Compute network\",\n                    \"maxLength\": 255\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ]\n              }\n            }\n          }\n        }\n      },\n      \"get\": {\n        \"description\": \"Allows to read a Secure Compute network.\",\n        \"operationId\": \"readNetwork\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Read a Secure Compute network\",\n        \"tags\": [\n          \"connect\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Network\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"networkId\",\n            \"description\": \"The unique identifier of the Secure Compute network\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the Secure Compute network\",\n              \"example\": \"uzrmorq7bn05z-fz\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v3/deployments/{idOrUrl}/events\": {\n      \"get\": {\n        \"description\": \"Get the build logs of a deployment by deployment ID and build ID. It can work as an infinite stream of logs or as a JSON endpoint depending on the input parameters.\",\n        \"operationId\": \"getDeploymentEvents\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get deployment events\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"delimiter\",\n                              \"command\",\n                              \"stdout\",\n                              \"stderr\",\n                              \"exit\",\n                              \"deployment-state\",\n                              \"middleware\",\n                              \"middleware-invocation\",\n                              \"edge-function-invocation\",\n                              \"metric\",\n                              \"report\",\n                              \"fatal\"\n                            ]\n                          },\n                          \"created\": {\n                            \"type\": \"number\"\n                          },\n                          \"payload\": {\n                            \"properties\": {\n                              \"deploymentId\": {\n                                \"type\": \"string\"\n                              },\n                              \"info\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"entrypoint\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"path\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"step\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"readyState\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"name\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"text\": {\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"date\": {\n                                \"type\": \"number\"\n                              },\n                              \"serial\": {\n                                \"type\": \"string\"\n                              },\n                              \"created\": {\n                                \"type\": \"number\"\n                              },\n                              \"statusCode\": {\n                                \"type\": \"number\"\n                              },\n                              \"requestId\": {\n                                \"type\": \"string\"\n                              },\n                              \"proxy\": {\n                                \"properties\": {\n                                  \"timestamp\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"method\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"host\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"path\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"userAgent\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"referer\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"clientIp\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"region\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"scheme\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"responseByteSize\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"cacheId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"pathType\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"pathTypeVariant\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"vercelId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"vercelCache\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"MISS\",\n                                      \"HIT\",\n                                      \"STALE\",\n                                      \"BYPASS\",\n                                      \"PRERENDER\",\n                                      \"REVALIDATED\"\n                                    ]\n                                  },\n                                  \"lambdaRegion\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"wafAction\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"log\",\n                                      \"challenge\",\n                                      \"deny\",\n                                      \"bypass\",\n                                      \"rate_limit\"\n                                    ]\n                                  },\n                                  \"wafRuleId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"host\",\n                                  \"method\",\n                                  \"path\",\n                                  \"referer\",\n                                  \"region\",\n                                  \"timestamp\",\n                                  \"userAgent\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"date\",\n                              \"deploymentId\",\n                              \"id\",\n                              \"serial\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"created\",\n                          \"payload\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"created\": {\n                            \"type\": \"number\"\n                          },\n                          \"date\": {\n                            \"type\": \"number\"\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"info\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"entrypoint\": {\n                                \"type\": \"string\"\n                              },\n                              \"path\": {\n                                \"type\": \"string\"\n                              },\n                              \"step\": {\n                                \"type\": \"string\"\n                              },\n                              \"readyState\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"name\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"serial\": {\n                            \"type\": \"string\"\n                          },\n                          \"text\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"delimiter\",\n                              \"command\",\n                              \"stdout\",\n                              \"stderr\",\n                              \"exit\",\n                              \"deployment-state\",\n                              \"middleware\",\n                              \"middleware-invocation\",\n                              \"edge-function-invocation\",\n                              \"metric\",\n                              \"report\",\n                              \"fatal\"\n                            ]\n                          },\n                          \"level\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"error\",\n                              \"warning\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"created\",\n                          \"date\",\n                          \"deploymentId\",\n                          \"id\",\n                          \"info\",\n                          \"serial\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    ],\n                    \"nullable\": true\n                  },\n                  \"nullable\": true\n                }\n              },\n              \"application/stream+json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"delimiter\",\n                            \"command\",\n                            \"stdout\",\n                            \"stderr\",\n                            \"exit\",\n                            \"deployment-state\",\n                            \"middleware\",\n                            \"middleware-invocation\",\n                            \"edge-function-invocation\",\n                            \"metric\",\n                            \"report\",\n                            \"fatal\"\n                          ]\n                        },\n                        \"created\": {\n                          \"type\": \"number\"\n                        },\n                        \"payload\": {\n                          \"properties\": {\n                            \"deploymentId\": {\n                              \"type\": \"string\"\n                            },\n                            \"info\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"entrypoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"step\": {\n                                  \"type\": \"string\"\n                                },\n                                \"readyState\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"name\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"text\": {\n                              \"type\": \"string\"\n                            },\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"date\": {\n                              \"type\": \"number\"\n                            },\n                            \"serial\": {\n                              \"type\": \"string\"\n                            },\n                            \"created\": {\n                              \"type\": \"number\"\n                            },\n                            \"statusCode\": {\n                              \"type\": \"number\"\n                            },\n                            \"requestId\": {\n                              \"type\": \"string\"\n                            },\n                            \"proxy\": {\n                              \"properties\": {\n                                \"timestamp\": {\n                                  \"type\": \"number\"\n                                },\n                                \"method\": {\n                                  \"type\": \"string\"\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"statusCode\": {\n                                  \"type\": \"number\"\n                                },\n                                \"userAgent\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"referer\": {\n                                  \"type\": \"string\"\n                                },\n                                \"clientIp\": {\n                                  \"type\": \"string\"\n                                },\n                                \"region\": {\n                                  \"type\": \"string\"\n                                },\n                                \"scheme\": {\n                                  \"type\": \"string\"\n                                },\n                                \"responseByteSize\": {\n                                  \"type\": \"number\"\n                                },\n                                \"cacheId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"pathType\": {\n                                  \"type\": \"string\"\n                                },\n                                \"pathTypeVariant\": {\n                                  \"type\": \"string\"\n                                },\n                                \"vercelId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"vercelCache\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"MISS\",\n                                    \"HIT\",\n                                    \"STALE\",\n                                    \"BYPASS\",\n                                    \"PRERENDER\",\n                                    \"REVALIDATED\"\n                                  ]\n                                },\n                                \"lambdaRegion\": {\n                                  \"type\": \"string\"\n                                },\n                                \"wafAction\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"challenge\",\n                                    \"deny\",\n                                    \"bypass\",\n                                    \"rate_limit\"\n                                  ]\n                                },\n                                \"wafRuleId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"method\",\n                                \"path\",\n                                \"referer\",\n                                \"region\",\n                                \"timestamp\",\n                                \"userAgent\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"date\",\n                            \"deploymentId\",\n                            \"id\",\n                            \"serial\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"created\",\n                        \"payload\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"created\": {\n                          \"type\": \"number\"\n                        },\n                        \"date\": {\n                          \"type\": \"number\"\n                        },\n                        \"deploymentId\": {\n                          \"type\": \"string\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"info\": {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"entrypoint\": {\n                              \"type\": \"string\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"step\": {\n                              \"type\": \"string\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"name\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"serial\": {\n                          \"type\": \"string\"\n                        },\n                        \"text\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"delimiter\",\n                            \"command\",\n                            \"stdout\",\n                            \"stderr\",\n                            \"exit\",\n                            \"deployment-state\",\n                            \"middleware\",\n                            \"middleware-invocation\",\n                            \"edge-function-invocation\",\n                            \"metric\",\n                            \"report\",\n                            \"fatal\"\n                          ]\n                        },\n                        \"level\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"error\",\n                            \"warning\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"created\",\n                        \"date\",\n                        \"deploymentId\",\n                        \"id\",\n                        \"info\",\n                        \"serial\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ],\n                  \"nullable\": true\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrUrl\",\n            \"description\": \"The unique identifier or hostname of the deployment.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n              \"description\": \"The unique identifier or hostname of the deployment.\"\n            }\n          },\n          {\n            \"name\": \"direction\",\n            \"description\": \"Order of the returned events based on the timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"backward\",\n                \"forward\"\n              ],\n              \"default\": \"forward\",\n              \"example\": \"backward\",\n              \"description\": \"Order of the returned events based on the timestamp.\"\n            }\n          },\n          {\n            \"name\": \"follow\",\n            \"description\": \"When enabled, this endpoint will return live events as they happen.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"enum\": [\n                0,\n                1\n              ],\n              \"example\": 1,\n              \"description\": \"When enabled, this endpoint will return live events as they happen.\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of events to return. Provide `-1` to return all available logs.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"example\": 100,\n              \"description\": \"Maximum number of events to return. Provide `-1` to return all available logs.\"\n            }\n          },\n          {\n            \"name\": \"name\",\n            \"description\": \"Deployment build ID.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"bld_cotnkcr76\",\n              \"description\": \"Deployment build ID.\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Timestamp for when build logs should be pulled from.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"example\": 1540095775941,\n              \"description\": \"Timestamp for when build logs should be pulled from.\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Timestamp for when the build logs should be pulled up until.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"example\": 1540106318643,\n              \"description\": \"Timestamp for when the build logs should be pulled up until.\"\n            }\n          },\n          {\n            \"name\": \"statusCode\",\n            \"description\": \"HTTP status code range to filter events by.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"example\": \"5xx\",\n              \"description\": \"HTTP status code range to filter events by.\",\n              \"oneOf\": [\n                {\n                  \"type\": \"number\"\n                },\n                {\n                  \"type\": \"string\"\n                }\n              ]\n            }\n          },\n          {\n            \"name\": \"delimiter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"enum\": [\n                0,\n                1\n              ],\n              \"example\": 1\n            }\n          },\n          {\n            \"name\": \"builds\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"enum\": [\n                0,\n                1\n              ],\n              \"example\": 1\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/deployments/{deploymentId}/integrations/{integrationConfigurationId}/resources/{resourceId}/actions/{action}\": {\n      \"patch\": {\n        \"description\": \"Updates the deployment integration action for the specified integration installation\",\n        \"operationId\": \"update-integration-deployment-action\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update deployment integration action\",\n        \"tags\": [\n          \"deployments\",\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"202\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"action\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"running\",\n                      \"succeeded\",\n                      \"failed\"\n                    ]\n                  },\n                  \"statusText\": {\n                    \"type\": \"string\"\n                  },\n                  \"statusUrl\": {\n                    \"type\": \"string\",\n                    \"format\": \"uri\",\n                    \"pattern\": \"^https?://|^sso:\"\n                  },\n                  \"outcomes\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"oneOf\": [\n                        {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\"\n                            },\n                            \"secrets\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"name\",\n                                  \"value\"\n                                ],\n                                \"additionalProperties\": false\n                              }\n                            }\n                          },\n                          \"required\": [\n                            \"kind\",\n                            \"secrets\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      ]\n                    }\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v13/deployments/{idOrUrl}\": {\n      \"get\": {\n        \"description\": \"Retrieves information for a deployment either by supplying its ID (`id` property) or Hostname (`url` property). Additional details will be included when the authenticated user or team is an owner of the deployment.\",\n        \"operationId\": \"getDeployment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a deployment by ID or URL\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The deployment including only public information\\nThe deployment including both public and private information\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"aliasAssignedAt\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"type\": \"number\"\n                            },\n                            {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          ]\n                        },\n                        \"alwaysRefuseToBuild\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"build\": {\n                          \"properties\": {\n                            \"env\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            }\n                          },\n                          \"required\": [\n                            \"env\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"buildArtifactUrls\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"builds\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"use\": {\n                                \"type\": \"string\"\n                              },\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"config\": {\n                                \"additionalProperties\": true,\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"use\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"env\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"inspectorUrl\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"isInConcurrentBuildsQueue\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"isInSystemBuildsQueue\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"projectSettings\": {\n                          \"properties\": {\n                            \"nodeVersion\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"24.x\",\n                                \"22.x\",\n                                \"20.x\",\n                                \"18.x\",\n                                \"16.x\",\n                                \"14.x\",\n                                \"12.x\",\n                                \"10.x\",\n                                \"8.10.x\"\n                              ]\n                            },\n                            \"buildCommand\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"devCommand\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"framework\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"blitzjs\",\n                                \"nextjs\",\n                                \"gatsby\",\n                                \"remix\",\n                                \"react-router\",\n                                \"astro\",\n                                \"hexo\",\n                                \"eleventy\",\n                                \"docusaurus-2\",\n                                \"docusaurus\",\n                                \"preact\",\n                                \"solidstart-1\",\n                                \"solidstart\",\n                                \"dojo\",\n                                \"ember\",\n                                \"vue\",\n                                \"scully\",\n                                \"ionic-angular\",\n                                \"angular\",\n                                \"polymer\",\n                                \"svelte\",\n                                \"sveltekit\",\n                                \"sveltekit-1\",\n                                \"ionic-react\",\n                                \"create-react-app\",\n                                \"gridsome\",\n                                \"umijs\",\n                                \"sapper\",\n                                \"saber\",\n                                \"stencil\",\n                                \"nuxtjs\",\n                                \"redwoodjs\",\n                                \"hugo\",\n                                \"jekyll\",\n                                \"brunch\",\n                                \"middleman\",\n                                \"zola\",\n                                \"hydrogen\",\n                                \"vite\",\n                                \"tanstack-start\",\n                                \"vitepress\",\n                                \"vuepress\",\n                                \"parcel\",\n                                \"fastapi\",\n                                \"flask\",\n                                \"fasthtml\",\n                                \"django\",\n                                \"sanity-v3\",\n                                \"sanity\",\n                                \"storybook\",\n                                \"nitro\",\n                                \"hono\",\n                                \"express\",\n                                \"h3\",\n                                \"koa\",\n                                \"nestjs\",\n                                \"elysia\",\n                                \"fastify\",\n                                \"xmcp\",\n                                \"python\",\n                                \"ruby\",\n                                \"rust\",\n                                \"node\",\n                                \"go\",\n                                \"services\"\n                              ]\n                            },\n                            \"commandForIgnoringBuildStep\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"installCommand\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"outputDirectory\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"speedInsights\": {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"enabledAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"disabledAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"canceledAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"hasData\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"paidAt\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"id\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"webAnalytics\": {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"disabledAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"canceledAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"enabledAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"hasData\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    true\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"id\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"integrations\": {\n                          \"properties\": {\n                            \"status\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"skipped\",\n                                \"pending\",\n                                \"ready\",\n                                \"error\",\n                                \"timeout\"\n                              ]\n                            },\n                            \"startedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"completedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"skippedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"skippedBy\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"startedAt\",\n                            \"status\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"images\": {\n                          \"properties\": {\n                            \"sizes\": {\n                              \"items\": {\n                                \"type\": \"number\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"qualities\": {\n                              \"items\": {\n                                \"type\": \"number\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"domains\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"remotePatterns\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"protocol\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"http\",\n                                      \"https\"\n                                    ],\n                                    \"description\": \"Must be `http` or `https`.\"\n                                  },\n                                  \"hostname\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Can be literal or wildcard. Single `*` matches a single subdomain. Double `**` matches any number of subdomains.\"\n                                  },\n                                  \"port\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Can be literal port such as `8080` or empty string meaning no port.\"\n                                  },\n                                  \"pathname\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments.\"\n                                  },\n                                  \"search\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Can be literal query string such as `?v=1` or empty string meaning no query string.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"hostname\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"localPatterns\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"pathname\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments.\"\n                                  },\n                                  \"search\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Can be literal query string such as `?v=1` or empty string meaning no query string.\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"minimumCacheTTL\": {\n                              \"type\": \"number\"\n                            },\n                            \"formats\": {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"image/avif\",\n                                  \"image/webp\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"dangerouslyAllowSVG\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"contentSecurityPolicy\": {\n                              \"type\": \"string\"\n                            },\n                            \"contentDispositionType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"inline\",\n                                \"attachment\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"alias\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation\",\n                          \"example\": []\n                        },\n                        \"aliasAssigned\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"A boolean that will be true when the aliases from the alias property were assigned successfully\",\n                          \"example\": true\n                        },\n                        \"bootedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"buildingAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"buildContainerFinishedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Since April 2025 it necessary for On-Demand Concurrency Minutes calculation\"\n                        },\n                        \"buildSkipped\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"creator\": {\n                          \"properties\": {\n                            \"uid\": {\n                              \"type\": \"string\",\n                              \"description\": \"The ID of the user that created the deployment\",\n                              \"example\": \"96SnxkFiMyVKsK3pnoHfx3Hz\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\",\n                              \"description\": \"The username of the user that created the deployment\",\n                              \"example\": \"john-doe\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\",\n                              \"description\": \"The avatar of the user that created the deployment\"\n                            }\n                          },\n                          \"required\": [\n                            \"uid\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Information about the deployment creator\"\n                        },\n                        \"initReadyAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"isFirstBranchDeployment\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"lambdas\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"readyState\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"BUILDING\",\n                                  \"ERROR\",\n                                  \"INITIALIZING\",\n                                  \"READY\"\n                                ]\n                              },\n                              \"entrypoint\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"readyStateAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"output\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"path\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"functionName\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"functionName\",\n                                    \"path\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"output\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A partial representation of a Build used by the deployment endpoint.\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"public\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"A boolean representing if the deployment is public or not. By default this is `false`\",\n                          \"example\": false\n                        },\n                        \"ready\": {\n                          \"type\": \"number\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"QUEUED\",\n                            \"BUILDING\",\n                            \"ERROR\",\n                            \"INITIALIZING\",\n                            \"READY\",\n                            \"CANCELED\"\n                          ]\n                        },\n                        \"team\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\",\n                            \"name\",\n                            \"slug\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The team that owns the deployment if any\"\n                        },\n                        \"userAliases\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"An array of domains that were provided by the user when creating the Deployment.\",\n                          \"example\": [\n                            \"sub1.example.com\",\n                            \"sub2.example.com\"\n                          ]\n                        },\n                        \"previewCommentsEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether or not preview comments are enabled for the deployment\",\n                          \"example\": false\n                        },\n                        \"ttyBuildLogs\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"customEnvironment\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"URL-friendly name of the environment\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\"\n                                  ],\n                                  \"description\": \"The type of environment (production, preview, or development)\"\n                                },\n                                \"description\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Optional description of the environment's purpose\"\n                                },\n                                \"branchMatcher\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"endsWith\",\n                                        \"startsWith\",\n                                        \"equals\"\n                                      ],\n                                      \"description\": \"The type of matching to perform\"\n                                    },\n                                    \"pattern\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"The pattern to match against branch names\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"pattern\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Configuration for matching git branches to this environment\"\n                                },\n                                \"domains\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"apexName\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"redirect\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"redirectStatusCode\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\",\n                                        \"enum\": [\n                                          307,\n                                          301,\n                                          302,\n                                          308\n                                        ]\n                                      },\n                                      \"gitBranch\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"customEnvironmentId\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"verified\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ],\n                                        \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                      },\n                                      \"verification\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"domain\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"reason\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"domain\",\n                                            \"reason\",\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\",\n                                          \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                        },\n                                        \"type\": \"array\",\n                                        \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"apexName\",\n                                      \"name\",\n                                      \"projectId\",\n                                      \"verified\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"description\": \"List of domains associated with this environment\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"List of domains associated with this environment\"\n                                },\n                                \"currentDeploymentAliases\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"List of aliases for the current deployment\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Timestamp when the environment was created\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Timestamp when the environment was last updated\"\n                                }\n                              },\n                              \"required\": [\n                                \"createdAt\",\n                                \"id\",\n                                \"slug\",\n                                \"type\",\n                                \"updatedAt\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                            },\n                            {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"id\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                            }\n                          ]\n                        },\n                        \"oomReport\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"out-of-memory\"\n                          ]\n                        },\n                        \"readyStateReason\": {\n                          \"type\": \"string\"\n                        },\n                        \"aliasWarning\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"code\": {\n                              \"type\": \"string\"\n                            },\n                            \"message\": {\n                              \"type\": \"string\"\n                            },\n                            \"link\": {\n                              \"type\": \"string\"\n                            },\n                            \"action\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"code\",\n                            \"message\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"A string holding the unique ID of the deployment\",\n                          \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                          \"example\": 1540257589405\n                        },\n                        \"readyState\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"QUEUED\",\n                            \"BUILDING\",\n                            \"ERROR\",\n                            \"INITIALIZING\",\n                            \"READY\",\n                            \"CANCELED\"\n                          ],\n                          \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                          \"example\": \"READY\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                          \"example\": \"my-project\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"LAMBDAS\"\n                          ]\n                        },\n                        \"aliasError\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"code\": {\n                              \"type\": \"string\"\n                            },\n                            \"message\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"code\",\n                            \"message\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`\",\n                          \"example\": null\n                        },\n                        \"aliasFinal\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"autoAssignCustomDomains\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"applies to custom domains only, defaults to `true`\"\n                        },\n                        \"automaticAliases\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildErrorAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"checksState\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"registered\",\n                            \"running\",\n                            \"completed\"\n                          ]\n                        },\n                        \"checksConclusion\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"succeeded\",\n                            \"failed\",\n                            \"skipped\",\n                            \"canceled\"\n                          ]\n                        },\n                        \"deletedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A number containing the date when the deployment was deleted at milliseconds\",\n                          \"example\": 1540257589405\n                        },\n                        \"defaultRoute\": {\n                          \"type\": \"string\",\n                          \"description\": \"Computed field that is only available for deployments with a microfrontend configuration.\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"errorCode\": {\n                          \"type\": \"string\"\n                        },\n                        \"errorLink\": {\n                          \"type\": \"string\"\n                        },\n                        \"errorMessage\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"errorStep\": {\n                          \"type\": \"string\"\n                        },\n                        \"passiveRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service\"\n                        },\n                        \"gitSource\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"repoId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"repoId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"org\",\n                                \"repo\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"repoId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"org\",\n                                \"repo\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-limited\"\n                                  ]\n                                },\n                                \"repoId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"repoId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-limited\"\n                                  ]\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"org\",\n                                \"repo\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"gitlab\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"workspaceUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"repoUuid\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"owner\": {\n                                  \"type\": \"string\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"owner\",\n                                \"slug\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"custom\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"gitUrl\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"gitUrl\",\n                                \"ref\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Allows custom git sources (local folder mounted to the container) in test mode\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"ref\",\n                                \"repoId\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"ref\",\n                                \"repoId\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-limited\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"ref\",\n                                \"repoId\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"gitlab\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"ref\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"owner\": {\n                                  \"type\": \"string\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\"\n                                },\n                                \"workspaceUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoUuid\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"ref\",\n                                \"repoUuid\",\n                                \"sha\",\n                                \"type\",\n                                \"workspaceUuid\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"manualProvisioning\": {\n                          \"properties\": {\n                            \"state\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"PENDING\",\n                                \"COMPLETE\",\n                                \"TIMEOUT\"\n                              ],\n                              \"description\": \"Current provisioning state\"\n                            },\n                            \"completedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when manual provisioning completed\"\n                            }\n                          },\n                          \"required\": [\n                            \"state\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Present when deployment was created with VERCEL_MANUAL_PROVISIONING=true. The deployment stays in INITIALIZING until /continue is called.\"\n                        },\n                        \"meta\": {\n                          \"additionalProperties\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"originCacheRegion\": {\n                          \"type\": \"string\"\n                        },\n                        \"nodeVersion\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"24.x\",\n                            \"22.x\",\n                            \"20.x\",\n                            \"18.x\",\n                            \"16.x\",\n                            \"14.x\",\n                            \"12.x\",\n                            \"10.x\",\n                            \"8.10.x\"\n                          ],\n                          \"description\": \"If set it overrides the `projectSettings.nodeVersion` for this deployment.\"\n                        },\n                        \"project\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"framework\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\",\n                            \"name\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The public project information associated with the deployment.\"\n                        },\n                        \"prebuilt\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"readySubstate\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"STAGED\",\n                            \"ROLLING\",\n                            \"PROMOTED\"\n                          ],\n                          \"description\": \"Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic\"\n                        },\n                        \"regions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"The regions the deployment exists in\",\n                          \"example\": [\n                            \"sfo1\"\n                          ]\n                        },\n                        \"softDeletedByRetention\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"flag to indicate if the deployment was deleted by retention policy\",\n                          \"example\": \"true\"\n                        },\n                        \"source\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"api-trigger-git-deploy\",\n                            \"cli\",\n                            \"clone/repo\",\n                            \"git\",\n                            \"import\",\n                            \"import/repo\",\n                            \"redeploy\",\n                            \"v0-web\"\n                          ],\n                          \"description\": \"Where was the deployment created from\",\n                          \"example\": \"cli\"\n                        },\n                        \"target\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"staging\",\n                            \"production\"\n                          ],\n                          \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                          \"example\": null\n                        },\n                        \"undeletedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A number containing the date when the deployment was undeleted at milliseconds\",\n                          \"example\": 1540257589405\n                        },\n                        \"url\": {\n                          \"type\": \"string\",\n                          \"description\": \"A string with the unique URL of the deployment\",\n                          \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                        },\n                        \"userConfiguredDeploymentId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.\",\n                          \"example\": \"abc123\"\n                        },\n                        \"version\": {\n                          \"type\": \"number\",\n                          \"enum\": [\n                            2\n                          ],\n                          \"description\": \"The platform version that was used to create the deployment.\",\n                          \"example\": 2\n                        },\n                        \"oidcTokenClaims\": {\n                          \"properties\": {\n                            \"iss\": {\n                              \"type\": \"string\"\n                            },\n                            \"sub\": {\n                              \"type\": \"string\"\n                            },\n                            \"scope\": {\n                              \"type\": \"string\"\n                            },\n                            \"aud\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner_id\": {\n                              \"type\": \"string\"\n                            },\n                            \"project\": {\n                              \"type\": \"string\"\n                            },\n                            \"project_id\": {\n                              \"type\": \"string\"\n                            },\n                            \"environment\": {\n                              \"type\": \"string\"\n                            },\n                            \"plan\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"aud\",\n                            \"environment\",\n                            \"iss\",\n                            \"owner\",\n                            \"owner_id\",\n                            \"project\",\n                            \"project_id\",\n                            \"scope\",\n                            \"sub\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"projectId\": {\n                          \"type\": \"string\"\n                        },\n                        \"plan\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"pro\",\n                            \"enterprise\",\n                            \"hobby\"\n                          ]\n                        },\n                        \"platform\": {\n                          \"properties\": {\n                            \"source\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Display name of the platform.\"\n                                }\n                              },\n                              \"required\": [\n                                \"name\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"The external platform that created the deployment (e.g. its display name).\"\n                            },\n                            \"origin\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"id\",\n                                    \"url\"\n                                  ],\n                                  \"description\": \"Whether the value is an opaque identifier or a URL.\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"The identifier or URL pointing to the originating entity.\"\n                                }\n                              },\n                              \"required\": [\n                                \"type\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Reference back to the entity on the platform that initiated the deployment.\"\n                            },\n                            \"creator\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Display name of the platform user.\"\n                                },\n                                \"avatar\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"URL of the platform user's avatar image.\"\n                                }\n                              },\n                              \"required\": [\n                                \"name\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"The user on the external platform who triggered the deployment.\"\n                            },\n                            \"meta\": {\n                              \"additionalProperties\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"object\",\n                              \"description\": \"Arbitrary key-value metadata provided by the platform.\"\n                            }\n                          },\n                          \"required\": [\n                            \"creator\",\n                            \"origin\",\n                            \"source\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Metadata about the source platform that triggered the deployment. Allows us to map a deployment back to a platform (e.g. the chat that created it)\"\n                        },\n                        \"connectBuildsEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"connectConfigurationId\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdIn\": {\n                          \"type\": \"string\"\n                        },\n                        \"crons\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"schedule\": {\n                                \"type\": \"string\"\n                              },\n                              \"path\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"path\",\n                              \"schedule\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functions\": {\n                          \"nullable\": true,\n                          \"additionalProperties\": {\n                            \"properties\": {\n                              \"architecture\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"x86_64\",\n                                  \"arm64\"\n                                ]\n                              },\n                              \"memory\": {\n                                \"type\": \"number\"\n                              },\n                              \"maxDuration\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"number\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"max\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"regions\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"functionFailoverRegions\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"runtime\": {\n                                \"type\": \"string\"\n                              },\n                              \"includeFiles\": {\n                                \"type\": \"string\"\n                              },\n                              \"excludeFiles\": {\n                                \"type\": \"string\"\n                              },\n                              \"experimentalTriggers\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"queue/v1beta\"\n                                          ],\n                                          \"description\": \"Event type - must be \\\"queue/v1beta\\\" (REQUIRED)\"\n                                        },\n                                        \"consumer\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Name of the consumer group for this trigger (REQUIRED)\"\n                                        },\n                                        \"topic\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Name of the queue topic to consume from (REQUIRED)\"\n                                        },\n                                        \"maxDeliveries\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                        },\n                                        \"retryAfterSeconds\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration.\"\n                                        },\n                                        \"initialDelaySeconds\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration.\"\n                                        },\n                                        \"maxConcurrency\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"consumer\",\n                                        \"topic\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name.\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"queue/v2beta\"\n                                          ],\n                                          \"description\": \"Event type - must be \\\"queue/v2beta\\\" (REQUIRED)\"\n                                        },\n                                        \"topic\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Name of the queue topic to consume from (REQUIRED)\"\n                                        },\n                                        \"maxDeliveries\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                        },\n                                        \"retryAfterSeconds\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration.\"\n                                        },\n                                        \"initialDelaySeconds\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration.\"\n                                        },\n                                        \"maxConcurrency\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"topic\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed.\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"supportsCancellation\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"monorepoManager\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"passiveConnectConfigurationId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Since November 2023 this field defines a Secure Compute network that will only be used to deploy passive lambdas to (as in passiveRegions)\"\n                        },\n                        \"routes\": {\n                          \"nullable\": true,\n                          \"items\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"src\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"dest\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"headers\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"methods\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"continue\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"override\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"caseSensitive\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"check\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"important\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"status\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"has\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"missing\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"mitigate\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"challenge\",\n                                          \"deny\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"transforms\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"request.headers\",\n                                            \"request.query\",\n                                            \"response.headers\"\n                                          ]\n                                        },\n                                        \"op\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"append\",\n                                            \"set\",\n                                            \"delete\"\n                                          ]\n                                        },\n                                        \"target\": {\n                                          \"properties\": {\n                                            \"key\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"args\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          ]\n                                        },\n                                        \"env\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"op\",\n                                        \"target\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"env\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"locale\": {\n                                    \"properties\": {\n                                      \"redirect\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"cookie\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"source\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                                  },\n                                  \"destination\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"middlewarePath\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                                  },\n                                  \"middlewareRawSrc\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"The original middleware matchers.\"\n                                  },\n                                  \"middleware\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A middleware index in the `middleware` key under the build result\"\n                                  },\n                                  \"respectOriginCacheControl\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"src\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"handle\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"error\",\n                                      \"filesystem\",\n                                      \"hit\",\n                                      \"miss\",\n                                      \"rewrite\",\n                                      \"resource\"\n                                    ]\n                                  },\n                                  \"src\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"dest\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"status\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"handle\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"src\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"continue\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"middleware\": {\n                                    \"type\": \"number\",\n                                    \"enum\": [\n                                      0\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"continue\",\n                                  \"middleware\",\n                                  \"src\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"gitRepo\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"namespace\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"gitlab\"\n                                  ]\n                                },\n                                \"url\": {\n                                  \"type\": \"string\"\n                                },\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"defaultBranch\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"private\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"ownerType\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"team\",\n                                    \"user\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"defaultBranch\",\n                                \"name\",\n                                \"namespace\",\n                                \"ownerType\",\n                                \"path\",\n                                \"private\",\n                                \"projectId\",\n                                \"type\",\n                                \"url\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"repoOwnerId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"defaultBranch\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"private\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"ownerType\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"team\",\n                                    \"user\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"defaultBranch\",\n                                \"name\",\n                                \"org\",\n                                \"ownerType\",\n                                \"path\",\n                                \"private\",\n                                \"repo\",\n                                \"repoId\",\n                                \"repoOwnerId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"owner\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"workspaceUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"defaultBranch\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"private\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"ownerType\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"team\",\n                                    \"user\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"defaultBranch\",\n                                \"name\",\n                                \"owner\",\n                                \"ownerType\",\n                                \"path\",\n                                \"private\",\n                                \"repoUuid\",\n                                \"slug\",\n                                \"type\",\n                                \"workspaceUuid\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"flags\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"definitions\": {\n                                  \"additionalProperties\": {\n                                    \"properties\": {\n                                      \"options\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"value\": {\n                                              \"$ref\": \"#/components/schemas/FlagJSONValue\"\n                                            },\n                                            \"label\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"url\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"description\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"object\"\n                                }\n                              },\n                              \"required\": [\n                                \"definitions\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                            },\n                            {\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                            }\n                          ]\n                        },\n                        \"microfrontends\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"isDefaultApp\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false\n                                  ]\n                                },\n                                \"defaultAppProjectName\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"The project name of the default app of this deployment's microfrontends group.\"\n                                },\n                                \"defaultRoute\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI.\"\n                                },\n                                \"groupIds\": {\n                                  \"type\": \"array\",\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"minItems\": 1,\n                                  \"description\": \"The group of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                                }\n                              },\n                              \"required\": [\n                                \"defaultAppProjectName\",\n                                \"groupIds\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"isDefaultApp\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    true\n                                  ]\n                                },\n                                \"mfeConfigUploadState\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"success\",\n                                    \"waiting_on_build\",\n                                    \"no_config\"\n                                  ],\n                                  \"description\": \"The result of the microfrontends config upload during deployment creation / build. Only set for default app deployments. The config upload is attempted during deployment create, and then again during the build. If the config is not in the root directory, or the deployment is prebuilt, the config cannot be uploaded during deployment create. The upload during deployment build finds the config even if it's not in the root directory, as it has access to all files. Uploading the config during create is ideal, as then all child deployments are guaranteed to have access to the default app deployment config even if the default app has not yet started building. If the config is not uploaded, the child app will show as building until the config has been uploaded during the default app build. - `success` - The config was uploaded successfully, either when the deployment was created or during the build. - `waiting_on_build` - The config could not be uploaded during deployment create, will be attempted again during the build. - `no_config` - No config was found. Only set once the build has not found the config in any of the deployment's files. - `undefined` - Legacy deployments, or there was an error uploading the config during deployment create.\"\n                                },\n                                \"defaultAppProjectName\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"The project name of the default app of this deployment's microfrontends group.\"\n                                },\n                                \"defaultRoute\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI.\"\n                                },\n                                \"groupIds\": {\n                                  \"type\": \"array\",\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"minItems\": 1,\n                                  \"description\": \"The group of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                                }\n                              },\n                              \"required\": [\n                                \"defaultAppProjectName\",\n                                \"groupIds\",\n                                \"isDefaultApp\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"config\": {\n                          \"properties\": {\n                            \"version\": {\n                              \"type\": \"number\"\n                            },\n                            \"functionType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"standard\",\n                                \"fluid\"\n                              ]\n                            },\n                            \"functionMemoryType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"standard\",\n                                \"standard_legacy\",\n                                \"performance\"\n                              ]\n                            },\n                            \"functionTimeout\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            },\n                            \"secureComputePrimaryRegion\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"secureComputeFallbackRegion\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"isUsingActiveCPU\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"resourceConfig\": {\n                              \"properties\": {\n                                \"buildQueue\": {\n                                  \"properties\": {\n                                    \"configuration\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"SKIP_NAMESPACE_QUEUE\",\n                                        \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                      ],\n                                      \"description\": \"Build resource configuration snapshot for this deployment.\"\n                                    }\n                                  },\n                                  \"type\": \"object\",\n                                  \"description\": \"Build resource configuration snapshot for this deployment.\"\n                                },\n                                \"elasticConcurrency\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"TEAM_SETTING\",\n                                    \"PROJECT_SETTING\",\n                                    \"SKIP_QUEUE\"\n                                  ],\n                                  \"description\": \"When elastic concurrency is used for this deployment, a value is set. The value tells the reason where the setting was coming from. - TEAM_SETTING: Inherited from team settings - PROJECT_SETTING: Inherited from project settings - SKIP_QUEUE: Manually triggered by user to skip the queues\"\n                                },\n                                \"buildMachine\": {\n                                  \"properties\": {\n                                    \"purchaseType\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"enhanced\",\n                                        \"turbo\",\n                                        \"standard\"\n                                      ],\n                                      \"description\": \"Machine type that was used for the build.\"\n                                    }\n                                  },\n                                  \"type\": \"object\"\n                                }\n                              },\n                              \"type\": \"object\",\n                              \"description\": \"Build resource configuration snapshot for this deployment.\"\n                            }\n                          },\n                          \"required\": [\n                            \"functionMemoryType\",\n                            \"functionTimeout\",\n                            \"functionType\",\n                            \"secureComputeFallbackRegion\",\n                            \"secureComputePrimaryRegion\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Since February 2025 the configuration must include snapshot data at the time of deployment creation to capture properties for the /deployments/:id/config endpoint utilized for displaying Deployment Configuration on the frontend This is optional because older deployments may not have this data captured\"\n                        },\n                        \"checks\": {\n                          \"properties\": {\n                            \"deployment-alias\": {\n                              \"properties\": {\n                                \"state\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"succeeded\",\n                                    \"failed\",\n                                    \"pending\"\n                                  ]\n                                },\n                                \"startedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"completedAt\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"startedAt\",\n                                \"state\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Condensed check data. Retrieve individual check and check run data using api-checks v2 routes.\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployment-alias\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"seatBlock\": {\n                          \"properties\": {\n                            \"blockCode\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"TEAM_ACCESS_REQUIRED\",\n                                \"COMMIT_AUTHOR_REQUIRED\"\n                              ],\n                              \"description\": \"The NSNB decision code for the seat block. TODO: We should consolidate block types.\"\n                            },\n                            \"userId\": {\n                              \"type\": \"string\",\n                              \"description\": \"The blocked vercel user ID.\"\n                            },\n                            \"isVerified\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Determines if the user was verified during the block. In the git integration case, the commit sender was the author.\"\n                            },\n                            \"gitUserId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"gitProvider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\",\n                                \"bitbucket\",\n                                \"github\"\n                              ],\n                              \"description\": \"The git provider type associated with gitUserId.\"\n                            }\n                          },\n                          \"required\": [\n                            \"blockCode\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"NSNB Blocked metadata\"\n                        }\n                      },\n                      \"required\": [\n                        \"aliasAssigned\",\n                        \"bootedAt\",\n                        \"build\",\n                        \"buildSkipped\",\n                        \"buildingAt\",\n                        \"createdAt\",\n                        \"createdIn\",\n                        \"creator\",\n                        \"env\",\n                        \"id\",\n                        \"inspectorUrl\",\n                        \"isInConcurrentBuildsQueue\",\n                        \"isInSystemBuildsQueue\",\n                        \"meta\",\n                        \"name\",\n                        \"ownerId\",\n                        \"plan\",\n                        \"projectId\",\n                        \"projectSettings\",\n                        \"public\",\n                        \"readyState\",\n                        \"regions\",\n                        \"routes\",\n                        \"status\",\n                        \"type\",\n                        \"url\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The deployment including both public and private information\"\n                    },\n                    {\n                      \"properties\": {\n                        \"alias\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation\",\n                          \"example\": []\n                        },\n                        \"aliasAssigned\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"A boolean that will be true when the aliases from the alias property were assigned successfully\",\n                          \"example\": true\n                        },\n                        \"bootedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"buildingAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"buildContainerFinishedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Since April 2025 it necessary for On-Demand Concurrency Minutes calculation\"\n                        },\n                        \"buildSkipped\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"creator\": {\n                          \"properties\": {\n                            \"uid\": {\n                              \"type\": \"string\",\n                              \"description\": \"The ID of the user that created the deployment\",\n                              \"example\": \"96SnxkFiMyVKsK3pnoHfx3Hz\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\",\n                              \"description\": \"The username of the user that created the deployment\",\n                              \"example\": \"john-doe\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\",\n                              \"description\": \"The avatar of the user that created the deployment\"\n                            }\n                          },\n                          \"required\": [\n                            \"uid\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Information about the deployment creator\"\n                        },\n                        \"initReadyAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"isFirstBranchDeployment\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"lambdas\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"readyState\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"BUILDING\",\n                                  \"ERROR\",\n                                  \"INITIALIZING\",\n                                  \"READY\"\n                                ]\n                              },\n                              \"entrypoint\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"readyStateAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"output\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"path\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"functionName\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"functionName\",\n                                    \"path\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"output\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A partial representation of a Build used by the deployment endpoint.\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"public\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"A boolean representing if the deployment is public or not. By default this is `false`\",\n                          \"example\": false\n                        },\n                        \"ready\": {\n                          \"type\": \"number\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"QUEUED\",\n                            \"BUILDING\",\n                            \"ERROR\",\n                            \"INITIALIZING\",\n                            \"READY\",\n                            \"CANCELED\"\n                          ]\n                        },\n                        \"team\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\",\n                            \"name\",\n                            \"slug\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The team that owns the deployment if any\"\n                        },\n                        \"userAliases\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"An array of domains that were provided by the user when creating the Deployment.\",\n                          \"example\": [\n                            \"sub1.example.com\",\n                            \"sub2.example.com\"\n                          ]\n                        },\n                        \"previewCommentsEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether or not preview comments are enabled for the deployment\",\n                          \"example\": false\n                        },\n                        \"ttyBuildLogs\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"customEnvironment\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"URL-friendly name of the environment\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\"\n                                  ],\n                                  \"description\": \"The type of environment (production, preview, or development)\"\n                                },\n                                \"description\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Optional description of the environment's purpose\"\n                                },\n                                \"branchMatcher\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"endsWith\",\n                                        \"startsWith\",\n                                        \"equals\"\n                                      ],\n                                      \"description\": \"The type of matching to perform\"\n                                    },\n                                    \"pattern\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"The pattern to match against branch names\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"pattern\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Configuration for matching git branches to this environment\"\n                                },\n                                \"domains\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"apexName\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"redirect\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"redirectStatusCode\": {\n                                        \"nullable\": true,\n                                        \"type\": \"number\",\n                                        \"enum\": [\n                                          307,\n                                          301,\n                                          302,\n                                          308\n                                        ]\n                                      },\n                                      \"gitBranch\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"customEnvironmentId\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"verified\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ],\n                                        \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                      },\n                                      \"verification\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"domain\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"reason\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"domain\",\n                                            \"reason\",\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\",\n                                          \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                        },\n                                        \"type\": \"array\",\n                                        \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"apexName\",\n                                      \"name\",\n                                      \"projectId\",\n                                      \"verified\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"description\": \"List of domains associated with this environment\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"List of domains associated with this environment\"\n                                },\n                                \"currentDeploymentAliases\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"List of aliases for the current deployment\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Timestamp when the environment was created\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Timestamp when the environment was last updated\"\n                                }\n                              },\n                              \"required\": [\n                                \"createdAt\",\n                                \"id\",\n                                \"slug\",\n                                \"type\",\n                                \"updatedAt\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                            },\n                            {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"id\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                            }\n                          ]\n                        },\n                        \"oomReport\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"out-of-memory\"\n                          ]\n                        },\n                        \"readyStateReason\": {\n                          \"type\": \"string\"\n                        },\n                        \"aliasWarning\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"code\": {\n                              \"type\": \"string\"\n                            },\n                            \"message\": {\n                              \"type\": \"string\"\n                            },\n                            \"link\": {\n                              \"type\": \"string\"\n                            },\n                            \"action\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"code\",\n                            \"message\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"A string holding the unique ID of the deployment\",\n                          \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                          \"example\": 1540257589405\n                        },\n                        \"readyState\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"QUEUED\",\n                            \"BUILDING\",\n                            \"ERROR\",\n                            \"INITIALIZING\",\n                            \"READY\",\n                            \"CANCELED\"\n                          ],\n                          \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                          \"example\": \"READY\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                          \"example\": \"my-project\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"LAMBDAS\"\n                          ]\n                        },\n                        \"aliasError\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"code\": {\n                              \"type\": \"string\"\n                            },\n                            \"message\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"code\",\n                            \"message\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`\",\n                          \"example\": null\n                        },\n                        \"aliasFinal\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"autoAssignCustomDomains\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"applies to custom domains only, defaults to `true`\"\n                        },\n                        \"automaticAliases\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildErrorAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"checksState\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"registered\",\n                            \"running\",\n                            \"completed\"\n                          ]\n                        },\n                        \"checksConclusion\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"succeeded\",\n                            \"failed\",\n                            \"skipped\",\n                            \"canceled\"\n                          ]\n                        },\n                        \"deletedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A number containing the date when the deployment was deleted at milliseconds\",\n                          \"example\": 1540257589405\n                        },\n                        \"defaultRoute\": {\n                          \"type\": \"string\",\n                          \"description\": \"Computed field that is only available for deployments with a microfrontend configuration.\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"errorCode\": {\n                          \"type\": \"string\"\n                        },\n                        \"errorLink\": {\n                          \"type\": \"string\"\n                        },\n                        \"errorMessage\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"errorStep\": {\n                          \"type\": \"string\"\n                        },\n                        \"passiveRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service\"\n                        },\n                        \"gitSource\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"repoId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"repoId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"org\",\n                                \"repo\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"repoId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"org\",\n                                \"repo\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-limited\"\n                                  ]\n                                },\n                                \"repoId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"repoId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-limited\"\n                                  ]\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"org\",\n                                \"repo\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"gitlab\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"workspaceUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"repoUuid\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"owner\": {\n                                  \"type\": \"string\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"owner\",\n                                \"slug\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"custom\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"gitUrl\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"gitUrl\",\n                                \"ref\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Allows custom git sources (local folder mounted to the container) in test mode\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"ref\",\n                                \"repoId\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"ref\",\n                                \"repoId\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-limited\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"number\"\n                                },\n                                \"org\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repo\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"ref\",\n                                \"repoId\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"gitlab\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"ref\",\n                                \"sha\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"bitbucket\"\n                                  ]\n                                },\n                                \"ref\": {\n                                  \"type\": \"string\"\n                                },\n                                \"sha\": {\n                                  \"type\": \"string\"\n                                },\n                                \"owner\": {\n                                  \"type\": \"string\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\"\n                                },\n                                \"workspaceUuid\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoUuid\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"ref\",\n                                \"repoUuid\",\n                                \"sha\",\n                                \"type\",\n                                \"workspaceUuid\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"manualProvisioning\": {\n                          \"properties\": {\n                            \"state\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"PENDING\",\n                                \"COMPLETE\",\n                                \"TIMEOUT\"\n                              ],\n                              \"description\": \"Current provisioning state\"\n                            },\n                            \"completedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when manual provisioning completed\"\n                            }\n                          },\n                          \"required\": [\n                            \"state\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Present when deployment was created with VERCEL_MANUAL_PROVISIONING=true. The deployment stays in INITIALIZING until /continue is called.\"\n                        },\n                        \"meta\": {\n                          \"additionalProperties\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"originCacheRegion\": {\n                          \"type\": \"string\"\n                        },\n                        \"nodeVersion\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"24.x\",\n                            \"22.x\",\n                            \"20.x\",\n                            \"18.x\",\n                            \"16.x\",\n                            \"14.x\",\n                            \"12.x\",\n                            \"10.x\",\n                            \"8.10.x\"\n                          ],\n                          \"description\": \"If set it overrides the `projectSettings.nodeVersion` for this deployment.\"\n                        },\n                        \"project\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"framework\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\",\n                            \"name\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The public project information associated with the deployment.\"\n                        },\n                        \"prebuilt\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"readySubstate\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"STAGED\",\n                            \"ROLLING\",\n                            \"PROMOTED\"\n                          ],\n                          \"description\": \"Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic\"\n                        },\n                        \"regions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"The regions the deployment exists in\",\n                          \"example\": [\n                            \"sfo1\"\n                          ]\n                        },\n                        \"softDeletedByRetention\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"flag to indicate if the deployment was deleted by retention policy\",\n                          \"example\": \"true\"\n                        },\n                        \"source\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"api-trigger-git-deploy\",\n                            \"cli\",\n                            \"clone/repo\",\n                            \"git\",\n                            \"import\",\n                            \"import/repo\",\n                            \"redeploy\",\n                            \"v0-web\"\n                          ],\n                          \"description\": \"Where was the deployment created from\",\n                          \"example\": \"cli\"\n                        },\n                        \"target\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"staging\",\n                            \"production\"\n                          ],\n                          \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                          \"example\": null\n                        },\n                        \"undeletedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A number containing the date when the deployment was undeleted at milliseconds\",\n                          \"example\": 1540257589405\n                        },\n                        \"url\": {\n                          \"type\": \"string\",\n                          \"description\": \"A string with the unique URL of the deployment\",\n                          \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                        },\n                        \"userConfiguredDeploymentId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.\",\n                          \"example\": \"abc123\"\n                        },\n                        \"version\": {\n                          \"type\": \"number\",\n                          \"enum\": [\n                            2\n                          ],\n                          \"description\": \"The platform version that was used to create the deployment.\",\n                          \"example\": 2\n                        },\n                        \"oidcTokenClaims\": {\n                          \"properties\": {\n                            \"iss\": {\n                              \"type\": \"string\"\n                            },\n                            \"sub\": {\n                              \"type\": \"string\"\n                            },\n                            \"scope\": {\n                              \"type\": \"string\"\n                            },\n                            \"aud\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner_id\": {\n                              \"type\": \"string\"\n                            },\n                            \"project\": {\n                              \"type\": \"string\"\n                            },\n                            \"project_id\": {\n                              \"type\": \"string\"\n                            },\n                            \"environment\": {\n                              \"type\": \"string\"\n                            },\n                            \"plan\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"aud\",\n                            \"environment\",\n                            \"iss\",\n                            \"owner\",\n                            \"owner_id\",\n                            \"project\",\n                            \"project_id\",\n                            \"scope\",\n                            \"sub\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"aliasAssigned\",\n                        \"bootedAt\",\n                        \"buildSkipped\",\n                        \"buildingAt\",\n                        \"createdAt\",\n                        \"creator\",\n                        \"id\",\n                        \"meta\",\n                        \"name\",\n                        \"public\",\n                        \"readyState\",\n                        \"regions\",\n                        \"status\",\n                        \"type\",\n                        \"url\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The deployment including only public information\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The deployment was not found\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrUrl\",\n            \"description\": \"The unique identifier or hostname of the deployment.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\",\n              \"description\": \"The unique identifier or hostname of the deployment.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withGitRepoInfo\",\n            \"description\": \"Whether to add in gitRepo information.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Whether to add in gitRepo information.\",\n              \"type\": \"string\",\n              \"example\": \"true\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v13/deployments\": {\n      \"post\": {\n        \"description\": \"Create a new deployment with all the required and intended data. If the deployment is not a git deployment, all files must be provided with the request, either referenced or inlined. Additionally, a deployment id can be specified to redeploy a previous deployment.\",\n        \"operationId\": \"createDeployment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a new deployment\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The successfully created deployment\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"aliasAssignedAt\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"type\": \"number\"\n                        },\n                        {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      ]\n                    },\n                    \"alwaysRefuseToBuild\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"build\": {\n                      \"properties\": {\n                        \"env\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"env\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"buildArtifactUrls\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"builds\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"use\": {\n                            \"type\": \"string\"\n                          },\n                          \"src\": {\n                            \"type\": \"string\"\n                          },\n                          \"config\": {\n                            \"additionalProperties\": true,\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"use\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"env\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"inspectorUrl\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"isInConcurrentBuildsQueue\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"isInSystemBuildsQueue\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"projectSettings\": {\n                      \"properties\": {\n                        \"nodeVersion\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"24.x\",\n                            \"22.x\",\n                            \"20.x\",\n                            \"18.x\",\n                            \"16.x\",\n                            \"14.x\",\n                            \"12.x\",\n                            \"10.x\",\n                            \"8.10.x\"\n                          ]\n                        },\n                        \"buildCommand\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"devCommand\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"framework\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"blitzjs\",\n                            \"nextjs\",\n                            \"gatsby\",\n                            \"remix\",\n                            \"react-router\",\n                            \"astro\",\n                            \"hexo\",\n                            \"eleventy\",\n                            \"docusaurus-2\",\n                            \"docusaurus\",\n                            \"preact\",\n                            \"solidstart-1\",\n                            \"solidstart\",\n                            \"dojo\",\n                            \"ember\",\n                            \"vue\",\n                            \"scully\",\n                            \"ionic-angular\",\n                            \"angular\",\n                            \"polymer\",\n                            \"svelte\",\n                            \"sveltekit\",\n                            \"sveltekit-1\",\n                            \"ionic-react\",\n                            \"create-react-app\",\n                            \"gridsome\",\n                            \"umijs\",\n                            \"sapper\",\n                            \"saber\",\n                            \"stencil\",\n                            \"nuxtjs\",\n                            \"redwoodjs\",\n                            \"hugo\",\n                            \"jekyll\",\n                            \"brunch\",\n                            \"middleman\",\n                            \"zola\",\n                            \"hydrogen\",\n                            \"vite\",\n                            \"tanstack-start\",\n                            \"vitepress\",\n                            \"vuepress\",\n                            \"parcel\",\n                            \"fastapi\",\n                            \"flask\",\n                            \"fasthtml\",\n                            \"django\",\n                            \"sanity-v3\",\n                            \"sanity\",\n                            \"storybook\",\n                            \"nitro\",\n                            \"hono\",\n                            \"express\",\n                            \"h3\",\n                            \"koa\",\n                            \"nestjs\",\n                            \"elysia\",\n                            \"fastify\",\n                            \"xmcp\",\n                            \"python\",\n                            \"ruby\",\n                            \"rust\",\n                            \"node\",\n                            \"go\",\n                            \"services\"\n                          ]\n                        },\n                        \"commandForIgnoringBuildStep\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"installCommand\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"outputDirectory\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"speedInsights\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"enabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"disabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"canceledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"hasData\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"paidAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"webAnalytics\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"disabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"canceledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"enabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"hasData\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"id\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"integrations\": {\n                      \"properties\": {\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"skipped\",\n                            \"pending\",\n                            \"ready\",\n                            \"error\",\n                            \"timeout\"\n                          ]\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"completedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"skippedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"skippedBy\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"startedAt\",\n                        \"status\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"images\": {\n                      \"properties\": {\n                        \"sizes\": {\n                          \"items\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"qualities\": {\n                          \"items\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domains\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"remotePatterns\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"protocol\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"http\",\n                                  \"https\"\n                                ],\n                                \"description\": \"Must be `http` or `https`.\"\n                              },\n                              \"hostname\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal or wildcard. Single `*` matches a single subdomain. Double `**` matches any number of subdomains.\"\n                              },\n                              \"port\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal port such as `8080` or empty string meaning no port.\"\n                              },\n                              \"pathname\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments.\"\n                              },\n                              \"search\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal query string such as `?v=1` or empty string meaning no query string.\"\n                              }\n                            },\n                            \"required\": [\n                              \"hostname\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"localPatterns\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"pathname\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments.\"\n                              },\n                              \"search\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal query string such as `?v=1` or empty string meaning no query string.\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"minimumCacheTTL\": {\n                          \"type\": \"number\"\n                        },\n                        \"formats\": {\n                          \"items\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"image/avif\",\n                              \"image/webp\"\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dangerouslyAllowSVG\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"contentSecurityPolicy\": {\n                          \"type\": \"string\"\n                        },\n                        \"contentDispositionType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"inline\",\n                            \"attachment\"\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"alias\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation\",\n                      \"example\": []\n                    },\n                    \"aliasAssigned\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"A boolean that will be true when the aliases from the alias property were assigned successfully\",\n                      \"example\": true\n                    },\n                    \"bootedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"buildingAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"buildContainerFinishedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Since April 2025 it necessary for On-Demand Concurrency Minutes calculation\"\n                    },\n                    \"buildSkipped\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"creator\": {\n                      \"properties\": {\n                        \"uid\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the user that created the deployment\",\n                          \"example\": \"96SnxkFiMyVKsK3pnoHfx3Hz\"\n                        },\n                        \"username\": {\n                          \"type\": \"string\",\n                          \"description\": \"The username of the user that created the deployment\",\n                          \"example\": \"john-doe\"\n                        },\n                        \"avatar\": {\n                          \"type\": \"string\",\n                          \"description\": \"The avatar of the user that created the deployment\"\n                        }\n                      },\n                      \"required\": [\n                        \"uid\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Information about the deployment creator\"\n                    },\n                    \"initReadyAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"isFirstBranchDeployment\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"lambdas\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"BUILDING\",\n                              \"ERROR\",\n                              \"INITIALIZING\",\n                              \"READY\"\n                            ]\n                          },\n                          \"entrypoint\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"readyStateAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"output\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"functionName\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"functionName\",\n                                \"path\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"output\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A partial representation of a Build used by the deployment endpoint.\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"public\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"A boolean representing if the deployment is public or not. By default this is `false`\",\n                      \"example\": false\n                    },\n                    \"ready\": {\n                      \"type\": \"number\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"QUEUED\",\n                        \"BUILDING\",\n                        \"ERROR\",\n                        \"INITIALIZING\",\n                        \"READY\",\n                        \"CANCELED\"\n                      ]\n                    },\n                    \"team\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\"\n                        },\n                        \"avatar\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\",\n                        \"slug\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The team that owns the deployment if any\"\n                    },\n                    \"userAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"An array of domains that were provided by the user when creating the Deployment.\",\n                      \"example\": [\n                        \"sub1.example.com\",\n                        \"sub2.example.com\"\n                      ]\n                    },\n                    \"previewCommentsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"Whether or not preview comments are enabled for the deployment\",\n                      \"example\": false\n                    },\n                    \"ttyBuildLogs\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"customEnvironment\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\",\n                              \"description\": \"URL-friendly name of the environment\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ],\n                              \"description\": \"The type of environment (production, preview, or development)\"\n                            },\n                            \"description\": {\n                              \"type\": \"string\",\n                              \"description\": \"Optional description of the environment's purpose\"\n                            },\n                            \"branchMatcher\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"endsWith\",\n                                    \"startsWith\",\n                                    \"equals\"\n                                  ],\n                                  \"description\": \"The type of matching to perform\"\n                                },\n                                \"pattern\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"The pattern to match against branch names\"\n                                }\n                              },\n                              \"required\": [\n                                \"pattern\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Configuration for matching git branches to this environment\"\n                            },\n                            \"domains\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"apexName\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"redirect\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"redirectStatusCode\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\",\n                                    \"enum\": [\n                                      307,\n                                      301,\n                                      302,\n                                      308\n                                    ]\n                                  },\n                                  \"gitBranch\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"customEnvironmentId\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"verified\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                  },\n                                  \"verification\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"domain\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"value\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"reason\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"domain\",\n                                        \"reason\",\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"apexName\",\n                                  \"name\",\n                                  \"projectId\",\n                                  \"verified\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"List of domains associated with this environment\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"List of domains associated with this environment\"\n                            },\n                            \"currentDeploymentAliases\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"List of aliases for the current deployment\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the environment was created\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the environment was last updated\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"slug\",\n                            \"type\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                        },\n                        {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                        }\n                      ]\n                    },\n                    \"oomReport\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"out-of-memory\"\n                      ]\n                    },\n                    \"readyStateReason\": {\n                      \"type\": \"string\"\n                    },\n                    \"aliasWarning\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"code\": {\n                          \"type\": \"string\"\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        },\n                        \"link\": {\n                          \"type\": \"string\"\n                        },\n                        \"action\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"code\",\n                        \"message\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"A string holding the unique ID of the deployment\",\n                      \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                      \"example\": 1540257589405\n                    },\n                    \"readyState\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"QUEUED\",\n                        \"BUILDING\",\n                        \"ERROR\",\n                        \"INITIALIZING\",\n                        \"READY\",\n                        \"CANCELED\"\n                      ],\n                      \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                      \"example\": \"READY\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                      \"example\": \"my-project\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LAMBDAS\"\n                      ]\n                    },\n                    \"aliasError\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"code\": {\n                          \"type\": \"string\"\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"code\",\n                        \"message\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`\",\n                      \"example\": null\n                    },\n                    \"aliasFinal\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"autoAssignCustomDomains\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"applies to custom domains only, defaults to `true`\"\n                    },\n                    \"automaticAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"buildErrorAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"checksState\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"registered\",\n                        \"running\",\n                        \"completed\"\n                      ]\n                    },\n                    \"checksConclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"succeeded\",\n                        \"failed\",\n                        \"skipped\",\n                        \"canceled\"\n                      ]\n                    },\n                    \"deletedAt\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the deployment was deleted at milliseconds\",\n                      \"example\": 1540257589405\n                    },\n                    \"defaultRoute\": {\n                      \"type\": \"string\",\n                      \"description\": \"Computed field that is only available for deployments with a microfrontend configuration.\"\n                    },\n                    \"canceledAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"errorCode\": {\n                      \"type\": \"string\"\n                    },\n                    \"errorLink\": {\n                      \"type\": \"string\"\n                    },\n                    \"errorMessage\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"errorStep\": {\n                      \"type\": \"string\"\n                    },\n                    \"passiveRegions\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service\"\n                    },\n                    \"gitSource\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"repoId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"repoId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"org\",\n                            \"repo\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"host\",\n                            \"repoId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"host\",\n                            \"org\",\n                            \"repo\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"repoId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"repoId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"org\",\n                            \"repo\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"projectId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"repoUuid\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"owner\",\n                            \"slug\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"custom\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"gitUrl\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"gitUrl\",\n                            \"ref\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Allows custom git sources (local folder mounted to the container) in test mode\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"ref\",\n                            \"repoId\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"host\",\n                            \"ref\",\n                            \"repoId\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"ref\",\n                            \"repoId\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"ref\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoUuid\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"ref\",\n                            \"repoUuid\",\n                            \"sha\",\n                            \"type\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"manualProvisioning\": {\n                      \"properties\": {\n                        \"state\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"PENDING\",\n                            \"COMPLETE\",\n                            \"TIMEOUT\"\n                          ],\n                          \"description\": \"Current provisioning state\"\n                        },\n                        \"completedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp when manual provisioning completed\"\n                        }\n                      },\n                      \"required\": [\n                        \"state\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Present when deployment was created with VERCEL_MANUAL_PROVISIONING=true. The deployment stays in INITIALIZING until /continue is called.\"\n                    },\n                    \"meta\": {\n                      \"additionalProperties\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"originCacheRegion\": {\n                      \"type\": \"string\"\n                    },\n                    \"nodeVersion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"24.x\",\n                        \"22.x\",\n                        \"20.x\",\n                        \"18.x\",\n                        \"16.x\",\n                        \"14.x\",\n                        \"12.x\",\n                        \"10.x\",\n                        \"8.10.x\"\n                      ],\n                      \"description\": \"If set it overrides the `projectSettings.nodeVersion` for this deployment.\"\n                    },\n                    \"project\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"framework\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The public project information associated with the deployment.\"\n                    },\n                    \"prebuilt\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"readySubstate\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"STAGED\",\n                        \"ROLLING\",\n                        \"PROMOTED\"\n                      ],\n                      \"description\": \"Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic\"\n                    },\n                    \"regions\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The regions the deployment exists in\",\n                      \"example\": [\n                        \"sfo1\"\n                      ]\n                    },\n                    \"softDeletedByRetention\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"flag to indicate if the deployment was deleted by retention policy\",\n                      \"example\": \"true\"\n                    },\n                    \"source\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"api-trigger-git-deploy\",\n                        \"cli\",\n                        \"clone/repo\",\n                        \"git\",\n                        \"import\",\n                        \"import/repo\",\n                        \"redeploy\",\n                        \"v0-web\"\n                      ],\n                      \"description\": \"Where was the deployment created from\",\n                      \"example\": \"cli\"\n                    },\n                    \"target\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"staging\",\n                        \"production\"\n                      ],\n                      \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                      \"example\": null\n                    },\n                    \"undeletedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the deployment was undeleted at milliseconds\",\n                      \"example\": 1540257589405\n                    },\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"description\": \"A string with the unique URL of the deployment\",\n                      \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                    },\n                    \"userConfiguredDeploymentId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.\",\n                      \"example\": \"abc123\"\n                    },\n                    \"version\": {\n                      \"type\": \"number\",\n                      \"enum\": [\n                        2\n                      ],\n                      \"description\": \"The platform version that was used to create the deployment.\",\n                      \"example\": 2\n                    },\n                    \"oidcTokenClaims\": {\n                      \"properties\": {\n                        \"iss\": {\n                          \"type\": \"string\"\n                        },\n                        \"sub\": {\n                          \"type\": \"string\"\n                        },\n                        \"scope\": {\n                          \"type\": \"string\"\n                        },\n                        \"aud\": {\n                          \"type\": \"string\"\n                        },\n                        \"owner\": {\n                          \"type\": \"string\"\n                        },\n                        \"owner_id\": {\n                          \"type\": \"string\"\n                        },\n                        \"project\": {\n                          \"type\": \"string\"\n                        },\n                        \"project_id\": {\n                          \"type\": \"string\"\n                        },\n                        \"environment\": {\n                          \"type\": \"string\"\n                        },\n                        \"plan\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"aud\",\n                        \"environment\",\n                        \"iss\",\n                        \"owner\",\n                        \"owner_id\",\n                        \"project\",\n                        \"project_id\",\n                        \"scope\",\n                        \"sub\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"plan\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"pro\",\n                        \"enterprise\",\n                        \"hobby\"\n                      ]\n                    },\n                    \"platform\": {\n                      \"properties\": {\n                        \"source\": {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Display name of the platform.\"\n                            }\n                          },\n                          \"required\": [\n                            \"name\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The external platform that created the deployment (e.g. its display name).\"\n                        },\n                        \"origin\": {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"id\",\n                                \"url\"\n                              ],\n                              \"description\": \"Whether the value is an opaque identifier or a URL.\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\",\n                              \"description\": \"The identifier or URL pointing to the originating entity.\"\n                            }\n                          },\n                          \"required\": [\n                            \"type\",\n                            \"value\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Reference back to the entity on the platform that initiated the deployment.\"\n                        },\n                        \"creator\": {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Display name of the platform user.\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\",\n                              \"description\": \"URL of the platform user's avatar image.\"\n                            }\n                          },\n                          \"required\": [\n                            \"name\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The user on the external platform who triggered the deployment.\"\n                        },\n                        \"meta\": {\n                          \"additionalProperties\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"object\",\n                          \"description\": \"Arbitrary key-value metadata provided by the platform.\"\n                        }\n                      },\n                      \"required\": [\n                        \"creator\",\n                        \"origin\",\n                        \"source\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Metadata about the source platform that triggered the deployment. Allows us to map a deployment back to a platform (e.g. the chat that created it)\"\n                    },\n                    \"connectBuildsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"connectConfigurationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdIn\": {\n                      \"type\": \"string\"\n                    },\n                    \"crons\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"schedule\": {\n                            \"type\": \"string\"\n                          },\n                          \"path\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"path\",\n                          \"schedule\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"functions\": {\n                      \"nullable\": true,\n                      \"additionalProperties\": {\n                        \"properties\": {\n                          \"architecture\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"x86_64\",\n                              \"arm64\"\n                            ]\n                          },\n                          \"memory\": {\n                            \"type\": \"number\"\n                          },\n                          \"maxDuration\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"max\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"regions\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"functionFailoverRegions\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"runtime\": {\n                            \"type\": \"string\"\n                          },\n                          \"includeFiles\": {\n                            \"type\": \"string\"\n                          },\n                          \"excludeFiles\": {\n                            \"type\": \"string\"\n                          },\n                          \"experimentalTriggers\": {\n                            \"items\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"queue/v1beta\"\n                                      ],\n                                      \"description\": \"Event type - must be \\\"queue/v1beta\\\" (REQUIRED)\"\n                                    },\n                                    \"consumer\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Name of the consumer group for this trigger (REQUIRED)\"\n                                    },\n                                    \"topic\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Name of the queue topic to consume from (REQUIRED)\"\n                                    },\n                                    \"maxDeliveries\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"retryAfterSeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"initialDelaySeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"maxConcurrency\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"consumer\",\n                                    \"topic\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name.\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"queue/v2beta\"\n                                      ],\n                                      \"description\": \"Event type - must be \\\"queue/v2beta\\\" (REQUIRED)\"\n                                    },\n                                    \"topic\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Name of the queue topic to consume from (REQUIRED)\"\n                                    },\n                                    \"maxDeliveries\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"retryAfterSeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"initialDelaySeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"maxConcurrency\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"topic\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed.\"\n                                }\n                              ]\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"supportsCancellation\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"monorepoManager\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"passiveConnectConfigurationId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Since November 2023 this field defines a Secure Compute network that will only be used to deploy passive lambdas to (as in passiveRegions)\"\n                    },\n                    \"routes\": {\n                      \"nullable\": true,\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"dest\": {\n                                \"type\": \"string\"\n                              },\n                              \"headers\": {\n                                \"additionalProperties\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"methods\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"continue\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"override\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"caseSensitive\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"check\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"important\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              },\n                              \"has\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\",\n                                            \"cookie\",\n                                            \"query\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"missing\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\",\n                                            \"cookie\",\n                                            \"query\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"mitigate\": {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"challenge\",\n                                      \"deny\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"transforms\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"request.headers\",\n                                        \"request.query\",\n                                        \"response.headers\"\n                                      ]\n                                    },\n                                    \"op\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"append\",\n                                        \"set\",\n                                        \"delete\"\n                                      ]\n                                    },\n                                    \"target\": {\n                                      \"properties\": {\n                                        \"key\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"args\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      ]\n                                    },\n                                    \"env\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"op\",\n                                    \"target\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"env\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"locale\": {\n                                \"properties\": {\n                                  \"redirect\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"cookie\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                              },\n                              \"destination\": {\n                                \"type\": \"string\"\n                              },\n                              \"statusCode\": {\n                                \"type\": \"number\"\n                              },\n                              \"middlewarePath\": {\n                                \"type\": \"string\",\n                                \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                              },\n                              \"middlewareRawSrc\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\",\n                                \"description\": \"The original middleware matchers.\"\n                              },\n                              \"middleware\": {\n                                \"type\": \"number\",\n                                \"description\": \"A middleware index in the `middleware` key under the build result\"\n                              },\n                              \"respectOriginCacheControl\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"src\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"handle\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"error\",\n                                  \"filesystem\",\n                                  \"hit\",\n                                  \"miss\",\n                                  \"rewrite\",\n                                  \"resource\"\n                                ]\n                              },\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"dest\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"handle\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"continue\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"middleware\": {\n                                \"type\": \"number\",\n                                \"enum\": [\n                                  0\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"continue\",\n                              \"middleware\",\n                              \"src\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"gitRepo\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"namespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"url\": {\n                              \"type\": \"string\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"defaultBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"private\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ownerType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"team\",\n                                \"user\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"defaultBranch\",\n                            \"name\",\n                            \"namespace\",\n                            \"ownerType\",\n                            \"path\",\n                            \"private\",\n                            \"projectId\",\n                            \"type\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"defaultBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"private\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ownerType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"team\",\n                                \"user\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"defaultBranch\",\n                            \"name\",\n                            \"org\",\n                            \"ownerType\",\n                            \"path\",\n                            \"private\",\n                            \"repo\",\n                            \"repoId\",\n                            \"repoOwnerId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"defaultBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"private\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ownerType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"team\",\n                                \"user\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"defaultBranch\",\n                            \"name\",\n                            \"owner\",\n                            \"ownerType\",\n                            \"path\",\n                            \"private\",\n                            \"repoUuid\",\n                            \"slug\",\n                            \"type\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"flags\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"definitions\": {\n                              \"additionalProperties\": {\n                                \"properties\": {\n                                  \"options\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"value\": {\n                                          \"$ref\": \"#/components/schemas/FlagJSONValue\"\n                                        },\n                                        \"label\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"description\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"definitions\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                        },\n                        {\n                          \"items\": {\n                            \"type\": \"object\",\n                            \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                        }\n                      ]\n                    },\n                    \"microfrontends\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"defaultAppProjectName\": {\n                              \"type\": \"string\",\n                              \"description\": \"The project name of the default app of this deployment's microfrontends group.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            }\n                          },\n                          \"required\": [\n                            \"defaultAppProjectName\",\n                            \"groupIds\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            },\n                            \"mfeConfigUploadState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"success\",\n                                \"waiting_on_build\",\n                                \"no_config\"\n                              ],\n                              \"description\": \"The result of the microfrontends config upload during deployment creation / build. Only set for default app deployments. The config upload is attempted during deployment create, and then again during the build. If the config is not in the root directory, or the deployment is prebuilt, the config cannot be uploaded during deployment create. The upload during deployment build finds the config even if it's not in the root directory, as it has access to all files. Uploading the config during create is ideal, as then all child deployments are guaranteed to have access to the default app deployment config even if the default app has not yet started building. If the config is not uploaded, the child app will show as building until the config has been uploaded during the default app build. - `success` - The config was uploaded successfully, either when the deployment was created or during the build. - `waiting_on_build` - The config could not be uploaded during deployment create, will be attempted again during the build. - `no_config` - No config was found. Only set once the build has not found the config in any of the deployment's files. - `undefined` - Legacy deployments, or there was an error uploading the config during deployment create.\"\n                            },\n                            \"defaultAppProjectName\": {\n                              \"type\": \"string\",\n                              \"description\": \"The project name of the default app of this deployment's microfrontends group.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            }\n                          },\n                          \"required\": [\n                            \"defaultAppProjectName\",\n                            \"groupIds\",\n                            \"isDefaultApp\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"config\": {\n                      \"properties\": {\n                        \"version\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"fluid\"\n                          ]\n                        },\n                        \"functionMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"standard_legacy\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionTimeout\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"secureComputePrimaryRegion\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"secureComputeFallbackRegion\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"isUsingActiveCPU\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"resourceConfig\": {\n                          \"properties\": {\n                            \"buildQueue\": {\n                              \"properties\": {\n                                \"configuration\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"SKIP_NAMESPACE_QUEUE\",\n                                    \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                  ],\n                                  \"description\": \"Build resource configuration snapshot for this deployment.\"\n                                }\n                              },\n                              \"type\": \"object\",\n                              \"description\": \"Build resource configuration snapshot for this deployment.\"\n                            },\n                            \"elasticConcurrency\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"TEAM_SETTING\",\n                                \"PROJECT_SETTING\",\n                                \"SKIP_QUEUE\"\n                              ],\n                              \"description\": \"When elastic concurrency is used for this deployment, a value is set. The value tells the reason where the setting was coming from. - TEAM_SETTING: Inherited from team settings - PROJECT_SETTING: Inherited from project settings - SKIP_QUEUE: Manually triggered by user to skip the queues\"\n                            },\n                            \"buildMachine\": {\n                              \"properties\": {\n                                \"purchaseType\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"enhanced\",\n                                    \"turbo\",\n                                    \"standard\"\n                                  ],\n                                  \"description\": \"Machine type that was used for the build.\"\n                                }\n                              },\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\",\n                          \"description\": \"Build resource configuration snapshot for this deployment.\"\n                        }\n                      },\n                      \"required\": [\n                        \"functionMemoryType\",\n                        \"functionTimeout\",\n                        \"functionType\",\n                        \"secureComputeFallbackRegion\",\n                        \"secureComputePrimaryRegion\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Since February 2025 the configuration must include snapshot data at the time of deployment creation to capture properties for the /deployments/:id/config endpoint utilized for displaying Deployment Configuration on the frontend This is optional because older deployments may not have this data captured\"\n                    },\n                    \"checks\": {\n                      \"properties\": {\n                        \"deployment-alias\": {\n                          \"properties\": {\n                            \"state\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"succeeded\",\n                                \"failed\",\n                                \"pending\"\n                              ]\n                            },\n                            \"startedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"completedAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"startedAt\",\n                            \"state\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Condensed check data. Retrieve individual check and check run data using api-checks v2 routes.\"\n                        }\n                      },\n                      \"required\": [\n                        \"deployment-alias\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"seatBlock\": {\n                      \"properties\": {\n                        \"blockCode\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"TEAM_ACCESS_REQUIRED\",\n                            \"COMMIT_AUTHOR_REQUIRED\"\n                          ],\n                          \"description\": \"The NSNB decision code for the seat block. TODO: We should consolidate block types.\"\n                        },\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The blocked vercel user ID.\"\n                        },\n                        \"isVerified\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Determines if the user was verified during the block. In the git integration case, the commit sender was the author.\"\n                        },\n                        \"gitUserId\": {\n                          \"oneOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            }\n                          ]\n                        },\n                        \"gitProvider\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"gitlab\",\n                            \"bitbucket\",\n                            \"github\"\n                          ],\n                          \"description\": \"The git provider type associated with gitUserId.\"\n                        }\n                      },\n                      \"required\": [\n                        \"blockCode\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"NSNB Blocked metadata\"\n                    }\n                  },\n                  \"required\": [\n                    \"aliasAssigned\",\n                    \"bootedAt\",\n                    \"build\",\n                    \"buildSkipped\",\n                    \"buildingAt\",\n                    \"createdAt\",\n                    \"createdIn\",\n                    \"creator\",\n                    \"env\",\n                    \"id\",\n                    \"inspectorUrl\",\n                    \"isInConcurrentBuildsQueue\",\n                    \"isInSystemBuildsQueue\",\n                    \"meta\",\n                    \"name\",\n                    \"ownerId\",\n                    \"plan\",\n                    \"projectId\",\n                    \"projectSettings\",\n                    \"public\",\n                    \"readyState\",\n                    \"regions\",\n                    \"routes\",\n                    \"status\",\n                    \"type\",\n                    \"url\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The successfully created deployment\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\\nPro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced.\\nDeploying to Serverless Functions to multiple regions requires a plan update\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The deployment project is being transferred\"\n          },\n          \"426\": {\n            \"description\": \"\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          },\n          \"503\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"forceNew\",\n            \"description\": \"Forces a new deployment even if there is a previous similar deployment\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Forces a new deployment even if there is a previous similar deployment\",\n              \"enum\": [\n                \"0\",\n                \"1\"\n              ]\n            }\n          },\n          {\n            \"name\": \"skipAutoDetectionConfirmation\",\n            \"description\": \"Allows to skip framework detection so the API would not fail to ask for confirmation\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Allows to skip framework detection so the API would not fail to ask for confirmation\",\n              \"enum\": [\n                \"0\",\n                \"1\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"customEnvironmentSlugOrId\": {\n                    \"description\": \"Deploy to a custom environment, which will override the default environment\",\n                    \"type\": \"string\"\n                  },\n                  \"deploymentId\": {\n                    \"description\": \"An deployment id for an existing deployment to redeploy\",\n                    \"type\": \"string\",\n                    \"example\": \"dpl_2qn7PZrx89yxY34vEZPD31Y9XVj6\"\n                  },\n                  \"files\": {\n                    \"description\": \"A list of objects with the files to be deployed\",\n                    \"items\": {\n                      \"oneOf\": [\n                        {\n                          \"additionalProperties\": false,\n                          \"description\": \"Used in the case you want to inline a file inside the request\",\n                          \"properties\": {\n                            \"data\": {\n                              \"description\": \"The file content, it could be either a `base64` (useful for images, etc.) of the files or the plain content for source code\",\n                              \"type\": \"string\"\n                            },\n                            \"encoding\": {\n                              \"description\": \"The file content encoding, it could be either a base64 (useful for images, etc.) of the files or the plain text for source code.\",\n                              \"enum\": [\n                                \"base64\",\n                                \"utf-8\"\n                              ]\n                            },\n                            \"file\": {\n                              \"description\": \"The file name including the whole path\",\n                              \"example\": \"folder/file.js\",\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"file\",\n                            \"data\"\n                          ],\n                          \"title\": \"InlinedFile\",\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"additionalProperties\": false,\n                          \"description\": \"Used in the case you want to reference a file that was already uploaded\",\n                          \"properties\": {\n                            \"file\": {\n                              \"description\": \"The file path relative to the project root\",\n                              \"example\": \"folder/file.js\",\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"description\": \"The file contents hashed with SHA1, used to check the integrity\",\n                              \"type\": \"string\"\n                            },\n                            \"size\": {\n                              \"description\": \"The file size in bytes\",\n                              \"type\": \"integer\"\n                            }\n                          },\n                          \"required\": [\n                            \"file\"\n                          ],\n                          \"title\": \"UploadedFile\",\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"gitMetadata\": {\n                    \"description\": \"Populates initial git metadata for different git providers.\",\n                    \"additionalProperties\": false,\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"remoteUrl\": {\n                        \"type\": \"string\",\n                        \"description\": \"The git repository's remote origin url\",\n                        \"example\": \"https://github.com/vercel/next.js\"\n                      },\n                      \"commitAuthorName\": {\n                        \"type\": \"string\",\n                        \"description\": \"The name of the author of the commit\",\n                        \"example\": \"kyliau\"\n                      },\n                      \"commitAuthorEmail\": {\n                        \"type\": \"string\",\n                        \"description\": \"The email of the author of the commit\",\n                        \"example\": \"kyliau@example.com\"\n                      },\n                      \"commitMessage\": {\n                        \"type\": \"string\",\n                        \"description\": \"The commit message\",\n                        \"example\": \"add method to measure Interaction to Next Paint (INP) (#36490)\"\n                      },\n                      \"commitRef\": {\n                        \"type\": \"string\",\n                        \"description\": \"The branch on which the commit was made\",\n                        \"example\": \"main\"\n                      },\n                      \"commitSha\": {\n                        \"type\": \"string\",\n                        \"description\": \"The hash of the commit\",\n                        \"example\": \"dc36199b2234c6586ebe05ec94078a895c707e29\"\n                      },\n                      \"dirty\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether or not there have been modifications to the working tree since the latest commit\",\n                        \"example\": true\n                      },\n                      \"ci\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"True if process.env.CI was set when deploying\",\n                        \"example\": true\n                      },\n                      \"ciType\": {\n                        \"type\": \"string\",\n                        \"description\": \"The type of CI system used\",\n                        \"example\": \"github-actions\"\n                      },\n                      \"ciGitProviderUsername\": {\n                        \"type\": \"string\",\n                        \"description\": \"The username used for the Git Provider (e.g. GitHub) if their CI (e.g. GitHub Actions) was used, if available\",\n                        \"example\": \"rauchg\"\n                      },\n                      \"ciGitRepoVisibility\": {\n                        \"type\": \"string\",\n                        \"description\": \"The visibility of the Git repository if their CI (e.g. GitHub Actions) was used, if available\",\n                        \"example\": \"private\"\n                      }\n                    }\n                  },\n                  \"gitSource\": {\n                    \"description\": \"Defines the Git Repository source to be deployed. This property can not be used in combination with `files`.\",\n                    \"anyOf\": [\n                      {\n                        \"properties\": {\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"repoId\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"string\"\n                              }\n                            ],\n                            \"example\": 123456789\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"github\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"repoId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"org\": {\n                            \"type\": \"string\",\n                            \"example\": \"vercel\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"repo\": {\n                            \"type\": \"string\",\n                            \"example\": \"next.js\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"github\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"org\",\n                          \"repo\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"repoId\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"string\"\n                              }\n                            ],\n                            \"example\": 123456789\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"github-limited\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"repoId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"org\": {\n                            \"type\": \"string\",\n                            \"example\": \"vercel\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"repo\": {\n                            \"type\": \"string\",\n                            \"example\": \"next.js\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"github-limited\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"org\",\n                          \"repo\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"projectId\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"string\"\n                              }\n                            ],\n                            \"example\": 987654321\n                          },\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"gitlab\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"projectId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"repoUuid\": {\n                            \"type\": \"string\",\n                            \"example\": \"123e4567-e89b-12d3-a456-426614174000\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"bitbucket\"\n                            ],\n                            \"type\": \"string\"\n                          },\n                          \"workspaceUuid\": {\n                            \"type\": \"string\",\n                            \"example\": \"987e6543-e21b-12d3-a456-426614174000\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"repoUuid\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"owner\": {\n                            \"type\": \"string\",\n                            \"example\": \"bitbucket_user\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\",\n                            \"example\": \"main\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\",\n                            \"example\": \"a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"example\": \"my-awesome-project\"\n                          },\n                          \"type\": {\n                            \"enum\": [\n                              \"bitbucket\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"ref\",\n                          \"owner\",\n                          \"slug\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    ]\n                  },\n                  \"meta\": {\n                    \"additionalProperties\": {\n                      \"maxLength\": 65536,\n                      \"type\": \"string\"\n                    },\n                    \"description\": \"An object containing the deployment's metadata. Multiple key-value pairs can be attached to a deployment\",\n                    \"example\": {\n                      \"foo\": \"bar\"\n                    },\n                    \"maxProperties\": 100,\n                    \"type\": \"object\"\n                  },\n                  \"monorepoManager\": {\n                    \"description\": \"The monorepo manager that is being used for this deployment. When `null` is used no monorepo manager is selected\",\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"name\": {\n                    \"description\": \"A string with the project name used in the deployment URL\",\n                    \"example\": \"my-instant-deployment\",\n                    \"type\": \"string\"\n                  },\n                  \"project\": {\n                    \"description\": \"The target project identifier in which the deployment will be created. When defined, this parameter overrides name\",\n                    \"example\": \"my-deployment-project\",\n                    \"type\": \"string\"\n                  },\n                  \"projectSettings\": {\n                    \"additionalProperties\": false,\n                    \"description\": \"Project settings that will be applied to the deployment. It is required for the first deployment of a project and will be saved for any following deployments\",\n                    \"properties\": {\n                      \"buildCommand\": {\n                        \"description\": \"The build command for this project. When `null` is used this value will be automatically detected\",\n                        \"maxLength\": 256,\n                        \"type\": \"string\",\n                        \"nullable\": true,\n                        \"example\": \"next build\"\n                      },\n                      \"commandForIgnoringBuildStep\": {\n                        \"maxLength\": 256,\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      },\n                      \"devCommand\": {\n                        \"description\": \"The dev command for this project. When `null` is used this value will be automatically detected\",\n                        \"maxLength\": 256,\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      },\n                      \"framework\": {\n                        \"description\": \"The framework that is being used for this project. When `null` is used no framework is selected\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          null,\n                          \"blitzjs\",\n                          \"nextjs\",\n                          \"gatsby\",\n                          \"remix\",\n                          \"react-router\",\n                          \"astro\",\n                          \"hexo\",\n                          \"eleventy\",\n                          \"docusaurus-2\",\n                          \"docusaurus\",\n                          \"preact\",\n                          \"solidstart-1\",\n                          \"solidstart\",\n                          \"dojo\",\n                          \"ember\",\n                          \"vue\",\n                          \"scully\",\n                          \"ionic-angular\",\n                          \"angular\",\n                          \"polymer\",\n                          \"svelte\",\n                          \"sveltekit\",\n                          \"sveltekit-1\",\n                          \"ionic-react\",\n                          \"create-react-app\",\n                          \"gridsome\",\n                          \"umijs\",\n                          \"sapper\",\n                          \"saber\",\n                          \"stencil\",\n                          \"nuxtjs\",\n                          \"redwoodjs\",\n                          \"hugo\",\n                          \"jekyll\",\n                          \"brunch\",\n                          \"middleman\",\n                          \"zola\",\n                          \"hydrogen\",\n                          \"vite\",\n                          \"tanstack-start\",\n                          \"vitepress\",\n                          \"vuepress\",\n                          \"parcel\",\n                          \"fastapi\",\n                          \"flask\",\n                          \"fasthtml\",\n                          \"django\",\n                          \"sanity-v3\",\n                          \"sanity\",\n                          \"storybook\",\n                          \"nitro\",\n                          \"hono\",\n                          \"express\",\n                          \"h3\",\n                          \"koa\",\n                          \"nestjs\",\n                          \"elysia\",\n                          \"fastify\",\n                          \"xmcp\",\n                          \"python\",\n                          \"ruby\",\n                          \"rust\",\n                          \"node\",\n                          \"go\",\n                          \"services\"\n                        ],\n                        \"nullable\": true\n                      },\n                      \"installCommand\": {\n                        \"description\": \"The install command for this project. When `null` is used this value will be automatically detected\",\n                        \"maxLength\": 256,\n                        \"type\": \"string\",\n                        \"nullable\": true,\n                        \"example\": \"pnpm install\"\n                      },\n                      \"nodeVersion\": {\n                        \"description\": \"Override the Node.js version that should be used for this deployment\",\n                        \"enum\": [\n                          \"24.x\",\n                          \"22.x\",\n                          \"20.x\",\n                          \"18.x\",\n                          \"16.x\",\n                          \"14.x\",\n                          \"12.x\",\n                          \"10.x\",\n                          \"8.10.x\"\n                        ],\n                        \"type\": \"string\"\n                      },\n                      \"outputDirectory\": {\n                        \"description\": \"The output directory of the project. When `null` is used this value will be automatically detected\",\n                        \"maxLength\": 256,\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      },\n                      \"rootDirectory\": {\n                        \"description\": \"The name of a directory or relative path to the source code of your project. When `null` is used it will default to the project root\",\n                        \"maxLength\": 256,\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      },\n                      \"serverlessFunctionRegion\": {\n                        \"description\": \"The region to deploy Serverless Functions in this project\",\n                        \"maxLength\": 4,\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      },\n                      \"skipGitConnectDuringLink\": {\n                        \"description\": \"Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.\",\n                        \"type\": \"boolean\",\n                        \"deprecated\": true\n                      },\n                      \"sourceFilesOutsideRootDirectory\": {\n                        \"description\": \"Indicates if there are source files outside of the root directory, typically used for monorepos\",\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"target\": {\n                    \"description\": \"Either not defined, `staging`, `production`, or a custom environment identifier. If `staging`, a staging alias in the format `\\u003cproject\\u003e-\\u003cteam\\u003e.vercel.app` will be assigned. If `production`, any aliases defined in `alias` will be assigned. If omitted, the target will be `preview`.\",\n                    \"type\": \"string\",\n                    \"example\": \"production\"\n                  },\n                  \"withLatestCommit\": {\n                    \"description\": \"When `true` and `deploymentId` is passed in, the sha from the previous deployment's `gitSource` is removed forcing the latest commit to be used.\",\n                    \"type\": \"boolean\"\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v12/deployments/{id}/cancel\": {\n      \"patch\": {\n        \"description\": \"This endpoint allows you to cancel a deployment which is currently building, by supplying its `id` in the URL.\",\n        \"operationId\": \"cancelDeployment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Cancel a deployment\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"aliasAssignedAt\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"type\": \"number\"\n                        },\n                        {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      ]\n                    },\n                    \"alwaysRefuseToBuild\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"build\": {\n                      \"properties\": {\n                        \"env\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"env\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"buildArtifactUrls\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"builds\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"use\": {\n                            \"type\": \"string\"\n                          },\n                          \"src\": {\n                            \"type\": \"string\"\n                          },\n                          \"config\": {\n                            \"additionalProperties\": true,\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"use\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"env\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"inspectorUrl\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"isInConcurrentBuildsQueue\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"isInSystemBuildsQueue\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"projectSettings\": {\n                      \"properties\": {\n                        \"nodeVersion\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"24.x\",\n                            \"22.x\",\n                            \"20.x\",\n                            \"18.x\",\n                            \"16.x\",\n                            \"14.x\",\n                            \"12.x\",\n                            \"10.x\",\n                            \"8.10.x\"\n                          ]\n                        },\n                        \"buildCommand\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"devCommand\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"framework\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"blitzjs\",\n                            \"nextjs\",\n                            \"gatsby\",\n                            \"remix\",\n                            \"react-router\",\n                            \"astro\",\n                            \"hexo\",\n                            \"eleventy\",\n                            \"docusaurus-2\",\n                            \"docusaurus\",\n                            \"preact\",\n                            \"solidstart-1\",\n                            \"solidstart\",\n                            \"dojo\",\n                            \"ember\",\n                            \"vue\",\n                            \"scully\",\n                            \"ionic-angular\",\n                            \"angular\",\n                            \"polymer\",\n                            \"svelte\",\n                            \"sveltekit\",\n                            \"sveltekit-1\",\n                            \"ionic-react\",\n                            \"create-react-app\",\n                            \"gridsome\",\n                            \"umijs\",\n                            \"sapper\",\n                            \"saber\",\n                            \"stencil\",\n                            \"nuxtjs\",\n                            \"redwoodjs\",\n                            \"hugo\",\n                            \"jekyll\",\n                            \"brunch\",\n                            \"middleman\",\n                            \"zola\",\n                            \"hydrogen\",\n                            \"vite\",\n                            \"tanstack-start\",\n                            \"vitepress\",\n                            \"vuepress\",\n                            \"parcel\",\n                            \"fastapi\",\n                            \"flask\",\n                            \"fasthtml\",\n                            \"django\",\n                            \"sanity-v3\",\n                            \"sanity\",\n                            \"storybook\",\n                            \"nitro\",\n                            \"hono\",\n                            \"express\",\n                            \"h3\",\n                            \"koa\",\n                            \"nestjs\",\n                            \"elysia\",\n                            \"fastify\",\n                            \"xmcp\",\n                            \"python\",\n                            \"ruby\",\n                            \"rust\",\n                            \"node\",\n                            \"go\",\n                            \"services\"\n                          ]\n                        },\n                        \"commandForIgnoringBuildStep\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"installCommand\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"outputDirectory\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"speedInsights\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"enabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"disabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"canceledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"hasData\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"paidAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"webAnalytics\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"disabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"canceledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"enabledAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"hasData\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"id\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"integrations\": {\n                      \"properties\": {\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"skipped\",\n                            \"pending\",\n                            \"ready\",\n                            \"error\",\n                            \"timeout\"\n                          ]\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"completedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"skippedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"skippedBy\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"startedAt\",\n                        \"status\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"images\": {\n                      \"properties\": {\n                        \"sizes\": {\n                          \"items\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"qualities\": {\n                          \"items\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domains\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"remotePatterns\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"protocol\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"http\",\n                                  \"https\"\n                                ],\n                                \"description\": \"Must be `http` or `https`.\"\n                              },\n                              \"hostname\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal or wildcard. Single `*` matches a single subdomain. Double `**` matches any number of subdomains.\"\n                              },\n                              \"port\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal port such as `8080` or empty string meaning no port.\"\n                              },\n                              \"pathname\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments.\"\n                              },\n                              \"search\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal query string such as `?v=1` or empty string meaning no query string.\"\n                              }\n                            },\n                            \"required\": [\n                              \"hostname\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"localPatterns\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"pathname\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal or wildcard. Single `*` matches a single path segment. Double `**` matches any number of path segments.\"\n                              },\n                              \"search\": {\n                                \"type\": \"string\",\n                                \"description\": \"Can be literal query string such as `?v=1` or empty string meaning no query string.\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"minimumCacheTTL\": {\n                          \"type\": \"number\"\n                        },\n                        \"formats\": {\n                          \"items\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"image/avif\",\n                              \"image/webp\"\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dangerouslyAllowSVG\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"contentSecurityPolicy\": {\n                          \"type\": \"string\"\n                        },\n                        \"contentDispositionType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"inline\",\n                            \"attachment\"\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"alias\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of all the aliases (default aliases, staging aliases and production aliases) that were assigned upon deployment creation\",\n                      \"example\": []\n                    },\n                    \"aliasAssigned\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"A boolean that will be true when the aliases from the alias property were assigned successfully\",\n                      \"example\": true\n                    },\n                    \"bootedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"buildingAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"buildContainerFinishedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Since April 2025 it necessary for On-Demand Concurrency Minutes calculation\"\n                    },\n                    \"buildSkipped\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"creator\": {\n                      \"properties\": {\n                        \"uid\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the user that created the deployment\",\n                          \"example\": \"96SnxkFiMyVKsK3pnoHfx3Hz\"\n                        },\n                        \"username\": {\n                          \"type\": \"string\",\n                          \"description\": \"The username of the user that created the deployment\",\n                          \"example\": \"john-doe\"\n                        },\n                        \"avatar\": {\n                          \"type\": \"string\",\n                          \"description\": \"The avatar of the user that created the deployment\"\n                        }\n                      },\n                      \"required\": [\n                        \"uid\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Information about the deployment creator\"\n                    },\n                    \"initReadyAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"isFirstBranchDeployment\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"lambdas\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"BUILDING\",\n                              \"ERROR\",\n                              \"INITIALIZING\",\n                              \"READY\"\n                            ]\n                          },\n                          \"entrypoint\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"readyStateAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"output\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"path\": {\n                                  \"type\": \"string\"\n                                },\n                                \"functionName\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"functionName\",\n                                \"path\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"output\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A partial representation of a Build used by the deployment endpoint.\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"public\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"A boolean representing if the deployment is public or not. By default this is `false`\",\n                      \"example\": false\n                    },\n                    \"ready\": {\n                      \"type\": \"number\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"QUEUED\",\n                        \"BUILDING\",\n                        \"ERROR\",\n                        \"INITIALIZING\",\n                        \"READY\",\n                        \"CANCELED\"\n                      ]\n                    },\n                    \"team\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\"\n                        },\n                        \"avatar\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\",\n                        \"slug\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The team that owns the deployment if any\"\n                    },\n                    \"userAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"An array of domains that were provided by the user when creating the Deployment.\",\n                      \"example\": [\n                        \"sub1.example.com\",\n                        \"sub2.example.com\"\n                      ]\n                    },\n                    \"previewCommentsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"Whether or not preview comments are enabled for the deployment\",\n                      \"example\": false\n                    },\n                    \"ttyBuildLogs\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"customEnvironment\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\",\n                              \"description\": \"URL-friendly name of the environment\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ],\n                              \"description\": \"The type of environment (production, preview, or development)\"\n                            },\n                            \"description\": {\n                              \"type\": \"string\",\n                              \"description\": \"Optional description of the environment's purpose\"\n                            },\n                            \"branchMatcher\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"endsWith\",\n                                    \"startsWith\",\n                                    \"equals\"\n                                  ],\n                                  \"description\": \"The type of matching to perform\"\n                                },\n                                \"pattern\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"The pattern to match against branch names\"\n                                }\n                              },\n                              \"required\": [\n                                \"pattern\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Configuration for matching git branches to this environment\"\n                            },\n                            \"domains\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"apexName\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"redirect\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"redirectStatusCode\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\",\n                                    \"enum\": [\n                                      307,\n                                      301,\n                                      302,\n                                      308\n                                    ]\n                                  },\n                                  \"gitBranch\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"customEnvironmentId\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"verified\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                  },\n                                  \"verification\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"domain\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"value\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"reason\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"domain\",\n                                        \"reason\",\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"apexName\",\n                                  \"name\",\n                                  \"projectId\",\n                                  \"verified\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"List of domains associated with this environment\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"List of domains associated with this environment\"\n                            },\n                            \"currentDeploymentAliases\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"List of aliases for the current deployment\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the environment was created\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the environment was last updated\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"slug\",\n                            \"type\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                        },\n                        {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"id\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"If the deployment was created using a Custom Environment, then this property contains information regarding the environment used.\"\n                        }\n                      ]\n                    },\n                    \"oomReport\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"out-of-memory\"\n                      ]\n                    },\n                    \"readyStateReason\": {\n                      \"type\": \"string\"\n                    },\n                    \"aliasWarning\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"code\": {\n                          \"type\": \"string\"\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        },\n                        \"link\": {\n                          \"type\": \"string\"\n                        },\n                        \"action\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"code\",\n                        \"message\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"A string holding the unique ID of the deployment\",\n                      \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                      \"example\": 1540257589405\n                    },\n                    \"readyState\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"QUEUED\",\n                        \"BUILDING\",\n                        \"ERROR\",\n                        \"INITIALIZING\",\n                        \"READY\",\n                        \"CANCELED\"\n                      ],\n                      \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                      \"example\": \"READY\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                      \"example\": \"my-project\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"LAMBDAS\"\n                      ]\n                    },\n                    \"aliasError\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"code\": {\n                          \"type\": \"string\"\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"code\",\n                        \"message\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"An object that will contain a `code` and a `message` when the aliasing fails, otherwise the value will be `null`\",\n                      \"example\": null\n                    },\n                    \"aliasFinal\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"autoAssignCustomDomains\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"applies to custom domains only, defaults to `true`\"\n                    },\n                    \"automaticAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"buildErrorAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"checksState\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"registered\",\n                        \"running\",\n                        \"completed\"\n                      ]\n                    },\n                    \"checksConclusion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"succeeded\",\n                        \"failed\",\n                        \"skipped\",\n                        \"canceled\"\n                      ]\n                    },\n                    \"deletedAt\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the deployment was deleted at milliseconds\",\n                      \"example\": 1540257589405\n                    },\n                    \"defaultRoute\": {\n                      \"type\": \"string\",\n                      \"description\": \"Computed field that is only available for deployments with a microfrontend configuration.\"\n                    },\n                    \"canceledAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"errorCode\": {\n                      \"type\": \"string\"\n                    },\n                    \"errorLink\": {\n                      \"type\": \"string\"\n                    },\n                    \"errorMessage\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"errorStep\": {\n                      \"type\": \"string\"\n                    },\n                    \"passiveRegions\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Since November 2023 this field defines a set of regions that we will deploy the lambda to passively Lambdas will be deployed to these regions but only invoked if all of the primary `regions` are marked as out of service\"\n                    },\n                    \"gitSource\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"repoId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"repoId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"org\",\n                            \"repo\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"host\",\n                            \"repoId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"host\",\n                            \"org\",\n                            \"repo\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"repoId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"repoId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"org\",\n                            \"repo\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"projectId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"repoUuid\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"prId\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"owner\",\n                            \"slug\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"custom\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"gitUrl\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"gitUrl\",\n                            \"ref\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Allows custom git sources (local folder mounted to the container) in test mode\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"ref\",\n                            \"repoId\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"host\",\n                            \"ref\",\n                            \"repoId\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"ref\",\n                            \"repoId\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"ref\",\n                            \"sha\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"ref\": {\n                              \"type\": \"string\"\n                            },\n                            \"sha\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoUuid\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"ref\",\n                            \"repoUuid\",\n                            \"sha\",\n                            \"type\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"manualProvisioning\": {\n                      \"properties\": {\n                        \"state\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"PENDING\",\n                            \"COMPLETE\",\n                            \"TIMEOUT\"\n                          ],\n                          \"description\": \"Current provisioning state\"\n                        },\n                        \"completedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp when manual provisioning completed\"\n                        }\n                      },\n                      \"required\": [\n                        \"state\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Present when deployment was created with VERCEL_MANUAL_PROVISIONING=true. The deployment stays in INITIALIZING until /continue is called.\"\n                    },\n                    \"meta\": {\n                      \"additionalProperties\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"originCacheRegion\": {\n                      \"type\": \"string\"\n                    },\n                    \"nodeVersion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"24.x\",\n                        \"22.x\",\n                        \"20.x\",\n                        \"18.x\",\n                        \"16.x\",\n                        \"14.x\",\n                        \"12.x\",\n                        \"10.x\",\n                        \"8.10.x\"\n                      ],\n                      \"description\": \"If set it overrides the `projectSettings.nodeVersion` for this deployment.\"\n                    },\n                    \"project\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"framework\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The public project information associated with the deployment.\"\n                    },\n                    \"prebuilt\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"readySubstate\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"STAGED\",\n                        \"ROLLING\",\n                        \"PROMOTED\"\n                      ],\n                      \"description\": \"Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of having production traffic gradually transitioned. - PROMOTED: has seen production traffic\"\n                    },\n                    \"regions\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The regions the deployment exists in\",\n                      \"example\": [\n                        \"sfo1\"\n                      ]\n                    },\n                    \"softDeletedByRetention\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"flag to indicate if the deployment was deleted by retention policy\",\n                      \"example\": \"true\"\n                    },\n                    \"source\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"api-trigger-git-deploy\",\n                        \"cli\",\n                        \"clone/repo\",\n                        \"git\",\n                        \"import\",\n                        \"import/repo\",\n                        \"redeploy\",\n                        \"v0-web\"\n                      ],\n                      \"description\": \"Where was the deployment created from\",\n                      \"example\": \"cli\"\n                    },\n                    \"target\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"staging\",\n                        \"production\"\n                      ],\n                      \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                      \"example\": null\n                    },\n                    \"undeletedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the deployment was undeleted at milliseconds\",\n                      \"example\": 1540257589405\n                    },\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"description\": \"A string with the unique URL of the deployment\",\n                      \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                    },\n                    \"userConfiguredDeploymentId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Since January 2025 User-configured deployment ID for skew protection with pre-built deployments. This is set when users configure a custom deploymentId in their next.config.js file. This allows Next.js to use skew protection even when deployments are pre-built outside of Vercel's build system.\",\n                      \"example\": \"abc123\"\n                    },\n                    \"version\": {\n                      \"type\": \"number\",\n                      \"enum\": [\n                        2\n                      ],\n                      \"description\": \"The platform version that was used to create the deployment.\",\n                      \"example\": 2\n                    },\n                    \"oidcTokenClaims\": {\n                      \"properties\": {\n                        \"iss\": {\n                          \"type\": \"string\"\n                        },\n                        \"sub\": {\n                          \"type\": \"string\"\n                        },\n                        \"scope\": {\n                          \"type\": \"string\"\n                        },\n                        \"aud\": {\n                          \"type\": \"string\"\n                        },\n                        \"owner\": {\n                          \"type\": \"string\"\n                        },\n                        \"owner_id\": {\n                          \"type\": \"string\"\n                        },\n                        \"project\": {\n                          \"type\": \"string\"\n                        },\n                        \"project_id\": {\n                          \"type\": \"string\"\n                        },\n                        \"environment\": {\n                          \"type\": \"string\"\n                        },\n                        \"plan\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"aud\",\n                        \"environment\",\n                        \"iss\",\n                        \"owner\",\n                        \"owner_id\",\n                        \"project\",\n                        \"project_id\",\n                        \"scope\",\n                        \"sub\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"plan\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"pro\",\n                        \"enterprise\",\n                        \"hobby\"\n                      ]\n                    },\n                    \"platform\": {\n                      \"properties\": {\n                        \"source\": {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Display name of the platform.\"\n                            }\n                          },\n                          \"required\": [\n                            \"name\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The external platform that created the deployment (e.g. its display name).\"\n                        },\n                        \"origin\": {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"id\",\n                                \"url\"\n                              ],\n                              \"description\": \"Whether the value is an opaque identifier or a URL.\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\",\n                              \"description\": \"The identifier or URL pointing to the originating entity.\"\n                            }\n                          },\n                          \"required\": [\n                            \"type\",\n                            \"value\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Reference back to the entity on the platform that initiated the deployment.\"\n                        },\n                        \"creator\": {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Display name of the platform user.\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\",\n                              \"description\": \"URL of the platform user's avatar image.\"\n                            }\n                          },\n                          \"required\": [\n                            \"name\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The user on the external platform who triggered the deployment.\"\n                        },\n                        \"meta\": {\n                          \"additionalProperties\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"object\",\n                          \"description\": \"Arbitrary key-value metadata provided by the platform.\"\n                        }\n                      },\n                      \"required\": [\n                        \"creator\",\n                        \"origin\",\n                        \"source\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Metadata about the source platform that triggered the deployment. Allows us to map a deployment back to a platform (e.g. the chat that created it)\"\n                    },\n                    \"connectBuildsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"connectConfigurationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdIn\": {\n                      \"type\": \"string\"\n                    },\n                    \"crons\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"schedule\": {\n                            \"type\": \"string\"\n                          },\n                          \"path\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"path\",\n                          \"schedule\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"functions\": {\n                      \"nullable\": true,\n                      \"additionalProperties\": {\n                        \"properties\": {\n                          \"architecture\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"x86_64\",\n                              \"arm64\"\n                            ]\n                          },\n                          \"memory\": {\n                            \"type\": \"number\"\n                          },\n                          \"maxDuration\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"max\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"regions\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"functionFailoverRegions\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"runtime\": {\n                            \"type\": \"string\"\n                          },\n                          \"includeFiles\": {\n                            \"type\": \"string\"\n                          },\n                          \"excludeFiles\": {\n                            \"type\": \"string\"\n                          },\n                          \"experimentalTriggers\": {\n                            \"items\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"queue/v1beta\"\n                                      ],\n                                      \"description\": \"Event type - must be \\\"queue/v1beta\\\" (REQUIRED)\"\n                                    },\n                                    \"consumer\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Name of the consumer group for this trigger (REQUIRED)\"\n                                    },\n                                    \"topic\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Name of the queue topic to consume from (REQUIRED)\"\n                                    },\n                                    \"maxDeliveries\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"retryAfterSeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"initialDelaySeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"maxConcurrency\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"consumer\",\n                                    \"topic\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Queue trigger input event for v1beta (from vercel.json config). Requires explicit consumer name.\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"queue/v2beta\"\n                                      ],\n                                      \"description\": \"Event type - must be \\\"queue/v2beta\\\" (REQUIRED)\"\n                                    },\n                                    \"topic\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Name of the queue topic to consume from (REQUIRED)\"\n                                    },\n                                    \"maxDeliveries\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of delivery attempts for message processing (OPTIONAL) This represents the total number of times a message can be delivered, not the number of retries. Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"retryAfterSeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Delay in seconds before retrying failed executions (OPTIONAL) Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"initialDelaySeconds\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Initial delay in seconds before first execution attempt (OPTIONAL) Must be 0 or greater. Use 0 for no initial delay. Behavior when not specified depends on the server's default configuration.\"\n                                    },\n                                    \"maxConcurrency\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Maximum number of concurrent executions for this consumer (OPTIONAL) Must be at least 1 if specified. Behavior when not specified depends on the server's default configuration.\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"topic\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Queue trigger input event for v2beta (from vercel.json config). Consumer name is implicitly derived from the function path. Only one trigger per function is allowed.\"\n                                }\n                              ]\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"supportsCancellation\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"monorepoManager\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"passiveConnectConfigurationId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Since November 2023 this field defines a Secure Compute network that will only be used to deploy passive lambdas to (as in passiveRegions)\"\n                    },\n                    \"routes\": {\n                      \"nullable\": true,\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"dest\": {\n                                \"type\": \"string\"\n                              },\n                              \"headers\": {\n                                \"additionalProperties\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"methods\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"continue\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"override\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"caseSensitive\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"check\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"important\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              },\n                              \"has\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\",\n                                            \"cookie\",\n                                            \"query\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"missing\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\",\n                                            \"cookie\",\n                                            \"query\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"value\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"mitigate\": {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"challenge\",\n                                      \"deny\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"transforms\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"request.headers\",\n                                        \"request.query\",\n                                        \"response.headers\"\n                                      ]\n                                    },\n                                    \"op\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"append\",\n                                        \"set\",\n                                        \"delete\"\n                                      ]\n                                    },\n                                    \"target\": {\n                                      \"properties\": {\n                                        \"key\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"eq\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"args\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      ]\n                                    },\n                                    \"env\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"op\",\n                                    \"target\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"env\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"locale\": {\n                                \"properties\": {\n                                  \"redirect\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"cookie\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                              },\n                              \"destination\": {\n                                \"type\": \"string\"\n                              },\n                              \"statusCode\": {\n                                \"type\": \"number\"\n                              },\n                              \"middlewarePath\": {\n                                \"type\": \"string\",\n                                \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                              },\n                              \"middlewareRawSrc\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\",\n                                \"description\": \"The original middleware matchers.\"\n                              },\n                              \"middleware\": {\n                                \"type\": \"number\",\n                                \"description\": \"A middleware index in the `middleware` key under the build result\"\n                              },\n                              \"respectOriginCacheControl\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"src\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"handle\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"error\",\n                                  \"filesystem\",\n                                  \"hit\",\n                                  \"miss\",\n                                  \"rewrite\",\n                                  \"resource\"\n                                ]\n                              },\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"dest\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"handle\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"continue\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"middleware\": {\n                                \"type\": \"number\",\n                                \"enum\": [\n                                  0\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"continue\",\n                              \"middleware\",\n                              \"src\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"gitRepo\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"namespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"url\": {\n                              \"type\": \"string\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"defaultBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"private\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ownerType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"team\",\n                                \"user\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"defaultBranch\",\n                            \"name\",\n                            \"namespace\",\n                            \"ownerType\",\n                            \"path\",\n                            \"private\",\n                            \"projectId\",\n                            \"type\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"defaultBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"private\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ownerType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"team\",\n                                \"user\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"defaultBranch\",\n                            \"name\",\n                            \"org\",\n                            \"ownerType\",\n                            \"path\",\n                            \"private\",\n                            \"repo\",\n                            \"repoId\",\n                            \"repoOwnerId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"path\": {\n                              \"type\": \"string\"\n                            },\n                            \"defaultBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"private\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ownerType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"team\",\n                                \"user\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"defaultBranch\",\n                            \"name\",\n                            \"owner\",\n                            \"ownerType\",\n                            \"path\",\n                            \"private\",\n                            \"repoUuid\",\n                            \"slug\",\n                            \"type\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"flags\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"definitions\": {\n                              \"additionalProperties\": {\n                                \"properties\": {\n                                  \"options\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"value\": {\n                                          \"$ref\": \"#/components/schemas/FlagJSONValue\"\n                                        },\n                                        \"label\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"description\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"definitions\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                        },\n                        {\n                          \"items\": {\n                            \"type\": \"object\",\n                            \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"Flags defined in the Build Output API, used by this deployment. Primarily used by the Toolbar to know about the used flags.\"\n                        }\n                      ]\n                    },\n                    \"microfrontends\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"defaultAppProjectName\": {\n                              \"type\": \"string\",\n                              \"description\": \"The project name of the default app of this deployment's microfrontends group.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            }\n                          },\n                          \"required\": [\n                            \"defaultAppProjectName\",\n                            \"groupIds\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            },\n                            \"mfeConfigUploadState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"success\",\n                                \"waiting_on_build\",\n                                \"no_config\"\n                              ],\n                              \"description\": \"The result of the microfrontends config upload during deployment creation / build. Only set for default app deployments. The config upload is attempted during deployment create, and then again during the build. If the config is not in the root directory, or the deployment is prebuilt, the config cannot be uploaded during deployment create. The upload during deployment build finds the config even if it's not in the root directory, as it has access to all files. Uploading the config during create is ideal, as then all child deployments are guaranteed to have access to the default app deployment config even if the default app has not yet started building. If the config is not uploaded, the child app will show as building until the config has been uploaded during the default app build. - `success` - The config was uploaded successfully, either when the deployment was created or during the build. - `waiting_on_build` - The config could not be uploaded during deployment create, will be attempted again during the build. - `no_config` - No config was found. Only set once the build has not found the config in any of the deployment's files. - `undefined` - Legacy deployments, or there was an error uploading the config during deployment create.\"\n                            },\n                            \"defaultAppProjectName\": {\n                              \"type\": \"string\",\n                              \"description\": \"The project name of the default app of this deployment's microfrontends group.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            }\n                          },\n                          \"required\": [\n                            \"defaultAppProjectName\",\n                            \"groupIds\",\n                            \"isDefaultApp\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"config\": {\n                      \"properties\": {\n                        \"version\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"fluid\"\n                          ]\n                        },\n                        \"functionMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"standard_legacy\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionTimeout\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"secureComputePrimaryRegion\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"secureComputeFallbackRegion\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"isUsingActiveCPU\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"resourceConfig\": {\n                          \"properties\": {\n                            \"buildQueue\": {\n                              \"properties\": {\n                                \"configuration\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"SKIP_NAMESPACE_QUEUE\",\n                                    \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                  ],\n                                  \"description\": \"Build resource configuration snapshot for this deployment.\"\n                                }\n                              },\n                              \"type\": \"object\",\n                              \"description\": \"Build resource configuration snapshot for this deployment.\"\n                            },\n                            \"elasticConcurrency\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"TEAM_SETTING\",\n                                \"PROJECT_SETTING\",\n                                \"SKIP_QUEUE\"\n                              ],\n                              \"description\": \"When elastic concurrency is used for this deployment, a value is set. The value tells the reason where the setting was coming from. - TEAM_SETTING: Inherited from team settings - PROJECT_SETTING: Inherited from project settings - SKIP_QUEUE: Manually triggered by user to skip the queues\"\n                            },\n                            \"buildMachine\": {\n                              \"properties\": {\n                                \"purchaseType\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"enhanced\",\n                                    \"turbo\",\n                                    \"standard\"\n                                  ],\n                                  \"description\": \"Machine type that was used for the build.\"\n                                }\n                              },\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\",\n                          \"description\": \"Build resource configuration snapshot for this deployment.\"\n                        }\n                      },\n                      \"required\": [\n                        \"functionMemoryType\",\n                        \"functionTimeout\",\n                        \"functionType\",\n                        \"secureComputeFallbackRegion\",\n                        \"secureComputePrimaryRegion\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Since February 2025 the configuration must include snapshot data at the time of deployment creation to capture properties for the /deployments/:id/config endpoint utilized for displaying Deployment Configuration on the frontend This is optional because older deployments may not have this data captured\"\n                    },\n                    \"checks\": {\n                      \"properties\": {\n                        \"deployment-alias\": {\n                          \"properties\": {\n                            \"state\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"succeeded\",\n                                \"failed\",\n                                \"pending\"\n                              ]\n                            },\n                            \"startedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"completedAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"startedAt\",\n                            \"state\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Condensed check data. Retrieve individual check and check run data using api-checks v2 routes.\"\n                        }\n                      },\n                      \"required\": [\n                        \"deployment-alias\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"seatBlock\": {\n                      \"properties\": {\n                        \"blockCode\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"TEAM_ACCESS_REQUIRED\",\n                            \"COMMIT_AUTHOR_REQUIRED\"\n                          ],\n                          \"description\": \"The NSNB decision code for the seat block. TODO: We should consolidate block types.\"\n                        },\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The blocked vercel user ID.\"\n                        },\n                        \"isVerified\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Determines if the user was verified during the block. In the git integration case, the commit sender was the author.\"\n                        },\n                        \"gitUserId\": {\n                          \"oneOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            }\n                          ]\n                        },\n                        \"gitProvider\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"gitlab\",\n                            \"bitbucket\",\n                            \"github\"\n                          ],\n                          \"description\": \"The git provider type associated with gitUserId.\"\n                        }\n                      },\n                      \"required\": [\n                        \"blockCode\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"NSNB Blocked metadata\"\n                    }\n                  },\n                  \"required\": [\n                    \"aliasAssigned\",\n                    \"bootedAt\",\n                    \"build\",\n                    \"buildSkipped\",\n                    \"buildingAt\",\n                    \"createdAt\",\n                    \"createdIn\",\n                    \"creator\",\n                    \"env\",\n                    \"id\",\n                    \"inspectorUrl\",\n                    \"isInConcurrentBuildsQueue\",\n                    \"isInSystemBuildsQueue\",\n                    \"meta\",\n                    \"name\",\n                    \"ownerId\",\n                    \"plan\",\n                    \"projectId\",\n                    \"projectSettings\",\n                    \"public\",\n                    \"readyState\",\n                    \"regions\",\n                    \"routes\",\n                    \"status\",\n                    \"type\",\n                    \"url\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The private deployment representation of a Deployment.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique identifier of the deployment.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n              \"description\": \"The unique identifier of the deployment.\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v4/domains/{domain}/records\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of DNS records created for a domain name. By default it returns 20 records if no limit is provided. The rest can be retrieved using the pagination options.\",\n        \"operationId\": \"getRecords\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List existing DNS records\",\n        \"tags\": [\n          \"dns\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response retrieving a list of paginated DNS records.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"properties\": {\n                        \"records\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"slug\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"A\",\n                                  \"AAAA\",\n                                  \"ALIAS\",\n                                  \"CAA\",\n                                  \"CNAME\",\n                                  \"HTTPS\",\n                                  \"MX\",\n                                  \"SRV\",\n                                  \"TXT\",\n                                  \"NS\"\n                                ]\n                              },\n                              \"value\": {\n                                \"type\": \"string\"\n                              },\n                              \"mxPriority\": {\n                                \"type\": \"number\"\n                              },\n                              \"priority\": {\n                                \"type\": \"number\"\n                              },\n                              \"creator\": {\n                                \"type\": \"string\"\n                              },\n                              \"created\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"updated\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"createdAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"ttl\": {\n                                \"type\": \"number\"\n                              },\n                              \"comment\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"created\",\n                              \"createdAt\",\n                              \"creator\",\n                              \"id\",\n                              \"name\",\n                              \"slug\",\n                              \"type\",\n                              \"updated\",\n                              \"updatedAt\",\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"records\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"records\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"slug\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"A\",\n                                  \"AAAA\",\n                                  \"ALIAS\",\n                                  \"CAA\",\n                                  \"CNAME\",\n                                  \"HTTPS\",\n                                  \"MX\",\n                                  \"SRV\",\n                                  \"TXT\",\n                                  \"NS\"\n                                ]\n                              },\n                              \"value\": {\n                                \"type\": \"string\"\n                              },\n                              \"mxPriority\": {\n                                \"type\": \"number\"\n                              },\n                              \"priority\": {\n                                \"type\": \"number\"\n                              },\n                              \"creator\": {\n                                \"type\": \"string\"\n                              },\n                              \"created\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"updated\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"createdAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"ttl\": {\n                                \"type\": \"number\"\n                              },\n                              \"comment\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"created\",\n                              \"createdAt\",\n                              \"creator\",\n                              \"id\",\n                              \"name\",\n                              \"slug\",\n                              \"type\",\n                              \"updated\",\n                              \"updatedAt\",\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"$ref\": \"#/components/schemas/Pagination\"\n                        }\n                      },\n                      \"required\": [\n                        \"pagination\",\n                        \"records\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Successful response retrieving a list of paginated DNS records.\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of records to list from a request.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of records to list from a request.\",\n              \"type\": \"string\",\n              \"example\": 20\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get records created after this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get records created after this JavaScript timestamp.\",\n              \"type\": \"string\",\n              \"example\": 1609499532000\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get records created before this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get records created before this JavaScript timestamp.\",\n              \"type\": \"string\",\n              \"example\": 1612264332000\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v2/domains/{domain}/records\": {\n      \"post\": {\n        \"description\": \"Creates a DNS record for a domain.\",\n        \"operationId\": \"createRecord\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a DNS record\",\n        \"tags\": [\n          \"dns\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response showing the uid of the newly created DNS record.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"uid\": {\n                          \"type\": \"string\"\n                        },\n                        \"updated\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"uid\",\n                        \"updated\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"uid\": {\n                          \"type\": \"string\",\n                          \"description\": \"The id of the newly created DNS record\",\n                          \"example\": \"rec_V0fra8eEgQwEpFhYG2vTzC3K\"\n                        }\n                      },\n                      \"required\": [\n                        \"uid\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"description\": \"The domain used to create the DNS record.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The domain used to create the DNS record.\",\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"required\": [\n                  \"type\"\n                ],\n                \"properties\": {\n                  \"type\": {\n                    \"description\": \"The type of record, it could be one of the valid DNS records.\",\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"A\",\n                      \"AAAA\",\n                      \"ALIAS\",\n                      \"CAA\",\n                      \"CNAME\",\n                      \"HTTPS\",\n                      \"MX\",\n                      \"SRV\",\n                      \"TXT\",\n                      \"NS\"\n                    ]\n                  }\n                },\n                \"anyOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"value\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name or an empty string for the root domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `A`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"A\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"The record value must be a valid IPv4 address.\",\n                        \"type\": \"string\",\n                        \"format\": \"ipv4\",\n                        \"example\": \"192.0.2.42\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"value\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name or an empty string for the root domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `AAAA`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"AAAA\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"An AAAA record pointing to an IPv6 address.\",\n                        \"type\": \"string\",\n                        \"format\": \"ipv6\",\n                        \"example\": \"2001:DB8::42\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"value\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name or an empty string for the root domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `ALIAS`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ALIAS\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"An ALIAS virtual record pointing to a hostname resolved to an A record on server side.\",\n                        \"type\": \"string\",\n                        \"example\": \"cname.vercel-dns.com\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"value\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name or an empty string for the root domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `CAA`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"CAA\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"A CAA record to specify which Certificate Authorities (CAs) are allowed to issue certificates for the domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"0 issue \\\\\\\"letsencrypt.org\\\\\\\"\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name or an empty string for the root domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `CNAME`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"CNAME\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"A CNAME record mapping to another domain name.\",\n                        \"type\": \"string\",\n                        \"example\": \"cname.vercel-dns.com\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"value\",\n                      \"name\",\n                      \"mxPriority\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name or an empty string for the root domain.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `MX`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"MX\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"An MX record specifying the mail server responsible for accepting messages on behalf of the domain name.\",\n                        \"type\": \"string\",\n                        \"example\": \"10 mail.example.com.\"\n                      },\n                      \"mxPriority\": {\n                        \"type\": \"number\",\n                        \"minimum\": 0,\n                        \"maximum\": 65535,\n                        \"example\": 10\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"name\",\n                      \"srv\"\n                    ],\n                    \"properties\": {\n                      \"type\": {\n                        \"description\": \"Must be of type `SRV`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"SRV\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"srv\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"weight\",\n                          \"port\",\n                          \"priority\",\n                          \"target\"\n                        ],\n                        \"properties\": {\n                          \"priority\": {\n                            \"anyOf\": [\n                              {\n                                \"type\": \"number\",\n                                \"minimum\": 0,\n                                \"maximum\": 65535,\n                                \"example\": 10\n                              }\n                            ],\n                            \"nullable\": true\n                          },\n                          \"weight\": {\n                            \"anyOf\": [\n                              {\n                                \"type\": \"number\",\n                                \"minimum\": 0,\n                                \"maximum\": 65535,\n                                \"example\": 10\n                              }\n                            ],\n                            \"nullable\": true\n                          },\n                          \"port\": {\n                            \"anyOf\": [\n                              {\n                                \"type\": \"number\",\n                                \"minimum\": 0,\n                                \"maximum\": 65535,\n                                \"example\": 5000\n                              }\n                            ],\n                            \"nullable\": true\n                          },\n                          \"target\": {\n                            \"type\": \"string\",\n                            \"example\": \"host.example.com\"\n                          }\n                        }\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"value\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"type\": {\n                        \"description\": \"Must be of type `TXT`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"TXT\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"A TXT record containing arbitrary text.\",\n                        \"type\": \"string\",\n                        \"example\": \"hello\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"A subdomain name.\",\n                        \"type\": \"string\",\n                        \"example\": \"subdomain\"\n                      },\n                      \"type\": {\n                        \"description\": \"Must be of type `NS`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"NS\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"value\": {\n                        \"description\": \"An NS domain value.\",\n                        \"type\": \"string\",\n                        \"example\": \"ns1.example.com\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"type\",\n                      \"name\",\n                      \"https\"\n                    ],\n                    \"properties\": {\n                      \"type\": {\n                        \"description\": \"Must be of type `HTTPS`.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"HTTPS\"\n                        ]\n                      },\n                      \"ttl\": {\n                        \"description\": \"The TTL value. Must be a number between 60 and 2147483647. Default value is 60.\",\n                        \"type\": \"number\",\n                        \"minimum\": 60,\n                        \"maximum\": 2147483647,\n                        \"example\": 60\n                      },\n                      \"https\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"priority\",\n                          \"target\"\n                        ],\n                        \"properties\": {\n                          \"priority\": {\n                            \"anyOf\": [\n                              {\n                                \"type\": \"number\",\n                                \"minimum\": 0,\n                                \"maximum\": 65535,\n                                \"example\": 10\n                              }\n                            ],\n                            \"nullable\": true\n                          },\n                          \"target\": {\n                            \"type\": \"string\",\n                            \"example\": \"host.example.com\"\n                          },\n                          \"params\": {\n                            \"type\": \"string\",\n                            \"example\": \"alpn=h2,h3\"\n                          }\n                        }\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this DNS record is for\",\n                        \"example\": \"used to verify ownership of domain\",\n                        \"maxLength\": 500\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        },\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v1/domains/records/{recordId}\": {\n      \"patch\": {\n        \"description\": \"Updates an existing DNS record for a domain name.\",\n        \"operationId\": \"updateRecord\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update an existing DNS record\",\n        \"tags\": [\n          \"dns\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"record\",\n                        \"record-sys\"\n                      ]\n                    },\n                    \"value\": {\n                      \"type\": \"string\"\n                    },\n                    \"creator\": {\n                      \"type\": \"string\"\n                    },\n                    \"domain\": {\n                      \"type\": \"string\"\n                    },\n                    \"ttl\": {\n                      \"type\": \"number\"\n                    },\n                    \"comment\": {\n                      \"type\": \"string\"\n                    },\n                    \"recordType\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"A\",\n                        \"AAAA\",\n                        \"ALIAS\",\n                        \"CAA\",\n                        \"CNAME\",\n                        \"HTTPS\",\n                        \"MX\",\n                        \"SRV\",\n                        \"TXT\",\n                        \"NS\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"nullable\": true,\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"creator\",\n                    \"domain\",\n                    \"id\",\n                    \"name\",\n                    \"recordType\",\n                    \"type\",\n                    \"value\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"recordId\",\n            \"description\": \"The id of the DNS record\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The id of the DNS record\",\n              \"example\": \"rec_2qn7pzrx89yxy34vezpd31y9\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the DNS record\",\n                    \"example\": \"example-1\",\n                    \"nullable\": true\n                  },\n                  \"value\": {\n                    \"type\": \"string\",\n                    \"description\": \"The value of the DNS record\",\n                    \"example\": \"google.com\",\n                    \"nullable\": true\n                  },\n                  \"type\": {\n                    \"enum\": [\n                      \"A\",\n                      \"AAAA\",\n                      \"ALIAS\",\n                      \"CAA\",\n                      \"CNAME\",\n                      \"HTTPS\",\n                      \"MX\",\n                      \"SRV\",\n                      \"TXT\",\n                      \"NS\"\n                    ],\n                    \"type\": \"string\",\n                    \"description\": \"The type of the DNS record\",\n                    \"example\": \"A\",\n                    \"maxLength\": 255,\n                    \"nullable\": true\n                  },\n                  \"ttl\": {\n                    \"type\": \"integer\",\n                    \"description\": \"The Time to live (TTL) value of the DNS record\",\n                    \"example\": \"60\",\n                    \"minimum\": 60,\n                    \"maximum\": 2147483647,\n                    \"nullable\": true\n                  },\n                  \"mxPriority\": {\n                    \"type\": \"integer\",\n                    \"description\": \"The MX priority value of the DNS record\",\n                    \"nullable\": true\n                  },\n                  \"srv\": {\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"target\",\n                      \"weight\",\n                      \"port\",\n                      \"priority\"\n                    ],\n                    \"properties\": {\n                      \"target\": {\n                        \"type\": \"string\",\n                        \"description\": \"\",\n                        \"example\": \"example2.com.\",\n                        \"maxLength\": 255,\n                        \"nullable\": true\n                      },\n                      \"weight\": {\n                        \"description\": \"\",\n                        \"type\": \"integer\",\n                        \"nullable\": true\n                      },\n                      \"port\": {\n                        \"description\": \"\",\n                        \"type\": \"integer\",\n                        \"nullable\": true\n                      },\n                      \"priority\": {\n                        \"description\": \"\",\n                        \"type\": \"integer\",\n                        \"nullable\": true\n                      }\n                    },\n                    \"type\": \"object\",\n                    \"nullable\": true\n                  },\n                  \"https\": {\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"priority\",\n                      \"target\"\n                    ],\n                    \"properties\": {\n                      \"priority\": {\n                        \"description\": \"\",\n                        \"type\": \"integer\",\n                        \"nullable\": true\n                      },\n                      \"target\": {\n                        \"type\": \"string\",\n                        \"description\": \"\",\n                        \"example\": \"example2.com.\",\n                        \"maxLength\": 255,\n                        \"nullable\": true\n                      },\n                      \"params\": {\n                        \"description\": \"\",\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      }\n                    },\n                    \"type\": \"object\",\n                    \"nullable\": true\n                  },\n                  \"comment\": {\n                    \"type\": \"string\",\n                    \"description\": \"A comment to add context on what this DNS record is for\",\n                    \"example\": \"used to verify ownership of domain\",\n                    \"maxLength\": 500\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v2/domains/{domain}/records/{recordId}\": {\n      \"delete\": {\n        \"description\": \"Removes an existing DNS record from a domain name.\",\n        \"operationId\": \"removeRecord\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a DNS record\",\n        \"tags\": [\n          \"dns\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response by removing the specified DNS record.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"name\": \"recordId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"rec_V0fra8eEgQwEpFhYG2vTzC3K\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/registrar/tlds/supported\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getSupportedTlds\",\n        \"parameters\": [\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A list of the TLDs supported by Vercel.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": \"A list of the TLDs supported by Vercel.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get a list of TLDs supported by Vercel\",\n        \"summary\": \"Get supported TLDs\"\n      }\n    },\n    \"/v1/registrar/tlds/{tld}\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getTld\",\n        \"parameters\": [\n          {\n            \"name\": \"tld\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"supportedLanguageCodes\"\n                  ],\n                  \"properties\": {\n                    \"supportedLanguageCodes\": {\n                      \"type\": \"object\",\n                      \"properties\": {},\n                      \"additionalProperties\": {\n                        \"type\": \"string\"\n                      },\n                      \"description\": \"The language codes that are supported for the TLD. The key is the language code, and the value is the name of the language.\"\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get the metadata for a specific TLD.\",\n        \"summary\": \"Get TLD\"\n      }\n    },\n    \"/v1/registrar/tlds/{tld}/price\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getTldPrice\",\n        \"parameters\": [\n          {\n            \"name\": \"tld\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"years\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used.\"\n            },\n            \"required\": false,\n            \"description\": \"The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used.\"\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"years\",\n                    \"purchasePrice\",\n                    \"renewalPrice\",\n                    \"transferPrice\"\n                  ],\n                  \"properties\": {\n                    \"years\": {\n                      \"type\": \"number\",\n                      \"description\": \"The number of years the returned price is for.\"\n                    },\n                    \"purchasePrice\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        {\n                          \"type\": \"string\"\n                        }\n                      ]\n                    },\n                    \"renewalPrice\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        {\n                          \"type\": \"string\"\n                        }\n                      ]\n                    },\n                    \"transferPrice\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        {\n                          \"type\": \"string\"\n                        }\n                      ]\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get price data for a specific TLD. This only reflects base prices for the given TLD. Premium domains may have different prices. Use the [Get price data for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-price-data-for-a-domain) endpoint to get the price data for a specific domain.\",\n        \"summary\": \"Get TLD price data\"\n      }\n    },\n    \"/v1/registrar/domains/{domain}/availability\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getDomainAvailability\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"available\"\n                  ],\n                  \"properties\": {\n                    \"available\": {\n                      \"type\": \"boolean\"\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"NotFound\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotFound\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get availability for a specific domain. If the domain is available, it can be purchased using the [Buy a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-a-domain) endpoint or the [Buy multiple domains](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-multiple-domains) endpoint.\",\n        \"summary\": \"Get availability for a domain\"\n      }\n    },\n    \"/v1/registrar/domains/{domain}/price\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getDomainPrice\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"years\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used.\"\n            },\n            \"required\": false,\n            \"description\": \"The number of years to get the price for. If not provided, the minimum number of years for the TLD will be used.\"\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"years\",\n                    \"purchasePrice\",\n                    \"renewalPrice\",\n                    \"transferPrice\"\n                  ],\n                  \"properties\": {\n                    \"years\": {\n                      \"type\": \"number\"\n                    },\n                    \"purchasePrice\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        {\n                          \"type\": \"string\"\n                        }\n                      ]\n                    },\n                    \"renewalPrice\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        {\n                          \"type\": \"string\"\n                        }\n                      ]\n                    },\n                    \"transferPrice\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        {\n                          \"type\": \"string\"\n                        }\n                      ]\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/BadRequest\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainTooShort\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get price data for a specific domain\",\n        \"summary\": \"Get price data for a domain\"\n      }\n    },\n    \"/v1/registrar/domains/availability\": {\n      \"post\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getBulkAvailability\",\n        \"parameters\": [\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"results\"\n                  ],\n                  \"properties\": {\n                    \"results\": {\n                      \"type\": \"array\",\n                      \"items\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"domain\",\n                          \"available\"\n                        ],\n                        \"properties\": {\n                          \"domain\": {\n                            \"$ref\": \"#/components/schemas/DomainName\"\n                          },\n                          \"available\": {\n                            \"type\": \"boolean\"\n                          }\n                        },\n                        \"additionalProperties\": false\n                      }\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get availability for multiple domains. If the domains are available, they can be purchased using the [Buy a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-a-domain) endpoint or the [Buy multiple domains](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/buy-multiple-domains) endpoint.\",\n        \"summary\": \"Get availability for multiple domains\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"domains\"\n                ],\n                \"properties\": {\n                  \"domains\": {\n                    \"type\": \"array\",\n                    \"minItems\": 1,\n                    \"items\": {\n                      \"$ref\": \"#/components/schemas/DomainName\"\n                    },\n                    \"description\": \"an array of at most 50 item(s)\",\n                    \"title\": \"maxItems(50)\",\n                    \"maxItems\": 50\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/registrar/domains/{domain}/auth-code\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getDomainAuthCode\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"authCode\"\n                  ],\n                  \"properties\": {\n                    \"authCode\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotRegistered\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"The domain was not found in our system.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/DomainNotFound\"\n                }\n              }\n            }\n          },\n          \"409\": {\n            \"description\": \"The domain cannot be transfered out until the specified date.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/DomainCannotBeTransferedOutUntil\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get the auth code for a domain. This is required to transfer a domain from Vercel to another registrar.\",\n        \"summary\": \"Get the auth code for a domain\"\n      }\n    },\n    \"/v1/registrar/domains/{domain}/buy\": {\n      \"post\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"buySingleDomain\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"orderId\",\n                    \"_links\"\n                  ],\n                  \"properties\": {\n                    \"orderId\": {\n                      \"$ref\": \"#/components/schemas/OrderId\"\n                    },\n                    \"_links\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"href\",\n                          \"method\"\n                        ],\n                        \"properties\": {\n                          \"href\": {\n                            \"type\": \"string\"\n                          },\n                          \"method\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"GET\",\n                              \"POST\",\n                              \"PUT\",\n                              \"DELETE\",\n                              \"PATCH\"\n                            ]\n                          }\n                        },\n                        \"additionalProperties\": false\n                      }\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/DomainTooShort\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/OrderTooExpensive\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/InvalidAdditionalContactInfo\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/AdditionalContactInfoRequired\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/ExpectedPriceMismatch\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotAvailable\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/LanguageCodeRequired\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Buy a domain\",\n        \"summary\": \"Buy a domain\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"autoRenew\",\n                  \"years\",\n                  \"expectedPrice\",\n                  \"contactInformation\"\n                ],\n                \"properties\": {\n                  \"autoRenew\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Whether the domain should be auto-renewed before it expires. This can be configured later through the Vercel Dashboard or the [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) endpoint.\"\n                  },\n                  \"years\": {\n                    \"type\": \"number\",\n                    \"description\": \"The number of years to purchase the domain for.\"\n                  },\n                  \"expectedPrice\": {\n                    \"type\": \"number\",\n                    \"minimum\": 0.01\n                  },\n                  \"contactInformation\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"firstName\",\n                      \"lastName\",\n                      \"email\",\n                      \"phone\",\n                      \"address1\",\n                      \"city\",\n                      \"state\",\n                      \"zip\",\n                      \"country\"\n                    ],\n                    \"properties\": {\n                      \"firstName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"lastName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"email\": {\n                        \"$ref\": \"#/components/schemas/EmailAddress\"\n                      },\n                      \"phone\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      },\n                      \"address1\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"address2\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"city\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"state\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"zip\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"country\": {\n                        \"$ref\": \"#/components/schemas/CountryCode\"\n                      },\n                      \"companyName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"fax\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      },\n                      \"additional\": {\n                        \"type\": \"object\",\n                        \"properties\": {}\n                      }\n                    },\n                    \"additionalProperties\": false,\n                    \"description\": \"The contact information for the domain. Some TLDs require additional contact information. Use the [Get contact info schema](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-contact-info-schema) endpoint to retrieve the required fields.\"\n                  },\n                  \"languageCode\": {\n                    \"type\": \"string\",\n                    \"description\": \"The language code for the domain. For punycode domains, this must be provided. The list of supported language codes for a TLD can be retrieved from the [Get TLD](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-tld) endpoint.\"\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/registrar/domains/buy\": {\n      \"post\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"buyDomains\",\n        \"parameters\": [\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"orderId\",\n                    \"_links\"\n                  ],\n                  \"properties\": {\n                    \"orderId\": {\n                      \"$ref\": \"#/components/schemas/OrderId\"\n                    },\n                    \"_links\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"href\",\n                          \"method\"\n                        ],\n                        \"properties\": {\n                          \"href\": {\n                            \"type\": \"string\"\n                          },\n                          \"method\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"GET\",\n                              \"POST\",\n                              \"PUT\",\n                              \"DELETE\",\n                              \"PATCH\"\n                            ]\n                          }\n                        },\n                        \"additionalProperties\": false\n                      }\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/DomainTooShort\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/OrderTooExpensive\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/TooManyDomains\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/InvalidAdditionalContactInfo\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/AdditionalContactInfoRequired\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DuplicateDomains\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/ExpectedPriceMismatch\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotAvailable\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/LanguageCodeRequired\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Buy multiple domains at once\",\n        \"summary\": \"Buy multiple domains\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"domains\",\n                  \"contactInformation\"\n                ],\n                \"properties\": {\n                  \"domains\": {\n                    \"type\": \"array\",\n                    \"minItems\": 1,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"domainName\",\n                        \"autoRenew\",\n                        \"years\",\n                        \"expectedPrice\"\n                      ],\n                      \"properties\": {\n                        \"domainName\": {\n                          \"$ref\": \"#/components/schemas/DomainName\"\n                        },\n                        \"autoRenew\": {\n                          \"type\": \"boolean\",\n                          \"description\": \"Whether the domain should be auto-renewed before it expires. This can be configured later through the Vercel Dashboard or the [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) endpoint.\"\n                        },\n                        \"years\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of years to purchase the domain for.\"\n                        },\n                        \"expectedPrice\": {\n                          \"type\": \"number\",\n                          \"minimum\": 0.01\n                        },\n                        \"languageCode\": {\n                          \"type\": \"string\",\n                          \"description\": \"The language code for the domain. For punycode domains, this must be provided. The list of supported language codes for a TLD can be retrieved from the [Get TLD](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-tld) endpoint.\"\n                        }\n                      },\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"contactInformation\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"firstName\",\n                      \"lastName\",\n                      \"email\",\n                      \"phone\",\n                      \"address1\",\n                      \"city\",\n                      \"state\",\n                      \"zip\",\n                      \"country\"\n                    ],\n                    \"properties\": {\n                      \"firstName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"lastName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"email\": {\n                        \"$ref\": \"#/components/schemas/EmailAddress\"\n                      },\n                      \"phone\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      },\n                      \"address1\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"address2\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"city\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"state\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"zip\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"country\": {\n                        \"$ref\": \"#/components/schemas/CountryCode\"\n                      },\n                      \"companyName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"fax\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      },\n                      \"additional\": {\n                        \"type\": \"object\",\n                        \"properties\": {}\n                      }\n                    },\n                    \"additionalProperties\": false,\n                    \"description\": \"The contact information for the domain. Some TLDs require additional contact information. Use the [Get contact info schema](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/get-contact-info-schema) endpoint to retrieve the required fields.\"\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/registrar/domains/{domain}/transfer\": {\n      \"post\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"transferInDomain\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"orderId\",\n                    \"_links\"\n                  ],\n                  \"properties\": {\n                    \"orderId\": {\n                      \"$ref\": \"#/components/schemas/OrderId\"\n                    },\n                    \"_links\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"href\",\n                          \"method\"\n                        ],\n                        \"properties\": {\n                          \"href\": {\n                            \"type\": \"string\"\n                          },\n                          \"method\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"GET\",\n                              \"POST\",\n                              \"PUT\",\n                              \"DELETE\",\n                              \"PATCH\"\n                            ]\n                          }\n                        },\n                        \"additionalProperties\": false\n                      }\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/BadRequest\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainAlreadyOwned\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainTooShort\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DNSSECEnabled\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/ExpectedPriceMismatch\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotAvailable\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Transfer a domain in from another registrar\",\n        \"summary\": \"Transfer-in a domain\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"authCode\",\n                  \"autoRenew\",\n                  \"years\",\n                  \"expectedPrice\",\n                  \"contactInformation\"\n                ],\n                \"properties\": {\n                  \"authCode\": {\n                    \"type\": \"string\",\n                    \"description\": \"The auth code for the domain. You must obtain this code from the losing registrar.\"\n                  },\n                  \"autoRenew\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Whether the domain should be auto-renewed before it expires. This can be configured later through the Vercel Dashboard or the [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) endpoint.\"\n                  },\n                  \"years\": {\n                    \"type\": \"number\",\n                    \"description\": \"The number of years to renew the domain for once it is transferred in. This must be a valid number of transfer years for the TLD.\"\n                  },\n                  \"expectedPrice\": {\n                    \"type\": \"number\",\n                    \"minimum\": 0.01\n                  },\n                  \"contactInformation\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"firstName\",\n                      \"lastName\",\n                      \"email\",\n                      \"phone\",\n                      \"address1\",\n                      \"city\",\n                      \"state\",\n                      \"zip\",\n                      \"country\"\n                    ],\n                    \"properties\": {\n                      \"firstName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"lastName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"email\": {\n                        \"$ref\": \"#/components/schemas/EmailAddress\"\n                      },\n                      \"phone\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      },\n                      \"address1\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"address2\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"city\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"state\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"zip\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"country\": {\n                        \"$ref\": \"#/components/schemas/CountryCode\"\n                      },\n                      \"companyName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"fax\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getDomainTransferIn\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"status\"\n                  ],\n                  \"properties\": {\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"canceled\",\n                        \"canceled_pending_refund\",\n                        \"completed\",\n                        \"created\",\n                        \"failed\",\n                        \"pending\",\n                        \"pending_insert\",\n                        \"pending_new_auth_code\",\n                        \"pending_transfer\",\n                        \"pending_unlock\",\n                        \"pending_registry_unlock\",\n                        \"rejected\",\n                        \"submitting_transfer\"\n                      ]\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"NotFound\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotFound\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get the transfer status for a domain\",\n        \"summary\": \"Get a domain's transfer status\"\n      }\n    },\n    \"/v1/registrar/domains/{domain}/renew\": {\n      \"post\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"renewDomain\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"orderId\",\n                    \"_links\"\n                  ],\n                  \"properties\": {\n                    \"orderId\": {\n                      \"$ref\": \"#/components/schemas/OrderId\"\n                    },\n                    \"_links\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"href\",\n                          \"method\"\n                        ],\n                        \"properties\": {\n                          \"href\": {\n                            \"type\": \"string\"\n                          },\n                          \"method\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"GET\",\n                              \"POST\",\n                              \"PUT\",\n                              \"DELETE\",\n                              \"PATCH\"\n                            ]\n                          }\n                        },\n                        \"additionalProperties\": false\n                      }\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/BadRequest\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainTooShort\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotRegistered\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/ExpectedPriceMismatch\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotAvailable\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/TldNotSupported\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"The domain was not found in our system.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/DomainNotFound\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Renew a domain\",\n        \"summary\": \"Renew a domain\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"years\",\n                  \"expectedPrice\"\n                ],\n                \"properties\": {\n                  \"years\": {\n                    \"type\": \"number\",\n                    \"description\": \"The number of years to renew the domain for.\"\n                  },\n                  \"expectedPrice\": {\n                    \"type\": \"number\",\n                    \"minimum\": 0.01\n                  },\n                  \"contactInformation\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"firstName\",\n                      \"lastName\",\n                      \"email\",\n                      \"phone\",\n                      \"address1\",\n                      \"city\",\n                      \"state\",\n                      \"zip\",\n                      \"country\"\n                    ],\n                    \"properties\": {\n                      \"firstName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"lastName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"email\": {\n                        \"$ref\": \"#/components/schemas/EmailAddress\"\n                      },\n                      \"phone\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      },\n                      \"address1\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"address2\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"city\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"state\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"zip\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"country\": {\n                        \"$ref\": \"#/components/schemas/CountryCode\"\n                      },\n                      \"companyName\": {\n                        \"$ref\": \"#/components/schemas/NonEmptyTrimmedString\"\n                      },\n                      \"fax\": {\n                        \"$ref\": \"#/components/schemas/E164PhoneNumber\"\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/registrar/domains/{domain}/auto-renew\": {\n      \"patch\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"updateDomainAutoRenew\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"Success\"\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/DomainAlreadyRenewing\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotRenewable\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotRegistered\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"The domain was not found in our system.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/DomainNotFound\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Update the auto-renew setting for a domain\",\n        \"summary\": \"Update auto-renew for a domain\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"autoRenew\"\n                ],\n                \"properties\": {\n                  \"autoRenew\": {\n                    \"type\": \"boolean\"\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/registrar/domains/{domain}/nameservers\": {\n      \"patch\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"updateDomainNameservers\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"Success\"\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/DomainNotRegistered\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"The domain was not found in our system.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/DomainNotFound\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Update the nameservers for a domain. Pass an empty array to use Vercel's default nameservers.\",\n        \"summary\": \"Update nameservers for a domain\",\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"nameservers\"\n                ],\n                \"properties\": {\n                  \"nameservers\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"$ref\": \"#/components/schemas/Nameserver\"\n                    }\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/registrar/domains/{domain}/contact-info/schema\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getContactInfoSchema\",\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/DomainName\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"properties\": {}\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/BadRequest\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Some TLDs require additional contact information. Use this endpoint to get the schema for the tld-specific contact information for a domain.\",\n        \"summary\": \"Get contact info schema\"\n      }\n    },\n    \"/v1/registrar/orders/{orderId}\": {\n      \"get\": {\n        \"tags\": [\n          \"domains-registrar\"\n        ],\n        \"operationId\": \"getOrder\",\n        \"parameters\": [\n          {\n            \"name\": \"orderId\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"$ref\": \"#/components/schemas/OrderId\"\n            },\n            \"required\": true\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": false\n          }\n        ],\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Success\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"orderId\",\n                    \"domains\",\n                    \"status\"\n                  ],\n                  \"properties\": {\n                    \"orderId\": {\n                      \"$ref\": \"#/components/schemas/OrderId\"\n                    },\n                    \"domains\": {\n                      \"type\": \"array\",\n                      \"items\": {\n                        \"anyOf\": [\n                          {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"purchaseType\",\n                              \"autoRenew\",\n                              \"years\",\n                              \"domainName\",\n                              \"status\",\n                              \"price\"\n                            ],\n                            \"properties\": {\n                              \"purchaseType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"purchase\"\n                                ]\n                              },\n                              \"autoRenew\": {\n                                \"type\": \"boolean\"\n                              },\n                              \"years\": {\n                                \"type\": \"number\",\n                                \"description\": \"The number of years the domain is being purchased for.\"\n                              },\n                              \"domainName\": {\n                                \"$ref\": \"#/components/schemas/DomainName\"\n                              },\n                              \"status\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"pending\",\n                                  \"completed\",\n                                  \"failed\",\n                                  \"refunded\",\n                                  \"refund-failed\"\n                                ]\n                              },\n                              \"price\": {\n                                \"type\": \"number\",\n                                \"minimum\": 0.01\n                              },\n                              \"error\": {\n                                \"anyOf\": [\n                                  {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"unsupported-language-code\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"detectedLanguageCode\"\n                                            ],\n                                            \"properties\": {\n                                              \"detectedLanguageCode\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"incorrect-language-code\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"detectedLanguageCode\"\n                                            ],\n                                            \"properties\": {\n                                              \"detectedLanguageCode\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"client-transfer-prohibited\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"incorrect-auth-code\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"claims-notice-required\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"cannot-transfer-in-until\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"numDaysUntilTransferrable\"\n                                            ],\n                                            \"properties\": {\n                                              \"numDaysUntilTransferrable\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"account-transfer-required\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"price-change\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"unavailable-legal\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"invalid-contact\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"properties\": {\n                                              \"invalidField\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"firstName\",\n                                                  \"lastName\",\n                                                  \"email\",\n                                                  \"phone\",\n                                                  \"address1\",\n                                                  \"address2\",\n                                                  \"city\",\n                                                  \"state\",\n                                                  \"zip\",\n                                                  \"country\",\n                                                  \"companyName\",\n                                                  \"fax\"\n                                                ]\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"object\",\n                                    \"required\": [\n                                      \"code\"\n                                    ],\n                                    \"properties\": {\n                                      \"code\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"details\": {\n                                        \"title\": \"unknown\"\n                                      }\n                                    },\n                                    \"additionalProperties\": false\n                                  }\n                                ]\n                              }\n                            },\n                            \"additionalProperties\": false\n                          },\n                          {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"purchaseType\",\n                              \"years\",\n                              \"domainName\",\n                              \"status\",\n                              \"price\"\n                            ],\n                            \"properties\": {\n                              \"purchaseType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"renewal\"\n                                ]\n                              },\n                              \"years\": {\n                                \"type\": \"number\",\n                                \"description\": \"The number of years the domain is being renewed for.\"\n                              },\n                              \"domainName\": {\n                                \"$ref\": \"#/components/schemas/DomainName\"\n                              },\n                              \"status\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"pending\",\n                                  \"completed\",\n                                  \"failed\",\n                                  \"refunded\",\n                                  \"refund-failed\"\n                                ]\n                              },\n                              \"price\": {\n                                \"type\": \"number\",\n                                \"minimum\": 0.01\n                              },\n                              \"error\": {\n                                \"anyOf\": [\n                                  {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"unsupported-language-code\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"detectedLanguageCode\"\n                                            ],\n                                            \"properties\": {\n                                              \"detectedLanguageCode\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"incorrect-language-code\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"detectedLanguageCode\"\n                                            ],\n                                            \"properties\": {\n                                              \"detectedLanguageCode\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"client-transfer-prohibited\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"incorrect-auth-code\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"claims-notice-required\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"cannot-transfer-in-until\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"numDaysUntilTransferrable\"\n                                            ],\n                                            \"properties\": {\n                                              \"numDaysUntilTransferrable\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"account-transfer-required\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"price-change\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"unavailable-legal\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"invalid-contact\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"properties\": {\n                                              \"invalidField\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"firstName\",\n                                                  \"lastName\",\n                                                  \"email\",\n                                                  \"phone\",\n                                                  \"address1\",\n                                                  \"address2\",\n                                                  \"city\",\n                                                  \"state\",\n                                                  \"zip\",\n                                                  \"country\",\n                                                  \"companyName\",\n                                                  \"fax\"\n                                                ]\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"object\",\n                                    \"required\": [\n                                      \"code\"\n                                    ],\n                                    \"properties\": {\n                                      \"code\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"details\": {\n                                        \"title\": \"unknown\"\n                                      }\n                                    },\n                                    \"additionalProperties\": false\n                                  }\n                                ]\n                              }\n                            },\n                            \"additionalProperties\": false\n                          },\n                          {\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"purchaseType\",\n                              \"autoRenew\",\n                              \"years\",\n                              \"domainName\",\n                              \"status\",\n                              \"price\"\n                            ],\n                            \"properties\": {\n                              \"purchaseType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"transfer\"\n                                ]\n                              },\n                              \"autoRenew\": {\n                                \"type\": \"boolean\"\n                              },\n                              \"years\": {\n                                \"type\": \"number\",\n                                \"description\": \"The number of years the domain is being transferred for.\"\n                              },\n                              \"domainName\": {\n                                \"$ref\": \"#/components/schemas/DomainName\"\n                              },\n                              \"status\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"pending\",\n                                  \"completed\",\n                                  \"failed\",\n                                  \"refunded\",\n                                  \"refund-failed\"\n                                ]\n                              },\n                              \"price\": {\n                                \"type\": \"number\",\n                                \"minimum\": 0.01\n                              },\n                              \"error\": {\n                                \"anyOf\": [\n                                  {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"unsupported-language-code\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"detectedLanguageCode\"\n                                            ],\n                                            \"properties\": {\n                                              \"detectedLanguageCode\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"incorrect-language-code\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"detectedLanguageCode\"\n                                            ],\n                                            \"properties\": {\n                                              \"detectedLanguageCode\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"client-transfer-prohibited\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"incorrect-auth-code\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"claims-notice-required\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"cannot-transfer-in-until\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"required\": [\n                                              \"numDaysUntilTransferrable\"\n                                            ],\n                                            \"properties\": {\n                                              \"numDaysUntilTransferrable\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"account-transfer-required\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"price-change\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"unavailable-legal\"\n                                            ]\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"code\",\n                                          \"details\"\n                                        ],\n                                        \"properties\": {\n                                          \"code\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"invalid-contact\"\n                                            ]\n                                          },\n                                          \"details\": {\n                                            \"type\": \"object\",\n                                            \"properties\": {\n                                              \"invalidField\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"firstName\",\n                                                  \"lastName\",\n                                                  \"email\",\n                                                  \"phone\",\n                                                  \"address1\",\n                                                  \"address2\",\n                                                  \"city\",\n                                                  \"state\",\n                                                  \"zip\",\n                                                  \"country\",\n                                                  \"companyName\",\n                                                  \"fax\"\n                                                ]\n                                              }\n                                            },\n                                            \"additionalProperties\": false\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      }\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"object\",\n                                    \"required\": [\n                                      \"code\"\n                                    ],\n                                    \"properties\": {\n                                      \"code\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"details\": {\n                                        \"title\": \"unknown\"\n                                      }\n                                    },\n                                    \"additionalProperties\": false\n                                  }\n                                ]\n                              }\n                            },\n                            \"additionalProperties\": false\n                          }\n                        ]\n                      }\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"draft\",\n                        \"purchasing\",\n                        \"completed\",\n                        \"failed\"\n                      ]\n                    },\n                    \"error\": {\n                      \"anyOf\": [\n                        {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"code\"\n                              ],\n                              \"properties\": {\n                                \"code\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"payment-failed\"\n                                  ]\n                                }\n                              },\n                              \"additionalProperties\": false\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"code\",\n                                \"details\"\n                              ],\n                              \"properties\": {\n                                \"code\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"tld-outage\"\n                                  ]\n                                },\n                                \"details\": {\n                                  \"type\": \"object\",\n                                  \"required\": [\n                                    \"tlds\"\n                                  ],\n                                  \"properties\": {\n                                    \"tlds\": {\n                                      \"type\": \"array\",\n                                      \"items\": {\n                                        \"type\": \"object\",\n                                        \"required\": [\n                                          \"tldName\",\n                                          \"endsAt\"\n                                        ],\n                                        \"properties\": {\n                                          \"tldName\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"endsAt\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"additionalProperties\": false\n                                      }\n                                    }\n                                  },\n                                  \"additionalProperties\": false\n                                }\n                              },\n                              \"additionalProperties\": false\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"code\",\n                                \"details\"\n                              ],\n                              \"properties\": {\n                                \"code\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"price-mismatch\"\n                                  ]\n                                },\n                                \"details\": {\n                                  \"type\": \"object\",\n                                  \"required\": [\n                                    \"expectedPrice\"\n                                  ],\n                                  \"properties\": {\n                                    \"expectedPrice\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"actualPrice\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"additionalProperties\": false\n                                }\n                              },\n                              \"additionalProperties\": false\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"code\"\n                              ],\n                              \"properties\": {\n                                \"code\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"unexpected-error\"\n                                  ]\n                                }\n                              },\n                              \"additionalProperties\": false\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"code\",\n                                \"details\"\n                              ],\n                              \"properties\": {\n                                \"code\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"claims-required\"\n                                  ]\n                                },\n                                \"details\": {\n                                  \"type\": \"object\",\n                                  \"required\": [\n                                    \"message\",\n                                    \"domainNames\"\n                                  ],\n                                  \"properties\": {\n                                    \"message\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"domainNames\": {\n                                      \"type\": \"array\",\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      }\n                                    }\n                                  },\n                                  \"additionalProperties\": false\n                                }\n                              },\n                              \"additionalProperties\": false\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"code\"\n                              ],\n                              \"properties\": {\n                                \"code\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"domain-mismatch\"\n                                  ]\n                                }\n                              },\n                              \"additionalProperties\": false\n                            }\n                          ]\n                        },\n                        {\n                          \"type\": \"object\",\n                          \"required\": [\n                            \"code\"\n                          ],\n                          \"properties\": {\n                            \"code\": {\n                              \"type\": \"string\"\n                            },\n                            \"details\": {\n                              \"title\": \"unknown\"\n                            }\n                          },\n                          \"additionalProperties\": false\n                        }\n                      ]\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"There was something wrong with the request\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/HttpApiDecodeError\"\n                }\n              }\n            }\n          },\n          \"401\": {\n            \"description\": \"Unauthorized\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Unauthorized\"\n                }\n              }\n            }\n          },\n          \"403\": {\n            \"description\": \"NotAuthorizedForScope\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"anyOf\": [\n                    {\n                      \"$ref\": \"#/components/schemas/NotAuthorizedForScope\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Forbidden\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"404\": {\n            \"description\": \"NotFound\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/NotFound\"\n                }\n              }\n            }\n          },\n          \"429\": {\n            \"description\": \"TooManyRequests\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/TooManyRequests\"\n                }\n              }\n            }\n          },\n          \"500\": {\n            \"description\": \"InternalServerError\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InternalServerError\"\n                }\n              }\n            }\n          }\n        },\n        \"description\": \"Get information about a domain order by its ID\",\n        \"summary\": \"Get a domain order\"\n      }\n    },\n    \"/v6/domains/{domain}/config\": {\n      \"get\": {\n        \"description\": \"Get a Domain's configuration.\",\n        \"operationId\": \"getDomainConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a Domain's configuration\",\n        \"tags\": [\n          \"domains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"configuredBy\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"A\",\n                        \"CNAME\",\n                        \"http\",\n                        \"dns-01\"\n                      ],\n                      \"description\": \"How we see the domain's configuration. - `CNAME`: Domain has a CNAME pointing to Vercel. - `A`: Domain's A record is resolving to Vercel. - `http`: Domain is resolving to Vercel but may be behind a Proxy. - `dns-01`: Domain is not resolving to Vercel but dns-01 challenge is enabled. - `null`: Domain is not resolving to Vercel.\"\n                    },\n                    \"acceptedChallenges\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"dns-01\",\n                          \"http-01\"\n                        ],\n                        \"description\": \"Which challenge types the domain can use for issuing certs.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Which challenge types the domain can use for issuing certs.\"\n                    },\n                    \"recommendedIPv4\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"rank\": {\n                            \"type\": \"number\"\n                          },\n                          \"value\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"rank\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Recommended IPv4s for the domain. rank=1 is the preferred value(s) to use. Only using 1 ip value is acceptable.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Recommended IPv4s for the domain. rank=1 is the preferred value(s) to use. Only using 1 ip value is acceptable.\"\n                    },\n                    \"recommendedCNAME\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"rank\": {\n                            \"type\": \"number\"\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"rank\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Recommended CNAMEs for the domain. rank=1 is the preferred value to use.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Recommended CNAMEs for the domain. rank=1 is the preferred value to use.\"\n                    },\n                    \"misconfigured\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"Whether or not the domain is configured AND we can automatically generate a TLS certificate.\"\n                    }\n                  },\n                  \"required\": [\n                    \"acceptedChallenges\",\n                    \"configuredBy\",\n                    \"misconfigured\",\n                    \"recommendedCNAME\",\n                    \"recommendedIPv4\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"description\": \"The name of the domain.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The name of the domain.\",\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name that will be associated with the domain. Use this when the domain is not yet associated with a project.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"The project id or name that will be associated with the domain. Use this when the domain is not yet associated with a project.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"strict\",\n            \"description\": \"When true, the response will only include the nameservers assigned directly to the specified domain. When false and there are no nameservers assigned directly to the specified domain, the response will include the nameservers of the domain's parent zone.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"enum\": [\n                \"true\",\n                \"false\"\n              ],\n              \"description\": \"When true, the response will only include the nameservers assigned directly to the specified domain. When false and there are no nameservers assigned directly to the specified domain, the response will include the nameservers of the domain's parent zone.\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v5/domains/{domain}\": {\n      \"get\": {\n        \"description\": \"Get information for a single domain in an account or team.\",\n        \"operationId\": \"getDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Information for a Single Domain\",\n        \"tags\": [\n          \"domains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response retrieving an information for a specific domains.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"domain\": {\n                      \"properties\": {\n                        \"suffix\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"verified\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"If the domain has the ownership verified.\",\n                          \"example\": true\n                        },\n                        \"nameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of the current nameservers of the domain.\",\n                          \"example\": [\n                            \"ns1.nameserver.net\",\n                            \"ns2.nameserver.net\"\n                          ]\n                        },\n                        \"intendedNameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of the intended nameservers for the domain to point to Vercel DNS.\",\n                          \"example\": [\n                            \"ns1.vercel-dns.com\",\n                            \"ns2.vercel-dns.com\"\n                          ]\n                        },\n                        \"customNameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.\",\n                          \"example\": [\n                            \"ns1.nameserver.net\",\n                            \"ns2.nameserver.net\"\n                          ]\n                        },\n                        \"creator\": {\n                          \"properties\": {\n                            \"username\": {\n                              \"type\": \"string\"\n                            },\n                            \"email\": {\n                              \"type\": \"string\"\n                            },\n                            \"customerId\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"isDomainReseller\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"id\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"email\",\n                            \"id\",\n                            \"username\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"An object containing information of the domain creator, including the user's id, username, and email.\",\n                          \"example\": {\n                            \"id\": \"ZspSRT4ljIEEmMHgoDwKWDei\",\n                            \"username\": \"vercel_user\",\n                            \"email\": \"demo@example.com\"\n                          }\n                        },\n                        \"registrar\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"new\"\n                          ],\n                          \"description\": \"Whether or not the domain is registered with Name.com. If set to `true`, the domain is registered with Name.com.\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"The domain name.\",\n                          \"example\": \"example.com\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"boughtAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.\",\n                          \"example\": 1613602938882\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp in milliseconds when the domain was created in the registry.\",\n                          \"example\": 1613602938882\n                        },\n                        \"expiresAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp in milliseconds at which the domain is set to expire. `null` if not bought with Vercel.\",\n                          \"example\": 1613602938882\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the domain.\",\n                          \"example\": \"EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1\"\n                        },\n                        \"renew\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Indicates whether the domain is set to automatically renew.\",\n                          \"example\": true\n                        },\n                        \"serviceType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"zeit.world\",\n                            \"external\",\n                            \"na\"\n                          ],\n                          \"description\": \"The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.\",\n                          \"example\": \"zeit.world\"\n                        },\n                        \"transferredAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.\",\n                          \"example\": 1613602938882\n                        },\n                        \"transferStartedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.\",\n                          \"example\": 1613602938882\n                        },\n                        \"userId\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"boughtAt\",\n                        \"createdAt\",\n                        \"creator\",\n                        \"expiresAt\",\n                        \"id\",\n                        \"intendedNameservers\",\n                        \"name\",\n                        \"nameservers\",\n                        \"serviceType\",\n                        \"suffix\",\n                        \"teamId\",\n                        \"userId\",\n                        \"verified\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"domain\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"description\": \"The name of the domain.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The name of the domain.\",\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v5/domains\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of domains registered for the authenticated user or team. By default it returns the last 20 domains if no limit is provided.\",\n        \"operationId\": \"getDomains\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List all the domains\",\n        \"tags\": [\n          \"domains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response retrieving a list of domains.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"domains\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"verified\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"If the domain has the ownership verified.\",\n                            \"example\": true\n                          },\n                          \"nameservers\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of the current nameservers of the domain.\",\n                            \"example\": [\n                              \"ns1.nameserver.net\",\n                              \"ns2.nameserver.net\"\n                            ]\n                          },\n                          \"intendedNameservers\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of the intended nameservers for the domain to point to Vercel DNS.\",\n                            \"example\": [\n                              \"ns1.vercel-dns.com\",\n                              \"ns2.vercel-dns.com\"\n                            ]\n                          },\n                          \"customNameservers\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.\",\n                            \"example\": [\n                              \"ns1.nameserver.net\",\n                              \"ns2.nameserver.net\"\n                            ]\n                          },\n                          \"creator\": {\n                            \"properties\": {\n                              \"username\": {\n                                \"type\": \"string\"\n                              },\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"customerId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"isDomainReseller\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"id\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"An object containing information of the domain creator, including the user's id, username, and email.\",\n                            \"example\": {\n                              \"id\": \"ZspSRT4ljIEEmMHgoDwKWDei\",\n                              \"username\": \"vercel_user\",\n                              \"email\": \"demo@example.com\"\n                            }\n                          },\n                          \"registrar\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"new\"\n                            ],\n                            \"description\": \"Whether or not the domain is registered with Name.com. If set to `true`, the domain is registered with Name.com.\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"The domain name.\",\n                            \"example\": \"example.com\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"boughtAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.\",\n                            \"example\": 1613602938882\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp in milliseconds when the domain was created in the registry.\",\n                            \"example\": 1613602938882\n                          },\n                          \"expiresAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp in milliseconds at which the domain is set to expire. `null` if not bought with Vercel.\",\n                            \"example\": 1613602938882\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the domain.\",\n                            \"example\": \"EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1\"\n                          },\n                          \"renew\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Indicates whether the domain is set to automatically renew.\",\n                            \"example\": true\n                          },\n                          \"serviceType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"zeit.world\",\n                              \"external\",\n                              \"na\"\n                            ],\n                            \"description\": \"The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.\",\n                            \"example\": \"zeit.world\"\n                          },\n                          \"transferredAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.\",\n                            \"example\": 1613602938882\n                          },\n                          \"transferStartedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.\",\n                            \"example\": 1613602938882\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"boughtAt\",\n                          \"createdAt\",\n                          \"creator\",\n                          \"expiresAt\",\n                          \"id\",\n                          \"intendedNameservers\",\n                          \"name\",\n                          \"nameservers\",\n                          \"serviceType\",\n                          \"teamId\",\n                          \"userId\",\n                          \"verified\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"$ref\": \"#/components/schemas/Pagination\"\n                    }\n                  },\n                  \"required\": [\n                    \"domains\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of domains to list from a request.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Maximum number of domains to list from a request.\",\n              \"type\": \"number\",\n              \"example\": 20\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get domains created after this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get domains created after this JavaScript timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1609499532000\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get domains created before this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get domains created before this JavaScript timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1612264332000\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v7/domains\": {\n      \"post\": {\n        \"description\": \"This endpoint is used for adding a new apex domain name with Vercel for the authenticating user. Note: This endpoint is no longer used for initiating domain transfers from external registrars to Vercel. For this, please use the endpoint [Transfer-in a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/transfer-in-a-domain).\",\n        \"operationId\": \"createOrTransferDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Add an existing domain to the Vercel platform\",\n        \"tags\": [\n          \"domains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"domain\": {\n                      \"properties\": {\n                        \"verified\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"If the domain has the ownership verified.\",\n                          \"example\": true\n                        },\n                        \"nameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of the current nameservers of the domain.\",\n                          \"example\": [\n                            \"ns1.nameserver.net\",\n                            \"ns2.nameserver.net\"\n                          ]\n                        },\n                        \"intendedNameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of the intended nameservers for the domain to point to Vercel DNS.\",\n                          \"example\": [\n                            \"ns1.vercel-dns.com\",\n                            \"ns2.vercel-dns.com\"\n                          ]\n                        },\n                        \"customNameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"A list of custom nameservers for the domain to point to. Only applies to domains purchased with Vercel.\",\n                          \"example\": [\n                            \"ns1.nameserver.net\",\n                            \"ns2.nameserver.net\"\n                          ]\n                        },\n                        \"creator\": {\n                          \"properties\": {\n                            \"username\": {\n                              \"type\": \"string\"\n                            },\n                            \"email\": {\n                              \"type\": \"string\"\n                            },\n                            \"customerId\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"isDomainReseller\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"id\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"email\",\n                            \"id\",\n                            \"username\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"An object containing information of the domain creator, including the user's id, username, and email.\",\n                          \"example\": {\n                            \"id\": \"ZspSRT4ljIEEmMHgoDwKWDei\",\n                            \"username\": \"vercel_user\",\n                            \"email\": \"demo@example.com\"\n                          }\n                        },\n                        \"registrar\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"new\"\n                          ],\n                          \"description\": \"Whether or not the domain is registered with Name.com. If set to `true`, the domain is registered with Name.com.\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"The domain name.\",\n                          \"example\": \"example.com\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"boughtAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"If it was purchased through Vercel, the timestamp in milliseconds when it was purchased.\",\n                          \"example\": 1613602938882\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp in milliseconds when the domain was created in the registry.\",\n                          \"example\": 1613602938882\n                        },\n                        \"expiresAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp in milliseconds at which the domain is set to expire. `null` if not bought with Vercel.\",\n                          \"example\": 1613602938882\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the domain.\",\n                          \"example\": \"EmTbe5CEJyTk2yVAHBUWy4A3sRusca3GCwRjTC1bpeVnt1\"\n                        },\n                        \"renew\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Indicates whether the domain is set to automatically renew.\",\n                          \"example\": true\n                        },\n                        \"serviceType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"zeit.world\",\n                            \"external\",\n                            \"na\"\n                          ],\n                          \"description\": \"The type of service the domain is handled by. `external` if the DNS is externally handled, `zeit.world` if handled with Vercel, or `na` if the service is not available.\",\n                          \"example\": \"zeit.world\"\n                        },\n                        \"transferredAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp in milliseconds at which the domain was successfully transferred into Vercel. `null` if the transfer is still processing or was never transferred in.\",\n                          \"example\": 1613602938882\n                        },\n                        \"transferStartedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"If transferred into Vercel, timestamp in milliseconds when the domain transfer was initiated.\",\n                          \"example\": 1613602938882\n                        },\n                        \"userId\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"boughtAt\",\n                        \"createdAt\",\n                        \"creator\",\n                        \"expiresAt\",\n                        \"id\",\n                        \"intendedNameservers\",\n                        \"name\",\n                        \"nameservers\",\n                        \"serviceType\",\n                        \"teamId\",\n                        \"userId\",\n                        \"verified\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"domain\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The domain is not allowed to be used\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"method\": {\n                    \"description\": \"The domain operation to perform. It can be either `add` or `move-in`.\",\n                    \"type\": \"string\",\n                    \"example\": \"add\"\n                  }\n                },\n                \"oneOf\": [\n                  {\n                    \"additionalProperties\": false,\n                    \"type\": \"object\",\n                    \"description\": \"add\",\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"The domain name you want to add.\",\n                        \"type\": \"string\",\n                        \"example\": \"example.com\"\n                      },\n                      \"cdnEnabled\": {\n                        \"description\": \"Whether the domain has the Vercel Edge Network enabled or not.\",\n                        \"type\": \"boolean\",\n                        \"example\": true\n                      },\n                      \"zone\": {\n                        \"description\": \"Whether to create a DNS zone on Vercel. Set `true` if using Vercel nameservers.\",\n                        \"type\": \"boolean\"\n                      },\n                      \"method\": {\n                        \"description\": \"The domain operation to perform.\",\n                        \"type\": \"string\",\n                        \"example\": \"add\"\n                      }\n                    }\n                  },\n                  {\n                    \"additionalProperties\": false,\n                    \"type\": \"object\",\n                    \"description\": \"move-in\",\n                    \"required\": [\n                      \"method\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"description\": \"The domain name you want to add.\",\n                        \"type\": \"string\",\n                        \"example\": \"example.com\"\n                      },\n                      \"method\": {\n                        \"description\": \"The domain operation to perform.\",\n                        \"type\": \"string\",\n                        \"example\": \"move-in\"\n                      },\n                      \"token\": {\n                        \"description\": \"The move-in token from Move Requested email.\",\n                        \"type\": \"string\",\n                        \"example\": \"fdhfr820ad#@FAdlj$$\"\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v3/domains/{domain}\": {\n      \"patch\": {\n        \"description\": \"Update or move apex domain. Note: This endpoint is no longer used for updating auto-renew or nameservers. For this, please use the endpoints [Update auto-renew for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-auto-renew-for-a-domain) and [Update nameservers for a domain](https://vercel.com/docs/rest-api/reference/endpoints/domains-registrar/update-nameservers-for-a-domain).\",\n        \"operationId\": \"patchDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update or move apex domain\",\n        \"tags\": [\n          \"domains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"moved\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"moved\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"moved\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"token\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"moved\",\n                        \"token\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"renew\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"customNameservers\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"zone\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"in\": \"path\",\n            \"schema\": {\n              \"type\": \"string\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"oneOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"description\": \"update\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"op\": {\n                        \"example\": \"update\",\n                        \"type\": \"string\"\n                      },\n                      \"renew\": {\n                        \"description\": \"This field is deprecated. Please use PATCH /v1/registrar/domains/{domainName}/auto-renew instead.\",\n                        \"type\": \"boolean\",\n                        \"deprecated\": true\n                      },\n                      \"customNameservers\": {\n                        \"description\": \"This field is deprecated. Please use PATCH /v1/registrar/domains/{domainName}/nameservers instead.\",\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"maxItems\": 4,\n                        \"minItems\": 0,\n                        \"type\": \"array\",\n                        \"uniqueItems\": true,\n                        \"deprecated\": true\n                      },\n                      \"zone\": {\n                        \"description\": \"Specifies whether this is a DNS zone that intends to use Vercel's nameservers.\",\n                        \"type\": \"boolean\"\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"description\": \"move-out\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"op\": {\n                        \"example\": \"move-out\",\n                        \"type\": \"string\"\n                      },\n                      \"destination\": {\n                        \"description\": \"User or team to move domain to\",\n                        \"type\": \"string\"\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        },\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v6/domains/{domain}\": {\n      \"delete\": {\n        \"description\": \"Delete a previously registered domain name from Vercel. Deleting a domain will automatically remove any associated aliases.\",\n        \"operationId\": \"deleteDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove a domain by name\",\n        \"tags\": [\n          \"domains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response removing a domain.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"uid\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"uid\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"description\": \"The name of the domain.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The name of the domain.\",\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/log-drains/{id}\": {\n      \"get\": {\n        \"description\": \"Retrieves a Configurable Log Drain. This endpoint must be called with a team AccessToken (integration OAuth2 clients are not allowed). Only log drains owned by the authenticated team can be accessed.\",\n        \"operationId\": \"getConfigurableLogDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieves a Configurable Log Drain (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\",\n                  \"properties\": {\n                    \"createdFrom\": {\n                      \"type\": \"string\"\n                    },\n                    \"clientId\": {\n                      \"type\": \"string\"\n                    },\n                    \"configurationId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectsMetadata\": {\n                      \"nullable\": true,\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"framework\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"blitzjs\",\n                              \"nextjs\",\n                              \"gatsby\",\n                              \"remix\",\n                              \"react-router\",\n                              \"astro\",\n                              \"hexo\",\n                              \"eleventy\",\n                              \"docusaurus-2\",\n                              \"docusaurus\",\n                              \"preact\",\n                              \"solidstart-1\",\n                              \"solidstart\",\n                              \"dojo\",\n                              \"ember\",\n                              \"vue\",\n                              \"scully\",\n                              \"ionic-angular\",\n                              \"angular\",\n                              \"polymer\",\n                              \"svelte\",\n                              \"sveltekit\",\n                              \"sveltekit-1\",\n                              \"ionic-react\",\n                              \"create-react-app\",\n                              \"gridsome\",\n                              \"umijs\",\n                              \"sapper\",\n                              \"saber\",\n                              \"stencil\",\n                              \"nuxtjs\",\n                              \"redwoodjs\",\n                              \"hugo\",\n                              \"jekyll\",\n                              \"brunch\",\n                              \"middleman\",\n                              \"zola\",\n                              \"hydrogen\",\n                              \"vite\",\n                              \"tanstack-start\",\n                              \"vitepress\",\n                              \"vuepress\",\n                              \"parcel\",\n                              \"fastapi\",\n                              \"flask\",\n                              \"fasthtml\",\n                              \"django\",\n                              \"sanity-v3\",\n                              \"sanity\",\n                              \"storybook\",\n                              \"nitro\",\n                              \"hono\",\n                              \"express\",\n                              \"h3\",\n                              \"koa\",\n                              \"nestjs\",\n                              \"elysia\",\n                              \"fastify\",\n                              \"xmcp\",\n                              \"python\",\n                              \"ruby\",\n                              \"rust\",\n                              \"node\",\n                              \"go\",\n                              \"services\"\n                            ]\n                          },\n                          \"latestDeployment\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"name\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"integrationIcon\": {\n                      \"type\": \"string\"\n                    },\n                    \"integrationConfigurationUri\": {\n                      \"type\": \"string\"\n                    },\n                    \"integrationWebsite\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdFrom\"\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Deletes a Configurable Log Drain. This endpoint must be called with a team AccessToken (integration OAuth2 clients are not allowed). Only log drains owned by the authenticated team can be deleted.\",\n        \"operationId\": \"deleteConfigurableLogDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Deletes a Configurable Log Drain (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/log-drains\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of all the Log Drains owned by the account. This endpoint must be called with an account AccessToken (integration OAuth2 clients are not allowed). Only log drains owned by the authenticated account can be accessed.\",\n        \"operationId\": \"getAllLogDrains\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieves a list of all the Log Drains (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"items\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"createdFrom\": {\n                            \"type\": \"string\"\n                          },\n                          \"clientId\": {\n                            \"type\": \"string\"\n                          },\n                          \"configurationId\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectsMetadata\": {\n                            \"nullable\": true,\n                            \"items\": {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"framework\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blitzjs\",\n                                    \"nextjs\",\n                                    \"gatsby\",\n                                    \"remix\",\n                                    \"react-router\",\n                                    \"astro\",\n                                    \"hexo\",\n                                    \"eleventy\",\n                                    \"docusaurus-2\",\n                                    \"docusaurus\",\n                                    \"preact\",\n                                    \"solidstart-1\",\n                                    \"solidstart\",\n                                    \"dojo\",\n                                    \"ember\",\n                                    \"vue\",\n                                    \"scully\",\n                                    \"ionic-angular\",\n                                    \"angular\",\n                                    \"polymer\",\n                                    \"svelte\",\n                                    \"sveltekit\",\n                                    \"sveltekit-1\",\n                                    \"ionic-react\",\n                                    \"create-react-app\",\n                                    \"gridsome\",\n                                    \"umijs\",\n                                    \"sapper\",\n                                    \"saber\",\n                                    \"stencil\",\n                                    \"nuxtjs\",\n                                    \"redwoodjs\",\n                                    \"hugo\",\n                                    \"jekyll\",\n                                    \"brunch\",\n                                    \"middleman\",\n                                    \"zola\",\n                                    \"hydrogen\",\n                                    \"vite\",\n                                    \"tanstack-start\",\n                                    \"vitepress\",\n                                    \"vuepress\",\n                                    \"parcel\",\n                                    \"fastapi\",\n                                    \"flask\",\n                                    \"fasthtml\",\n                                    \"django\",\n                                    \"sanity-v3\",\n                                    \"sanity\",\n                                    \"storybook\",\n                                    \"nitro\",\n                                    \"hono\",\n                                    \"express\",\n                                    \"h3\",\n                                    \"koa\",\n                                    \"nestjs\",\n                                    \"elysia\",\n                                    \"fastify\",\n                                    \"xmcp\",\n                                    \"python\",\n                                    \"ruby\",\n                                    \"rust\",\n                                    \"node\",\n                                    \"go\",\n                                    \"services\"\n                                  ]\n                                },\n                                \"latestDeployment\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"id\",\n                                \"name\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"integrationIcon\": {\n                            \"type\": \"string\"\n                          },\n                          \"integrationConfigurationUri\": {\n                            \"type\": \"string\"\n                          },\n                          \"integrationWebsite\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdFrom\"\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    {\n                      \"properties\": {\n                        \"drains\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"projectIds\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"teamId\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"ownerId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"enabled\",\n                                      \"disabled\",\n                                      \"errored\"\n                                    ]\n                                  },\n                                  \"firstErrorTimestamp\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledBy\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"disabledReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled-by-owner\",\n                                      \"feature-not-available\",\n                                      \"account-plan-downgrade\",\n                                      \"disabled-by-admin\"\n                                    ]\n                                  },\n                                  \"schemas\": {\n                                    \"properties\": {\n                                      \"log\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"trace\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"analytics\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"speed_insights\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"ai_gateway\": {\n                                        \"type\": \"object\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"delivery\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"http\"\n                                            ]\n                                          },\n                                          \"endpoint\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"encoding\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"json\",\n                                              \"ndjson\"\n                                            ]\n                                          },\n                                          \"compression\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"none\",\n                                              \"gzip\"\n                                            ]\n                                          },\n                                          \"headers\": {\n                                            \"additionalProperties\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"object\"\n                                          },\n                                          \"secret\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"kind\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"INTEGRATION_SECRET\"\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"kind\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"encoding\",\n                                          \"endpoint\",\n                                          \"headers\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"otlphttp\"\n                                            ]\n                                          },\n                                          \"endpoint\": {\n                                            \"properties\": {\n                                              \"traces\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"traces\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"encoding\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"json\",\n                                              \"proto\"\n                                            ]\n                                          },\n                                          \"headers\": {\n                                            \"additionalProperties\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"object\"\n                                          },\n                                          \"secret\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"kind\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"INTEGRATION_SECRET\"\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"kind\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"encoding\",\n                                          \"endpoint\",\n                                          \"headers\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"clickhouse\"\n                                            ]\n                                          },\n                                          \"endpoint\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"table\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"endpoint\",\n                                          \"table\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"internal\"\n                                            ]\n                                          },\n                                          \"target\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"vercel-otel-traces-db\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"target\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"sampling\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"head_sampling\"\n                                          ]\n                                        },\n                                        \"rate\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"env\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\"\n                                          ]\n                                        },\n                                        \"requestPath\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"rate\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"source\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"kind\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"self-served\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"kind\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"kind\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"integration\"\n                                            ]\n                                          },\n                                          \"resourceId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"externalResourceId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"integrationId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"integrationConfigurationId\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"integrationConfigurationId\",\n                                          \"integrationId\",\n                                          \"kind\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"filter\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"filterV2\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"version\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"v1\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"version\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"version\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"v2\"\n                                            ]\n                                          },\n                                          \"filter\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"basic\"\n                                                    ]\n                                                  },\n                                                  \"project\": {\n                                                    \"properties\": {\n                                                      \"ids\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"type\": \"array\"\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  },\n                                                  \"log\": {\n                                                    \"properties\": {\n                                                      \"sources\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"build\",\n                                                            \"edge\",\n                                                            \"lambda\",\n                                                            \"static\",\n                                                            \"external\",\n                                                            \"firewall\",\n                                                            \"redirect\"\n                                                          ]\n                                                        },\n                                                        \"type\": \"array\"\n                                                      },\n                                                      \"legacy_excludeCachedStaticAssetLogs\": {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  },\n                                                  \"deployment\": {\n                                                    \"properties\": {\n                                                      \"environments\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"production\",\n                                                            \"preview\"\n                                                          ]\n                                                        },\n                                                        \"type\": \"array\"\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"odata\"\n                                                    ]\n                                                  },\n                                                  \"text\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"text\",\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"filter\",\n                                          \"version\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"createdAt\",\n                                  \"delivery\",\n                                  \"id\",\n                                  \"name\",\n                                  \"ownerId\",\n                                  \"schemas\",\n                                  \"source\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"items\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"projectIds\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"teamId\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"ownerId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"enabled\",\n                                      \"disabled\",\n                                      \"errored\"\n                                    ]\n                                  },\n                                  \"firstErrorTimestamp\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledBy\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"disabledReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled-by-owner\",\n                                      \"feature-not-available\",\n                                      \"account-plan-downgrade\",\n                                      \"disabled-by-admin\"\n                                    ]\n                                  },\n                                  \"schemas\": {\n                                    \"properties\": {\n                                      \"log\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"trace\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"analytics\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"speed_insights\": {\n                                        \"type\": \"object\"\n                                      },\n                                      \"ai_gateway\": {\n                                        \"type\": \"object\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"delivery\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"http\"\n                                            ]\n                                          },\n                                          \"endpoint\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"encoding\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"json\",\n                                              \"ndjson\"\n                                            ]\n                                          },\n                                          \"compression\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"none\",\n                                              \"gzip\"\n                                            ]\n                                          },\n                                          \"headers\": {\n                                            \"additionalProperties\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"object\"\n                                          },\n                                          \"secret\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"kind\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"INTEGRATION_SECRET\"\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"kind\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"encoding\",\n                                          \"endpoint\",\n                                          \"headers\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"otlphttp\"\n                                            ]\n                                          },\n                                          \"endpoint\": {\n                                            \"properties\": {\n                                              \"traces\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"traces\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"encoding\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"json\",\n                                              \"proto\"\n                                            ]\n                                          },\n                                          \"headers\": {\n                                            \"additionalProperties\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"object\"\n                                          },\n                                          \"secret\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"kind\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"INTEGRATION_SECRET\"\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"kind\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"encoding\",\n                                          \"endpoint\",\n                                          \"headers\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"clickhouse\"\n                                            ]\n                                          },\n                                          \"endpoint\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"table\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"endpoint\",\n                                          \"table\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"internal\"\n                                            ]\n                                          },\n                                          \"target\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"vercel-otel-traces-db\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"target\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"sampling\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"head_sampling\"\n                                          ]\n                                        },\n                                        \"rate\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"env\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\"\n                                          ]\n                                        },\n                                        \"requestPath\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"rate\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"source\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"kind\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"self-served\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"kind\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"kind\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"integration\"\n                                            ]\n                                          },\n                                          \"resourceId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"externalResourceId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"integrationId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"integrationConfigurationId\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"integrationConfigurationId\",\n                                          \"integrationId\",\n                                          \"kind\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"filter\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"filterV2\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"version\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"v1\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"version\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"version\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"v2\"\n                                            ]\n                                          },\n                                          \"filter\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"basic\"\n                                                    ]\n                                                  },\n                                                  \"project\": {\n                                                    \"properties\": {\n                                                      \"ids\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"type\": \"array\"\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  },\n                                                  \"log\": {\n                                                    \"properties\": {\n                                                      \"sources\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"build\",\n                                                            \"edge\",\n                                                            \"lambda\",\n                                                            \"static\",\n                                                            \"external\",\n                                                            \"firewall\",\n                                                            \"redirect\"\n                                                          ]\n                                                        },\n                                                        \"type\": \"array\"\n                                                      },\n                                                      \"legacy_excludeCachedStaticAssetLogs\": {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  },\n                                                  \"deployment\": {\n                                                    \"properties\": {\n                                                      \"environments\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"production\",\n                                                            \"preview\"\n                                                          ]\n                                                        },\n                                                        \"type\": \"array\"\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"odata\"\n                                                    ]\n                                                  },\n                                                  \"text\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"text\",\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"filter\",\n                                          \"version\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"integrationIcon\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationUri\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationWebsite\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectAccess\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"access\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"all\"\n                                            ]\n                                          },\n                                          \"managedBy\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"integration\",\n                                              \"drain\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"access\",\n                                          \"managedBy\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"access\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"some\"\n                                            ]\n                                          },\n                                          \"projectIds\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"managedBy\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"integration\",\n                                              \"drain\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"access\",\n                                          \"managedBy\",\n                                          \"projectIds\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"createdAt\",\n                                  \"delivery\",\n                                  \"id\",\n                                  \"name\",\n                                  \"ownerId\",\n                                  \"schemas\",\n                                  \"source\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"drains\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"pattern\": \"^[a-zA-z0-9_]+$\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"includeMetadata\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates a configurable log drain. This endpoint must be called with a team AccessToken (integration OAuth2 clients are not allowed)\",\n        \"operationId\": \"createConfigurableLogDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Creates a Configurable Log Drain (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"deliveryFormat\",\n                  \"url\",\n                  \"sources\"\n                ],\n                \"properties\": {\n                  \"deliveryFormat\": {\n                    \"description\": \"The delivery log format\",\n                    \"example\": \"json\",\n                    \"enum\": [\n                      \"json\",\n                      \"ndjson\"\n                    ]\n                  },\n                  \"url\": {\n                    \"description\": \"The log drain url\",\n                    \"format\": \"uri\",\n                    \"pattern\": \"^(http|https)?://\",\n                    \"type\": \"string\"\n                  },\n                  \"headers\": {\n                    \"description\": \"Headers to be sent together with the request\",\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"projectIds\": {\n                    \"minItems\": 1,\n                    \"maxItems\": 50,\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"pattern\": \"^[a-zA-z0-9_]+$\",\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"sources\": {\n                    \"type\": \"array\",\n                    \"uniqueItems\": true,\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"static\",\n                        \"lambda\",\n                        \"build\",\n                        \"edge\",\n                        \"external\",\n                        \"firewall\"\n                      ]\n                    },\n                    \"minItems\": 1\n                  },\n                  \"environments\": {\n                    \"type\": \"array\",\n                    \"uniqueItems\": true,\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"preview\",\n                        \"production\"\n                      ]\n                    },\n                    \"minItems\": 1\n                  },\n                  \"secret\": {\n                    \"description\": \"Custom secret of log drain\",\n                    \"type\": \"string\"\n                  },\n                  \"samplingRate\": {\n                    \"type\": \"number\",\n                    \"description\": \"The sampling rate for this log drain. It should be a percentage rate between 0 and 100. With max 2 decimal points\",\n                    \"minimum\": 0.01,\n                    \"maximum\": 1,\n                    \"multipleOf\": 0.01\n                  },\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"description\": \"The custom name of this log drain.\"\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/drains\": {\n      \"post\": {\n        \"description\": \"Create a new Drain with the provided configuration.\",\n        \"operationId\": \"createDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a new Drain\",\n        \"tags\": [\n          \"drains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\",\n                            \"errored\"\n                          ]\n                        },\n                        \"firstErrorTimestamp\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"account-plan-downgrade\",\n                            \"disabled-by-admin\"\n                          ]\n                        },\n                        \"schemas\": {\n                          \"properties\": {\n                            \"log\": {\n                              \"type\": \"object\"\n                            },\n                            \"trace\": {\n                              \"type\": \"object\"\n                            },\n                            \"analytics\": {\n                              \"type\": \"object\"\n                            },\n                            \"speed_insights\": {\n                              \"type\": \"object\"\n                            },\n                            \"ai_gateway\": {\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"delivery\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"http\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"ndjson\"\n                                  ]\n                                },\n                                \"compression\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"none\",\n                                    \"gzip\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"otlphttp\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"properties\": {\n                                    \"traces\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"traces\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"proto\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"clickhouse\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"table\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"endpoint\",\n                                \"table\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"internal\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"vercel-otel-traces-db\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"target\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"sampling\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"head_sampling\"\n                                ]\n                              },\n                              \"rate\": {\n                                \"type\": \"number\"\n                              },\n                              \"env\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              },\n                              \"requestPath\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"rate\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"source\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"self-served\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\"\n                                  ]\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"filter\": {\n                          \"type\": \"string\"\n                        },\n                        \"filterV2\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v1\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v2\"\n                                  ]\n                                },\n                                \"filter\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"basic\"\n                                          ]\n                                        },\n                                        \"project\": {\n                                          \"properties\": {\n                                            \"ids\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"log\": {\n                                          \"properties\": {\n                                            \"sources\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"build\",\n                                                  \"edge\",\n                                                  \"lambda\",\n                                                  \"static\",\n                                                  \"external\",\n                                                  \"firewall\",\n                                                  \"redirect\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"legacy_excludeCachedStaticAssetLogs\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"deployment\": {\n                                          \"properties\": {\n                                            \"environments\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"production\",\n                                                  \"preview\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"odata\"\n                                          ]\n                                        },\n                                        \"text\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"text\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"filter\",\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"delivery\",\n                        \"id\",\n                        \"name\",\n                        \"ownerId\",\n                        \"schemas\",\n                        \"source\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\",\n                            \"errored\"\n                          ]\n                        },\n                        \"firstErrorTimestamp\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"account-plan-downgrade\",\n                            \"disabled-by-admin\"\n                          ]\n                        },\n                        \"schemas\": {\n                          \"properties\": {\n                            \"log\": {\n                              \"type\": \"object\"\n                            },\n                            \"trace\": {\n                              \"type\": \"object\"\n                            },\n                            \"analytics\": {\n                              \"type\": \"object\"\n                            },\n                            \"speed_insights\": {\n                              \"type\": \"object\"\n                            },\n                            \"ai_gateway\": {\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"delivery\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"http\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"ndjson\"\n                                  ]\n                                },\n                                \"compression\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"none\",\n                                    \"gzip\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"otlphttp\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"properties\": {\n                                    \"traces\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"traces\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"proto\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"clickhouse\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"table\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"endpoint\",\n                                \"table\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"internal\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"vercel-otel-traces-db\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"target\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"sampling\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"head_sampling\"\n                                ]\n                              },\n                              \"rate\": {\n                                \"type\": \"number\"\n                              },\n                              \"env\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              },\n                              \"requestPath\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"rate\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"source\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"self-served\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\"\n                                  ]\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"filter\": {\n                          \"type\": \"string\"\n                        },\n                        \"filterV2\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v1\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v2\"\n                                  ]\n                                },\n                                \"filter\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"basic\"\n                                          ]\n                                        },\n                                        \"project\": {\n                                          \"properties\": {\n                                            \"ids\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"log\": {\n                                          \"properties\": {\n                                            \"sources\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"build\",\n                                                  \"edge\",\n                                                  \"lambda\",\n                                                  \"static\",\n                                                  \"external\",\n                                                  \"firewall\",\n                                                  \"redirect\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"legacy_excludeCachedStaticAssetLogs\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"deployment\": {\n                                          \"properties\": {\n                                            \"environments\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"production\",\n                                                  \"preview\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"odata\"\n                                          ]\n                                        },\n                                        \"text\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"text\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"filter\",\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"integrationIcon\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationConfigurationUri\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationWebsite\": {\n                          \"type\": \"string\"\n                        },\n                        \"projectAccess\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"access\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"all\"\n                                  ]\n                                },\n                                \"managedBy\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\",\n                                    \"drain\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"access\",\n                                \"managedBy\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"access\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"some\"\n                                  ]\n                                },\n                                \"projectIds\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"managedBy\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\",\n                                    \"drain\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"access\",\n                                \"managedBy\",\n                                \"projectIds\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"delivery\",\n                        \"id\",\n                        \"name\",\n                        \"ownerId\",\n                        \"schemas\",\n                        \"source\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"name\",\n                  \"projects\",\n                  \"schemas\"\n                ],\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"projects\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"some\",\n                      \"all\"\n                    ]\n                  },\n                  \"projectIds\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"filter\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"version\",\n                          \"filter\"\n                        ],\n                        \"properties\": {\n                          \"version\": {\n                            \"type\": \"string\"\n                          },\n                          \"filter\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"type\"\n                                ],\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"project\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"ids\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        }\n                                      }\n                                    }\n                                  },\n                                  \"log\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"sources\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"build\",\n                                            \"edge\",\n                                            \"lambda\",\n                                            \"static\",\n                                            \"external\",\n                                            \"firewall\",\n                                            \"redirect\"\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  },\n                                  \"deployment\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"environments\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\"\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  }\n                                }\n                              },\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"type\",\n                                  \"text\"\n                                ],\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"text\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            ]\n                          }\n                        }\n                      }\n                    ]\n                  },\n                  \"schemas\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"version\"\n                      ],\n                      \"properties\": {\n                        \"version\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    }\n                  },\n                  \"delivery\": {\n                    \"type\": \"object\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"type\",\n                          \"endpoint\",\n                          \"encoding\",\n                          \"headers\"\n                        ],\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"endpoint\": {\n                            \"type\": \"string\"\n                          },\n                          \"compression\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gzip\",\n                              \"none\"\n                            ]\n                          },\n                          \"encoding\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"json\",\n                              \"ndjson\"\n                            ]\n                          },\n                          \"headers\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"secret\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"type\",\n                          \"endpoint\",\n                          \"encoding\",\n                          \"headers\"\n                        ],\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"endpoint\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"traces\"\n                                ],\n                                \"properties\": {\n                                  \"traces\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"encoding\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"proto\",\n                              \"json\"\n                            ]\n                          },\n                          \"headers\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"secret\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      }\n                    ]\n                  },\n                  \"sampling\": {\n                    \"type\": \"array\",\n                    \"maxItems\": 10,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"type\",\n                        \"rate\"\n                      ],\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\"\n                        },\n                        \"rate\": {\n                          \"type\": \"number\",\n                          \"minimum\": 0,\n                          \"maximum\": 1,\n                          \"description\": \"Sampling rate from 0 to 1 (e.g., 0.1 for 10%)\"\n                        },\n                        \"env\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\"\n                          ],\n                          \"description\": \"Environment to apply sampling to\"\n                        },\n                        \"requestPath\": {\n                          \"type\": \"string\",\n                          \"description\": \"Request path prefix to apply the sampling rule to\"\n                        }\n                      }\n                    }\n                  },\n                  \"transforms\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    }\n                  },\n                  \"source\": {\n                    \"type\": \"object\",\n                    \"oneOf\": [\n                      {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"default\": \"integration\"\n                              },\n                              \"externalResourceId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"externalResourceId\"\n                            ]\n                          },\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"default\": \"integration\"\n                              },\n                              \"resourceId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"resourceId\"\n                            ]\n                          },\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"default\": \"integration\"\n                              }\n                            },\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"kind\"\n                            ]\n                          }\n                        ]\n                      },\n                      {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\",\n                            \"default\": \"self-served\"\n                          }\n                        },\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"kind\"\n                        ]\n                      }\n                    ]\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"get\": {\n        \"description\": \"Allows to retrieve the list of Drains of the authenticated team.\",\n        \"operationId\": \"getDrains\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve a list of all Drains\",\n        \"tags\": [\n          \"drains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"drains\": {\n                      \"oneOf\": [\n                        {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"projectIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"teamId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"ownerId\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"enabled\",\n                                  \"disabled\",\n                                  \"errored\"\n                                ]\n                              },\n                              \"firstErrorTimestamp\": {\n                                \"type\": \"number\"\n                              },\n                              \"disabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"disabledBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"disabledReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"disabled-by-owner\",\n                                  \"feature-not-available\",\n                                  \"account-plan-downgrade\",\n                                  \"disabled-by-admin\"\n                                ]\n                              },\n                              \"schemas\": {\n                                \"properties\": {\n                                  \"log\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"trace\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"analytics\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"speed_insights\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"ai_gateway\": {\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"delivery\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"http\"\n                                        ]\n                                      },\n                                      \"endpoint\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"encoding\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"json\",\n                                          \"ndjson\"\n                                        ]\n                                      },\n                                      \"compression\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"none\",\n                                          \"gzip\"\n                                        ]\n                                      },\n                                      \"headers\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"secret\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"kind\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"INTEGRATION_SECRET\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"kind\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"encoding\",\n                                      \"endpoint\",\n                                      \"headers\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"otlphttp\"\n                                        ]\n                                      },\n                                      \"endpoint\": {\n                                        \"properties\": {\n                                          \"traces\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"traces\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"encoding\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"json\",\n                                          \"proto\"\n                                        ]\n                                      },\n                                      \"headers\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"secret\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"kind\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"INTEGRATION_SECRET\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"kind\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"encoding\",\n                                      \"endpoint\",\n                                      \"headers\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"clickhouse\"\n                                        ]\n                                      },\n                                      \"endpoint\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"table\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"endpoint\",\n                                      \"table\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"internal\"\n                                        ]\n                                      },\n                                      \"target\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"vercel-otel-traces-db\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"target\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"sampling\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"head_sampling\"\n                                      ]\n                                    },\n                                    \"rate\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"env\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\"\n                                      ]\n                                    },\n                                    \"requestPath\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"rate\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"source\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"kind\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"self-served\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"kind\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"kind\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration\"\n                                        ]\n                                      },\n                                      \"resourceId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"externalResourceId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationConfigurationId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"integrationConfigurationId\",\n                                      \"integrationId\",\n                                      \"kind\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"filter\": {\n                                \"type\": \"string\"\n                              },\n                              \"filterV2\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"version\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"v1\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"version\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"version\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"v2\"\n                                        ]\n                                      },\n                                      \"filter\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"basic\"\n                                                ]\n                                              },\n                                              \"project\": {\n                                                \"properties\": {\n                                                  \"ids\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              },\n                                              \"log\": {\n                                                \"properties\": {\n                                                  \"sources\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"build\",\n                                                        \"edge\",\n                                                        \"lambda\",\n                                                        \"static\",\n                                                        \"external\",\n                                                        \"firewall\",\n                                                        \"redirect\"\n                                                      ]\n                                                    },\n                                                    \"type\": \"array\"\n                                                  },\n                                                  \"legacy_excludeCachedStaticAssetLogs\": {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              },\n                                              \"deployment\": {\n                                                \"properties\": {\n                                                  \"environments\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"production\",\n                                                        \"preview\"\n                                                      ]\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"odata\"\n                                                ]\n                                              },\n                                              \"text\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"text\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"filter\",\n                                      \"version\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"delivery\",\n                              \"id\",\n                              \"name\",\n                              \"ownerId\",\n                              \"schemas\",\n                              \"source\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"projectIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"teamId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"ownerId\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"enabled\",\n                                  \"disabled\",\n                                  \"errored\"\n                                ]\n                              },\n                              \"firstErrorTimestamp\": {\n                                \"type\": \"number\"\n                              },\n                              \"disabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"disabledBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"disabledReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"disabled-by-owner\",\n                                  \"feature-not-available\",\n                                  \"account-plan-downgrade\",\n                                  \"disabled-by-admin\"\n                                ]\n                              },\n                              \"schemas\": {\n                                \"properties\": {\n                                  \"log\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"trace\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"analytics\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"speed_insights\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"ai_gateway\": {\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"delivery\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"http\"\n                                        ]\n                                      },\n                                      \"endpoint\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"encoding\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"json\",\n                                          \"ndjson\"\n                                        ]\n                                      },\n                                      \"compression\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"none\",\n                                          \"gzip\"\n                                        ]\n                                      },\n                                      \"headers\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"secret\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"kind\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"INTEGRATION_SECRET\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"kind\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"encoding\",\n                                      \"endpoint\",\n                                      \"headers\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"otlphttp\"\n                                        ]\n                                      },\n                                      \"endpoint\": {\n                                        \"properties\": {\n                                          \"traces\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"traces\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"encoding\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"json\",\n                                          \"proto\"\n                                        ]\n                                      },\n                                      \"headers\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"secret\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"kind\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"INTEGRATION_SECRET\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"kind\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"encoding\",\n                                      \"endpoint\",\n                                      \"headers\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"clickhouse\"\n                                        ]\n                                      },\n                                      \"endpoint\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"table\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"endpoint\",\n                                      \"table\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"internal\"\n                                        ]\n                                      },\n                                      \"target\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"vercel-otel-traces-db\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"target\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"sampling\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"head_sampling\"\n                                      ]\n                                    },\n                                    \"rate\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"env\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\"\n                                      ]\n                                    },\n                                    \"requestPath\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"rate\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"source\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"kind\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"self-served\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"kind\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"kind\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration\"\n                                        ]\n                                      },\n                                      \"resourceId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"externalResourceId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationConfigurationId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"integrationConfigurationId\",\n                                      \"integrationId\",\n                                      \"kind\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"filter\": {\n                                \"type\": \"string\"\n                              },\n                              \"filterV2\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"version\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"v1\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"version\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"version\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"v2\"\n                                        ]\n                                      },\n                                      \"filter\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"basic\"\n                                                ]\n                                              },\n                                              \"project\": {\n                                                \"properties\": {\n                                                  \"ids\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              },\n                                              \"log\": {\n                                                \"properties\": {\n                                                  \"sources\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"build\",\n                                                        \"edge\",\n                                                        \"lambda\",\n                                                        \"static\",\n                                                        \"external\",\n                                                        \"firewall\",\n                                                        \"redirect\"\n                                                      ]\n                                                    },\n                                                    \"type\": \"array\"\n                                                  },\n                                                  \"legacy_excludeCachedStaticAssetLogs\": {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              },\n                                              \"deployment\": {\n                                                \"properties\": {\n                                                  \"environments\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"production\",\n                                                        \"preview\"\n                                                      ]\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"odata\"\n                                                ]\n                                              },\n                                              \"text\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"text\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"filter\",\n                                      \"version\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"integrationIcon\": {\n                                \"type\": \"string\"\n                              },\n                              \"integrationConfigurationUri\": {\n                                \"type\": \"string\"\n                              },\n                              \"integrationWebsite\": {\n                                \"type\": \"string\"\n                              },\n                              \"projectAccess\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"access\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"all\"\n                                        ]\n                                      },\n                                      \"managedBy\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration\",\n                                          \"drain\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"access\",\n                                      \"managedBy\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"access\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"some\"\n                                        ]\n                                      },\n                                      \"projectIds\": {\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"managedBy\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration\",\n                                          \"drain\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"access\",\n                                      \"managedBy\",\n                                      \"projectIds\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"delivery\",\n                              \"id\",\n                              \"name\",\n                              \"ownerId\",\n                              \"schemas\",\n                              \"source\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"drains\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"includeMetadata\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/drains/{id}\": {\n      \"delete\": {\n        \"description\": \"Delete a specific Drain by passing the drain id in the URL.\",\n        \"operationId\": \"deleteDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a drain\",\n        \"tags\": [\n          \"drains\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"get\": {\n        \"description\": \"Get the information for a specific Drain by passing the drain id in the URL.\",\n        \"operationId\": \"getDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Find a Drain by id\",\n        \"tags\": [\n          \"drains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\",\n                            \"errored\"\n                          ]\n                        },\n                        \"firstErrorTimestamp\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"account-plan-downgrade\",\n                            \"disabled-by-admin\"\n                          ]\n                        },\n                        \"schemas\": {\n                          \"properties\": {\n                            \"log\": {\n                              \"type\": \"object\"\n                            },\n                            \"trace\": {\n                              \"type\": \"object\"\n                            },\n                            \"analytics\": {\n                              \"type\": \"object\"\n                            },\n                            \"speed_insights\": {\n                              \"type\": \"object\"\n                            },\n                            \"ai_gateway\": {\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"delivery\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"http\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"ndjson\"\n                                  ]\n                                },\n                                \"compression\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"none\",\n                                    \"gzip\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"otlphttp\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"properties\": {\n                                    \"traces\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"traces\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"proto\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"clickhouse\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"table\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"endpoint\",\n                                \"table\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"internal\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"vercel-otel-traces-db\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"target\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"sampling\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"head_sampling\"\n                                ]\n                              },\n                              \"rate\": {\n                                \"type\": \"number\"\n                              },\n                              \"env\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              },\n                              \"requestPath\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"rate\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"source\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"self-served\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\"\n                                  ]\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"filter\": {\n                          \"type\": \"string\"\n                        },\n                        \"filterV2\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v1\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v2\"\n                                  ]\n                                },\n                                \"filter\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"basic\"\n                                          ]\n                                        },\n                                        \"project\": {\n                                          \"properties\": {\n                                            \"ids\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"log\": {\n                                          \"properties\": {\n                                            \"sources\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"build\",\n                                                  \"edge\",\n                                                  \"lambda\",\n                                                  \"static\",\n                                                  \"external\",\n                                                  \"firewall\",\n                                                  \"redirect\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"legacy_excludeCachedStaticAssetLogs\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"deployment\": {\n                                          \"properties\": {\n                                            \"environments\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"production\",\n                                                  \"preview\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"odata\"\n                                          ]\n                                        },\n                                        \"text\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"text\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"filter\",\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"delivery\",\n                        \"id\",\n                        \"name\",\n                        \"ownerId\",\n                        \"schemas\",\n                        \"source\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\",\n                            \"errored\"\n                          ]\n                        },\n                        \"firstErrorTimestamp\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"account-plan-downgrade\",\n                            \"disabled-by-admin\"\n                          ]\n                        },\n                        \"schemas\": {\n                          \"properties\": {\n                            \"log\": {\n                              \"type\": \"object\"\n                            },\n                            \"trace\": {\n                              \"type\": \"object\"\n                            },\n                            \"analytics\": {\n                              \"type\": \"object\"\n                            },\n                            \"speed_insights\": {\n                              \"type\": \"object\"\n                            },\n                            \"ai_gateway\": {\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"delivery\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"http\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"ndjson\"\n                                  ]\n                                },\n                                \"compression\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"none\",\n                                    \"gzip\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"otlphttp\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"properties\": {\n                                    \"traces\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"traces\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"proto\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"clickhouse\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"table\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"endpoint\",\n                                \"table\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"internal\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"vercel-otel-traces-db\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"target\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"sampling\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"head_sampling\"\n                                ]\n                              },\n                              \"rate\": {\n                                \"type\": \"number\"\n                              },\n                              \"env\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              },\n                              \"requestPath\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"rate\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"source\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"self-served\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\"\n                                  ]\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"filter\": {\n                          \"type\": \"string\"\n                        },\n                        \"filterV2\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v1\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v2\"\n                                  ]\n                                },\n                                \"filter\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"basic\"\n                                          ]\n                                        },\n                                        \"project\": {\n                                          \"properties\": {\n                                            \"ids\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"log\": {\n                                          \"properties\": {\n                                            \"sources\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"build\",\n                                                  \"edge\",\n                                                  \"lambda\",\n                                                  \"static\",\n                                                  \"external\",\n                                                  \"firewall\",\n                                                  \"redirect\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"legacy_excludeCachedStaticAssetLogs\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"deployment\": {\n                                          \"properties\": {\n                                            \"environments\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"production\",\n                                                  \"preview\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"odata\"\n                                          ]\n                                        },\n                                        \"text\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"text\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"filter\",\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"integrationIcon\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationConfigurationUri\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationWebsite\": {\n                          \"type\": \"string\"\n                        },\n                        \"projectAccess\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"access\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"all\"\n                                  ]\n                                },\n                                \"managedBy\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\",\n                                    \"drain\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"access\",\n                                \"managedBy\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"access\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"some\"\n                                  ]\n                                },\n                                \"projectIds\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"managedBy\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\",\n                                    \"drain\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"access\",\n                                \"managedBy\",\n                                \"projectIds\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"delivery\",\n                        \"id\",\n                        \"name\",\n                        \"ownerId\",\n                        \"schemas\",\n                        \"source\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update the configuration of an existing drain.\",\n        \"operationId\": \"updateDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update an existing Drain\",\n        \"tags\": [\n          \"drains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\",\n                            \"errored\"\n                          ]\n                        },\n                        \"firstErrorTimestamp\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"account-plan-downgrade\",\n                            \"disabled-by-admin\"\n                          ]\n                        },\n                        \"schemas\": {\n                          \"properties\": {\n                            \"log\": {\n                              \"type\": \"object\"\n                            },\n                            \"trace\": {\n                              \"type\": \"object\"\n                            },\n                            \"analytics\": {\n                              \"type\": \"object\"\n                            },\n                            \"speed_insights\": {\n                              \"type\": \"object\"\n                            },\n                            \"ai_gateway\": {\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"delivery\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"http\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"ndjson\"\n                                  ]\n                                },\n                                \"compression\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"none\",\n                                    \"gzip\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"otlphttp\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"properties\": {\n                                    \"traces\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"traces\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"proto\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"clickhouse\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"table\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"endpoint\",\n                                \"table\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"internal\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"vercel-otel-traces-db\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"target\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"sampling\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"head_sampling\"\n                                ]\n                              },\n                              \"rate\": {\n                                \"type\": \"number\"\n                              },\n                              \"env\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              },\n                              \"requestPath\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"rate\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"source\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"self-served\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\"\n                                  ]\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"filter\": {\n                          \"type\": \"string\"\n                        },\n                        \"filterV2\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v1\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v2\"\n                                  ]\n                                },\n                                \"filter\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"basic\"\n                                          ]\n                                        },\n                                        \"project\": {\n                                          \"properties\": {\n                                            \"ids\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"log\": {\n                                          \"properties\": {\n                                            \"sources\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"build\",\n                                                  \"edge\",\n                                                  \"lambda\",\n                                                  \"static\",\n                                                  \"external\",\n                                                  \"firewall\",\n                                                  \"redirect\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"legacy_excludeCachedStaticAssetLogs\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"deployment\": {\n                                          \"properties\": {\n                                            \"environments\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"production\",\n                                                  \"preview\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"odata\"\n                                          ]\n                                        },\n                                        \"text\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"text\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"filter\",\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"delivery\",\n                        \"id\",\n                        \"name\",\n                        \"ownerId\",\n                        \"schemas\",\n                        \"source\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\",\n                            \"errored\"\n                          ]\n                        },\n                        \"firstErrorTimestamp\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"account-plan-downgrade\",\n                            \"disabled-by-admin\"\n                          ]\n                        },\n                        \"schemas\": {\n                          \"properties\": {\n                            \"log\": {\n                              \"type\": \"object\"\n                            },\n                            \"trace\": {\n                              \"type\": \"object\"\n                            },\n                            \"analytics\": {\n                              \"type\": \"object\"\n                            },\n                            \"speed_insights\": {\n                              \"type\": \"object\"\n                            },\n                            \"ai_gateway\": {\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"delivery\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"http\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"ndjson\"\n                                  ]\n                                },\n                                \"compression\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"none\",\n                                    \"gzip\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"otlphttp\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"properties\": {\n                                    \"traces\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"traces\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"encoding\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"json\",\n                                    \"proto\"\n                                  ]\n                                },\n                                \"headers\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"secret\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"kind\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"INTEGRATION_SECRET\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"kind\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"encoding\",\n                                \"endpoint\",\n                                \"headers\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"clickhouse\"\n                                  ]\n                                },\n                                \"endpoint\": {\n                                  \"type\": \"string\"\n                                },\n                                \"table\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"endpoint\",\n                                \"table\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"internal\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"vercel-otel-traces-db\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"target\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"sampling\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"head_sampling\"\n                                ]\n                              },\n                              \"rate\": {\n                                \"type\": \"number\"\n                              },\n                              \"env\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              },\n                              \"requestPath\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"rate\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"source\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"self-served\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\"\n                                  ]\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"kind\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"filter\": {\n                          \"type\": \"string\"\n                        },\n                        \"filterV2\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v1\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"version\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"v2\"\n                                  ]\n                                },\n                                \"filter\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"basic\"\n                                          ]\n                                        },\n                                        \"project\": {\n                                          \"properties\": {\n                                            \"ids\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"log\": {\n                                          \"properties\": {\n                                            \"sources\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"build\",\n                                                  \"edge\",\n                                                  \"lambda\",\n                                                  \"static\",\n                                                  \"external\",\n                                                  \"firewall\",\n                                                  \"redirect\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"legacy_excludeCachedStaticAssetLogs\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"deployment\": {\n                                          \"properties\": {\n                                            \"environments\": {\n                                              \"items\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"production\",\n                                                  \"preview\"\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"odata\"\n                                          ]\n                                        },\n                                        \"text\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"text\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"filter\",\n                                \"version\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"integrationIcon\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationConfigurationUri\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationWebsite\": {\n                          \"type\": \"string\"\n                        },\n                        \"projectAccess\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"access\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"all\"\n                                  ]\n                                },\n                                \"managedBy\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\",\n                                    \"drain\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"access\",\n                                \"managedBy\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"access\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"some\"\n                                  ]\n                                },\n                                \"projectIds\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"managedBy\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration\",\n                                    \"drain\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"access\",\n                                \"managedBy\",\n                                \"projectIds\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"delivery\",\n                        \"id\",\n                        \"name\",\n                        \"ownerId\",\n                        \"schemas\",\n                        \"source\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"projects\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"some\",\n                      \"all\"\n                    ]\n                  },\n                  \"projectIds\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"nullable\": true\n                  },\n                  \"filter\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"version\",\n                          \"filter\"\n                        ],\n                        \"properties\": {\n                          \"version\": {\n                            \"type\": \"string\"\n                          },\n                          \"filter\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"type\"\n                                ],\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"project\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"ids\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        }\n                                      }\n                                    }\n                                  },\n                                  \"log\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"sources\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"build\",\n                                            \"edge\",\n                                            \"lambda\",\n                                            \"static\",\n                                            \"external\",\n                                            \"firewall\",\n                                            \"redirect\"\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  },\n                                  \"deployment\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"environments\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\"\n                                          ]\n                                        }\n                                      }\n                                    }\n                                  }\n                                }\n                              },\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"type\",\n                                  \"text\"\n                                ],\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"text\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            ]\n                          }\n                        }\n                      }\n                    ]\n                  },\n                  \"schemas\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"version\"\n                      ],\n                      \"properties\": {\n                        \"version\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    }\n                  },\n                  \"delivery\": {\n                    \"type\": \"object\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"type\",\n                          \"endpoint\",\n                          \"encoding\",\n                          \"headers\"\n                        ],\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"endpoint\": {\n                            \"type\": \"string\"\n                          },\n                          \"compression\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gzip\",\n                              \"none\"\n                            ]\n                          },\n                          \"encoding\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"json\",\n                              \"ndjson\"\n                            ]\n                          },\n                          \"headers\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"secret\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"type\",\n                          \"endpoint\",\n                          \"encoding\",\n                          \"headers\"\n                        ],\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"endpoint\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"traces\"\n                                ],\n                                \"properties\": {\n                                  \"traces\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"encoding\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"proto\",\n                              \"json\"\n                            ]\n                          },\n                          \"headers\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"secret\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      }\n                    ]\n                  },\n                  \"sampling\": {\n                    \"type\": \"array\",\n                    \"maxItems\": 10,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"type\",\n                        \"rate\"\n                      ],\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\"\n                        },\n                        \"rate\": {\n                          \"type\": \"number\",\n                          \"minimum\": 0,\n                          \"maximum\": 1,\n                          \"description\": \"Sampling rate from 0 to 1 (e.g., 0.1 for 10%)\"\n                        },\n                        \"env\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\"\n                          ],\n                          \"description\": \"Environment to apply sampling to\"\n                        },\n                        \"requestPath\": {\n                          \"type\": \"string\",\n                          \"description\": \"Request path prefix to apply the sampling rule to\"\n                        }\n                      }\n                    },\n                    \"nullable\": true\n                  },\n                  \"transforms\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"nullable\": true\n                  },\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enabled\",\n                      \"disabled\"\n                    ]\n                  },\n                  \"source\": {\n                    \"type\": \"object\",\n                    \"oneOf\": [\n                      {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"default\": \"integration\"\n                              },\n                              \"externalResourceId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"externalResourceId\"\n                            ]\n                          },\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"default\": \"integration\"\n                              },\n                              \"resourceId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"resourceId\"\n                            ]\n                          },\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"default\": \"integration\"\n                              }\n                            },\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"kind\"\n                            ]\n                          }\n                        ]\n                      },\n                      {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\",\n                            \"default\": \"self-served\"\n                          }\n                        },\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"kind\"\n                        ]\n                      }\n                    ]\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/drains/test\": {\n      \"post\": {\n        \"description\": \"Validate the delivery configuration of a Drain using sample events.\",\n        \"operationId\": \"testDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Validate Drain delivery configuration\",\n        \"tags\": [\n          \"drains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"status\": {\n                          \"type\": \"string\"\n                        },\n                        \"error\": {\n                          \"type\": \"string\"\n                        },\n                        \"endpoint\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"endpoint\",\n                        \"error\",\n                        \"status\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"schemas\",\n                  \"delivery\"\n                ],\n                \"properties\": {\n                  \"schemas\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"version\"\n                      ],\n                      \"properties\": {\n                        \"version\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    }\n                  },\n                  \"delivery\": {\n                    \"type\": \"object\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"type\",\n                          \"endpoint\",\n                          \"encoding\",\n                          \"headers\"\n                        ],\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"endpoint\": {\n                            \"type\": \"string\"\n                          },\n                          \"compression\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gzip\",\n                              \"none\"\n                            ]\n                          },\n                          \"encoding\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"json\",\n                              \"ndjson\"\n                            ]\n                          },\n                          \"headers\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"secret\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"type\",\n                          \"endpoint\",\n                          \"encoding\",\n                          \"headers\"\n                        ],\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"endpoint\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"required\": [\n                                  \"traces\"\n                                ],\n                                \"properties\": {\n                                  \"traces\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            ]\n                          },\n                          \"encoding\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"proto\",\n                              \"json\"\n                            ]\n                          },\n                          \"headers\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"secret\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      }\n                    ]\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/edge-cache/invalidate-by-tags\": {\n      \"post\": {\n        \"description\": \"Marks a cache tag as stale, causing cache entries associated with that tag to be revalidated in the background on the next request.\",\n        \"operationId\": \"invalidateByTags\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Invalidate by tag\",\n        \"tags\": [\n          \"edge-cache\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"type\": \"object\",\n                \"required\": [\n                  \"tags\"\n                ],\n                \"properties\": {\n                  \"tags\": {\n                    \"oneOf\": [\n                      {\n                        \"items\": {\n                          \"maxLength\": 256,\n                          \"type\": \"string\"\n                        },\n                        \"maxItems\": 16,\n                        \"minItems\": 1,\n                        \"type\": \"array\"\n                      },\n                      {\n                        \"maxLength\": 8196,\n                        \"type\": \"string\"\n                      }\n                    ]\n                  },\n                  \"target\": {\n                    \"enum\": [\n                      \"production\",\n                      \"preview\"\n                    ],\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/edge-cache/dangerously-delete-by-tags\": {\n      \"post\": {\n        \"description\": \"Marks a cache tag as deleted, causing cache entries associated with that tag to be revalidated in the foreground on the next request. Use this method with caution because one tag can be associated with many paths and deleting the cache can cause many concurrent requests to the origin leading to cache stampede problem. This method is for advanced use cases and is not recommended; prefer using `invalidateByTag` instead.\",\n        \"operationId\": \"dangerouslyDeleteByTags\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Dangerously delete by tag\",\n        \"tags\": [\n          \"edge-cache\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"type\": \"object\",\n                \"required\": [\n                  \"tags\"\n                ],\n                \"properties\": {\n                  \"revalidationDeadlineSeconds\": {\n                    \"minimum\": 0,\n                    \"type\": \"number\"\n                  },\n                  \"tags\": {\n                    \"oneOf\": [\n                      {\n                        \"items\": {\n                          \"maxLength\": 256,\n                          \"type\": \"string\"\n                        },\n                        \"maxItems\": 16,\n                        \"minItems\": 1,\n                        \"type\": \"array\"\n                      },\n                      {\n                        \"maxLength\": 8196,\n                        \"type\": \"string\"\n                      }\n                    ]\n                  },\n                  \"target\": {\n                    \"enum\": [\n                      \"production\",\n                      \"preview\"\n                    ],\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/edge-cache/invalidate-by-src-images\": {\n      \"post\": {\n        \"description\": \"Marks a source image as stale, causing its corresponding transformed images to be revalidated in the background on the next request.\",\n        \"operationId\": \"invalidateBySrcImages\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Invalidate by source image\",\n        \"tags\": [\n          \"edge-cache\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"type\": \"object\",\n                \"required\": [\n                  \"srcImages\"\n                ],\n                \"properties\": {\n                  \"srcImages\": {\n                    \"items\": {\n                      \"maxLength\": 8192,\n                      \"type\": \"string\"\n                    },\n                    \"maxItems\": 8,\n                    \"minItems\": 1,\n                    \"type\": \"array\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/edge-cache/dangerously-delete-by-src-images\": {\n      \"post\": {\n        \"description\": \"Marks a source image as deleted, causing cache entries associated with that source image to be revalidated in the foreground on the next request. Use this method with caution because one source image can be associated with many paths and deleting the cache can cause many concurrent requests to the origin leading to cache stampede problem. This method is for advanced use cases and is not recommended; prefer using `invalidateBySrcImage` instead.\",\n        \"operationId\": \"dangerouslyDeleteBySrcImages\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Dangerously delete by source image\",\n        \"tags\": [\n          \"edge-cache\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"type\": \"object\",\n                \"required\": [\n                  \"srcImages\"\n                ],\n                \"properties\": {\n                  \"revalidationDeadlineSeconds\": {\n                    \"minimum\": 0,\n                    \"type\": \"number\"\n                  },\n                  \"srcImages\": {\n                    \"items\": {\n                      \"maxLength\": 8192,\n                      \"type\": \"string\"\n                    },\n                    \"maxItems\": 8,\n                    \"minItems\": 1,\n                    \"type\": \"array\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/edge-config\": {\n      \"get\": {\n        \"description\": \"Returns all Edge Configs.\",\n        \"operationId\": \"getEdgeConfigs\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Edge Configs\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"List of all edge configs.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"array\",\n                  \"description\": \"List of all edge configs.\",\n                  \"items\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"ownerId\": {\n                        \"type\": \"string\"\n                      },\n                      \"slug\": {\n                        \"type\": \"string\",\n                        \"description\": \"Name for the Edge Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores).\"\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"digest\": {\n                        \"type\": \"string\"\n                      },\n                      \"transfer\": {\n                        \"properties\": {\n                          \"fromAccountId\": {\n                            \"type\": \"string\"\n                          },\n                          \"startedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"doneAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"fromAccountId\",\n                          \"startedAt\",\n                          \"doneAt\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Keeps track of the current state of the Edge Config while it gets transferred.\"\n                      },\n                      \"schema\": {\n                        \"type\": \"object\"\n                      },\n                      \"purpose\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"flags\"\n                            ]\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"projectId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"sizeInBytes\": {\n                        \"type\": \"number\"\n                      },\n                      \"itemCount\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"sizeInBytes\",\n                      \"itemCount\"\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates an Edge Config.\",\n        \"operationId\": \"createEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create an Edge Config\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"transfer\": {\n                      \"properties\": {\n                        \"fromAccountId\": {\n                          \"type\": \"string\"\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"doneAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"doneAt\",\n                        \"fromAccountId\",\n                        \"startedAt\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Keeps track of the current state of the Edge Config while it gets transferred.\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdBy\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the user who created the Edge Config, optional because it is not always set.\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"Name for the Edge Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores).\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"digest\": {\n                      \"type\": \"string\"\n                    },\n                    \"purpose\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags\"\n                              ]\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"experimentation\"\n                              ]\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"resourceId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"deletedAt\": {\n                      \"nullable\": true,\n                      \"type\": \"number\"\n                    },\n                    \"schema\": {\n                      \"type\": \"object\"\n                    },\n                    \"syncedToDynamoAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp of when the Edge Config was synced to DynamoDB initially. It is only set when syncing the entire Edge Config, not when updating.\"\n                    },\n                    \"sizeInBytes\": {\n                      \"type\": \"number\"\n                    },\n                    \"itemCount\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"digest\",\n                    \"id\",\n                    \"itemCount\",\n                    \"ownerId\",\n                    \"sizeInBytes\",\n                    \"slug\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"An Edge Config\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"slug\"\n                ],\n                \"properties\": {\n                  \"slug\": {\n                    \"maxLength\": 64,\n                    \"pattern\": \"^[\\\\\\\\w-]+$\",\n                    \"type\": \"string\"\n                  },\n                  \"items\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {}\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}\": {\n      \"get\": {\n        \"description\": \"Returns an Edge Config.\",\n        \"operationId\": \"getEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get an Edge Config\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The EdgeConfig.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"transfer\": {\n                      \"properties\": {\n                        \"fromAccountId\": {\n                          \"type\": \"string\"\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"doneAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"doneAt\",\n                        \"fromAccountId\",\n                        \"startedAt\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Keeps track of the current state of the Edge Config while it gets transferred.\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdBy\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the user who created the Edge Config, optional because it is not always set.\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"Name for the Edge Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores).\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"digest\": {\n                      \"type\": \"string\"\n                    },\n                    \"purpose\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags\"\n                              ]\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"experimentation\"\n                              ]\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"resourceId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"deletedAt\": {\n                      \"nullable\": true,\n                      \"type\": \"number\"\n                    },\n                    \"schema\": {\n                      \"type\": \"object\"\n                    },\n                    \"syncedToDynamoAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp of when the Edge Config was synced to DynamoDB initially. It is only set when syncing the entire Edge Config, not when updating.\"\n                    },\n                    \"sizeInBytes\": {\n                      \"type\": \"number\"\n                    },\n                    \"itemCount\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"digest\",\n                    \"id\",\n                    \"itemCount\",\n                    \"ownerId\",\n                    \"sizeInBytes\",\n                    \"slug\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The EdgeConfig.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"put\": {\n        \"description\": \"Updates an Edge Config.\",\n        \"operationId\": \"updateEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update an Edge Config\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"transfer\": {\n                      \"properties\": {\n                        \"fromAccountId\": {\n                          \"type\": \"string\"\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"doneAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"doneAt\",\n                        \"fromAccountId\",\n                        \"startedAt\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Keeps track of the current state of the Edge Config while it gets transferred.\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdBy\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the user who created the Edge Config, optional because it is not always set.\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"Name for the Edge Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores).\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"digest\": {\n                      \"type\": \"string\"\n                    },\n                    \"purpose\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags\"\n                              ]\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"experimentation\"\n                              ]\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"resourceId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"deletedAt\": {\n                      \"nullable\": true,\n                      \"type\": \"number\"\n                    },\n                    \"schema\": {\n                      \"type\": \"object\"\n                    },\n                    \"syncedToDynamoAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp of when the Edge Config was synced to DynamoDB initially. It is only set when syncing the entire Edge Config, not when updating.\"\n                    },\n                    \"sizeInBytes\": {\n                      \"type\": \"number\"\n                    },\n                    \"itemCount\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"digest\",\n                    \"id\",\n                    \"itemCount\",\n                    \"ownerId\",\n                    \"sizeInBytes\",\n                    \"slug\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"An Edge Config\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"slug\"\n                ],\n                \"properties\": {\n                  \"slug\": {\n                    \"maxLength\": 64,\n                    \"pattern\": \"^[\\\\\\\\w-]+$\",\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"delete\": {\n        \"description\": \"Delete an Edge Config by id.\",\n        \"operationId\": \"deleteEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an Edge Config\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/items\": {\n      \"get\": {\n        \"description\": \"Returns all items of an Edge Config.\",\n        \"operationId\": \"getEdgeConfigItems\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Edge Config items\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"List of all Edge Config items.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"items\": {\n                    \"$ref\": \"#/components/schemas/EdgeConfigItem\"\n                  },\n                  \"type\": \"array\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"pattern\": \"^ecfg_\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update multiple Edge Config Items in batch.\",\n        \"operationId\": \"patchEdgeConfigItems\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Edge Config items in batch\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"status\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"status\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"pattern\": \"^ecfg_\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"items\"\n                ],\n                \"properties\": {\n                  \"items\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"oneOf\": [\n                        {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"operation\": {\n                              \"enum\": [\n                                \"create\",\n                                \"update\",\n                                \"upsert\",\n                                \"delete\"\n                              ]\n                            },\n                            \"key\": {\n                              \"maxLength\": 256,\n                              \"pattern\": \"^[\\\\\\\\w-]+$\",\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"nullable\": true\n                            },\n                            \"description\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\",\n                                  \"maxLength\": 512\n                                },\n                                {}\n                              ],\n                              \"nullable\": true\n                            }\n                          },\n                          \"anyOf\": [\n                            {\n                              \"properties\": {\n                                \"operation\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"create\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"operation\",\n                                \"key\",\n                                \"value\"\n                              ]\n                            },\n                            {\n                              \"properties\": {\n                                \"operation\": {\n                                  \"enum\": [\n                                    \"update\",\n                                    \"upsert\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"operation\",\n                                \"key\",\n                                \"value\"\n                              ]\n                            },\n                            {\n                              \"properties\": {\n                                \"operation\": {\n                                  \"enum\": [\n                                    \"update\",\n                                    \"upsert\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"operation\",\n                                \"key\",\n                                \"description\"\n                              ]\n                            }\n                          ]\n                        }\n                      ]\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/schema\": {\n      \"get\": {\n        \"description\": \"Returns the schema of an Edge Config.\",\n        \"operationId\": \"getEdgeConfigSchema\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Edge Config schema\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The EdgeConfig.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"nullable\": true,\n                  \"type\": \"object\",\n                  \"description\": \"The EdgeConfig.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Update an Edge Config's schema.\",\n        \"operationId\": \"patchEdgeConfigSchema\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Edge Config schema\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"nullable\": true,\n                  \"type\": \"object\",\n                  \"description\": \"The JSON schema uploaded by the user\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"dryRun\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"definition\"\n                ],\n                \"properties\": {\n                  \"definition\": {}\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"delete\": {\n        \"description\": \"Deletes the schema of existing Edge Config.\",\n        \"operationId\": \"deleteEdgeConfigSchema\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an Edge Config's schema\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/item/{edgeConfigItemKey}\": {\n      \"get\": {\n        \"description\": \"Returns a specific Edge Config Item.\",\n        \"operationId\": \"getEdgeConfigItem\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get an Edge Config item\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The EdgeConfig.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/EdgeConfigItem\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"pattern\": \"^ecfg_\"\n            }\n          },\n          {\n            \"name\": \"edgeConfigItemKey\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/tokens\": {\n      \"get\": {\n        \"description\": \"Returns all tokens of an Edge Config.\",\n        \"operationId\": \"getEdgeConfigTokens\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get all tokens of an Edge Config\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The EdgeConfig.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/EdgeConfigToken\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Deletes one or more tokens of an existing Edge Config.\",\n        \"operationId\": \"deleteEdgeConfigTokens\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete one or more Edge Config tokens\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"tokens\"\n                ],\n                \"properties\": {\n                  \"tokens\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/token/{token}\": {\n      \"get\": {\n        \"description\": \"Return meta data about an Edge Config token.\",\n        \"operationId\": \"getEdgeConfigToken\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Edge Config token meta data\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The EdgeConfig.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/EdgeConfigToken\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"token\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/token\": {\n      \"post\": {\n        \"description\": \"Adds a token to an existing Edge Config.\",\n        \"operationId\": \"createEdgeConfigToken\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create an Edge Config token\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"token\": {\n                      \"type\": \"string\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\",\n                    \"token\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"label\"\n                ],\n                \"properties\": {\n                  \"label\": {\n                    \"maxLength\": 52,\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/backups/{edgeConfigBackupVersionId}\": {\n      \"get\": {\n        \"description\": \"Retrieves a specific version of an Edge Config from backup storage.\",\n        \"operationId\": \"getEdgeConfigBackup\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Edge Config backup\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\"\n                        },\n                        \"backup\": {\n                          \"properties\": {\n                            \"items\": {\n                              \"additionalProperties\": {\n                                \"properties\": {\n                                  \"description\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"value\": {\n                                    \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"createdAt\",\n                                  \"updatedAt\",\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\",\n                              \"description\": \"Name for the Edge Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores).\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"digest\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"digest\",\n                            \"items\",\n                            \"slug\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"metadata\": {\n                          \"properties\": {\n                            \"updatedAt\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedBy\": {\n                              \"type\": \"string\"\n                            },\n                            \"itemsCount\": {\n                              \"type\": \"number\"\n                            },\n                            \"itemsBytes\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"user\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            },\n                            \"email\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"email\",\n                            \"id\",\n                            \"username\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"backup\",\n                        \"id\",\n                        \"lastModified\",\n                        \"metadata\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The object the API responds with when requesting an Edge Config backup\"\n                    },\n                    {\n                      \"properties\": {\n                        \"user\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            },\n                            \"email\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"avatar\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"email\",\n                            \"id\",\n                            \"username\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\"\n                        },\n                        \"backup\": {\n                          \"properties\": {\n                            \"items\": {\n                              \"additionalProperties\": {\n                                \"properties\": {\n                                  \"description\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"value\": {\n                                    \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"createdAt\",\n                                  \"updatedAt\",\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\",\n                              \"description\": \"Name for the Edge Config Names are not unique. Must start with an alphabetic character and can contain only alphanumeric characters and underscores).\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"digest\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"digest\",\n                            \"items\",\n                            \"slug\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"metadata\": {\n                          \"properties\": {\n                            \"updatedAt\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedBy\": {\n                              \"type\": \"string\"\n                            },\n                            \"itemsCount\": {\n                              \"type\": \"number\"\n                            },\n                            \"itemsBytes\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"backup\",\n                        \"id\",\n                        \"lastModified\",\n                        \"metadata\",\n                        \"user\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"edgeConfigBackupVersionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v1/edge-config/{edgeConfigId}/backups\": {\n      \"get\": {\n        \"description\": \"Returns backups of an Edge Config.\",\n        \"operationId\": \"getEdgeConfigBackups\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Edge Config backups\",\n        \"tags\": [\n          \"edge-config\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"backups\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"metadata\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"string\"\n                              },\n                              \"updatedBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"itemsCount\": {\n                                \"type\": \"number\"\n                              },\n                              \"itemsBytes\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"lastModified\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"lastModified\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"hasNext\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"next\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"hasNext\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"backups\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"edgeConfigId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"next\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"minimum\": 0,\n              \"maximum\": 50\n            }\n          },\n          {\n            \"name\": \"metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/env\": {\n      \"post\": {\n        \"description\": \"Creates shared environment variable(s) for a team.\",\n        \"operationId\": \"createSharedEnvVariable\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create one or more shared environment variables\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"created\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"created\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"description\": \"The date when the Shared Env Var was created.\",\n                            \"example\": \"2021-02-10T13:11:49.180Z\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\",\n                            \"description\": \"The name of the Shared Env Var.\",\n                            \"example\": \"my-api-key\"\n                          },\n                          \"ownerId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                            \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the Shared Env Var.\",\n                            \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"deletedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                            \"example\": 1609492210000\n                          },\n                          \"deletedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                            \"example\": 1609492210000\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                            \"example\": 1609492210000\n                          },\n                          \"value\": {\n                            \"type\": \"string\",\n                            \"description\": \"The value of the Shared Env Var.\"\n                          },\n                          \"projectId\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                            \"example\": [\n                              \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                              \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"encrypted\",\n                              \"sensitive\",\n                              \"system\",\n                              \"plain\"\n                            ],\n                            \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                            \"example\": \"encrypted\"\n                          },\n                          \"target\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ],\n                              \"example\": \"production\",\n                              \"description\": \"environments this env variable targets\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"environments this env variable targets\",\n                            \"example\": \"production\"\n                          },\n                          \"applyToAllCustomEnvironments\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"whether or not this env varible applies to custom environments\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"whether or not this env variable is decrypted\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\",\n                            \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                          },\n                          \"lastEditedByDisplayName\": {\n                            \"type\": \"string\",\n                            \"description\": \"The last editor full name or username.\"\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"failed\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"error\": {\n                            \"properties\": {\n                              \"code\": {\n                                \"type\": \"string\"\n                              },\n                              \"message\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarId\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarKey\": {\n                                \"type\": \"string\"\n                              },\n                              \"action\": {\n                                \"type\": \"string\"\n                              },\n                              \"link\": {\n                                \"type\": \"string\"\n                              },\n                              \"value\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                ]\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"project\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"code\",\n                              \"message\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"error\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"created\",\n                    \"failed\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"evs\"\n                ],\n                \"anyOf\": [\n                  {\n                    \"required\": [\n                      \"target\"\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"applyToAllCustomEnvironments\"\n                    ]\n                  }\n                ],\n                \"properties\": {\n                  \"evs\": {\n                    \"type\": \"array\",\n                    \"maximum\": 50,\n                    \"minimum\": 1,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"key\",\n                        \"value\"\n                      ],\n                      \"properties\": {\n                        \"key\": {\n                          \"description\": \"The name of the Shared Environment Variable\",\n                          \"type\": \"string\",\n                          \"example\": \"API_URL\"\n                        },\n                        \"value\": {\n                          \"description\": \"The value of the Shared Environment Variable\",\n                          \"type\": \"string\",\n                          \"example\": \"https://api.vercel.com\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\",\n                          \"description\": \"A comment to add context on what this Shared Environment Variable is for\",\n                          \"example\": \"database connection string for production\",\n                          \"maxLength\": 500\n                        }\n                      }\n                    }\n                  },\n                  \"type\": {\n                    \"description\": \"The type of environment variable\",\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"encrypted\",\n                      \"sensitive\"\n                    ],\n                    \"example\": \"encrypted\"\n                  },\n                  \"target\": {\n                    \"description\": \"The target environment of the Shared Environment Variable\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ]\n                    },\n                    \"example\": [\n                      \"production\",\n                      \"preview\"\n                    ]\n                  },\n                  \"projectId\": {\n                    \"description\": \"Associate a Shared Environment Variable to projects.\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"example\": [\n                      \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                      \"prj_2WjyKQmM8ZnGcJsPWMrHRCRV\"\n                    ],\n                    \"deprecated\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"get\": {\n        \"description\": \"Lists all Shared Environment Variables for a team, taking into account optional filters.\",\n        \"operationId\": \"listSharedEnvVariable\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Lists all Shared Environment Variables for a team\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"data\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"created\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"description\": \"The date when the Shared Env Var was created.\",\n                            \"example\": \"2021-02-10T13:11:49.180Z\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\",\n                            \"description\": \"The name of the Shared Env Var.\",\n                            \"example\": \"my-api-key\"\n                          },\n                          \"ownerId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                            \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the Shared Env Var.\",\n                            \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"deletedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                            \"example\": 1609492210000\n                          },\n                          \"deletedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                            \"example\": 1609492210000\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                            \"example\": 1609492210000\n                          },\n                          \"value\": {\n                            \"type\": \"string\",\n                            \"description\": \"The value of the Shared Env Var.\"\n                          },\n                          \"projectId\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                            \"example\": [\n                              \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                              \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"encrypted\",\n                              \"sensitive\",\n                              \"system\",\n                              \"plain\"\n                            ],\n                            \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                            \"example\": \"encrypted\"\n                          },\n                          \"target\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ],\n                              \"example\": \"production\",\n                              \"description\": \"environments this env variable targets\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"environments this env variable targets\",\n                            \"example\": \"production\"\n                          },\n                          \"applyToAllCustomEnvironments\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"whether or not this env varible applies to custom environments\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"whether or not this env variable is decrypted\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\",\n                            \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                          },\n                          \"lastEditedByDisplayName\": {\n                            \"type\": \"string\",\n                            \"description\": \"The last editor full name or username.\"\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"$ref\": \"#/components/schemas/Pagination\"\n                    }\n                  },\n                  \"required\": [\n                    \"data\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"search\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"description\": \"Filter SharedEnvVariables that belong to a project\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter SharedEnvVariables that belong to a project\",\n              \"type\": \"string\",\n              \"example\": \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\"\n            }\n          },\n          {\n            \"name\": \"ids\",\n            \"description\": \"Filter SharedEnvVariables based on comma separated ids\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter SharedEnvVariables based on comma separated ids\",\n              \"type\": \"string\",\n              \"example\": \"env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV\"\n            }\n          },\n          {\n            \"name\": \"exclude_ids\",\n            \"description\": \"Filter SharedEnvVariables based on comma separated ids\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter SharedEnvVariables based on comma separated ids\",\n              \"type\": \"string\",\n              \"example\": \"env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV\"\n            }\n          },\n          {\n            \"name\": \"exclude-ids\",\n            \"description\": \"Filter SharedEnvVariables based on comma separated ids\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter SharedEnvVariables based on comma separated ids\",\n              \"type\": \"string\",\n              \"example\": \"env_2WjyKQmM8ZnGcJsPWMrHRHrE,env_2WjyKQmM8ZnGcJsPWMrHRCRV\"\n            }\n          },\n          {\n            \"name\": \"exclude_projectId\",\n            \"description\": \"Filter SharedEnvVariables that belong to a project\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter SharedEnvVariables that belong to a project\",\n              \"type\": \"string\",\n              \"example\": \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\"\n            }\n          },\n          {\n            \"name\": \"exclude-projectId\",\n            \"description\": \"Filter SharedEnvVariables that belong to a project\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter SharedEnvVariables that belong to a project\",\n              \"type\": \"string\",\n              \"example\": \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Updates a given Shared Environment Variable for a Team.\",\n        \"operationId\": \"updateSharedEnvVariable\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Updates one or more shared environment variables\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"updated\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"created\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"description\": \"The date when the Shared Env Var was created.\",\n                            \"example\": \"2021-02-10T13:11:49.180Z\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\",\n                            \"description\": \"The name of the Shared Env Var.\",\n                            \"example\": \"my-api-key\"\n                          },\n                          \"ownerId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                            \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the Shared Env Var.\",\n                            \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"deletedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                            \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                            \"example\": 1609492210000\n                          },\n                          \"deletedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                            \"example\": 1609492210000\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                            \"example\": 1609492210000\n                          },\n                          \"value\": {\n                            \"type\": \"string\",\n                            \"description\": \"The value of the Shared Env Var.\"\n                          },\n                          \"projectId\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                            \"example\": [\n                              \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                              \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"encrypted\",\n                              \"sensitive\",\n                              \"system\",\n                              \"plain\"\n                            ],\n                            \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                            \"example\": \"encrypted\"\n                          },\n                          \"target\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ],\n                              \"example\": \"production\",\n                              \"description\": \"environments this env variable targets\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"environments this env variable targets\",\n                            \"example\": \"production\"\n                          },\n                          \"applyToAllCustomEnvironments\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"whether or not this env varible applies to custom environments\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"whether or not this env variable is decrypted\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\",\n                            \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                          },\n                          \"lastEditedByDisplayName\": {\n                            \"type\": \"string\",\n                            \"description\": \"The last editor full name or username.\"\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"failed\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"error\": {\n                            \"properties\": {\n                              \"code\": {\n                                \"type\": \"string\"\n                              },\n                              \"message\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarId\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarKey\": {\n                                \"type\": \"string\"\n                              },\n                              \"action\": {\n                                \"type\": \"string\"\n                              },\n                              \"link\": {\n                                \"type\": \"string\"\n                              },\n                              \"value\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                ]\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"project\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"code\",\n                              \"message\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"error\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"failed\",\n                    \"updated\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"type\": \"object\",\n                \"required\": [\n                  \"updates\"\n                ],\n                \"properties\": {\n                  \"updates\": {\n                    \"description\": \"An object where each key is an environment variable ID (not the key name) and the value is the update to apply\",\n                    \"type\": \"object\",\n                    \"example\": {\n                      \"env_2WjyKQmM8ZnGcJsPWMrHRHrE\": {\n                        \"key\": \"API_URL\",\n                        \"value\": \"https://api.vercel.com\",\n                        \"target\": [\n                          \"production\",\n                          \"preview\"\n                        ],\n                        \"projectIdUpdates\": {\n                          \"link\": [\n                            \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\"\n                          ]\n                        }\n                      }\n                    },\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"key\": {\n                          \"description\": \"The name of the Shared Environment Variable\",\n                          \"type\": \"string\",\n                          \"example\": \"API_URL\"\n                        },\n                        \"value\": {\n                          \"description\": \"The value of the Shared Environment Variable\",\n                          \"type\": \"string\",\n                          \"example\": \"https://api.vercel.com\"\n                        },\n                        \"target\": {\n                          \"description\": \"The target environment of the Shared Environment Variable\",\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ]\n                          },\n                          \"example\": [\n                            \"production\",\n                            \"preview\"\n                          ]\n                        },\n                        \"projectId\": {\n                          \"description\": \"Associate a Shared Environment Variable to projects.\",\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"example\": [\n                            \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                            \"prj_2WjyKQmM8ZnGcJsPWMrHRCRV\"\n                          ]\n                        },\n                        \"projectIdUpdates\": {\n                          \"description\": \"Incrementally update project linking without specifying the full list\",\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"properties\": {\n                            \"link\": {\n                              \"description\": \"Project IDs to add to this environment variable\",\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"example\": [\n                                \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\"\n                              ]\n                            },\n                            \"unlink\": {\n                              \"description\": \"Project IDs to remove from this environment variable\",\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"example\": [\n                                \"prj_2WjyKQmM8ZnGcJsPWMrHRCRV\"\n                              ]\n                            }\n                          }\n                        },\n                        \"type\": {\n                          \"description\": \"The new type of the Shared Environment Variable\",\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"encrypted\",\n                            \"sensitive\"\n                          ],\n                          \"example\": \"encrypted\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\",\n                          \"description\": \"A comment to add context on what this Shared Environment Variable is for\",\n                          \"example\": \"database connection string for production\",\n                          \"maxLength\": 500\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"description\": \"Deletes one or many Shared Environment Variables for a given team.\",\n        \"operationId\": \"deleteSharedEnvVariable\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete one or more Env Var\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"deleted\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"failed\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"error\": {\n                            \"properties\": {\n                              \"code\": {\n                                \"type\": \"string\"\n                              },\n                              \"message\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarId\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarKey\": {\n                                \"type\": \"string\"\n                              },\n                              \"action\": {\n                                \"type\": \"string\"\n                              },\n                              \"link\": {\n                                \"type\": \"string\"\n                              },\n                              \"value\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                ]\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"project\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"code\",\n                              \"message\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"error\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"deleted\",\n                    \"failed\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"ids\"\n                ],\n                \"properties\": {\n                  \"ids\": {\n                    \"description\": \"IDs of the Shared Environment Variables to delete\",\n                    \"minimum\": 1,\n                    \"maximum\": 50,\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"example\": [\n                      \"env_abc123\",\n                      \"env_abc124\"\n                    ]\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/env/{id}\": {\n      \"get\": {\n        \"description\": \"Retrieve the decrypted value of a Shared Environment Variable by id.\",\n        \"operationId\": \"getSharedEnvVar\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve the decrypted value of a Shared Environment Variable by id.\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"created\": {\n                      \"type\": \"string\",\n                      \"format\": \"date-time\",\n                      \"description\": \"The date when the Shared Env Var was created.\",\n                      \"example\": \"2021-02-10T13:11:49.180Z\"\n                    },\n                    \"key\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the Shared Env Var.\",\n                      \"example\": \"my-api-key\"\n                    },\n                    \"ownerId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                      \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the Shared Env Var.\",\n                      \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                    },\n                    \"createdBy\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                      \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                    },\n                    \"deletedBy\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                      \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                    },\n                    \"updatedBy\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                      \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                      \"example\": 1609492210000\n                    },\n                    \"deletedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                      \"example\": 1609492210000\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                      \"example\": 1609492210000\n                    },\n                    \"value\": {\n                      \"type\": \"string\",\n                      \"description\": \"The value of the Shared Env Var.\"\n                    },\n                    \"projectId\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                      \"example\": [\n                        \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                        \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                      ]\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"encrypted\",\n                        \"sensitive\",\n                        \"system\",\n                        \"plain\"\n                      ],\n                      \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                      \"example\": \"encrypted\"\n                    },\n                    \"target\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"production\",\n                          \"preview\",\n                          \"development\"\n                        ],\n                        \"example\": \"production\",\n                        \"description\": \"environments this env variable targets\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"environments this env variable targets\",\n                      \"example\": \"production\"\n                    },\n                    \"applyToAllCustomEnvironments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"whether or not this env varible applies to custom environments\"\n                    },\n                    \"decrypted\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"whether or not this env variable is decrypted\"\n                    },\n                    \"comment\": {\n                      \"type\": \"string\",\n                      \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                    },\n                    \"lastEditedByDisplayName\": {\n                      \"type\": \"string\",\n                      \"description\": \"The last editor full name or username.\"\n                    }\n                  },\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique ID for the Shared Environment Variable to get the decrypted value.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique ID for the Shared Environment Variable to get the decrypted value.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/env/{id}/unlink/{projectId}\": {\n      \"patch\": {\n        \"description\": \"Disconnects a shared environment variable for a given project\",\n        \"operationId\": \"unlinkSharedEnvVariable\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Disconnects a shared environment variable for a given project\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique ID for the Shared Environment Variable to unlink from the project.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique ID for the Shared Environment Variable to unlink from the project.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v3/events\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of \\\"events\\\" generated by the User on Vercel. Events are generated when the User performs a particular action, such as logging in, creating a deployment, and joining a Team (just to name a few). When the `teamId` parameter is supplied, then the events that are returned will be in relation to the Team that was specified.\",\n        \"operationId\": \"listUserEvents\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List User Events\",\n        \"tags\": [\n          \"user\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"events\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/UserEvent\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"Array of events generated by the User.\"\n                        }\n                      },\n                      \"required\": [\n                        \"events\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Successful response.\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of items which may be returned.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Maximum number of items which may be returned.\",\n              \"example\": 20,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Timestamp to only include items created since then.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Timestamp to only include items created since then.\",\n              \"example\": \"2019-12-08T10:00:38.976Z\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Timestamp to only include items created until then.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Timestamp to only include items created until then.\",\n              \"example\": \"2019-12-09T23:00:38.976Z\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"types\",\n            \"description\": \"Comma-delimited list of event \\\\\\\"types\\\\\\\" to filter the results by.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Comma-delimited list of event \\\\\\\"types\\\\\\\" to filter the results by.\",\n              \"example\": \"login,team-member-join,domain-buy\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"userId\",\n            \"description\": \"Deprecated. Use `principalId` instead. If `principalId` and `userId` both exist, `principalId` will be used.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Deprecated. Use `principalId` instead. If `principalId` and `userId` both exist, `principalId` will be used.\",\n              \"example\": \"aeIInYVk59zbFF2SxfyxxmuO\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"principalId\",\n            \"description\": \"When retrieving events for a Team, the `principalId` parameter may be specified to filter events generated by a specific principal.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"When retrieving events for a Team, the `principalId` parameter may be specified to filter events generated by a specific principal.\",\n              \"example\": \"aeIInYVk59zbFF2SxfyxxmuO\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"projectIds\",\n            \"description\": \"Comma-delimited list of project IDs to filter the results by.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Comma-delimited list of project IDs to filter the results by.\",\n              \"example\": \"aeIInYVk59zbFF2SxfyxxmuO\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withPayload\",\n            \"description\": \"When set to `true`, the response will include the `payload` field for each event.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"When set to `true`, the response will include the `payload` field for each event.\",\n              \"example\": \"true\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/events/types\": {\n      \"get\": {\n        \"description\": \"Returns the list of user-facing event types with descriptions.\",\n        \"operationId\": \"listEventTypes\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List Event Types\",\n        \"tags\": [\n          \"user\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"types\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"replacedBy\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"deprecated\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              true\n                            ]\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"team\",\n                              \"avatar\",\n                              \"alias\",\n                              \"plan\",\n                              \"flag\",\n                              \"deployment\",\n                              \"access-group-created\",\n                              \"access-group-deleted\",\n                              \"access-group-project-updated\",\n                              \"access-group-updated\",\n                              \"access-group-user-added\",\n                              \"access-group-user-removed\",\n                              \"password-protection-disabled\",\n                              \"password-protection-enabled\",\n                              \"alias-chown\",\n                              \"alias-delete\",\n                              \"alias-invite-created\",\n                              \"alias-invite-joined\",\n                              \"alias-invite-revoked\",\n                              \"alias-protection-bypass-created\",\n                              \"alias-protection-bypass-exception\",\n                              \"alias-protection-bypass-regenerated\",\n                              \"alias-protection-bypass-revoked\",\n                              \"alias-system\",\n                              \"alias-user-scoped-access-denied\",\n                              \"alias-user-scoped-access-granted\",\n                              \"alias-user-scoped-access-requested\",\n                              \"alias-user-scoped-access-revoked\",\n                              \"oauth-app-connection-created\",\n                              \"oauth-app-connection-removed\",\n                              \"oauth-app-connection-updated\",\n                              \"oauth-app-created\",\n                              \"oauth-app-deleted\",\n                              \"vercel-app-installation-request-dismissed\",\n                              \"vercel-app-installation-requested\",\n                              \"vercel-app-installation-updated\",\n                              \"vercel-app-installed\",\n                              \"oauth-app-secret-deleted\",\n                              \"oauth-app-secret-generated\",\n                              \"oauth-app-token-created\",\n                              \"vercel-app-tokens-revoked\",\n                              \"vercel-app-uninstalled\",\n                              \"oauth-app-updated\",\n                              \"attack-mode-disabled\",\n                              \"attack-mode-enabled\",\n                              \"auto-expose-system-envs\",\n                              \"invoice-refunded\",\n                              \"invoice-modified\",\n                              \"payment-method-added\",\n                              \"payment-method-default-updated\",\n                              \"payment-method-removed\",\n                              \"subscription-created\",\n                              \"subscription-updated\",\n                              \"subscription-product-added\",\n                              \"subscription-product-removed\",\n                              \"bulk-redirects-settings-updated\",\n                              \"bulk-redirects-version-promoted\",\n                              \"bulk-redirects-version-restored\",\n                              \"cert\",\n                              \"cert-system-create\",\n                              \"cert-autorenew\",\n                              \"cert-chown\",\n                              \"cert-clone\",\n                              \"cert-delete\",\n                              \"cert-renew\",\n                              \"cert-replace\",\n                              \"connect-configuration-created\",\n                              \"connect-configuration-deleted\",\n                              \"connect-configuration-link-updated\",\n                              \"connect-configuration-linked\",\n                              \"connect-configuration-unlinked\",\n                              \"connect-configuration-updated\",\n                              \"connect-github\",\n                              \"disconnect-github\",\n                              \"connect-github-limited\",\n                              \"disconnect-github-limited\",\n                              \"connect-github-custom-host\",\n                              \"disconnect-github-custom-host\",\n                              \"connect-gitlab\",\n                              \"connect-gitlab-app\",\n                              \"disconnect-gitlab-app\",\n                              \"connect-bitbucket\",\n                              \"connect-bitbucket-app\",\n                              \"disconnect-bitbucket-app\",\n                              \"custom-suffix-clear\",\n                              \"custom-suffix-disable\",\n                              \"preview-deployment-suffix-disabled\",\n                              \"custom-suffix-enable\",\n                              \"preview-deployment-suffix-enabled\",\n                              \"custom-suffix-pending\",\n                              \"custom-suffix-ready\",\n                              \"deploy-hook-created\",\n                              \"deploy-hook-deleted\",\n                              \"deploy-hook-deduped\",\n                              \"deploy-hook-processed\",\n                              \"deployment-check-created\",\n                              \"deployment-check-updated\",\n                              \"deployment-check-deleted\",\n                              \"authorize-git-deployment\",\n                              \"deployment-chown\",\n                              \"deployment-creation-blocked\",\n                              \"deployment-delete\",\n                              \"disabled-integration-installation-removed\",\n                              \"dns-add\",\n                              \"dns-delete\",\n                              \"dns-update\",\n                              \"domain\",\n                              \"domain-buy\",\n                              \"domain-cdn\",\n                              \"domain-chown\",\n                              \"domain-delegated\",\n                              \"domain-delete\",\n                              \"domain-service-type-updated\",\n                              \"domain-custom-ns-change\",\n                              \"dns-zonefile-import\",\n                              \"domain-zone-change\",\n                              \"domain-move-in\",\n                              \"domain-move-out\",\n                              \"domain-move-out-request-sent\",\n                              \"domain-renew-change\",\n                              \"domain-transfer-in\",\n                              \"domain-transfer-in-canceled\",\n                              \"domain-transfer-in-completed\",\n                              \"drain-created\",\n                              \"drain-deleted\",\n                              \"drain-disabled\",\n                              \"drain-enabled\",\n                              \"drain-updated\",\n                              \"edge-cache-dangerously-delete-by-src-images\",\n                              \"edge-cache-dangerously-delete-by-tags\",\n                              \"edge-cache-invalidate-by-src-images\",\n                              \"edge-cache-invalidate-by-tags\",\n                              \"edge-cache-purge-all\",\n                              \"edge-cache-rollback-purge\",\n                              \"edge-config-created\",\n                              \"edge-config-deleted\",\n                              \"edge-config-items-updated\",\n                              \"edge-config-schema-deleted\",\n                              \"edge-config-schema-updated\",\n                              \"edge-config-transfer-in\",\n                              \"edge-config-transfer-out\",\n                              \"edge-config-token-created\",\n                              \"edge-config-token-deleted\",\n                              \"edge-config-updated\",\n                              \"email\",\n                              \"email-notification-rule-removed\",\n                              \"email-notification-rule-updated\",\n                              \"env-variable-add\",\n                              \"env-variable-delete\",\n                              \"env-variable-edit\",\n                              \"env-variable-read\",\n                              \"env-variable-read:cli:dev\",\n                              \"env-variable-read:cli:env:add\",\n                              \"env-variable-read:cli:env:ls\",\n                              \"env-variable-read:cli:env:pull\",\n                              \"env-variable-read:cli:env:rm\",\n                              \"env-variable-read:cli:pull\",\n                              \"env-variable-read:unknown-source\",\n                              \"env-variable-read:v0:env:pull\",\n                              \"shared-env-variable-create\",\n                              \"shared-env-variable-delete\",\n                              \"shared-env-variable-read\",\n                              \"shared-env-variable-update\",\n                              \"firewall-bypass-created\",\n                              \"firewall-bypass-deleted\",\n                              \"firewall-config-promoted\",\n                              \"firewall-managed-rulegroup-updated\",\n                              \"firewall-managed-ruleset-updated\",\n                              \"flags-segment\",\n                              \"flags-settings\",\n                              \"flags-explorer-subscription\",\n                              \"flags-sdk-key\",\n                              \"instant-rollback-created\",\n                              \"integration-configuration-owner-changed\",\n                              \"integration-configuration-scope-change-confirmed\",\n                              \"integration-configurations-disabled\",\n                              \"integration-installation-billing-plan-updated\",\n                              \"integration-installation-completed\",\n                              \"integration-installation-permission-updated\",\n                              \"integration-installation-removed\",\n                              \"integration-scope-changed\",\n                              \"log-drain-created\",\n                              \"log-drain-deleted\",\n                              \"log-drain-disabled\",\n                              \"log-drain-enabled\",\n                              \"login\",\n                              \"manual-deployment-promotion-created\",\n                              \"microfrontend-group-added\",\n                              \"microfrontend-group-deleted\",\n                              \"microfrontend-group-updated\",\n                              \"microfrontend-project-added-to-group\",\n                              \"microfrontend-project-removed-from-group\",\n                              \"microfrontend-project-updated\",\n                              \"monitoring-disabled\",\n                              \"monitoring-enabled\",\n                              \"observability-disabled\",\n                              \"observability-enabled\",\n                              \"observability-plus-project-disabled\",\n                              \"observability-plus-project-enabled\",\n                              \"owner-blocked\",\n                              \"owner-unblocked\",\n                              \"owner-soft-blocked\",\n                              \"owner-soft-unblocked\",\n                              \"passkey-created\",\n                              \"passkey-deleted\",\n                              \"passkey-updated\",\n                              \"preview-deployment-suffix-update\",\n                              \"production-branch-updated\",\n                              \"project-directory-listing\",\n                              \"project-analytics-disabled\",\n                              \"project-speed-insights-disabled\",\n                              \"project-analytics-enabled\",\n                              \"project-speed-insights-enabled\",\n                              \"project-automation-bypass\",\n                              \"project-affected-projects-deployments-updated\",\n                              \"project-build-command-updated\",\n                              \"project-framework-updated\",\n                              \"project-install-command-updated\",\n                              \"project-node-version-updated\",\n                              \"project-output-directory-updated\",\n                              \"project-prioritize-production-builds-updated\",\n                              \"project-root-directory-updated\",\n                              \"project-source-files-outside-root-directory-updated\",\n                              \"project-build-machine-updated\",\n                              \"project-client-cert-delete\",\n                              \"project-client-cert-upload\",\n                              \"project-connect-configurations\",\n                              \"project-created\",\n                              \"project-cron-jobs-toggled\",\n                              \"project-delete\",\n                              \"project-domain-unverified\",\n                              \"project-domain-verified\",\n                              \"project-elastic-concurrency-updated\",\n                              \"project-auto-assign-custom-production-domains-updated\",\n                              \"project-preview-environment-branch-tracking-updated\",\n                              \"project-custom-environment-updated\",\n                              \"project-custom-environment-created\",\n                              \"project-custom-environment-deleted\",\n                              \"project-functions-fluid-disabled\",\n                              \"project-functions-fluid-enabled\",\n                              \"project-function-max-duration\",\n                              \"project-function-cpu-memory\",\n                              \"project-function-regions\",\n                              \"project-function-failover\",\n                              \"project-preview-deployment-suffix\",\n                              \"project-name\",\n                              \"project-git-repository-connected\",\n                              \"project-git-repository-disconnected\",\n                              \"project-git-pr-comments-toggled\",\n                              \"project-git-commit-comments-toggled\",\n                              \"project-git-repository-dispatch-events-toggled\",\n                              \"project-git-create-deployments-toggled\",\n                              \"project-git-require-verified-commits-toggled\",\n                              \"project-git-lfs-toggled\",\n                              \"project-ignored-build-step-updated\",\n                              \"project-add-alias\",\n                              \"project-add-redirect\",\n                              \"project-domain-deleted\",\n                              \"project-domain-moved\",\n                              \"project-domain-updated\",\n                              \"project-member-removed-batch\",\n                              \"project-alias-configured-change\",\n                              \"project-member-added\",\n                              \"project-member-invited\",\n                              \"project-member-removed\",\n                              \"project-member-updated\",\n                              \"project-move-in-success\",\n                              \"project-move-out-failed\",\n                              \"project-move-out-started\",\n                              \"project-move-out-success\",\n                              \"project-oidc-token-created\",\n                              \"project-options-allowlist\",\n                              \"project-password-protection\",\n                              \"project-paused\",\n                              \"project-program-enrollment-changed\",\n                              \"project-rolling-release-enabled\",\n                              \"project-rolling-release-disabled\",\n                              \"project-rolling-release-configured\",\n                              \"project-rolling-release-started\",\n                              \"project-rolling-release-completed\",\n                              \"project-rolling-release-aborted\",\n                              \"project-rolling-release-approved\",\n                              \"project-rolling-release-timer\",\n                              \"project-routes-version-promoted\",\n                              \"project-routes-version-restored\",\n                              \"project-oidc-issuer-mode-updated\",\n                              \"project-customer-success-code-visibility-updated\",\n                              \"project-git-fork-protection-updated\",\n                              \"project-protected-sourcemaps-updated\",\n                              \"project-build-logs-and-source-protection-updated\",\n                              \"project-deployment-retention-updated\",\n                              \"project-skew-protection-threshold-updated\",\n                              \"project-skew-protection-max-age-updated\",\n                              \"project-skew-protection-allowed-domains-updated\",\n                              \"project-sso-protection\",\n                              \"project-static-ips-updated\",\n                              \"project-trusted-ips\",\n                              \"project-unpaused\",\n                              \"project-web-analytics-disabled\",\n                              \"project-web-analytics-enabled\",\n                              \"protected-git-scope-added\",\n                              \"protected-git-scope-removed\",\n                              \"runtime-cache-purge-all\",\n                              \"scale\",\n                              \"scale-auto\",\n                              \"secondary-email-added\",\n                              \"secondary-email-removed\",\n                              \"secondary-email-verified\",\n                              \"secret-add\",\n                              \"secret-delete\",\n                              \"secret-rename\",\n                              \"security-plus-updated\",\n                              \"set-bio\",\n                              \"set-name\",\n                              \"set-profiles\",\n                              \"set-scale\",\n                              \"signup\",\n                              \"signup-via-bitbucket\",\n                              \"signup-via-github\",\n                              \"signup-via-gitlab\",\n                              \"speed-insights-settings-updated\",\n                              \"spend-created\",\n                              \"spend-deleted\",\n                              \"spend-updated\",\n                              \"storage-accept-tos\",\n                              \"storage-create\",\n                              \"storage-reset-credentials\",\n                              \"storage-update\",\n                              \"storage-connect-project\",\n                              \"storage-disconnect-project\",\n                              \"storage-update-project-connection\",\n                              \"storage-delete\",\n                              \"storage-accessed-data-browser\",\n                              \"storage-view-secret\",\n                              \"storage-inactive-store-deleted\",\n                              \"storage-resource-repl-command\",\n                              \"storage-disconnect-projects\",\n                              \"storage-access-token-set\",\n                              \"ai-code-review\",\n                              \"ai-alert-investigation\",\n                              \"vercel-agent-team-trial-credits-applied\",\n                              \"team-avatar-update\",\n                              \"team-delete\",\n                              \"strict-deployment-protection-settings\",\n                              \"team-domain-verification-deleted\",\n                              \"vercel-toolbar\",\n                              \"team-email-domain-update\",\n                              \"team-invite-bulk-delete\",\n                              \"team-member-add\",\n                              \"team-member-confirm-request\",\n                              \"team-member-decline-request\",\n                              \"team-member-delete\",\n                              \"team-member-entitlement-added\",\n                              \"team-member-entitlement-canceled\",\n                              \"team-member-entitlement-reactivated\",\n                              \"team-member-entitlement-removed\",\n                              \"team-member-join\",\n                              \"team-member-leave\",\n                              \"team-member-request-access\",\n                              \"team-member-role-update\",\n                              \"team-mfa-enforcement-updated\",\n                              \"concurrent-builds-update\",\n                              \"team-ended-trial\",\n                              \"team-paid-invoice\",\n                              \"team-invite-code-reset\",\n                              \"team-name-update\",\n                              \"team-program-enrollment-changed\",\n                              \"team-remote-caching-update\",\n                              \"enforce-sensitive-environment-variables\",\n                              \"show-ip-addresses\",\n                              \"team-saml-enforced\",\n                              \"team-saml-roles\",\n                              \"team-ip-blocking-rules-created\",\n                              \"team-ip-blocking-rules-removed\",\n                              \"audit-log-export-requested\",\n                              \"audit-log-export-downloaded\",\n                              \"team-slug-update\",\n                              \"unlink-login-connection\",\n                              \"user-mfa-removed\",\n                              \"user-delete\",\n                              \"user-mfa-challenge-verified\",\n                              \"user-mfa-configuration-updated\",\n                              \"user-mfa-recovery-codes-regenerated\",\n                              \"user-mfa-totp-verification-started\",\n                              \"user-mfa-totp-verified\",\n                              \"user-primary-email-updated\",\n                              \"username\",\n                              \"alert-rule-created\",\n                              \"alert-rule-updated\",\n                              \"alert-rule-deleted\",\n                              \"vpc-peering-connection-accepted\",\n                              \"vpc-peering-connection-deleted\",\n                              \"vpc-peering-connection-rejected\",\n                              \"vpc-peering-connection-updated\",\n                              \"web-analytics-tier-updated\",\n                              \"webhook-created\",\n                              \"webhook-deleted\",\n                              \"webhook-updated\",\n                              \"v0-chat-created\",\n                              \"v0-chat-message-sent\",\n                              \"workflow-deployment-key-accessed\"\n                            ]\n                          },\n                          \"description\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"deprecated\",\n                          \"description\",\n                          \"name\",\n                          \"replacedBy\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"types\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/flags\": {\n      \"get\": {\n        \"description\": \"Retrieve feature flags for a project. The list can be filtered by state and supports pagination.\",\n        \"operationId\": \"listFlags\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List flags\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"data\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/Flag\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"next\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"data\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"state\",\n            \"description\": \"The state of the flags to retrieve. Defaults to `active`.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"active\",\n                \"archived\"\n              ],\n              \"description\": \"The state of the flags to retrieve. Defaults to `active`.\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata in the response\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Whether to include metadata in the response\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of flags to return. When not set, all flags are returned.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of flags to return. When not set, all flags are returned.\",\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"cursor\",\n            \"description\": \"Pagination cursor to continue from.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Pagination cursor to continue from.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search flags by their slug or description. Case-insensitive.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Search flags by their slug or description. Case-insensitive.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"put\": {\n        \"description\": \"Create a new feature flag for a project. The flag must have a unique slug within the project and specify its kind (boolean, string, or number).\",\n        \"operationId\": \"createFlag\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a flag\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"description\": {\n                      \"type\": \"string\"\n                    },\n                    \"variants\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"description\": {\n                            \"type\": \"string\"\n                          },\n                          \"label\": {\n                            \"type\": \"string\"\n                          },\n                          \"value\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"environments\": {\n                      \"additionalProperties\": {\n                        \"properties\": {\n                          \"reuse\": {\n                            \"properties\": {\n                              \"active\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"environment\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"active\",\n                              \"environment\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"targets\": {\n                            \"additionalProperties\": {\n                              \"additionalProperties\": {\n                                \"additionalProperties\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"note\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"revision\": {\n                            \"type\": \"number\"\n                          },\n                          \"pausedOutcome\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"variant\"\n                                ]\n                              },\n                              \"variantId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"type\",\n                              \"variantId\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"fallthrough\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"variant\"\n                                    ]\n                                  },\n                                  \"variantId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"type\",\n                                  \"variantId\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"split\"\n                                    ]\n                                  },\n                                  \"base\": {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"entity\"\n                                        ]\n                                      },\n                                      \"kind\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"attribute\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"attribute\",\n                                      \"kind\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"weights\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"defaultVariantId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"base\",\n                                  \"defaultVariantId\",\n                                  \"type\",\n                                  \"weights\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"active\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"rules\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"outcome\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"variant\"\n                                          ]\n                                        },\n                                        \"variantId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"variantId\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"split\"\n                                          ]\n                                        },\n                                        \"base\": {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"entity\"\n                                              ]\n                                            },\n                                            \"kind\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"attribute\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"attribute\",\n                                            \"kind\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"weights\": {\n                                          \"additionalProperties\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"defaultVariantId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"base\",\n                                        \"defaultVariantId\",\n                                        \"type\",\n                                        \"weights\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"conditions\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"rhs\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"type\": \"number\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"list/inline\",\n                                                  \"list\"\n                                                ]\n                                              },\n                                              \"items\": {\n                                                \"items\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"label\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"note\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"value\": {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"value\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"properties\": {\n                                                        \"label\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"note\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"value\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"value\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"type\": \"array\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"items\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"regex\"\n                                                ]\n                                              },\n                                              \"pattern\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"flags\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"flags\",\n                                              \"pattern\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          }\n                                        ]\n                                      },\n                                      \"cmpOptions\": {\n                                        \"properties\": {\n                                          \"ignoreCase\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          }\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"lhs\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"segment\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"entity\"\n                                                ]\n                                              },\n                                              \"kind\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"attribute\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"attribute\",\n                                              \"kind\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      },\n                                      \"cmp\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"eq\",\n                                          \"!eq\",\n                                          \"oneOf\",\n                                          \"!oneOf\",\n                                          \"containsAllOf\",\n                                          \"containsAnyOf\",\n                                          \"containsNoneOf\",\n                                          \"startsWith\",\n                                          \"!startsWith\",\n                                          \"endsWith\",\n                                          \"!endsWith\",\n                                          \"contains\",\n                                          \"!contains\",\n                                          \"ex\",\n                                          \"!ex\",\n                                          \"gt\",\n                                          \"gte\",\n                                          \"lt\",\n                                          \"lte\",\n                                          \"regex\",\n                                          \"!regex\",\n                                          \"before\",\n                                          \"after\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"cmp\",\n                                      \"lhs\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"conditions\",\n                                \"id\",\n                                \"outcome\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"fallthrough\",\n                          \"pausedOutcome\",\n                          \"rules\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"kind\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"string\",\n                        \"number\",\n                        \"boolean\"\n                      ]\n                    },\n                    \"revision\": {\n                      \"type\": \"number\"\n                    },\n                    \"seed\": {\n                      \"type\": \"number\"\n                    },\n                    \"state\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"active\",\n                        \"archived\"\n                      ]\n                    },\n                    \"slug\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdBy\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"typeName\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"flag\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"createdBy\",\n                    \"environments\",\n                    \"id\",\n                    \"kind\",\n                    \"ownerId\",\n                    \"projectId\",\n                    \"revision\",\n                    \"seed\",\n                    \"slug\",\n                    \"state\",\n                    \"typeName\",\n                    \"updatedAt\",\n                    \"variants\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"slug\": {\n                    \"description\": \"A unique (per project) key for the flag, composed of letters, numbers, dashes, and underscores\",\n                    \"type\": \"string\",\n                    \"pattern\": \"^[a-zA-Z0-9_-]{1,512}$\"\n                  },\n                  \"kind\": {\n                    \"description\": \"The kind of flag\",\n                    \"enum\": [\n                      \"boolean\",\n                      \"string\",\n                      \"number\"\n                    ]\n                  },\n                  \"variants\": {\n                    \"type\": \"array\",\n                    \"description\": \"The variants of the flag\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"id\": {\n                          \"description\": \"The id of the variant\",\n                          \"type\": \"string\"\n                        },\n                        \"label\": {\n                          \"description\": \"A label for the variant\",\n                          \"type\": \"string\"\n                        },\n                        \"description\": {\n                          \"description\": \"A description of the variant\",\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            },\n                            {\n                              \"type\": \"boolean\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"value\"\n                      ]\n                    }\n                  },\n                  \"environments\": {\n                    \"type\": \"object\",\n                    \"description\": \"The configuration for the flag in different environments\",\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"active\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"reuse\": {\n                          \"type\": \"object\",\n                          \"description\": \"Allows linking this environment to another environment so this flag will be evaluated with the other flag's configuration\",\n                          \"additionalProperties\": false,\n                          \"required\": [\n                            \"active\",\n                            \"environment\"\n                          ],\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"description\": \"Whether the reuse is active or not\"\n                            },\n                            \"environment\": {\n                              \"type\": \"string\",\n                              \"description\": \"The environment to link to\"\n                            }\n                          }\n                        },\n                        \"targets\": {\n                          \"type\": \"object\",\n                          \"description\": \"Allows assigning targets to variants while bypassing the flag's rules\",\n                          \"additionalProperties\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"object\",\n                              \"additionalProperties\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"note\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"value\"\n                                  ]\n                                },\n                                \"maxItems\": 10000\n                              }\n                            }\n                          }\n                        },\n                        \"pausedOutcome\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"properties\": {\n                            \"type\": {},\n                            \"variantId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"type\",\n                            \"variantId\"\n                          ]\n                        },\n                        \"rules\": {\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": false,\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"conditions\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"lhs\": {\n                                      \"anyOf\": [\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {}\n                                          },\n                                          \"required\": [\n                                            \"type\"\n                                          ]\n                                        },\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {},\n                                            \"kind\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"attribute\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"kind\",\n                                            \"attribute\"\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"cmp\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"eq\",\n                                        \"!eq\",\n                                        \"oneOf\",\n                                        \"!oneOf\",\n                                        \"containsAllOf\",\n                                        \"containsAnyOf\",\n                                        \"containsNoneOf\",\n                                        \"startsWith\",\n                                        \"!startsWith\",\n                                        \"endsWith\",\n                                        \"!endsWith\",\n                                        \"contains\",\n                                        \"!contains\",\n                                        \"ex\",\n                                        \"!ex\",\n                                        \"gt\",\n                                        \"gte\",\n                                        \"lt\",\n                                        \"lte\",\n                                        \"regex\",\n                                        \"!regex\",\n                                        \"before\",\n                                        \"after\"\n                                      ]\n                                    },\n                                    \"rhs\": {\n                                      \"anyOf\": [\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"list/inline\",\n                                                \"list\"\n                                              ]\n                                            },\n                                            \"items\": {\n                                              \"type\": \"array\",\n                                              \"items\": {\n                                                \"anyOf\": [\n                                                  {\n                                                    \"type\": \"object\",\n                                                    \"additionalProperties\": false,\n                                                    \"properties\": {\n                                                      \"label\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"note\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"value\": {\n                                                        \"type\": \"number\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"value\"\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"object\",\n                                                    \"additionalProperties\": false,\n                                                    \"properties\": {\n                                                      \"label\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"note\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"value\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"value\"\n                                                    ]\n                                                  }\n                                                ]\n                                              },\n                                              \"maxItems\": 10000\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"items\"\n                                          ]\n                                        },\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {},\n                                            \"pattern\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"flags\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"pattern\",\n                                            \"flags\"\n                                          ]\n                                        },\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\"\n                                        }\n                                      ]\n                                    },\n                                    \"cmpOptions\": {\n                                      \"type\": \"object\",\n                                      \"additionalProperties\": false,\n                                      \"properties\": {\n                                        \"ignoreCase\": {\n                                          \"type\": \"boolean\"\n                                        }\n                                      }\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"lhs\",\n                                    \"cmp\"\n                                  ]\n                                }\n                              },\n                              \"outcome\": {\n                                \"anyOf\": [\n                                  {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"type\": {},\n                                      \"variantId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"variantId\"\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"type\": {},\n                                      \"base\": {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {},\n                                          \"kind\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"attribute\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"kind\",\n                                          \"attribute\"\n                                        ]\n                                      },\n                                      \"weights\": {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"description\": \"The distribution for each variant\"\n                                      },\n                                      \"defaultVariantId\": {\n                                        \"type\": \"string\",\n                                        \"description\": \"This variant will be used when the base attribute does not exist\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"base\",\n                                      \"weights\",\n                                      \"defaultVariantId\"\n                                    ]\n                                  }\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"conditions\",\n                              \"outcome\"\n                            ]\n                          },\n                          \"maxItems\": 10000\n                        },\n                        \"fallthrough\": {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"type\": {},\n                                \"variantId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"type\",\n                                \"variantId\"\n                              ]\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"type\": {},\n                                \"base\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"type\": {},\n                                    \"kind\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"attribute\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"type\",\n                                    \"kind\",\n                                    \"attribute\"\n                                  ]\n                                },\n                                \"weights\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"description\": \"The distribution for each variant\"\n                                },\n                                \"defaultVariantId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"This variant will be used when the base attribute does not exist\"\n                                }\n                              },\n                              \"required\": [\n                                \"type\",\n                                \"base\",\n                                \"weights\",\n                                \"defaultVariantId\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"revision\": {\n                          \"type\": \"number\",\n                          \"description\": \"The revision of the environment config\"\n                        }\n                      },\n                      \"required\": [\n                        \"active\",\n                        \"pausedOutcome\",\n                        \"rules\",\n                        \"fallthrough\"\n                      ]\n                    },\n                    \"maxProperties\": 10\n                  },\n                  \"seed\": {\n                    \"type\": \"number\",\n                    \"minimum\": 0,\n                    \"maximum\": 100000,\n                    \"description\": \"A random seed to prevent split points in different flags from having the same targets\"\n                  },\n                  \"description\": {\n                    \"description\": \"A description of the flag\",\n                    \"type\": \"string\"\n                  },\n                  \"state\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"active\",\n                      \"archived\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"slug\",\n                  \"kind\",\n                  \"environments\"\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}\": {\n      \"get\": {\n        \"description\": \"Retrieve a specific feature flag by its ID or slug.\",\n        \"operationId\": \"getFlag\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a flag\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Flag\"\n                }\n              }\n            }\n          },\n          \"304\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"flagIdOrSlug\",\n            \"description\": \"The flag id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The flag id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"ifMatch\",\n            \"description\": \"Etag to match, can be used interchangeably with the `if-match` header\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Etag to match, can be used interchangeably with the `if-match` header\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata in the response\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Whether to include metadata in the response\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update an existing feature flag. This endpoint supports partial updates, allowing you to modify specific properties like variants, environments, or state without providing the full flag configuration.\",\n        \"operationId\": \"updateFlag\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a flag\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"description\": {\n                          \"type\": \"string\"\n                        },\n                        \"variants\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"description\": {\n                                \"type\": \"string\"\n                              },\n                              \"label\": {\n                                \"type\": \"string\"\n                              },\n                              \"value\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"number\"\n                                  },\n                                  {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"environments\": {\n                          \"additionalProperties\": {\n                            \"properties\": {\n                              \"reuse\": {\n                                \"properties\": {\n                                  \"active\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"environment\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"active\",\n                                  \"environment\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"targets\": {\n                                \"additionalProperties\": {\n                                  \"additionalProperties\": {\n                                    \"additionalProperties\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"note\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"value\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"value\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"revision\": {\n                                \"type\": \"number\"\n                              },\n                              \"pausedOutcome\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"variant\"\n                                    ]\n                                  },\n                                  \"variantId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"type\",\n                                  \"variantId\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"fallthrough\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"variant\"\n                                        ]\n                                      },\n                                      \"variantId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"variantId\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"split\"\n                                        ]\n                                      },\n                                      \"base\": {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"entity\"\n                                            ]\n                                          },\n                                          \"kind\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"attribute\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"attribute\",\n                                          \"kind\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"weights\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"defaultVariantId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"base\",\n                                      \"defaultVariantId\",\n                                      \"type\",\n                                      \"weights\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"active\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"rules\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"outcome\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"variant\"\n                                              ]\n                                            },\n                                            \"variantId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"variantId\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"split\"\n                                              ]\n                                            },\n                                            \"base\": {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"entity\"\n                                                  ]\n                                                },\n                                                \"kind\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"attribute\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"attribute\",\n                                                \"kind\",\n                                                \"type\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"weights\": {\n                                              \"additionalProperties\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"type\": \"object\"\n                                            },\n                                            \"defaultVariantId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"base\",\n                                            \"defaultVariantId\",\n                                            \"type\",\n                                            \"weights\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"conditions\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"rhs\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"type\": \"number\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"list/inline\",\n                                                      \"list\"\n                                                    ]\n                                                  },\n                                                  \"items\": {\n                                                    \"items\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"label\": {\n                                                              \"type\": \"string\"\n                                                            },\n                                                            \"note\": {\n                                                              \"type\": \"string\"\n                                                            },\n                                                            \"value\": {\n                                                              \"type\": \"number\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"value\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"properties\": {\n                                                            \"label\": {\n                                                              \"type\": \"string\"\n                                                            },\n                                                            \"note\": {\n                                                              \"type\": \"string\"\n                                                            },\n                                                            \"value\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"value\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"items\",\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"regex\"\n                                                    ]\n                                                  },\n                                                  \"pattern\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"flags\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"flags\",\n                                                  \"pattern\",\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"cmpOptions\": {\n                                            \"properties\": {\n                                              \"ignoreCase\": {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          },\n                                          \"lhs\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"segment\"\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"entity\"\n                                                    ]\n                                                  },\n                                                  \"kind\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"attribute\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"attribute\",\n                                                  \"kind\",\n                                                  \"type\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"cmp\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"eq\",\n                                              \"!eq\",\n                                              \"oneOf\",\n                                              \"!oneOf\",\n                                              \"containsAllOf\",\n                                              \"containsAnyOf\",\n                                              \"containsNoneOf\",\n                                              \"startsWith\",\n                                              \"!startsWith\",\n                                              \"endsWith\",\n                                              \"!endsWith\",\n                                              \"contains\",\n                                              \"!contains\",\n                                              \"ex\",\n                                              \"!ex\",\n                                              \"gt\",\n                                              \"gte\",\n                                              \"lt\",\n                                              \"lte\",\n                                              \"regex\",\n                                              \"!regex\",\n                                              \"before\",\n                                              \"after\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"cmp\",\n                                          \"lhs\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"conditions\",\n                                    \"id\",\n                                    \"outcome\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"active\",\n                              \"fallthrough\",\n                              \"pausedOutcome\",\n                              \"rules\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"kind\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"string\",\n                            \"number\",\n                            \"boolean\"\n                          ]\n                        },\n                        \"revision\": {\n                          \"type\": \"number\"\n                        },\n                        \"seed\": {\n                          \"type\": \"number\"\n                        },\n                        \"state\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"active\",\n                            \"archived\"\n                          ]\n                        },\n                        \"slug\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"projectId\": {\n                          \"type\": \"string\"\n                        },\n                        \"typeName\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"flag\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"createdBy\",\n                        \"environments\",\n                        \"id\",\n                        \"kind\",\n                        \"ownerId\",\n                        \"projectId\",\n                        \"revision\",\n                        \"seed\",\n                        \"slug\",\n                        \"state\",\n                        \"typeName\",\n                        \"updatedAt\",\n                        \"variants\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Flag\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"304\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"flagIdOrSlug\",\n            \"description\": \"The flag id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The flag id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"ifMatch\",\n            \"description\": \"Etag to match, can be used interchangeably with the `if-match` header\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Etag to match, can be used interchangeably with the `if-match` header\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata in the response\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Whether to include metadata in the response\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"createdBy\": {\n                    \"description\": \"The user who created this patch\",\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"description\": \"Additional message for this version\",\n                    \"type\": \"string\"\n                  },\n                  \"variants\": {\n                    \"type\": \"array\",\n                    \"description\": \"The variants of the flag\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"id\": {\n                          \"description\": \"The id of the variant\",\n                          \"type\": \"string\"\n                        },\n                        \"label\": {\n                          \"description\": \"A label for the variant\",\n                          \"type\": \"string\"\n                        },\n                        \"description\": {\n                          \"description\": \"A description of the variant\",\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            },\n                            {\n                              \"type\": \"boolean\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"value\"\n                      ]\n                    }\n                  },\n                  \"environments\": {\n                    \"type\": \"object\",\n                    \"description\": \"The configuration for the flag in different environments\",\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"active\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"reuse\": {\n                          \"type\": \"object\",\n                          \"description\": \"Allows linking this environment to another environment so this flag will be evaluated with the other flag's configuration\",\n                          \"additionalProperties\": false,\n                          \"required\": [\n                            \"active\",\n                            \"environment\"\n                          ],\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"description\": \"Whether the reuse is active or not\"\n                            },\n                            \"environment\": {\n                              \"type\": \"string\",\n                              \"description\": \"The environment to link to\"\n                            }\n                          }\n                        },\n                        \"targets\": {\n                          \"type\": \"object\",\n                          \"description\": \"Allows assigning targets to variants while bypassing the flag's rules\",\n                          \"additionalProperties\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": {\n                              \"type\": \"object\",\n                              \"additionalProperties\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"note\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"value\"\n                                  ]\n                                },\n                                \"maxItems\": 10000\n                              }\n                            }\n                          }\n                        },\n                        \"pausedOutcome\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"properties\": {\n                            \"type\": {},\n                            \"variantId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"type\",\n                            \"variantId\"\n                          ]\n                        },\n                        \"rules\": {\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": false,\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"conditions\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"lhs\": {\n                                      \"anyOf\": [\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {}\n                                          },\n                                          \"required\": [\n                                            \"type\"\n                                          ]\n                                        },\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {},\n                                            \"kind\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"attribute\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"kind\",\n                                            \"attribute\"\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"cmp\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"eq\",\n                                        \"!eq\",\n                                        \"oneOf\",\n                                        \"!oneOf\",\n                                        \"containsAllOf\",\n                                        \"containsAnyOf\",\n                                        \"containsNoneOf\",\n                                        \"startsWith\",\n                                        \"!startsWith\",\n                                        \"endsWith\",\n                                        \"!endsWith\",\n                                        \"contains\",\n                                        \"!contains\",\n                                        \"ex\",\n                                        \"!ex\",\n                                        \"gt\",\n                                        \"gte\",\n                                        \"lt\",\n                                        \"lte\",\n                                        \"regex\",\n                                        \"!regex\",\n                                        \"before\",\n                                        \"after\"\n                                      ]\n                                    },\n                                    \"rhs\": {\n                                      \"anyOf\": [\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"list/inline\",\n                                                \"list\"\n                                              ]\n                                            },\n                                            \"items\": {\n                                              \"type\": \"array\",\n                                              \"items\": {\n                                                \"anyOf\": [\n                                                  {\n                                                    \"type\": \"object\",\n                                                    \"additionalProperties\": false,\n                                                    \"properties\": {\n                                                      \"label\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"note\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"value\": {\n                                                        \"type\": \"number\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"value\"\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"object\",\n                                                    \"additionalProperties\": false,\n                                                    \"properties\": {\n                                                      \"label\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"note\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"value\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"value\"\n                                                    ]\n                                                  }\n                                                ]\n                                              },\n                                              \"maxItems\": 10000\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"items\"\n                                          ]\n                                        },\n                                        {\n                                          \"type\": \"object\",\n                                          \"additionalProperties\": false,\n                                          \"properties\": {\n                                            \"type\": {},\n                                            \"pattern\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"flags\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"pattern\",\n                                            \"flags\"\n                                          ]\n                                        },\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\"\n                                        }\n                                      ]\n                                    },\n                                    \"cmpOptions\": {\n                                      \"type\": \"object\",\n                                      \"additionalProperties\": false,\n                                      \"properties\": {\n                                        \"ignoreCase\": {\n                                          \"type\": \"boolean\"\n                                        }\n                                      }\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"lhs\",\n                                    \"cmp\"\n                                  ]\n                                }\n                              },\n                              \"outcome\": {\n                                \"anyOf\": [\n                                  {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"type\": {},\n                                      \"variantId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"variantId\"\n                                    ]\n                                  },\n                                  {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"type\": {},\n                                      \"base\": {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {},\n                                          \"kind\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"attribute\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"kind\",\n                                          \"attribute\"\n                                        ]\n                                      },\n                                      \"weights\": {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"description\": \"The distribution for each variant\"\n                                      },\n                                      \"defaultVariantId\": {\n                                        \"type\": \"string\",\n                                        \"description\": \"This variant will be used when the base attribute does not exist\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"base\",\n                                      \"weights\",\n                                      \"defaultVariantId\"\n                                    ]\n                                  }\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"conditions\",\n                              \"outcome\"\n                            ]\n                          },\n                          \"maxItems\": 10000\n                        },\n                        \"fallthrough\": {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"type\": {},\n                                \"variantId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"type\",\n                                \"variantId\"\n                              ]\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"type\": {},\n                                \"base\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"type\": {},\n                                    \"kind\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"attribute\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"type\",\n                                    \"kind\",\n                                    \"attribute\"\n                                  ]\n                                },\n                                \"weights\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"description\": \"The distribution for each variant\"\n                                },\n                                \"defaultVariantId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"This variant will be used when the base attribute does not exist\"\n                                }\n                              },\n                              \"required\": [\n                                \"type\",\n                                \"base\",\n                                \"weights\",\n                                \"defaultVariantId\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"revision\": {\n                          \"type\": \"number\",\n                          \"description\": \"The revision of the environment config\"\n                        }\n                      },\n                      \"required\": [\n                        \"active\",\n                        \"pausedOutcome\",\n                        \"rules\",\n                        \"fallthrough\"\n                      ]\n                    },\n                    \"maxProperties\": 10\n                  },\n                  \"seed\": {\n                    \"type\": \"number\",\n                    \"minimum\": 0,\n                    \"maximum\": 100000,\n                    \"description\": \"A random seed to prevent split points in different flags from having the same targets\"\n                  },\n                  \"description\": {\n                    \"description\": \"A description of the flag\",\n                    \"type\": \"string\"\n                  },\n                  \"state\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"active\",\n                      \"archived\"\n                    ]\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"description\": \"Permanently delete a feature flag from the project. This action cannot be undone. Consider archiving the flag instead if you may need it in the future.\",\n        \"operationId\": \"deleteFlag\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a flag\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"304\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"flagIdOrSlug\",\n            \"description\": \"The flag id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The flag id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"ifMatch\",\n            \"description\": \"Etag to match, can be used interchangeably with the `if-match` header\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Etag to match, can be used interchangeably with the `if-match` header\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata in the response\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Whether to include metadata in the response\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/flags/{flagIdOrSlug}/versions\": {\n      \"get\": {\n        \"description\": \"Lists flag versions for a given flag.\",\n        \"operationId\": \"listFlagVersions\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List flag versions\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"versions\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"createdBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"message\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"revision\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"data\": {\n                            \"properties\": {\n                              \"description\": {\n                                \"type\": \"string\"\n                              },\n                              \"variants\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"description\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"label\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"id\",\n                                    \"value\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"environments\": {\n                                \"additionalProperties\": {\n                                  \"properties\": {\n                                    \"reuse\": {\n                                      \"properties\": {\n                                        \"active\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"environment\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"active\",\n                                        \"environment\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"targets\": {\n                                      \"additionalProperties\": {\n                                        \"additionalProperties\": {\n                                          \"additionalProperties\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"note\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"value\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"value\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"revision\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"pausedOutcome\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"variant\"\n                                          ]\n                                        },\n                                        \"variantId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"variantId\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"fallthrough\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"variant\"\n                                              ]\n                                            },\n                                            \"variantId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"variantId\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"split\"\n                                              ]\n                                            },\n                                            \"base\": {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"entity\"\n                                                  ]\n                                                },\n                                                \"kind\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"attribute\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"attribute\",\n                                                \"kind\",\n                                                \"type\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"weights\": {\n                                              \"additionalProperties\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"type\": \"object\"\n                                            },\n                                            \"defaultVariantId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"base\",\n                                            \"defaultVariantId\",\n                                            \"type\",\n                                            \"weights\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"active\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"rules\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"id\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"outcome\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"variant\"\n                                                    ]\n                                                  },\n                                                  \"variantId\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"type\",\n                                                  \"variantId\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"split\"\n                                                    ]\n                                                  },\n                                                  \"base\": {\n                                                    \"properties\": {\n                                                      \"type\": {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"entity\"\n                                                        ]\n                                                      },\n                                                      \"kind\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"attribute\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"attribute\",\n                                                      \"kind\",\n                                                      \"type\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  \"weights\": {\n                                                    \"additionalProperties\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"type\": \"object\"\n                                                  },\n                                                  \"defaultVariantId\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"base\",\n                                                  \"defaultVariantId\",\n                                                  \"type\",\n                                                  \"weights\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"conditions\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"rhs\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    {\n                                                      \"properties\": {\n                                                        \"type\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"list/inline\",\n                                                            \"list\"\n                                                          ]\n                                                        },\n                                                        \"items\": {\n                                                          \"items\": {\n                                                            \"oneOf\": [\n                                                              {\n                                                                \"properties\": {\n                                                                  \"label\": {\n                                                                    \"type\": \"string\"\n                                                                  },\n                                                                  \"note\": {\n                                                                    \"type\": \"string\"\n                                                                  },\n                                                                  \"value\": {\n                                                                    \"type\": \"number\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"value\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              },\n                                                              {\n                                                                \"properties\": {\n                                                                  \"label\": {\n                                                                    \"type\": \"string\"\n                                                                  },\n                                                                  \"note\": {\n                                                                    \"type\": \"string\"\n                                                                  },\n                                                                  \"value\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"value\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            ]\n                                                          },\n                                                          \"type\": \"array\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"items\",\n                                                        \"type\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"properties\": {\n                                                        \"type\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"regex\"\n                                                          ]\n                                                        },\n                                                        \"pattern\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"flags\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"flags\",\n                                                        \"pattern\",\n                                                        \"type\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    }\n                                                  ]\n                                                },\n                                                \"cmpOptions\": {\n                                                  \"properties\": {\n                                                    \"ignoreCase\": {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                },\n                                                \"lhs\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"type\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"segment\"\n                                                          ]\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"type\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"properties\": {\n                                                        \"type\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"entity\"\n                                                          ]\n                                                        },\n                                                        \"kind\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"attribute\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"attribute\",\n                                                        \"kind\",\n                                                        \"type\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  ]\n                                                },\n                                                \"cmp\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"eq\",\n                                                    \"!eq\",\n                                                    \"oneOf\",\n                                                    \"!oneOf\",\n                                                    \"containsAllOf\",\n                                                    \"containsAnyOf\",\n                                                    \"containsNoneOf\",\n                                                    \"startsWith\",\n                                                    \"!startsWith\",\n                                                    \"endsWith\",\n                                                    \"!endsWith\",\n                                                    \"contains\",\n                                                    \"!contains\",\n                                                    \"ex\",\n                                                    \"!ex\",\n                                                    \"gt\",\n                                                    \"gte\",\n                                                    \"lt\",\n                                                    \"lte\",\n                                                    \"regex\",\n                                                    \"!regex\",\n                                                    \"before\",\n                                                    \"after\"\n                                                  ]\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"cmp\",\n                                                \"lhs\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"type\": \"array\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"conditions\",\n                                          \"id\",\n                                          \"outcome\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"active\",\n                                    \"fallthrough\",\n                                    \"pausedOutcome\",\n                                    \"rules\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"seed\": {\n                                \"type\": \"number\"\n                              },\n                              \"state\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"active\",\n                                  \"archived\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"environments\",\n                              \"seed\",\n                              \"state\",\n                              \"variants\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"flagId\": {\n                            \"type\": \"string\"\n                          },\n                          \"changedEnvironments\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"metadata\": {\n                            \"properties\": {\n                              \"creator\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"changedEnvironments\",\n                          \"createdAt\",\n                          \"data\",\n                          \"flagId\",\n                          \"id\",\n                          \"revision\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"pagination\",\n                    \"versions\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"304\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"flagIdOrSlug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"minimum\": 1,\n              \"maximum\": 100,\n              \"default\": 20\n            }\n          },\n          {\n            \"name\": \"cursor\",\n            \"description\": \"Pagination cursor\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"Pagination cursor\"\n            }\n          },\n          {\n            \"name\": \"environment\",\n            \"description\": \"Environment to filter by\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"Environment to filter by\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include metadata\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/settings\": {\n      \"get\": {\n        \"description\": \"Retrieve feature flag settings for a project.\",\n        \"operationId\": \"getFlagSettings\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get project flag settings\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"typeName\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"settings\"\n                      ]\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"enabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"environments\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"connections\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"edgeConfigId\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigItemKey\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"edgeConfigId\",\n                          \"edgeConfigItemKey\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"entities\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\"\n                          },\n                          \"label\": {\n                            \"type\": \"string\"\n                          },\n                          \"attributes\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"labels\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"label\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"label\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"key\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"attributes\",\n                          \"kind\",\n                          \"label\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"metadata\": {\n                      \"properties\": {\n                        \"activeFlagCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"archivedFlagCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"segmentCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"packSizeInBytes\": {\n                          \"type\": \"number\"\n                        },\n                        \"packRevision\": {\n                          \"type\": \"number\"\n                        },\n                        \"configUpdatedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"activeFlagCount\",\n                        \"archivedFlagCount\",\n                        \"packSizeInBytes\",\n                        \"segmentCount\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"enabled\",\n                    \"entities\",\n                    \"environments\",\n                    \"metadata\",\n                    \"projectId\",\n                    \"typeName\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Syncs direct the synchronization of Flags to Edge Configs\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update feature flag settings for a project.\",\n        \"operationId\": \"updateFlagSettings\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update project flag settings\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"typeName\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"settings\"\n                      ]\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"enabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"environments\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"connections\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"edgeConfigId\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigItemKey\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"edgeConfigId\",\n                          \"edgeConfigItemKey\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"entities\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\"\n                          },\n                          \"label\": {\n                            \"type\": \"string\"\n                          },\n                          \"attributes\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"labels\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"label\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"label\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"key\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"attributes\",\n                          \"kind\",\n                          \"label\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"metadata\": {\n                      \"properties\": {\n                        \"activeFlagCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"archivedFlagCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"segmentCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"packSizeInBytes\": {\n                          \"type\": \"number\"\n                        },\n                        \"packRevision\": {\n                          \"type\": \"number\"\n                        },\n                        \"configUpdatedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"activeFlagCount\",\n                        \"archivedFlagCount\",\n                        \"packSizeInBytes\",\n                        \"segmentCount\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"enabled\",\n                    \"entities\",\n                    \"environments\",\n                    \"metadata\",\n                    \"projectId\",\n                    \"typeName\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Syncs direct the synchronization of Flags to Edge Configs\"\n                }\n              }\n            }\n          },\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"typeName\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"settings\"\n                      ]\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"enabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"environments\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"connections\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"edgeConfigId\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigItemKey\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"edgeConfigId\",\n                          \"edgeConfigItemKey\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"entities\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"kind\": {\n                            \"type\": \"string\"\n                          },\n                          \"label\": {\n                            \"type\": \"string\"\n                          },\n                          \"attributes\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"labels\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"label\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"label\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"key\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"attributes\",\n                          \"kind\",\n                          \"label\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"metadata\": {\n                      \"properties\": {\n                        \"activeFlagCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"archivedFlagCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"segmentCount\": {\n                          \"type\": \"number\"\n                        },\n                        \"packSizeInBytes\": {\n                          \"type\": \"number\"\n                        },\n                        \"packRevision\": {\n                          \"type\": \"number\"\n                        },\n                        \"configUpdatedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"activeFlagCount\",\n                        \"archivedFlagCount\",\n                        \"packSizeInBytes\",\n                        \"segmentCount\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"enabled\",\n                    \"entities\",\n                    \"environments\",\n                    \"metadata\",\n                    \"projectId\",\n                    \"typeName\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Syncs direct the synchronization of Flags to Edge Configs\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"enabled\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"entities\": {\n                    \"type\": \"array\",\n                    \"maxItems\": 32,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"kind\",\n                        \"label\",\n                        \"attributes\"\n                      ],\n                      \"properties\": {\n                        \"kind\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 128\n                        },\n                        \"label\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 128\n                        },\n                        \"attributes\": {\n                          \"type\": \"array\",\n                          \"maxItems\": 32,\n                          \"items\": {\n                            \"type\": \"object\",\n                            \"additionalProperties\": false,\n                            \"required\": [\n                              \"key\",\n                              \"type\"\n                            ],\n                            \"properties\": {\n                              \"key\": {\n                                \"type\": \"string\",\n                                \"maxLength\": 128\n                              },\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"maxLength\": 128\n                              },\n                              \"labels\": {\n                                \"type\": \"array\",\n                                \"maxItems\": 128,\n                                \"items\": {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"required\": [\n                                    \"label\",\n                                    \"value\"\n                                  ],\n                                  \"properties\": {\n                                    \"label\": {\n                                      \"type\": \"string\",\n                                      \"maxLength\": 128\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\",\n                                      \"maxLength\": 128\n                                    }\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"environments\": {\n                    \"description\": \"The environments to sync\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/teams/{teamId}/feature-flags/settings\": {\n      \"get\": {\n        \"description\": \"Retrieve feature flag settings for projects in a team.\",\n        \"operationId\": \"listTeamFlagSettings\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List team project flag settings\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"data\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"typeName\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"settings\"\n                                ]\n                              },\n                              \"projectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"ownerId\": {\n                                \"type\": \"string\"\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"environments\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"connections\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"edgeConfigId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"edgeConfigItemKey\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"edgeConfigId\",\n                                    \"edgeConfigItemKey\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"entities\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"kind\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"label\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"attributes\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"key\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"labels\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"label\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"value\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"label\",\n                                                \"value\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"type\": \"array\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"key\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"attributes\",\n                                    \"kind\",\n                                    \"label\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"metadata\": {\n                                \"properties\": {\n                                  \"activeFlagCount\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"archivedFlagCount\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"segmentCount\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"packSizeInBytes\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"packRevision\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"configUpdatedAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"activeFlagCount\",\n                                  \"archivedFlagCount\",\n                                  \"packSizeInBytes\",\n                                  \"segmentCount\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"enabled\",\n                              \"entities\",\n                              \"environments\",\n                              \"metadata\",\n                              \"projectId\",\n                              \"typeName\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Syncs direct the synchronization of Flags to Edge Configs\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"properties\": {\n                            \"next\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"next\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"data\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of settings to return.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of settings to return.\",\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100,\n              \"default\": 20\n            }\n          },\n          {\n            \"name\": \"cursor\",\n            \"description\": \"Pagination cursor to continue from.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Pagination cursor to continue from.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/teams/{teamId}/feature-flags/flags\": {\n      \"get\": {\n        \"description\": \"Retrieve all feature flags for a team across all projects. The list can be filtered by state and supports pagination.\",\n        \"operationId\": \"listTeamFlags\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List all flags for a team\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"data\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/Flag\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"next\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"data\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"state\",\n            \"description\": \"The state of the flags to retrieve. Defaults to `active`.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"active\",\n                \"archived\"\n              ],\n              \"description\": \"The state of the flags to retrieve. Defaults to `active`.\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata in the response\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Whether to include metadata in the response\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of flags to return.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of flags to return.\",\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100,\n              \"default\": 20\n            }\n          },\n          {\n            \"name\": \"cursor\",\n            \"description\": \"Pagination cursor to continue from.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Pagination cursor to continue from.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search flags by their slug or description. Case-insensitive.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Search flags by their slug or description. Case-insensitive.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"kind\",\n            \"description\": \"The kind of flags to retrieve.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"The kind of flags to retrieve.\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"boolean\",\n                \"string\",\n                \"number\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/segments\": {\n      \"put\": {\n        \"description\": \"Create a new feature flag segment.\",\n        \"operationId\": \"createFlagSegment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a segment\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"description\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdBy\": {\n                      \"type\": \"string\"\n                    },\n                    \"usedByFlags\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"usedBySegments\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"label\": {\n                      \"type\": \"string\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"typeName\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"segment\"\n                      ]\n                    },\n                    \"data\": {\n                      \"properties\": {\n                        \"rules\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"outcome\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"all\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"split\"\n                                        ]\n                                      },\n                                      \"base\": {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"entity\"\n                                            ]\n                                          },\n                                          \"kind\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"attribute\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"attribute\",\n                                          \"kind\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"passPromille\": {\n                                        \"type\": \"number\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"base\",\n                                      \"passPromille\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"conditions\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"rhs\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"list/inline\",\n                                                \"list\"\n                                              ]\n                                            },\n                                            \"items\": {\n                                              \"items\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"label\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"note\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"value\": {\n                                                        \"type\": \"number\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"value\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"properties\": {\n                                                      \"label\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"note\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"value\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"value\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  }\n                                                ]\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"items\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"regex\"\n                                              ]\n                                            },\n                                            \"pattern\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"flags\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"flags\",\n                                            \"pattern\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"cmpOptions\": {\n                                      \"properties\": {\n                                        \"ignoreCase\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"lhs\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"segment\"\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"entity\"\n                                              ]\n                                            },\n                                            \"kind\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"attribute\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"attribute\",\n                                            \"kind\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"cmp\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"eq\",\n                                        \"!eq\",\n                                        \"oneOf\",\n                                        \"!oneOf\",\n                                        \"containsAllOf\",\n                                        \"containsAnyOf\",\n                                        \"containsNoneOf\",\n                                        \"startsWith\",\n                                        \"!startsWith\",\n                                        \"endsWith\",\n                                        \"!endsWith\",\n                                        \"contains\",\n                                        \"!contains\",\n                                        \"ex\",\n                                        \"!ex\",\n                                        \"gt\",\n                                        \"gte\",\n                                        \"lt\",\n                                        \"lte\",\n                                        \"regex\",\n                                        \"!regex\",\n                                        \"before\",\n                                        \"after\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"cmp\",\n                                    \"lhs\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"conditions\",\n                              \"id\",\n                              \"outcome\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"include\": {\n                          \"additionalProperties\": {\n                            \"additionalProperties\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"note\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"exclude\": {\n                          \"additionalProperties\": {\n                            \"additionalProperties\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"note\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"hint\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"data\",\n                    \"hint\",\n                    \"id\",\n                    \"label\",\n                    \"projectId\",\n                    \"slug\",\n                    \"typeName\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"slug\": {\n                    \"type\": \"string\"\n                  },\n                  \"createdBy\": {\n                    \"description\": \"The entity who created the segment\",\n                    \"type\": \"string\"\n                  },\n                  \"label\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": {\n                    \"type\": \"string\"\n                  },\n                  \"data\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"description\": \"The data of the segment\",\n                    \"properties\": {\n                      \"rules\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"conditions\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"properties\": {\n                                  \"lhs\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {}\n                                        },\n                                        \"required\": [\n                                          \"type\"\n                                        ]\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {},\n                                          \"kind\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"attribute\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"kind\",\n                                          \"attribute\"\n                                        ]\n                                      }\n                                    ]\n                                  },\n                                  \"cmp\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"eq\",\n                                      \"!eq\",\n                                      \"oneOf\",\n                                      \"!oneOf\",\n                                      \"containsAllOf\",\n                                      \"containsAnyOf\",\n                                      \"containsNoneOf\",\n                                      \"startsWith\",\n                                      \"!startsWith\",\n                                      \"endsWith\",\n                                      \"!endsWith\",\n                                      \"contains\",\n                                      \"!contains\",\n                                      \"ex\",\n                                      \"!ex\",\n                                      \"gt\",\n                                      \"gte\",\n                                      \"lt\",\n                                      \"lte\",\n                                      \"regex\",\n                                      \"!regex\",\n                                      \"before\",\n                                      \"after\"\n                                    ]\n                                  },\n                                  \"rhs\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"list/inline\",\n                                              \"list\"\n                                            ]\n                                          },\n                                          \"items\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                              \"anyOf\": [\n                                                {\n                                                  \"type\": \"object\",\n                                                  \"additionalProperties\": false,\n                                                  \"properties\": {\n                                                    \"label\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"note\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"value\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"value\"\n                                                  ]\n                                                },\n                                                {\n                                                  \"type\": \"object\",\n                                                  \"additionalProperties\": false,\n                                                  \"properties\": {\n                                                    \"label\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"note\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"value\": {\n                                                      \"type\": \"string\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"value\"\n                                                  ]\n                                                }\n                                              ]\n                                            },\n                                            \"maxItems\": 10000\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"items\"\n                                        ]\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {},\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"flags\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"pattern\",\n                                          \"flags\"\n                                        ]\n                                      },\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\"\n                                      }\n                                    ]\n                                  },\n                                  \"cmpOptions\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"ignoreCase\": {\n                                        \"type\": \"boolean\"\n                                      }\n                                    }\n                                  }\n                                },\n                                \"required\": [\n                                  \"lhs\",\n                                  \"cmp\"\n                                ]\n                              }\n                            },\n                            \"outcome\": {\n                              \"anyOf\": [\n                                {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"type\": {}\n                                  },\n                                  \"required\": [\n                                    \"type\"\n                                  ]\n                                },\n                                {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"type\": {},\n                                    \"base\": {\n                                      \"type\": \"object\",\n                                      \"additionalProperties\": false,\n                                      \"properties\": {\n                                        \"type\": {},\n                                        \"kind\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"attribute\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"kind\",\n                                        \"attribute\"\n                                      ]\n                                    },\n                                    \"passPromille\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"type\",\n                                    \"base\",\n                                    \"passPromille\"\n                                  ]\n                                }\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"conditions\",\n                            \"outcome\",\n                            \"id\"\n                          ]\n                        },\n                        \"maxItems\": 10000\n                      },\n                      \"include\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"note\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"value\"\n                              ]\n                            },\n                            \"maxItems\": 10000\n                          }\n                        }\n                      },\n                      \"exclude\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"note\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"value\"\n                              ]\n                            },\n                            \"maxItems\": 10000\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"hint\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"slug\",\n                  \"label\",\n                  \"data\",\n                  \"hint\"\n                ]\n              }\n            }\n          }\n        }\n      },\n      \"get\": {\n        \"description\": \"List all feature flag segments for a project.\",\n        \"operationId\": \"listFlagSegments\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List segments\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"data\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/Segment\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"data\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include metadata\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/segments/{segmentIdOrSlug}\": {\n      \"get\": {\n        \"description\": \"Retrieve a feature flag segment by ID or slug.\",\n        \"operationId\": \"getFlagSegment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a segment\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Segment\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"segmentIdOrSlug\",\n            \"description\": \"The segment slug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The segment slug\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include metadata\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Delete a feature flag segment.\",\n        \"operationId\": \"deleteFlagSegment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a segment\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"segmentIdOrSlug\",\n            \"description\": \"The segment slug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The segment slug\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include metadata\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update an existing feature flag segment.\",\n        \"operationId\": \"updateFlagSegment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a segment\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"description\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\"\n                        },\n                        \"usedByFlags\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usedBySegments\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"label\": {\n                          \"type\": \"string\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"projectId\": {\n                          \"type\": \"string\"\n                        },\n                        \"typeName\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"segment\"\n                          ]\n                        },\n                        \"data\": {\n                          \"properties\": {\n                            \"rules\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"outcome\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"all\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"split\"\n                                            ]\n                                          },\n                                          \"base\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"entity\"\n                                                ]\n                                              },\n                                              \"kind\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"attribute\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"attribute\",\n                                              \"kind\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"passPromille\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"base\",\n                                          \"passPromille\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"conditions\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"rhs\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"type\": \"number\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"list/inline\",\n                                                    \"list\"\n                                                  ]\n                                                },\n                                                \"items\": {\n                                                  \"items\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"label\": {\n                                                            \"type\": \"string\"\n                                                          },\n                                                          \"note\": {\n                                                            \"type\": \"string\"\n                                                          },\n                                                          \"value\": {\n                                                            \"type\": \"number\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"value\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"properties\": {\n                                                          \"label\": {\n                                                            \"type\": \"string\"\n                                                          },\n                                                          \"note\": {\n                                                            \"type\": \"string\"\n                                                          },\n                                                          \"value\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"value\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"type\": \"array\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"items\",\n                                                \"type\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"regex\"\n                                                  ]\n                                                },\n                                                \"pattern\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"flags\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"flags\",\n                                                \"pattern\",\n                                                \"type\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"cmpOptions\": {\n                                          \"properties\": {\n                                            \"ignoreCase\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"lhs\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"segment\"\n                                                  ]\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"type\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"entity\"\n                                                  ]\n                                                },\n                                                \"kind\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"attribute\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"attribute\",\n                                                \"kind\",\n                                                \"type\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"cmp\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"eq\",\n                                            \"!eq\",\n                                            \"oneOf\",\n                                            \"!oneOf\",\n                                            \"containsAllOf\",\n                                            \"containsAnyOf\",\n                                            \"containsNoneOf\",\n                                            \"startsWith\",\n                                            \"!startsWith\",\n                                            \"endsWith\",\n                                            \"!endsWith\",\n                                            \"contains\",\n                                            \"!contains\",\n                                            \"ex\",\n                                            \"!ex\",\n                                            \"gt\",\n                                            \"gte\",\n                                            \"lt\",\n                                            \"lte\",\n                                            \"regex\",\n                                            \"!regex\",\n                                            \"before\",\n                                            \"after\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"cmp\",\n                                        \"lhs\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"conditions\",\n                                  \"id\",\n                                  \"outcome\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"include\": {\n                              \"additionalProperties\": {\n                                \"additionalProperties\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"note\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"exclude\": {\n                              \"additionalProperties\": {\n                                \"additionalProperties\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"note\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"hint\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"data\",\n                        \"hint\",\n                        \"id\",\n                        \"label\",\n                        \"projectId\",\n                        \"slug\",\n                        \"typeName\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"$ref\": \"#/components/schemas/Segment\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"segmentIdOrSlug\",\n            \"description\": \"The segment slug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The segment slug\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"withMetadata\",\n            \"description\": \"Whether to include metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"boolean\",\n              \"description\": \"Whether to include metadata\",\n              \"default\": false\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"operations\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"action\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"add\",\n                            \"remove\"\n                          ]\n                        },\n                        \"field\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"include\",\n                            \"exclude\"\n                          ]\n                        },\n                        \"entity\": {\n                          \"type\": \"string\"\n                        },\n                        \"attribute\": {\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"properties\": {\n                            \"note\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"value\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"action\",\n                        \"field\",\n                        \"entity\",\n                        \"attribute\",\n                        \"value\"\n                      ]\n                    }\n                  },\n                  \"label\": {\n                    \"type\": \"string\"\n                  },\n                  \"description\": {\n                    \"type\": \"string\"\n                  },\n                  \"data\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"description\": \"The data of the segment\",\n                    \"properties\": {\n                      \"rules\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"conditions\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"additionalProperties\": false,\n                                \"properties\": {\n                                  \"lhs\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {}\n                                        },\n                                        \"required\": [\n                                          \"type\"\n                                        ]\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {},\n                                          \"kind\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"attribute\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"kind\",\n                                          \"attribute\"\n                                        ]\n                                      }\n                                    ]\n                                  },\n                                  \"cmp\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"eq\",\n                                      \"!eq\",\n                                      \"oneOf\",\n                                      \"!oneOf\",\n                                      \"containsAllOf\",\n                                      \"containsAnyOf\",\n                                      \"containsNoneOf\",\n                                      \"startsWith\",\n                                      \"!startsWith\",\n                                      \"endsWith\",\n                                      \"!endsWith\",\n                                      \"contains\",\n                                      \"!contains\",\n                                      \"ex\",\n                                      \"!ex\",\n                                      \"gt\",\n                                      \"gte\",\n                                      \"lt\",\n                                      \"lte\",\n                                      \"regex\",\n                                      \"!regex\",\n                                      \"before\",\n                                      \"after\"\n                                    ]\n                                  },\n                                  \"rhs\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"list/inline\",\n                                              \"list\"\n                                            ]\n                                          },\n                                          \"items\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                              \"anyOf\": [\n                                                {\n                                                  \"type\": \"object\",\n                                                  \"additionalProperties\": false,\n                                                  \"properties\": {\n                                                    \"label\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"note\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"value\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"value\"\n                                                  ]\n                                                },\n                                                {\n                                                  \"type\": \"object\",\n                                                  \"additionalProperties\": false,\n                                                  \"properties\": {\n                                                    \"label\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"note\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"value\": {\n                                                      \"type\": \"string\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"value\"\n                                                  ]\n                                                }\n                                              ]\n                                            },\n                                            \"maxItems\": 10000\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"items\"\n                                        ]\n                                      },\n                                      {\n                                        \"type\": \"object\",\n                                        \"additionalProperties\": false,\n                                        \"properties\": {\n                                          \"type\": {},\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"flags\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"pattern\",\n                                          \"flags\"\n                                        ]\n                                      },\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\"\n                                      }\n                                    ]\n                                  },\n                                  \"cmpOptions\": {\n                                    \"type\": \"object\",\n                                    \"additionalProperties\": false,\n                                    \"properties\": {\n                                      \"ignoreCase\": {\n                                        \"type\": \"boolean\"\n                                      }\n                                    }\n                                  }\n                                },\n                                \"required\": [\n                                  \"lhs\",\n                                  \"cmp\"\n                                ]\n                              }\n                            },\n                            \"outcome\": {\n                              \"anyOf\": [\n                                {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"type\": {}\n                                  },\n                                  \"required\": [\n                                    \"type\"\n                                  ]\n                                },\n                                {\n                                  \"type\": \"object\",\n                                  \"additionalProperties\": false,\n                                  \"properties\": {\n                                    \"type\": {},\n                                    \"base\": {\n                                      \"type\": \"object\",\n                                      \"additionalProperties\": false,\n                                      \"properties\": {\n                                        \"type\": {},\n                                        \"kind\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"attribute\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"kind\",\n                                        \"attribute\"\n                                      ]\n                                    },\n                                    \"passPromille\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"type\",\n                                    \"base\",\n                                    \"passPromille\"\n                                  ]\n                                }\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"conditions\",\n                            \"outcome\",\n                            \"id\"\n                          ]\n                        },\n                        \"maxItems\": 10000\n                      },\n                      \"include\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"note\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"value\"\n                              ]\n                            },\n                            \"maxItems\": 10000\n                          }\n                        }\n                      },\n                      \"exclude\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                          \"type\": \"object\",\n                          \"additionalProperties\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"properties\": {\n                                \"note\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"value\"\n                              ]\n                            },\n                            \"maxItems\": 10000\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"hint\": {\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/deployments/{deploymentId}/feature-flags\": {\n      \"get\": {\n        \"description\": \"Retrieve the feature flags of a deployment.\",\n        \"operationId\": \"getDeploymentFeatureFlags\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve the feature flags of a deployment\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"flags\": {\n                      \"items\": {\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"status\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"deploymentId\": {\n                          \"type\": \"string\"\n                        },\n                        \"projectId\": {\n                          \"type\": \"string\"\n                        },\n                        \"responseStatus\": {\n                          \"type\": \"number\",\n                          \"description\": \"The HTTP status code from the flags discovery endpoint.\"\n                        },\n                        \"flagCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of flag definitions returned by the flags discovery endpoint.\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"deploymentId\",\n                        \"flagCount\",\n                        \"projectId\",\n                        \"responseStatus\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"flags\",\n                    \"status\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/sdk-keys\": {\n      \"get\": {\n        \"description\": \"Gets all SDK keys for a project.\",\n        \"operationId\": \"getSdkKeys\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get all SDK keys\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"data\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/FlagsSdkKey\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"data\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"put\": {\n        \"description\": \"Creates an SDK key.\",\n        \"operationId\": \"createSdkKey\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create an SDK key\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/FlagsSdkKey\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project id or name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"sdkKeyType\",\n                  \"environment\"\n                ],\n                \"properties\": {\n                  \"sdkKeyType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"server\",\n                      \"mobile\",\n                      \"client\"\n                    ]\n                  },\n                  \"environment\": {\n                    \"type\": \"string\"\n                  },\n                  \"label\": {\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{projectIdOrName}/feature-flags/sdk-keys/{hashKey}\": {\n      \"delete\": {\n        \"description\": \"Deletes an SDK key.\",\n        \"operationId\": \"deleteSdkKey\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an SDK key\",\n        \"tags\": [\n          \"feature-flags\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectIdOrName\",\n            \"description\": \"The project id or name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The project id or name\"\n            }\n          },\n          {\n            \"name\": \"hashKey\",\n            \"description\": \"The SDK key hash key to delete\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The SDK key hash key to delete\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/integrations/git-namespaces\": {\n      \"get\": {\n        \"description\": \"Lists git namespaces for a supported provider. Supported providers are `github`, `gitlab` and `bitbucket`. If the provider is not provided, it will try to obtain it from the user that authenticated the request.\",\n        \"operationId\": \"gitNamespaces\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List git namespaces by provider\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"items\": {\n                    \"properties\": {\n                      \"provider\": {\n                        \"type\": \"string\"\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"number\"\n                          }\n                        ]\n                      },\n                      \"ownerType\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"isAccessRestricted\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"installationId\": {\n                        \"type\": \"number\"\n                      },\n                      \"requireReauth\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"ownerType\",\n                      \"provider\",\n                      \"slug\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"type\": \"array\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"host\",\n            \"description\": \"The custom Git host if using a custom Git provider, like GitHub Enterprise Server\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"The custom Git host if using a custom Git provider, like GitHub Enterprise Server\",\n              \"type\": \"string\",\n              \"example\": \"ghes-test.now.systems\"\n            }\n          },\n          {\n            \"name\": \"provider\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"enum\": [\n                \"github\",\n                \"github-limited\",\n                \"github-custom-host\",\n                \"gitlab\",\n                \"bitbucket\"\n              ]\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/integrations/search-repo\": {\n      \"get\": {\n        \"description\": \"Lists git repositories linked to a namespace `id` for a supported provider. A specific namespace `id` can be obtained via the `git-namespaces`  endpoint. Supported providers are `github`, `gitlab` and `bitbucket`. If the provider or namespace is not provided, it will try to obtain it from the user that authenticated the request.\",\n        \"operationId\": \"searchRepo\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List git repositories linked to namespace by provider\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"gitAccount\": {\n                          \"properties\": {\n                            \"provider\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\",\n                                \"github-limited\",\n                                \"github-custom-host\",\n                                \"gitlab\",\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"namespaceId\": {\n                              \"nullable\": true,\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"namespaceId\",\n                            \"provider\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"repos\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"number\"\n                                  }\n                                ]\n                              },\n                              \"provider\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"github\",\n                                  \"github-limited\",\n                                  \"github-custom-host\",\n                                  \"gitlab\",\n                                  \"bitbucket\"\n                                ]\n                              },\n                              \"url\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"slug\": {\n                                \"type\": \"string\"\n                              },\n                              \"namespace\": {\n                                \"type\": \"string\"\n                              },\n                              \"owner\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      }\n                                    ]\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"ownerType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"user\",\n                                  \"team\"\n                                ]\n                              },\n                              \"private\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"defaultBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"defaultBranch\",\n                              \"id\",\n                              \"name\",\n                              \"namespace\",\n                              \"owner\",\n                              \"ownerType\",\n                              \"private\",\n                              \"provider\",\n                              \"slug\",\n                              \"updatedAt\",\n                              \"url\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"gitAccount\",\n                        \"repos\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"query\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"namespaceId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"nullable\": true,\n              \"oneOf\": [\n                {\n                  \"type\": \"string\"\n                },\n                {\n                  \"type\": \"number\"\n                }\n              ]\n            }\n          },\n          {\n            \"name\": \"provider\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"enum\": [\n                \"github\",\n                \"github-limited\",\n                \"github-custom-host\",\n                \"gitlab\",\n                \"bitbucket\"\n              ]\n            }\n          },\n          {\n            \"name\": \"installationId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"host\",\n            \"description\": \"The custom Git host if using a custom Git provider, like GitHub Enterprise Server\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"The custom Git host if using a custom Git provider, like GitHub Enterprise Server\",\n              \"type\": \"string\",\n              \"example\": \"ghes-test.now.systems\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/integrations/integration/{integrationIdOrSlug}/products/{productIdOrSlug}/plans\": {\n      \"get\": {\n        \"description\": \"Get a list of billing plans for an integration and product.\",\n        \"operationId\": \"getBillingPlans\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List integration billing plans\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"plans\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"prepayment\",\n                              \"subscription\"\n                            ]\n                          },\n                          \"description\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"scope\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"installation\",\n                              \"resource\"\n                            ]\n                          },\n                          \"paymentMethodRequired\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"preauthorizationAmount\": {\n                            \"type\": \"number\"\n                          },\n                          \"initialCharge\": {\n                            \"type\": \"string\"\n                          },\n                          \"minimumAmount\": {\n                            \"type\": \"string\"\n                          },\n                          \"maximumAmount\": {\n                            \"type\": \"string\"\n                          },\n                          \"maximumAmountAutoPurchasePerPeriod\": {\n                            \"type\": \"string\"\n                          },\n                          \"cost\": {\n                            \"type\": \"string\"\n                          },\n                          \"details\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"label\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"label\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"highlightedDetails\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"label\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"label\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"quote\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"line\": {\n                                  \"type\": \"string\"\n                                },\n                                \"amount\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"amount\",\n                                \"line\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"effectiveDate\": {\n                            \"type\": \"string\"\n                          },\n                          \"disabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"description\",\n                          \"id\",\n                          \"name\",\n                          \"paymentMethodRequired\",\n                          \"scope\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"plans\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationIdOrSlug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"productIdOrSlug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"metadata\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"source\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"marketplace\",\n                \"deploy-button\",\n                \"external\",\n                \"v0\",\n                \"resource-claims\",\n                \"cli\",\n                \"oauth\",\n                \"backoffice\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/integrations/installations/{integrationConfigurationId}/resources/{resourceId}/connections\": {\n      \"post\": {\n        \"description\": \"Connects an integration resource to a Vercel project. This endpoint establishes a connection between a provisioned integration resource (from storage APIs like `POST /v1/storage/stores/integration/direct`) and a specific Vercel project.\",\n        \"operationId\": \"connectIntegrationResourceToProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Connect integration resource to project\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"projectId\"\n                ],\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}\": {\n      \"patch\": {\n        \"description\": \"This endpoint updates an integration installation.\",\n        \"operationId\": \"update-installation\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Installation\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"ready\",\n                      \"pending\",\n                      \"onboarding\",\n                      \"suspended\",\n                      \"resumed\",\n                      \"uninstalled\",\n                      \"error\"\n                    ]\n                  },\n                  \"externalId\": {\n                    \"type\": \"string\"\n                  },\n                  \"billingPlan\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"id\",\n                      \"type\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"prepayment\",\n                          \"subscription\"\n                        ]\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"description\": {\n                        \"type\": \"string\"\n                      },\n                      \"paymentMethodRequired\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"cost\": {\n                        \"type\": \"string\"\n                      },\n                      \"details\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"label\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"label\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      \"highlightedDetails\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"label\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"label\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      \"effectiveDate\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"additionalProperties\": true\n                  },\n                  \"notification\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"level\",\n                          \"title\"\n                        ],\n                        \"properties\": {\n                          \"level\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"info\",\n                              \"warn\",\n                              \"error\"\n                            ]\n                          },\n                          \"title\": {\n                            \"type\": \"string\"\n                          },\n                          \"message\": {\n                            \"type\": \"string\"\n                          },\n                          \"href\": {\n                            \"type\": \"string\",\n                            \"format\": \"uri\"\n                          }\n                        }\n                      },\n                      {\n                        \"type\": \"string\"\n                      }\n                    ],\n                    \"description\": \"A notification to display to your customer. Send `null` to clear the current notification.\"\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/account\": {\n      \"get\": {\n        \"description\": \"Fetches the best account or user’s contact info\",\n        \"operationId\": \"get-account-info\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Account Information\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the team the installation is tied to.\"\n                    },\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"description\": \"A URL linking to the installation in the Vercel Dashboard.\"\n                    },\n                    \"contact\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"email\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"email\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The best contact for the integration, which can change as team members and their roles change.\"\n                    }\n                  },\n                  \"required\": [\n                    \"contact\",\n                    \"url\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/member/{memberId}\": {\n      \"get\": {\n        \"description\": \"Returns the member role and other information for a given member ID (\\\"user_id\\\" claim in the SSO OIDC token).\",\n        \"operationId\": \"get-member\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Member Information\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"role\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"ADMIN\",\n                        \"USER\"\n                      ],\n                      \"description\": \"\\\"The `ADMIN` role, by default, is provided to users capable of installing integrations, while the `USER` role can be granted to Vercel users with the Vercel `Billing` or Vercel `Viewer` role, which are considered to be Read-Only roles.\\\"\"\n                    },\n                    \"globalUserId\": {\n                      \"type\": \"string\"\n                    },\n                    \"userEmail\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\",\n                    \"role\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"memberId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/events\": {\n      \"post\": {\n        \"description\": \"Partner notifies Vercel of any changes made to an Installation or a Resource. Vercel is expected to use `list-resources` and other read APIs to get the new state.\\u003cbr/\\u003e \\u003cbr/\\u003e `resource.updated` event should be dispatched when any state of a resource linked to Vercel is modified by the partner.\\u003cbr/\\u003e `installation.updated` event should be dispatched when an installation's billing plan is changed via the provider instead of Vercel.\\u003cbr/\\u003e \\u003cbr/\\u003e Resource update use cases: \\u003cbr/\\u003e \\u003cbr/\\u003e - The user renames a database in the partner’s application. The partner should dispatch a `resource.updated` event to notify Vercel to update the resource in Vercel’s datastores.\\u003cbr/\\u003e - A resource has been suspended due to a lack of use. The partner should dispatch a `resource.updated` event to notify Vercel to update the resource's status in Vercel's datastores.\\u003cbr/\\u003e\",\n        \"operationId\": \"create-event\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create Event\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"event\"\n                ],\n                \"properties\": {\n                  \"event\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"installation.updated\"\n                            ]\n                          },\n                          \"billingPlanId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The installation-level billing plan ID\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\"\n                        ],\n                        \"additionalProperties\": false\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"resource.updated\"\n                            ]\n                          },\n                          \"productId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partner-provided product slug or id\"\n                          },\n                          \"resourceId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partner provided resource ID\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"resourceId\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    ]\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/resources\": {\n      \"get\": {\n        \"description\": \"Get all resources for a given installation ID.\",\n        \"operationId\": \"get-integration-resources\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Integration Resources\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"resources\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"partnerId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID provided by the partner for the given resource\"\n                          },\n                          \"internalId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID assigned by Vercel for the given resource\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"The name of the resource as it is recorded in Vercel\"\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"error\",\n                              \"ready\",\n                              \"pending\",\n                              \"onboarding\",\n                              \"suspended\",\n                              \"resumed\",\n                              \"uninstalled\"\n                            ],\n                            \"description\": \"The current status of the resource\"\n                          },\n                          \"productId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of the product the resource is derived from\"\n                          },\n                          \"protocolSettings\": {\n                            \"properties\": {\n                              \"experimentation\": {\n                                \"properties\": {\n                                  \"edgeConfigSyncingEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"edgeConfigId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"edgeConfigTokenId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"Any settings provided for the resource to support its product's protocols\"\n                          },\n                          \"notification\": {\n                            \"properties\": {\n                              \"title\": {\n                                \"type\": \"string\"\n                              },\n                              \"level\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"error\",\n                                  \"info\",\n                                  \"warn\"\n                                ]\n                              },\n                              \"message\": {\n                                \"type\": \"string\"\n                              },\n                              \"href\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"level\",\n                              \"title\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The notification, if set, displayed to the user when viewing the resource in Vercel\"\n                          },\n                          \"billingPlanId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of the billing plan the resource is subscribed to, if applicable\"\n                          },\n                          \"metadata\": {\n                            \"additionalProperties\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                },\n                                {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"The configured metadata for the resource as defined by its product's Metadata Schema\"\n                                },\n                                {\n                                  \"items\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"The configured metadata for the resource as defined by its product's Metadata Schema\"\n                                },\n                                {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              ]\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"The configured metadata for the resource as defined by its product's Metadata Schema\"\n                          }\n                        },\n                        \"required\": [\n                          \"internalId\",\n                          \"name\",\n                          \"partnerId\",\n                          \"productId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"resources\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/resources/{resourceId}\": {\n      \"get\": {\n        \"description\": \"Get a resource by its partner ID.\",\n        \"operationId\": \"get-integration-resource\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Integration Resource\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID provided by the 3rd party provider for the given resource\"\n                    },\n                    \"internalId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID assigned by Vercel for the given resource\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the resource as it is recorded in Vercel\"\n                    },\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"error\",\n                        \"ready\",\n                        \"pending\",\n                        \"onboarding\",\n                        \"suspended\",\n                        \"resumed\",\n                        \"uninstalled\"\n                      ],\n                      \"description\": \"The current status of the resource\"\n                    },\n                    \"productId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the product the resource is derived from\"\n                    },\n                    \"protocolSettings\": {\n                      \"properties\": {\n                        \"experimentation\": {\n                          \"properties\": {\n                            \"edgeConfigSyncingEnabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"edgeConfigId\": {\n                              \"type\": \"string\"\n                            },\n                            \"edgeConfigTokenId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Any settings provided for the resource to support its product's protocols\"\n                    },\n                    \"notification\": {\n                      \"properties\": {\n                        \"title\": {\n                          \"type\": \"string\"\n                        },\n                        \"level\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"error\",\n                            \"info\",\n                            \"warn\"\n                          ]\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        },\n                        \"href\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"level\",\n                        \"title\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The notification, if set, displayed to the user when viewing the resource in Vercel\"\n                    },\n                    \"billingPlanId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the billing plan the resource is subscribed to, if applicable\"\n                    },\n                    \"metadata\": {\n                      \"additionalProperties\": {\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"number\"\n                          },\n                          {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The configured metadata for the resource as defined by its product's Metadata Schema\"\n                          },\n                          {\n                            \"items\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The configured metadata for the resource as defined by its product's Metadata Schema\"\n                          },\n                          {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        ]\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"The configured metadata for the resource as defined by its product's Metadata Schema\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\",\n                    \"internalId\",\n                    \"name\",\n                    \"productId\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"description\": \"The ID of the integration configuration (installation) the resource belongs to\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the integration configuration (installation) the resource belongs to\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"description\": \"The ID provided by the 3rd party provider for the given resource\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID provided by the 3rd party provider for the given resource\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Delete a resource owned by the selected installation ID.\",\n        \"operationId\": \"delete-integration-resource\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete Integration Resource\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      },\n      \"put\": {\n        \"description\": \"This endpoint imports (upserts) a resource to Vercel's installation. This may be needed if resources can be independently created on the partner's side and need to be synchronized to Vercel.\",\n        \"operationId\": \"import-resource\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Import Resource\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"name\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"productId\",\n                  \"name\",\n                  \"status\"\n                ],\n                \"properties\": {\n                  \"ownership\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"owned\",\n                      \"linked\",\n                      \"sandbox\"\n                    ]\n                  },\n                  \"productId\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"ready\",\n                      \"pending\",\n                      \"onboarding\",\n                      \"suspended\",\n                      \"resumed\",\n                      \"uninstalled\",\n                      \"error\"\n                    ]\n                  },\n                  \"metadata\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  },\n                  \"billingPlan\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"id\",\n                      \"type\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"prepayment\",\n                          \"subscription\"\n                        ]\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"description\": {\n                        \"type\": \"string\"\n                      },\n                      \"paymentMethodRequired\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"cost\": {\n                        \"type\": \"string\"\n                      },\n                      \"details\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"label\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"label\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      \"highlightedDetails\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"label\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"label\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      \"effectiveDate\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"additionalProperties\": true\n                  },\n                  \"notification\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"level\",\n                      \"title\"\n                    ],\n                    \"properties\": {\n                      \"level\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"info\",\n                          \"warn\",\n                          \"error\"\n                        ]\n                      },\n                      \"title\": {\n                        \"type\": \"string\"\n                      },\n                      \"message\": {\n                        \"type\": \"string\"\n                      },\n                      \"href\": {\n                        \"type\": \"string\",\n                        \"format\": \"uri\"\n                      }\n                    }\n                  },\n                  \"extras\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  },\n                  \"secrets\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"name\",\n                        \"value\"\n                      ],\n                      \"properties\": {\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"prefix\": {\n                          \"type\": \"string\"\n                        },\n                        \"environmentOverrides\": {\n                          \"type\": \"object\",\n                          \"description\": \"A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.\",\n                          \"properties\": {\n                            \"development\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for development environment.\"\n                            },\n                            \"preview\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for preview environment.\"\n                            },\n                            \"production\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for production environment.\"\n                            }\n                          }\n                        }\n                      },\n                      \"additionalProperties\": false\n                    }\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"description\": \"This endpoint updates an existing resource in the installation. All parameters are optional, allowing partial updates.\",\n        \"operationId\": \"update-resource\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Resource\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"name\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"ownership\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"owned\",\n                      \"linked\",\n                      \"sandbox\"\n                    ]\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"ready\",\n                      \"pending\",\n                      \"onboarding\",\n                      \"suspended\",\n                      \"resumed\",\n                      \"uninstalled\",\n                      \"error\"\n                    ]\n                  },\n                  \"metadata\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  },\n                  \"billingPlan\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"id\",\n                      \"type\",\n                      \"name\"\n                    ],\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"prepayment\",\n                          \"subscription\"\n                        ]\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"description\": {\n                        \"type\": \"string\"\n                      },\n                      \"paymentMethodRequired\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"cost\": {\n                        \"type\": \"string\"\n                      },\n                      \"details\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"label\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"label\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      \"highlightedDetails\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"label\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"label\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      \"effectiveDate\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"additionalProperties\": true\n                  },\n                  \"notification\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"level\",\n                          \"title\"\n                        ],\n                        \"properties\": {\n                          \"level\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"info\",\n                              \"warn\",\n                              \"error\"\n                            ]\n                          },\n                          \"title\": {\n                            \"type\": \"string\"\n                          },\n                          \"message\": {\n                            \"type\": \"string\"\n                          },\n                          \"href\": {\n                            \"type\": \"string\",\n                            \"format\": \"uri\"\n                          }\n                        }\n                      },\n                      {\n                        \"type\": \"string\"\n                      }\n                    ]\n                  },\n                  \"extras\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": true\n                  },\n                  \"secrets\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"required\": [\n                            \"name\",\n                            \"value\"\n                          ],\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            },\n                            \"prefix\": {\n                              \"type\": \"string\"\n                            },\n                            \"environmentOverrides\": {\n                              \"type\": \"object\",\n                              \"description\": \"A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.\",\n                              \"properties\": {\n                                \"development\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Value used for development environment.\"\n                                },\n                                \"preview\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Value used for preview environment.\"\n                                },\n                                \"production\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Value used for production environment.\"\n                                }\n                              }\n                            }\n                          },\n                          \"additionalProperties\": false\n                        }\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"secrets\"\n                        ],\n                        \"properties\": {\n                          \"secrets\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"required\": [\n                                \"name\",\n                                \"value\"\n                              ],\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                },\n                                \"prefix\": {\n                                  \"type\": \"string\"\n                                },\n                                \"environmentOverrides\": {\n                                  \"type\": \"object\",\n                                  \"description\": \"A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.\",\n                                  \"properties\": {\n                                    \"development\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Value used for development environment.\"\n                                    },\n                                    \"preview\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Value used for preview environment.\"\n                                    },\n                                    \"production\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Value used for production environment.\"\n                                    }\n                                  }\n                                }\n                              },\n                              \"additionalProperties\": false\n                            }\n                          },\n                          \"partial\": {\n                            \"type\": \"boolean\",\n                            \"description\": \"If true, will only overwrite the provided secrets instead of replacing all secrets.\"\n                          }\n                        },\n                        \"additionalProperties\": false\n                      }\n                    ]\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/billing\": {\n      \"post\": {\n        \"description\": \"Sends the billing and usage data. The partner should do this at least once a day and ideally once per hour. \\u003cbr/\\u003e Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.\",\n        \"operationId\": \"submit-billing-data\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Submit Billing Data\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"timestamp\": {\n                    \"description\": \"Server time of your integration, used to determine the most recent data for race conditions \\u0026 updates. Only the latest usage data for a given day, week, and month will be kept.\",\n                    \"type\": \"string\",\n                    \"format\": \"date-time\"\n                  },\n                  \"eod\": {\n                    \"description\": \"End of Day, the UTC datetime for when the end of the billing/usage day is in UTC time. This tells us which day the usage data is for, and also allows for your \\\\\\\"end of day\\\\\\\" to be different from UTC 00:00:00. eod must be within the period dates, and cannot be older than 24h earlier from our server's current time.\",\n                    \"type\": \"string\",\n                    \"format\": \"date-time\"\n                  },\n                  \"period\": {\n                    \"type\": \"object\",\n                    \"description\": \"Period for the billing cycle. The period end date cannot be older than 24 hours earlier than our current server's time.\",\n                    \"properties\": {\n                      \"start\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                      },\n                      \"end\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                      }\n                    },\n                    \"required\": [\n                      \"start\",\n                      \"end\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  \"billing\": {\n                    \"description\": \"Billing data (interim invoicing data).\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"billingPlanId\": {\n                              \"type\": \"string\",\n                              \"description\": \"Partner's billing plan ID.\"\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\",\n                              \"description\": \"Partner's resource ID.\"\n                            },\n                            \"start\": {\n                              \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                              \"type\": \"string\",\n                              \"format\": \"date-time\"\n                            },\n                            \"end\": {\n                              \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                              \"type\": \"string\",\n                              \"format\": \"date-time\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"Line item name.\"\n                            },\n                            \"details\": {\n                              \"type\": \"string\",\n                              \"description\": \"Line item details.\"\n                            },\n                            \"price\": {\n                              \"description\": \"Price per unit.\",\n                              \"type\": \"string\",\n                              \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\"\n                            },\n                            \"quantity\": {\n                              \"type\": \"number\",\n                              \"description\": \"Quantity of units.\"\n                            },\n                            \"units\": {\n                              \"type\": \"string\",\n                              \"description\": \"Units of the quantity.\"\n                            },\n                            \"total\": {\n                              \"description\": \"Total amount.\",\n                              \"type\": \"string\",\n                              \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\"\n                            }\n                          },\n                          \"required\": [\n                            \"billingPlanId\",\n                            \"name\",\n                            \"price\",\n                            \"quantity\",\n                            \"units\",\n                            \"total\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"items\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"billingPlanId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Partner's billing plan ID.\"\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Partner's resource ID.\"\n                                },\n                                \"start\": {\n                                  \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                                  \"type\": \"string\",\n                                  \"format\": \"date-time\"\n                                },\n                                \"end\": {\n                                  \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                                  \"type\": \"string\",\n                                  \"format\": \"date-time\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Line item name.\"\n                                },\n                                \"details\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Line item details.\"\n                                },\n                                \"price\": {\n                                  \"description\": \"Price per unit.\",\n                                  \"type\": \"string\",\n                                  \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\"\n                                },\n                                \"quantity\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Quantity of units.\"\n                                },\n                                \"units\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Units of the quantity.\"\n                                },\n                                \"total\": {\n                                  \"description\": \"Total amount.\",\n                                  \"type\": \"string\",\n                                  \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\"\n                                }\n                              },\n                              \"required\": [\n                                \"billingPlanId\",\n                                \"name\",\n                                \"price\",\n                                \"quantity\",\n                                \"units\",\n                                \"total\"\n                              ],\n                              \"additionalProperties\": false\n                            }\n                          },\n                          \"discounts\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"billingPlanId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Partner's billing plan ID.\"\n                                },\n                                \"resourceId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Partner's resource ID.\"\n                                },\n                                \"start\": {\n                                  \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                                  \"type\": \"string\",\n                                  \"format\": \"date-time\"\n                                },\n                                \"end\": {\n                                  \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                                  \"type\": \"string\",\n                                  \"format\": \"date-time\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Discount name.\"\n                                },\n                                \"details\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Discount details.\"\n                                },\n                                \"amount\": {\n                                  \"description\": \"Discount amount.\",\n                                  \"type\": \"string\",\n                                  \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\"\n                                }\n                              },\n                              \"required\": [\n                                \"billingPlanId\",\n                                \"name\",\n                                \"amount\"\n                              ],\n                              \"additionalProperties\": false\n                            }\n                          }\n                        },\n                        \"required\": [\n                          \"items\"\n                        ]\n                      }\n                    ]\n                  },\n                  \"usage\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"resourceId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Partner's resource ID.\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Metric name.\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"description\": \"\\\\n              Type of the metric.\\\\n              - total: measured total value, such as Database size\\\\n              - interval: usage during the period, such as i/o or number of queries.\\\\n              - rate: rate of usage, such as queries per second.\\\\n            \",\n                          \"enum\": [\n                            \"total\",\n                            \"interval\",\n                            \"rate\"\n                          ]\n                        },\n                        \"units\": {\n                          \"type\": \"string\",\n                          \"description\": \"Metric units. Example: \\\\\\\"GB\\\\\\\"\"\n                        },\n                        \"dayValue\": {\n                          \"type\": \"number\",\n                          \"description\": \"Metric value for the day. Could be a final or an interim value for the day.\"\n                        },\n                        \"periodValue\": {\n                          \"type\": \"number\",\n                          \"description\": \"Metric value for the billing period. Could be a final or an interim value for the period.\"\n                        },\n                        \"planValue\": {\n                          \"type\": \"number\",\n                          \"description\": \"The limit value of the metric for a billing period, if a limit is defined by the plan.\"\n                        }\n                      },\n                      \"required\": [\n                        \"name\",\n                        \"type\",\n                        \"units\",\n                        \"dayValue\",\n                        \"periodValue\"\n                      ],\n                      \"additionalProperties\": false\n                    }\n                  }\n                },\n                \"required\": [\n                  \"timestamp\",\n                  \"eod\",\n                  \"period\",\n                  \"billing\",\n                  \"usage\"\n                ],\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/billing/invoices\": {\n      \"post\": {\n        \"description\": \"This endpoint allows the partner to submit an invoice to Vercel. The invoice is created in Vercel's billing system and sent to the customer. Depending on the type of billing plan, the invoice can be sent at a time of signup, at the start of the billing period, or at the end of the billing period.\\u003cbr/\\u003e \\u003cbr/\\u003e Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request. \\u003cbr/\\u003e There are several limitations to the invoice submission:\\u003cbr/\\u003e \\u003cbr/\\u003e 1. A resource can only be billed once per the billing period and the billing plan.\\u003cbr/\\u003e 2. The billing plan used to bill the resource must have been active for this resource during the billing period.\\u003cbr/\\u003e 3. The billing plan used must be a subscription plan.\\u003cbr/\\u003e 4. The interim usage data must be sent hourly for all types of subscriptions. See [Send subscription billing and usage data](#send-subscription-billing-and-usage-data) API on how to send interim billing and usage data.\\u003cbr/\\u003e\",\n        \"operationId\": \"submit-invoice\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Submit Invoice\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"invoiceId\": {\n                      \"type\": \"string\"\n                    },\n                    \"test\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"validationErrors\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"externalId\": {\n                    \"type\": \"string\"\n                  },\n                  \"invoiceDate\": {\n                    \"description\": \"Invoice date. Must be within the period's start and end.\",\n                    \"type\": \"string\",\n                    \"format\": \"date-time\"\n                  },\n                  \"memo\": {\n                    \"type\": \"string\",\n                    \"description\": \"Additional memo for the invoice.\"\n                  },\n                  \"period\": {\n                    \"type\": \"object\",\n                    \"description\": \"Subscription period for this billing cycle.\",\n                    \"properties\": {\n                      \"start\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                      },\n                      \"end\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                      }\n                    },\n                    \"required\": [\n                      \"start\",\n                      \"end\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  \"items\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"resourceId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Partner's resource ID.\"\n                        },\n                        \"billingPlanId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Partner's billing plan ID.\"\n                        },\n                        \"start\": {\n                          \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                          \"type\": \"string\",\n                          \"format\": \"date-time\"\n                        },\n                        \"end\": {\n                          \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                          \"type\": \"string\",\n                          \"format\": \"date-time\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"details\": {\n                          \"type\": \"string\"\n                        },\n                        \"price\": {\n                          \"type\": \"string\",\n                          \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\",\n                          \"description\": \"Currency amount as a decimal string.\"\n                        },\n                        \"quantity\": {\n                          \"type\": \"number\"\n                        },\n                        \"units\": {\n                          \"type\": \"string\"\n                        },\n                        \"total\": {\n                          \"type\": \"string\",\n                          \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\",\n                          \"description\": \"Currency amount as a decimal string.\"\n                        }\n                      },\n                      \"required\": [\n                        \"billingPlanId\",\n                        \"name\",\n                        \"price\",\n                        \"quantity\",\n                        \"units\",\n                        \"total\"\n                      ],\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"discounts\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"resourceId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Partner's resource ID.\"\n                        },\n                        \"billingPlanId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Partner's billing plan ID.\"\n                        },\n                        \"start\": {\n                          \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                          \"type\": \"string\",\n                          \"format\": \"date-time\"\n                        },\n                        \"end\": {\n                          \"description\": \"Start and end are only needed if different from the period's start/end.\",\n                          \"type\": \"string\",\n                          \"format\": \"date-time\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"details\": {\n                          \"type\": \"string\"\n                        },\n                        \"amount\": {\n                          \"type\": \"string\",\n                          \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\",\n                          \"description\": \"Currency amount as a decimal string.\"\n                        }\n                      },\n                      \"required\": [\n                        \"billingPlanId\",\n                        \"name\",\n                        \"amount\"\n                      ],\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"final\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Set this to `true` if this is the final invoice for the installation. Can only be set when the installation is pending deletion.\"\n                  },\n                  \"test\": {\n                    \"type\": \"object\",\n                    \"description\": \"Test mode\",\n                    \"properties\": {\n                      \"validate\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"result\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"paid\",\n                          \"notpaid\"\n                        ]\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                },\n                \"required\": [\n                  \"invoiceDate\",\n                  \"period\",\n                  \"items\"\n                ],\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/billing/finalize\": {\n      \"post\": {\n        \"description\": \"This endpoint allows the partner to mark an installation as finalized. This means you will not send any more invoices for the installation. Use this after a customer has requested uninstall and you have sent any remaining invoices. This will allow the uninstall process to proceed immediately after all invoices have been paid. \\u003cbr/\\u003e Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.\",\n        \"operationId\": \"finalize-installation\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Finalize Installation\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}\": {\n      \"get\": {\n        \"description\": \"Get Invoice details and status for a given invoice ID.\\u003cbr/\\u003e \\u003cbr/\\u003e See Billing Events with Webhooks documentation on how to receive invoice events. This endpoint is used to retrieve the invoice details.\",\n        \"operationId\": \"get-invoice\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Invoice\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"test\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"Whether the invoice is in the testmode (no real transaction created).\"\n                    },\n                    \"invoiceId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Vercel Marketplace Invoice ID.\"\n                    },\n                    \"externalId\": {\n                      \"type\": \"string\",\n                      \"description\": \"Partner-supplied Invoice ID, if applicable.\"\n                    },\n                    \"state\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"pending\",\n                        \"paid\",\n                        \"notpaid\",\n                        \"draft\",\n                        \"scheduled\",\n                        \"invoiced\",\n                        \"overdue\",\n                        \"refund_requested\",\n                        \"refunded\"\n                      ],\n                      \"description\": \"Invoice state.\"\n                    },\n                    \"invoiceNumber\": {\n                      \"type\": \"string\",\n                      \"description\": \"User-readable invoice number.\"\n                    },\n                    \"invoiceDate\": {\n                      \"type\": \"string\",\n                      \"description\": \"Invoice date. ISO 8601 timestamp.\"\n                    },\n                    \"period\": {\n                      \"properties\": {\n                        \"start\": {\n                          \"type\": \"string\"\n                        },\n                        \"end\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"end\",\n                        \"start\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Subscription period for this billing cycle. ISO 8601 timestamps.\"\n                    },\n                    \"paidAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Moment the invoice was paid. ISO 8601 timestamp.\"\n                    },\n                    \"refundedAt\": {\n                      \"type\": \"string\",\n                      \"description\": \"Most recent moment the invoice was refunded. ISO 8601 timestamp.\"\n                    },\n                    \"memo\": {\n                      \"type\": \"string\",\n                      \"description\": \"Additional memo for the invoice.\"\n                    },\n                    \"items\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"billingPlanId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partner's billing plan ID.\"\n                          },\n                          \"resourceId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partner's resource ID. If not specified, indicates installation-wide item.\"\n                          },\n                          \"start\": {\n                            \"type\": \"string\",\n                            \"description\": \"Start and end are only needed if different from the period's start/end. ISO 8601 timestamp.\"\n                          },\n                          \"end\": {\n                            \"type\": \"string\",\n                            \"description\": \"Start and end are only needed if different from the period's start/end. ISO 8601 timestamp.\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"Invoice item name.\"\n                          },\n                          \"details\": {\n                            \"type\": \"string\",\n                            \"description\": \"Additional item details.\"\n                          },\n                          \"price\": {\n                            \"type\": \"string\",\n                            \"description\": \"Item price. A dollar-based decimal string.\"\n                          },\n                          \"quantity\": {\n                            \"type\": \"number\",\n                            \"description\": \"Item quantity.\"\n                          },\n                          \"units\": {\n                            \"type\": \"string\",\n                            \"description\": \"Units for item's quantity.\"\n                          },\n                          \"total\": {\n                            \"type\": \"string\",\n                            \"description\": \"Item total. A dollar-based decimal string.\"\n                          }\n                        },\n                        \"required\": [\n                          \"billingPlanId\",\n                          \"name\",\n                          \"price\",\n                          \"quantity\",\n                          \"total\",\n                          \"units\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Invoice items.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Invoice items.\"\n                    },\n                    \"discounts\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"billingPlanId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partner's billing plan ID.\"\n                          },\n                          \"resourceId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partner's resource ID. If not specified, indicates installation-wide discount.\"\n                          },\n                          \"start\": {\n                            \"type\": \"string\",\n                            \"description\": \"Start and end are only needed if different from the period's start/end. ISO 8601 timestamp.\"\n                          },\n                          \"end\": {\n                            \"type\": \"string\",\n                            \"description\": \"Start and end are only needed if different from the period's start/end. ISO 8601 timestamp.\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"Discount name.\"\n                          },\n                          \"details\": {\n                            \"type\": \"string\",\n                            \"description\": \"Additional discount details.\"\n                          },\n                          \"amount\": {\n                            \"type\": \"string\",\n                            \"description\": \"Discount amount. A dollar-based decimal string.\"\n                          }\n                        },\n                        \"required\": [\n                          \"amount\",\n                          \"billingPlanId\",\n                          \"name\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Invoice discounts.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"Invoice discounts.\"\n                    },\n                    \"total\": {\n                      \"type\": \"string\",\n                      \"description\": \"Invoice total amount. A dollar-based decimal string.\"\n                    },\n                    \"refundReason\": {\n                      \"type\": \"string\",\n                      \"description\": \"The reason for refund. Only applicable for states \\\"refunded\\\" or \\\"refund_request\\\".\"\n                    },\n                    \"refundTotal\": {\n                      \"type\": \"string\",\n                      \"description\": \"Refund amount. Only applicable for states \\\"refunded\\\" or \\\"refund_request\\\". A dollar-based decimal string.\"\n                    },\n                    \"created\": {\n                      \"type\": \"string\",\n                      \"description\": \"System creation date. ISO 8601 timestamp.\"\n                    },\n                    \"updated\": {\n                      \"type\": \"string\",\n                      \"description\": \"System update date. ISO 8601 timestamp.\"\n                    }\n                  },\n                  \"required\": [\n                    \"created\",\n                    \"invoiceDate\",\n                    \"invoiceId\",\n                    \"items\",\n                    \"period\",\n                    \"state\",\n                    \"total\",\n                    \"updated\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"invoiceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/billing/invoices/{invoiceId}/actions\": {\n      \"post\": {\n        \"description\": \"This endpoint allows the partner to request a refund for an invoice to Vercel. The invoice is created using the [Submit Invoice API](#submit-invoice-api).\",\n        \"operationId\": \"update-invoice\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Invoice Actions\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"invoiceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"oneOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"refund\"\n                        ]\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"description\": \"Refund reason.\"\n                      },\n                      \"total\": {\n                        \"description\": \"The total amount to be refunded. Must be less than or equal to the total amount of the invoice.\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[0-9]+(\\\\\\\\.[0-9]+)?$\"\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"reason\",\n                      \"total\"\n                    ],\n                    \"additionalProperties\": false\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/billing/balance\": {\n      \"post\": {\n        \"description\": \"Sends the prepayment balances. The partner should do this at least once a day and ideally once per hour. \\u003cbr/\\u003e Use the `credentials.access_token` we provided in the [Upsert Installation](#upsert-installation) body to authorize this request.\",\n        \"operationId\": \"submit-prepayment-balances\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Submit Prepayment Balances\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"timestamp\": {\n                    \"description\": \"Server time of your integration, used to determine the most recent data for race conditions \\u0026 updates. Only the latest usage data for a given day, week, and month will be kept.\",\n                    \"type\": \"string\",\n                    \"format\": \"date-time\"\n                  },\n                  \"balances\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"description\": \"A credit balance for a particular token type\",\n                      \"properties\": {\n                        \"resourceId\": {\n                          \"type\": \"string\",\n                          \"description\": \"Partner's resource ID, exclude if credits are tied to the installation and not an individual resource.\"\n                        },\n                        \"credit\": {\n                          \"type\": \"string\",\n                          \"description\": \"A human-readable description of the credits the user currently has, e.g. \\\\\\\"2,000 Tokens\\\\\\\"\"\n                        },\n                        \"nameLabel\": {\n                          \"type\": \"string\",\n                          \"description\": \"The name of the credits, for display purposes, e.g. \\\\\\\"Tokens\\\\\\\"\"\n                        },\n                        \"currencyValueInCents\": {\n                          \"type\": \"number\",\n                          \"description\": \"The dollar value of the credit balance, in USD and provided in cents, which is used to trigger automatic purchase thresholds.\"\n                        }\n                      },\n                      \"required\": [\n                        \"currencyValueInCents\"\n                      ],\n                      \"additionalProperties\": false\n                    }\n                  }\n                },\n                \"required\": [\n                  \"timestamp\",\n                  \"balances\"\n                ],\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/products/{integrationProductIdOrSlug}/resources/{resourceId}/secrets\": {\n      \"put\": {\n        \"description\": \"This endpoint is deprecated and replaced with the endpoint [Update Resource Secrets](#update-resource-secrets). \\u003cbr/\\u003e This endpoint updates the secrets of a resource. If a resource has projects connected, the connected secrets are updated with the new secrets. The old secrets may still be used by existing connected projects because they are not automatically redeployed. Redeployment is a manual action and must be completed by the user. All new project connections will use the new secrets.\\u003cbr/\\u003e \\u003cbr/\\u003e Use cases for this endpoint:\\u003cbr/\\u003e \\u003cbr/\\u003e - Resetting the credentials of a database in the partner. If the user requests the credentials to be updated in the partner’s application, the partner post the new set of secrets to Vercel, the user should redeploy their application and the expire the old credentials.\\u003cbr/\\u003e\",\n        \"operationId\": \"update-resource-secrets\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Deprecated: true. Update Resource Secrets (Deprecated)\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"deprecated\": true,\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"integrationProductIdOrSlug\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"secrets\"\n                ],\n                \"properties\": {\n                  \"secrets\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"name\",\n                        \"value\"\n                      ],\n                      \"properties\": {\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"prefix\": {\n                          \"type\": \"string\"\n                        },\n                        \"environmentOverrides\": {\n                          \"type\": \"object\",\n                          \"description\": \"A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.\",\n                          \"properties\": {\n                            \"development\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for development environment.\"\n                            },\n                            \"preview\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for preview environment.\"\n                            },\n                            \"production\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for production environment.\"\n                            }\n                          }\n                        }\n                      },\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"partial\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If true, will only update the provided secrets\"\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/resources/{resourceId}/secrets\": {\n      \"put\": {\n        \"description\": \"This endpoint updates the secrets of a resource. If a resource has projects connected, the connected secrets are updated with the new secrets. The old secrets may still be used by existing connected projects because they are not automatically redeployed. Redeployment is a manual action and must be completed by the user. All new project connections will use the new secrets.\\u003cbr/\\u003e \\u003cbr/\\u003e Use cases for this endpoint:\\u003cbr/\\u003e \\u003cbr/\\u003e - Resetting the credentials of a database in the partner. If the user requests the credentials to be updated in the partner’s application, the partner post the new set of secrets to Vercel, the user should redeploy their application and the expire the old credentials.\\u003cbr/\\u003e\",\n        \"operationId\": \"update-resource-secrets-by-id\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Resource Secrets\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"secrets\"\n                ],\n                \"properties\": {\n                  \"secrets\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"name\",\n                        \"value\"\n                      ],\n                      \"properties\": {\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"prefix\": {\n                          \"type\": \"string\"\n                        },\n                        \"environmentOverrides\": {\n                          \"type\": \"object\",\n                          \"description\": \"A map of environments to override values for the secret, used for setting different values across deployments in production, preview, and development environments. Note: the same value will be used for all deployments in the given environment.\",\n                          \"properties\": {\n                            \"development\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for development environment.\"\n                            },\n                            \"preview\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for preview environment.\"\n                            },\n                            \"production\": {\n                              \"type\": \"string\",\n                              \"description\": \"Value used for production environment.\"\n                            }\n                          }\n                        }\n                      },\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"partial\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If true, will only overwrite the provided secrets instead of replacing all secrets.\"\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/integrations/configurations\": {\n      \"get\": {\n        \"description\": \"Allows to retrieve all configurations for an authenticated integration. When the `project` view is used, configurations generated for the authorization flow will be filtered out of the results.\",\n        \"operationId\": \"getConfigurations\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get configurations for the authenticated user or team\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The list of configurations for the authenticated user\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"items\": {\n                        \"properties\": {\n                          \"completedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was installed successfully\",\n                            \"example\": 1558531915505\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was created\",\n                            \"example\": 1558531915505\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the configuration\",\n                            \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                          },\n                          \"integrationId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the app the configuration was created for\",\n                            \"example\": \"oac_xzpVzcUOgcB1nrVlirtKhbWV\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The user or team ID that owns the configuration\",\n                            \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"error\",\n                              \"ready\",\n                              \"pending\",\n                              \"onboarding\",\n                              \"suspended\",\n                              \"resumed\",\n                              \"uninstalled\"\n                            ],\n                            \"description\": \"The configuration status. Optional. If not defined, assume 'ready'.\"\n                          },\n                          \"externalId\": {\n                            \"type\": \"string\",\n                            \"description\": \"An external identifier defined by the integration vendor.\"\n                          },\n                          \"projects\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.\",\n                            \"example\": [\n                              \"prj_xQxbutw1HpL6HLYPAzt5h75m8NjO\"\n                            ]\n                          },\n                          \"source\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"marketplace\",\n                              \"deploy-button\",\n                              \"external\",\n                              \"v0\",\n                              \"resource-claims\",\n                              \"cli\",\n                              \"oauth\",\n                              \"backoffice\"\n                            ],\n                            \"description\": \"Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.\",\n                            \"example\": \"marketplace\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"description\": \"The slug of the integration the configuration is created for.\",\n                            \"example\": \"slack\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"When the configuration was created for a team, this will show the ID of the team.\",\n                            \"example\": \"team_nLlpyC6RE1qxydlFKbrxDlud\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"integration-configuration\"\n                            ]\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was updated.\",\n                            \"example\": 1558531915505\n                          },\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of the user that created the configuration.\",\n                            \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                          },\n                          \"scopes\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The resources that are allowed to be accessed by the configuration.\",\n                            \"example\": [\n                              \"read:project\",\n                              \"read-write:log-drain\"\n                            ]\n                          },\n                          \"disabledAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.\",\n                            \"example\": 1558531915505\n                          },\n                          \"deletedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was deleted.\",\n                            \"example\": 1558531915505\n                          },\n                          \"deleteRequestedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.\",\n                            \"example\": 1558531915505\n                          },\n                          \"disabledReason\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"disabled-by-owner\",\n                              \"feature-not-available\",\n                              \"disabled-by-admin\",\n                              \"original-owner-left-the-team\",\n                              \"account-plan-downgrade\",\n                              \"original-owner-role-downgraded\"\n                            ]\n                          },\n                          \"installationType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"marketplace\",\n                              \"external\"\n                            ],\n                            \"description\": \"Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'\"\n                          }\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"The list of configurations for the authenticated user\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The list of configurations for the authenticated user\"\n                    },\n                    {\n                      \"items\": {\n                        \"properties\": {\n                          \"integration\": {\n                            \"properties\": {\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"icon\": {\n                                \"type\": \"string\"\n                              },\n                              \"isLegacy\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"flags\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"assignedBetaLabelAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"tagIds\": {\n                                \"items\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"tag_agents\",\n                                    \"tag_ai\",\n                                    \"tag_analytics\",\n                                    \"tag_authentication\",\n                                    \"tag_cms\",\n                                    \"tag_code_repository\",\n                                    \"tag_code_review\",\n                                    \"tag_code_security\",\n                                    \"tag_code_testing\",\n                                    \"tag_commerce\",\n                                    \"tag_databases\",\n                                    \"tag_dev_tools\",\n                                    \"tag_experimentation\",\n                                    \"tag_flags\",\n                                    \"tag_logging\",\n                                    \"tag_messaging\",\n                                    \"tag_monitoring\",\n                                    \"tag_observability\",\n                                    \"tag_payments\",\n                                    \"tag_performance\",\n                                    \"tag_productivity\",\n                                    \"tag_searching\",\n                                    \"tag_security\",\n                                    \"tag_support_agent\",\n                                    \"tag_testing\",\n                                    \"tag_video\",\n                                    \"tag_web_automation\",\n                                    \"tag_workflow\"\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"icon\",\n                              \"isLegacy\",\n                              \"name\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"completedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was installed successfully\",\n                            \"example\": 1558531915505\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was created\",\n                            \"example\": 1558531915505\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the configuration\",\n                            \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                          },\n                          \"integrationId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the app the configuration was created for\",\n                            \"example\": \"oac_xzpVzcUOgcB1nrVlirtKhbWV\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The user or team ID that owns the configuration\",\n                            \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                          },\n                          \"status\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"error\",\n                              \"ready\",\n                              \"pending\",\n                              \"onboarding\",\n                              \"suspended\",\n                              \"resumed\",\n                              \"uninstalled\"\n                            ],\n                            \"description\": \"The configuration status. Optional. If not defined, assume 'ready'.\"\n                          },\n                          \"externalId\": {\n                            \"type\": \"string\",\n                            \"description\": \"An external identifier defined by the integration vendor.\"\n                          },\n                          \"projects\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.\",\n                            \"example\": [\n                              \"prj_xQxbutw1HpL6HLYPAzt5h75m8NjO\"\n                            ]\n                          },\n                          \"source\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"marketplace\",\n                              \"deploy-button\",\n                              \"external\",\n                              \"v0\",\n                              \"resource-claims\",\n                              \"cli\",\n                              \"oauth\",\n                              \"backoffice\"\n                            ],\n                            \"description\": \"Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.\",\n                            \"example\": \"marketplace\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"description\": \"The slug of the integration the configuration is created for.\",\n                            \"example\": \"slack\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"When the configuration was created for a team, this will show the ID of the team.\",\n                            \"example\": \"team_nLlpyC6RE1qxydlFKbrxDlud\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"integration-configuration\"\n                            ]\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was updated.\",\n                            \"example\": 1558531915505\n                          },\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of the user that created the configuration.\",\n                            \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                          },\n                          \"scopes\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The resources that are allowed to be accessed by the configuration.\",\n                            \"example\": [\n                              \"read:project\",\n                              \"read-write:log-drain\"\n                            ]\n                          },\n                          \"disabledAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.\",\n                            \"example\": 1558531915505\n                          },\n                          \"deletedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration was deleted.\",\n                            \"example\": 1558531915505\n                          },\n                          \"deleteRequestedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"description\": \"A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.\",\n                            \"example\": 1558531915505\n                          },\n                          \"disabledReason\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"disabled-by-owner\",\n                              \"feature-not-available\",\n                              \"disabled-by-admin\",\n                              \"original-owner-left-the-team\",\n                              \"account-plan-downgrade\",\n                              \"original-owner-role-downgraded\"\n                            ]\n                          },\n                          \"installationType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"marketplace\",\n                              \"external\"\n                            ],\n                            \"description\": \"Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"id\",\n                          \"integration\",\n                          \"integrationId\",\n                          \"ownerId\",\n                          \"scopes\",\n                          \"slug\",\n                          \"type\",\n                          \"updatedAt\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"view\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"account\",\n                \"project\"\n              ]\n            }\n          },\n          {\n            \"name\": \"installationType\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"marketplace\",\n                \"external\",\n                \"provisioning\"\n              ]\n            }\n          },\n          {\n            \"name\": \"integrationIdOrSlug\",\n            \"description\": \"ID of the integration\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"ID of the integration\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v1/integrations/configuration/{id}\": {\n      \"get\": {\n        \"description\": \"Allows to retrieve a the configuration with the provided id in case it exists. The authenticated user or team must be the owner of the config in order to access it.\",\n        \"operationId\": \"getConfiguration\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve an integration configuration\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The configuration with the provided id\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"projectSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"selected\",\n                            \"all\"\n                          ],\n                          \"description\": \"A string representing the permission for projects. Possible values are `all` or `selected`.\",\n                          \"example\": \"all\"\n                        },\n                        \"notification\": {\n                          \"properties\": {\n                            \"level\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"error\",\n                                \"info\",\n                                \"warn\"\n                              ]\n                            },\n                            \"title\": {\n                              \"type\": \"string\"\n                            },\n                            \"message\": {\n                              \"type\": \"string\"\n                            },\n                            \"href\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"level\",\n                            \"title\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"transferRequest\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"transfer-to-marketplace\"\n                                  ]\n                                },\n                                \"metadata\": {\n                                  \"additionalProperties\": true,\n                                  \"type\": \"object\"\n                                },\n                                \"billingPlan\": {\n                                  \"properties\": {\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"prepayment\",\n                                        \"subscription\"\n                                      ]\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"installation\",\n                                        \"resource\"\n                                      ]\n                                    },\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"description\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"paymentMethodRequired\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"preauthorizationAmount\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"description\",\n                                    \"id\",\n                                    \"name\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"requestId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"transferId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"requester\": {\n                                  \"properties\": {\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"email\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"name\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"expiresAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"discardedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"discardedBy\": {\n                                  \"type\": \"string\"\n                                },\n                                \"approvedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"approvedBy\": {\n                                  \"type\": \"string\"\n                                },\n                                \"authorizationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"createdAt\",\n                                \"expiresAt\",\n                                \"kind\",\n                                \"requestId\",\n                                \"requester\",\n                                \"transferId\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"kind\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"transfer-from-marketplace\"\n                                  ]\n                                },\n                                \"requestId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"transferId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"requester\": {\n                                  \"properties\": {\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"email\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"name\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"expiresAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"discardedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"discardedBy\": {\n                                  \"type\": \"string\"\n                                },\n                                \"approvedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"approvedBy\": {\n                                  \"type\": \"string\"\n                                },\n                                \"authorizationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"createdAt\",\n                                \"expiresAt\",\n                                \"kind\",\n                                \"requestId\",\n                                \"requester\",\n                                \"transferId\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"projects\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.\",\n                          \"example\": [\n                            \"prj_xQxbutw1HpL6HLYPAzt5h75m8NjO\"\n                          ]\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"error\",\n                            \"ready\",\n                            \"pending\",\n                            \"onboarding\",\n                            \"suspended\",\n                            \"resumed\",\n                            \"uninstalled\"\n                          ],\n                          \"description\": \"The configuration status. Optional. If not defined, assume 'ready'.\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"integration-configuration\"\n                          ]\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was created\",\n                          \"example\": 1558531915505\n                        },\n                        \"deletedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was deleted.\",\n                          \"example\": 1558531915505\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the configuration\",\n                          \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\",\n                          \"description\": \"The slug of the integration the configuration is created for.\",\n                          \"example\": \"slack\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"When the configuration was created for a team, this will show the ID of the team.\",\n                          \"example\": \"team_nLlpyC6RE1qxydlFKbrxDlud\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was updated.\",\n                          \"example\": 1558531915505\n                        },\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the user that created the configuration.\",\n                          \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                        },\n                        \"scopes\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"The resources that are allowed to be accessed by the configuration.\",\n                          \"example\": [\n                            \"read:project\",\n                            \"read-write:log-drain\"\n                          ]\n                        },\n                        \"source\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"marketplace\",\n                            \"deploy-button\",\n                            \"external\",\n                            \"v0\",\n                            \"resource-claims\",\n                            \"cli\",\n                            \"oauth\",\n                            \"backoffice\"\n                          ],\n                          \"description\": \"Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.\",\n                          \"example\": \"marketplace\"\n                        },\n                        \"integrationId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the app the configuration was created for\",\n                          \"example\": \"oac_xzpVzcUOgcB1nrVlirtKhbWV\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user or team ID that owns the configuration\",\n                          \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                        },\n                        \"canConfigureOpenTelemetry\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"completedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was installed successfully\",\n                          \"example\": 1558531915505\n                        },\n                        \"externalId\": {\n                          \"type\": \"string\",\n                          \"description\": \"An external identifier defined by the integration vendor.\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.\",\n                          \"example\": 1558531915505\n                        },\n                        \"deleteRequestedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.\",\n                          \"example\": 1558531915505\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"disabled-by-admin\",\n                            \"original-owner-left-the-team\",\n                            \"account-plan-downgrade\",\n                            \"original-owner-role-downgraded\"\n                          ]\n                        },\n                        \"installationType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"marketplace\",\n                            \"external\"\n                          ],\n                          \"description\": \"Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"id\",\n                        \"integrationId\",\n                        \"notification\",\n                        \"ownerId\",\n                        \"projectSelection\",\n                        \"scopes\",\n                        \"slug\",\n                        \"transferRequest\",\n                        \"type\",\n                        \"updatedAt\",\n                        \"userId\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"completedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was installed successfully\",\n                          \"example\": 1558531915505\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was created\",\n                          \"example\": 1558531915505\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the configuration\",\n                          \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                        },\n                        \"integrationId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the app the configuration was created for\",\n                          \"example\": \"oac_xzpVzcUOgcB1nrVlirtKhbWV\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user or team ID that owns the configuration\",\n                          \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"error\",\n                            \"ready\",\n                            \"pending\",\n                            \"onboarding\",\n                            \"suspended\",\n                            \"resumed\",\n                            \"uninstalled\"\n                          ],\n                          \"description\": \"The configuration status. Optional. If not defined, assume 'ready'.\"\n                        },\n                        \"externalId\": {\n                          \"type\": \"string\",\n                          \"description\": \"An external identifier defined by the integration vendor.\"\n                        },\n                        \"projects\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.\",\n                          \"example\": [\n                            \"prj_xQxbutw1HpL6HLYPAzt5h75m8NjO\"\n                          ]\n                        },\n                        \"source\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"marketplace\",\n                            \"deploy-button\",\n                            \"external\",\n                            \"v0\",\n                            \"resource-claims\",\n                            \"cli\",\n                            \"oauth\",\n                            \"backoffice\"\n                          ],\n                          \"description\": \"Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.\",\n                          \"example\": \"marketplace\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\",\n                          \"description\": \"The slug of the integration the configuration is created for.\",\n                          \"example\": \"slack\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"When the configuration was created for a team, this will show the ID of the team.\",\n                          \"example\": \"team_nLlpyC6RE1qxydlFKbrxDlud\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"integration-configuration\"\n                          ]\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was updated.\",\n                          \"example\": 1558531915505\n                        },\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the user that created the configuration.\",\n                          \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                        },\n                        \"scopes\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"The resources that are allowed to be accessed by the configuration.\",\n                          \"example\": [\n                            \"read:project\",\n                            \"read-write:log-drain\"\n                          ]\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.\",\n                          \"example\": 1558531915505\n                        },\n                        \"deletedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was deleted.\",\n                          \"example\": 1558531915505\n                        },\n                        \"deleteRequestedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.\",\n                          \"example\": 1558531915505\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"disabled-by-admin\",\n                            \"original-owner-left-the-team\",\n                            \"account-plan-downgrade\",\n                            \"original-owner-role-downgraded\"\n                          ]\n                        },\n                        \"installationType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"marketplace\",\n                            \"external\"\n                          ],\n                          \"description\": \"Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"id\",\n                        \"integrationId\",\n                        \"ownerId\",\n                        \"scopes\",\n                        \"slug\",\n                        \"type\",\n                        \"updatedAt\",\n                        \"userId\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The configuration with the provided id\"\n                    },\n                    {\n                      \"properties\": {\n                        \"completedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was installed successfully\",\n                          \"example\": 1558531915505\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was created\",\n                          \"example\": 1558531915505\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the configuration\",\n                          \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                        },\n                        \"integrationId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The unique identifier of the app the configuration was created for\",\n                          \"example\": \"oac_xzpVzcUOgcB1nrVlirtKhbWV\"\n                        },\n                        \"ownerId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user or team ID that owns the configuration\",\n                          \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                        },\n                        \"status\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"error\",\n                            \"ready\",\n                            \"pending\",\n                            \"onboarding\",\n                            \"suspended\",\n                            \"resumed\",\n                            \"uninstalled\"\n                          ],\n                          \"description\": \"The configuration status. Optional. If not defined, assume 'ready'.\"\n                        },\n                        \"externalId\": {\n                          \"type\": \"string\",\n                          \"description\": \"An external identifier defined by the integration vendor.\"\n                        },\n                        \"projects\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"When a configuration is limited to access certain projects, this will contain each of the project ID it is allowed to access. If it is not defined, the configuration has full access.\",\n                          \"example\": [\n                            \"prj_xQxbutw1HpL6HLYPAzt5h75m8NjO\"\n                          ]\n                        },\n                        \"source\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"marketplace\",\n                            \"deploy-button\",\n                            \"external\",\n                            \"v0\",\n                            \"resource-claims\",\n                            \"cli\",\n                            \"oauth\",\n                            \"backoffice\"\n                          ],\n                          \"description\": \"Source defines where the configuration was installed from. It is used to analyze user engagement for integration installations in product metrics.\",\n                          \"example\": \"marketplace\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\",\n                          \"description\": \"The slug of the integration the configuration is created for.\",\n                          \"example\": \"slack\"\n                        },\n                        \"teamId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"When the configuration was created for a team, this will show the ID of the team.\",\n                          \"example\": \"team_nLlpyC6RE1qxydlFKbrxDlud\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"integration-configuration\"\n                          ]\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was updated.\",\n                          \"example\": 1558531915505\n                        },\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the user that created the configuration.\",\n                          \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                        },\n                        \"scopes\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"The resources that are allowed to be accessed by the configuration.\",\n                          \"example\": [\n                            \"read:project\",\n                            \"read-write:log-drain\"\n                          ]\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was disabled. Note: Configurations can be disabled when the associated user loses access to a team. They do not function during this time until the configuration is 'transferred', meaning the associated user is changed to one with access to the team.\",\n                          \"example\": 1558531915505\n                        },\n                        \"deletedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration was deleted.\",\n                          \"example\": 1558531915505\n                        },\n                        \"deleteRequestedAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"A timestamp that tells you when the configuration deletion has been started for cases when the deletion needs to be settled/approved by partners, such as when marketplace invoices have been paid.\",\n                          \"example\": 1558531915505\n                        },\n                        \"disabledReason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"disabled-by-owner\",\n                            \"feature-not-available\",\n                            \"disabled-by-admin\",\n                            \"original-owner-left-the-team\",\n                            \"account-plan-downgrade\",\n                            \"original-owner-role-downgraded\"\n                          ]\n                        },\n                        \"installationType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"marketplace\",\n                            \"external\"\n                          ],\n                          \"description\": \"Defines the installation type. - 'external' integrations are installed via the existing integrations flow - 'marketplace' integrations are natively installed: - when accepting the TOS of a partner during the store creation process - if undefined, assume 'external'\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"A configuration represents information about a single installation of an integration within an individual or team account\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The configuration was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"ID of the configuration to check\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"ID of the configuration to check\",\n              \"example\": \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Allows to remove the configuration with the `id` provided in the parameters. The configuration and all of its resources will be removed. This includes Webhooks, LogDrains and Project Env variables.\",\n        \"operationId\": \"deleteConfiguration\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an integration configuration\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"The configuration was successfully removed\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The configuration was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/integrations/configuration/{id}/products\": {\n      \"get\": {\n        \"description\": \"Returns products available for an integration configuration. Each product includes a `metadataSchema` field with the JSON Schema for required and optional metadata fields.\",\n        \"operationId\": \"getConfigurationProducts\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List products for integration configuration\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"List of products available for this integration configuration\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"products\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"protocols\": {\n                            \"properties\": {\n                              \"storage\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  },\n                                  \"repl\": {\n                                    \"properties\": {\n                                      \"enabled\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"supportsReadOnlyMode\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"welcomeMessage\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"enabled\",\n                                      \"supportsReadOnlyMode\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"experimentation\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  },\n                                  \"edgeConfigSyncingSupport\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"ai\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"authentication\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"observability\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"video\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"workflow\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"checks\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"logDrain\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  },\n                                  \"endpoint\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"headers\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"format\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"json\",\n                                      \"ndjson\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"endpoint\",\n                                  \"format\",\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"traceDrain\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  },\n                                  \"endpoint\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"headers\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"format\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"json\",\n                                      \"proto\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"endpoint\",\n                                  \"format\",\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"messaging\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"other\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"disabled\",\n                                      \"enabled\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"primaryProtocol\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"checks\",\n                              \"ai\",\n                              \"authentication\",\n                              \"storage\",\n                              \"experimentation\",\n                              \"messaging\",\n                              \"observability\",\n                              \"video\",\n                              \"workflow\",\n                              \"logDrain\",\n                              \"traceDrain\",\n                              \"other\"\n                            ]\n                          },\n                          \"metadataSchema\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"object\"\n                                ]\n                              },\n                              \"properties\": {\n                                \"additionalProperties\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"string\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"input\"\n                                          ]\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"enum\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"maxLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"pattern\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"number\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"input\"\n                                          ]\n                                        },\n                                        \"minimum\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"maximum\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"exclusiveMaximum\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"exclusiveMinimum\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"boolean\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"toggle\"\n                                          ]\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"array\"\n                                          ]\n                                        },\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"number\"\n                                              ]\n                                            },\n                                            \"description\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"minimum\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"exclusiveMinimum\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"maximum\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"exclusiveMaximum\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"default\": {\n                                              \"type\": \"number\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"slider\"\n                                          ]\n                                        },\n                                        \"ui:steps\": {\n                                          \"items\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"maxItems\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minItems\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"default\": {\n                                          \"items\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"items\",\n                                        \"type\",\n                                        \"ui:control\",\n                                        \"ui:steps\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"string\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"select\"\n                                          ]\n                                        },\n                                        \"ui:options\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"value\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"label\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"disabled\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"expr\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"expr\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"update\",\n                                                      \"create\"\n                                                    ]\n                                                  }\n                                                ]\n                                              },\n                                              \"hidden\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"expr\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"expr\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"update\",\n                                                      \"create\"\n                                                    ]\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"label\",\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"enum\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"maxLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"pattern\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\",\n                                        \"ui:options\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"string\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"radio-button\"\n                                          ]\n                                        },\n                                        \"ui:options\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"value\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"label\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"disabled\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"expr\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"expr\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"update\",\n                                                      \"create\"\n                                                    ]\n                                                  }\n                                                ]\n                                              },\n                                              \"hidden\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"expr\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"expr\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"update\",\n                                                      \"create\"\n                                                    ]\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"label\",\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"enum\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"maxLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"pattern\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\",\n                                        \"ui:options\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"array\"\n                                          ]\n                                        },\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"string\"\n                                              ]\n                                            },\n                                            \"description\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"minLength\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"maxLength\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"pattern\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"default\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"enum\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"multi-select\"\n                                          ]\n                                        },\n                                        \"ui:options\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"value\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"label\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"disabled\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"expr\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"expr\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"update\",\n                                                      \"create\"\n                                                    ]\n                                                  }\n                                                ]\n                                              },\n                                              \"hidden\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"properties\": {\n                                                      \"expr\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"expr\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  },\n                                                  {\n                                                    \"type\": \"boolean\",\n                                                    \"enum\": [\n                                                      false,\n                                                      true\n                                                    ]\n                                                  },\n                                                  {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"update\",\n                                                      \"create\"\n                                                    ]\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"label\",\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"maxItems\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minItems\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"example\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"items\",\n                                        \"type\",\n                                        \"ui:control\",\n                                        \"ui:options\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"string\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"vercel-region\"\n                                          ]\n                                        },\n                                        \"ui:options\": {\n                                          \"items\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"value\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"label\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"disabled\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"hidden\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"label\",\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"value\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"disabled\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"hidden\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"enum\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"maxLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"pattern\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\",\n                                        \"ui:options\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"array\"\n                                          ]\n                                        },\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"string\"\n                                              ]\n                                            },\n                                            \"description\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"minLength\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"maxLength\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"pattern\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"default\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"enum\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"multi-vercel-region\"\n                                          ]\n                                        },\n                                        \"ui:options\": {\n                                          \"items\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"value\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"label\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"disabled\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"hidden\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"label\",\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"value\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"disabled\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"hidden\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"expr\": {\n                                                            \"type\": \"string\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"expr\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"type\": \"boolean\",\n                                                        \"enum\": [\n                                                          false,\n                                                          true\n                                                        ]\n                                                      },\n                                                      {\n                                                        \"type\": \"string\",\n                                                        \"enum\": [\n                                                          \"update\",\n                                                          \"create\"\n                                                        ]\n                                                      }\n                                                    ]\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"maxItems\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minItems\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"example\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"items\",\n                                        \"type\",\n                                        \"ui:control\",\n                                        \"ui:options\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"string\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"domain\"\n                                          ]\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"enum\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"maxLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"minLength\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"pattern\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"default\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"string\"\n                                          ]\n                                        },\n                                        \"ui:control\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"git-namespace\"\n                                          ]\n                                        },\n                                        \"description\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:label\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ui:read-only\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:hidden\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:disabled\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"update\",\n                                                \"create\"\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"ui:description\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"expr\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"expr\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"ui:formatted-value\": {\n                                          \"properties\": {\n                                            \"expr\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"expr\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"ui:placeholder\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"git:providers\": {\n                                          \"items\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"github\",\n                                              \"gitlab\",\n                                              \"bitbucket\"\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"ui:control\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"required\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"properties\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"metadataSchema\",\n                          \"name\",\n                          \"protocols\",\n                          \"slug\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"integration\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"slug\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\",\n                        \"slug\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"configuration\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"configuration\",\n                    \"integration\",\n                    \"products\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"ID of the integration configuration\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"ID of the integration configuration\",\n              \"example\": \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/integrations/sso/token\": {\n      \"post\": {\n        \"description\": \"During the autorization process, Vercel sends the user to the provider [redirectLoginUrl](https://vercel.com/docs/integrations/create-integration/submit-integration#redirect-login-url), that includes the OAuth authorization `code` parameter. The provider then calls the SSO Token Exchange endpoint with the sent code and receives the OIDC token. They log the user in based on this token and redirects the user back to the Vercel account using deep-link parameters included the redirectLoginUrl. Providers should not persist the returned `id_token` in a database since the token will expire. See [**Authentication with SSO**](https://vercel.com/docs/integrations/create-integration/marketplace-api#authentication-with-sso) for more details.\",\n        \"operationId\": \"exchange-sso-token\",\n        \"security\": [],\n        \"summary\": \"SSO Token Exchange\",\n        \"tags\": [\n          \"authentication\",\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"id_token\": {\n                          \"type\": \"string\"\n                        },\n                        \"token_type\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"expires_in\": {\n                          \"type\": \"number\"\n                        },\n                        \"access_token\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"refresh_token\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"access_token\",\n                        \"id_token\",\n                        \"token_type\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"id_token\": {\n                          \"type\": \"string\"\n                        },\n                        \"token_type\": {\n                          \"type\": \"string\"\n                        },\n                        \"access_token\": {\n                          \"type\": \"string\"\n                        },\n                        \"refresh_token\": {\n                          \"type\": \"string\"\n                        },\n                        \"expires_in\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"access_token\",\n                        \"expires_in\",\n                        \"id_token\",\n                        \"refresh_token\",\n                        \"token_type\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"403\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"oneOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"code\",\n                      \"client_id\",\n                      \"client_secret\",\n                      \"grant_type\"\n                    ],\n                    \"properties\": {\n                      \"code\": {\n                        \"type\": \"string\",\n                        \"description\": \"The sensitive code received from Vercel\"\n                      },\n                      \"state\": {\n                        \"type\": \"string\",\n                        \"description\": \"The state received from the initialization request\"\n                      },\n                      \"client_id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The integration client id\"\n                      },\n                      \"client_secret\": {\n                        \"type\": \"string\",\n                        \"description\": \"The integration client secret\"\n                      },\n                      \"redirect_uri\": {\n                        \"type\": \"string\",\n                        \"description\": \"The integration redirect URI\"\n                      },\n                      \"grant_type\": {\n                        \"type\": \"string\",\n                        \"description\": \"The grant type, when using x-www-form-urlencoded content type\",\n                        \"enum\": [\n                          \"authorization_code\"\n                        ]\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"refresh_token\",\n                      \"client_id\",\n                      \"client_secret\",\n                      \"grant_type\"\n                    ],\n                    \"properties\": {\n                      \"refresh_token\": {\n                        \"type\": \"string\",\n                        \"description\": \"The refresh token received from previous token exchange\"\n                      },\n                      \"client_id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The integration client id\"\n                      },\n                      \"client_secret\": {\n                        \"type\": \"string\",\n                        \"description\": \"The integration client secret\"\n                      },\n                      \"grant_type\": {\n                        \"type\": \"string\",\n                        \"description\": \"The grant type, when using x-www-form-urlencoded content type\",\n                        \"enum\": [\n                          \"refresh_token\"\n                        ]\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v2/integrations/log-drains\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of all Integration log drains that are defined for the authenticated user or team. When using an OAuth2 token, the list is limited to log drains created by the authenticated integration.\",\n        \"operationId\": \"getIntegrationLogDrains\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieves a list of Integration log drains (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A list of log drains\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"items\": {\n                    \"properties\": {\n                      \"clientId\": {\n                        \"type\": \"string\",\n                        \"description\": \"The oauth2 client application id that created this log drain\",\n                        \"example\": \"oac_xRhY4LAB7yLhUADD69EvV7ct\"\n                      },\n                      \"configurationId\": {\n                        \"type\": \"string\",\n                        \"description\": \"The client configuration this log drain was created with\",\n                        \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"A timestamp that tells you when the log drain was created\",\n                        \"example\": 1558531915505\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the log drain. Always prefixed with `ld_`\",\n                        \"example\": \"ld_nBuA7zCID8g4QZ8g\"\n                      },\n                      \"deliveryFormat\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"json\",\n                          \"ndjson\",\n                          \"protobuf\"\n                        ],\n                        \"description\": \"The delivery log format\",\n                        \"example\": \"json\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"The name of the log drain\",\n                        \"example\": \"My first log drain\"\n                      },\n                      \"ownerId\": {\n                        \"type\": \"string\",\n                        \"description\": \"The identifier of the team or user whose events will trigger the log drain\",\n                        \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                      },\n                      \"projectId\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"example\": \"AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb\"\n                      },\n                      \"projectIds\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"The identifier of the projects this log drain is associated with\",\n                        \"example\": \"AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb\"\n                      },\n                      \"url\": {\n                        \"type\": \"string\",\n                        \"description\": \"The URL to call when logs are generated\",\n                        \"example\": \"https://example.com/log-drain\"\n                      },\n                      \"sources\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"external\",\n                            \"build\",\n                            \"edge\",\n                            \"lambda\",\n                            \"static\",\n                            \"firewall\",\n                            \"redirect\"\n                          ],\n                          \"description\": \"The sources from which logs are currently being delivered to this log drain.\",\n                          \"example\": [\n                            \"build\",\n                            \"edge\"\n                          ]\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"The sources from which logs are currently being delivered to this log drain.\",\n                        \"example\": [\n                          \"build\",\n                          \"edge\"\n                        ]\n                      },\n                      \"createdFrom\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"integration\",\n                          \"self-served\"\n                        ],\n                        \"description\": \"Whether the log drain was created by an integration or by a user\",\n                        \"example\": \"integration\"\n                      },\n                      \"headers\": {\n                        \"additionalProperties\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"The headers to send with the request\",\n                        \"example\": \"{\\\"Authorization\\\": \\\"Bearer 123\\\"}\"\n                      },\n                      \"environments\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\"\n                          ],\n                          \"description\": \"The environment of log drain\",\n                          \"example\": [\n                            \"production\"\n                          ]\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"The environment of log drain\",\n                        \"example\": [\n                          \"production\"\n                        ]\n                      },\n                      \"branch\": {\n                        \"type\": \"string\",\n                        \"description\": \"The branch regexp of log drain\",\n                        \"example\": \"feature/*\"\n                      },\n                      \"samplingRate\": {\n                        \"type\": \"number\",\n                        \"description\": \"The sampling rate of log drain\",\n                        \"example\": 0.5\n                      },\n                      \"source\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"self-served\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"kind\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"kind\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"integration\"\n                                ]\n                              },\n                              \"resourceId\": {\n                                \"type\": \"string\"\n                              },\n                              \"externalResourceId\": {\n                                \"type\": \"string\"\n                              },\n                              \"integrationId\": {\n                                \"type\": \"string\"\n                              },\n                              \"integrationConfigurationId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"integrationConfigurationId\",\n                              \"integrationId\",\n                              \"kind\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"createdAt\",\n                      \"id\",\n                      \"name\",\n                      \"ownerId\",\n                      \"source\",\n                      \"url\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"type\": \"array\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates an Integration log drain. This endpoint must be called with an OAuth2 client (integration), since log drains are tied to integrations. If it is called with a different token type it will produce a 400 error.\",\n        \"operationId\": \"createLogDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Creates a new Integration Log Drain (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The log drain was successfully created\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"clientId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The oauth2 client application id that created this log drain\",\n                      \"example\": \"oac_xRhY4LAB7yLhUADD69EvV7ct\"\n                    },\n                    \"configurationId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The client configuration this log drain was created with\",\n                      \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A timestamp that tells you when the log drain was created\",\n                      \"example\": 1558531915505\n                    },\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the log drain. Always prefixed with `ld_`\",\n                      \"example\": \"ld_nBuA7zCID8g4QZ8g\"\n                    },\n                    \"deliveryFormat\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"json\",\n                        \"ndjson\",\n                        \"protobuf\"\n                      ],\n                      \"description\": \"The delivery log format\",\n                      \"example\": \"json\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the log drain\",\n                      \"example\": \"My first log drain\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The identifier of the team or user whose events will trigger the log drain\",\n                      \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n                    },\n                    \"projectId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"example\": \"AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb\"\n                    },\n                    \"projectIds\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The identifier of the projects this log drain is associated with\",\n                      \"example\": \"AbCgVkqoxXeXCDWehVir51LHGrrcWL4mkYm14W6UBPWQeb\"\n                    },\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"description\": \"The URL to call when logs are generated\",\n                      \"example\": \"https://example.com/log-drain\"\n                    },\n                    \"sources\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"external\",\n                          \"build\",\n                          \"edge\",\n                          \"lambda\",\n                          \"static\",\n                          \"firewall\",\n                          \"redirect\"\n                        ],\n                        \"description\": \"The sources from which logs are currently being delivered to this log drain.\",\n                        \"example\": [\n                          \"build\",\n                          \"edge\"\n                        ]\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The sources from which logs are currently being delivered to this log drain.\",\n                      \"example\": [\n                        \"build\",\n                        \"edge\"\n                      ]\n                    },\n                    \"createdFrom\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"integration\",\n                        \"self-served\"\n                      ],\n                      \"description\": \"Whether the log drain was created by an integration or by a user\",\n                      \"example\": \"integration\"\n                    },\n                    \"headers\": {\n                      \"additionalProperties\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"The headers to send with the request\",\n                      \"example\": \"{\\\"Authorization\\\": \\\"Bearer 123\\\"}\"\n                    },\n                    \"environments\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"production\",\n                          \"preview\"\n                        ],\n                        \"description\": \"The environment of log drain\",\n                        \"example\": [\n                          \"production\"\n                        ]\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The environment of log drain\",\n                      \"example\": [\n                        \"production\"\n                      ]\n                    },\n                    \"branch\": {\n                      \"type\": \"string\",\n                      \"description\": \"The branch regexp of log drain\",\n                      \"example\": \"feature/*\"\n                    },\n                    \"samplingRate\": {\n                      \"type\": \"number\",\n                      \"description\": \"The sampling rate of log drain\",\n                      \"example\": 0.5\n                    },\n                    \"source\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"self-served\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"kind\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration\"\n                              ]\n                            },\n                            \"resourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"externalResourceId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"kind\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"id\",\n                    \"name\",\n                    \"ownerId\",\n                    \"source\",\n                    \"url\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nThe provided token is not from an OAuth2 Client\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"name\": {\n                    \"description\": \"The name of the log drain\",\n                    \"example\": \"My first log drain\",\n                    \"maxLength\": 100,\n                    \"pattern\": \"^[A-z0-9_ -]+$\",\n                    \"type\": \"string\"\n                  },\n                  \"projectIds\": {\n                    \"minItems\": 1,\n                    \"maxItems\": 50,\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"pattern\": \"^[a-zA-z0-9_]+$\",\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"secret\": {\n                    \"description\": \"A secret to sign log drain notification headers so a consumer can verify their authenticity\",\n                    \"example\": \"a1Xsfd325fXcs\",\n                    \"maxLength\": 100,\n                    \"pattern\": \"^[A-z0-9_ -]+$\",\n                    \"type\": \"string\"\n                  },\n                  \"deliveryFormat\": {\n                    \"description\": \"The delivery log format\",\n                    \"example\": \"json\",\n                    \"enum\": [\n                      \"json\",\n                      \"ndjson\"\n                    ]\n                  },\n                  \"url\": {\n                    \"description\": \"The url where you will receive logs. The protocol must be `https://` or `http://` when type is `json` and `ndjson`.\",\n                    \"example\": \"https://example.com/log-drain\",\n                    \"format\": \"uri\",\n                    \"pattern\": \"^https?://\",\n                    \"type\": \"string\"\n                  },\n                  \"sources\": {\n                    \"type\": \"array\",\n                    \"uniqueItems\": true,\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"static\",\n                        \"lambda\",\n                        \"build\",\n                        \"edge\",\n                        \"external\",\n                        \"firewall\"\n                      ]\n                    },\n                    \"minItems\": 1\n                  },\n                  \"headers\": {\n                    \"description\": \"Headers to be sent together with the request\",\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"environments\": {\n                    \"type\": \"array\",\n                    \"uniqueItems\": true,\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"preview\",\n                        \"production\"\n                      ]\n                    },\n                    \"minItems\": 1\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"url\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/integrations/log-drains/{id}\": {\n      \"delete\": {\n        \"description\": \"Deletes the Integration log drain with the provided `id`. When using an OAuth2 Token, the log drain can be deleted only if the integration owns it.\",\n        \"operationId\": \"deleteIntegrationLogDrain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Deletes the Integration log drain with the provided `id` (deprecated)\",\n        \"tags\": [\n          \"logDrains\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"The log drain was successfully deleted\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"ID of the log drain to be deleted\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"ID of the log drain to be deleted\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectId}/deployments/{deploymentId}/runtime-logs\": {\n      \"get\": {\n        \"description\": \"Returns a stream of logs for a given deployment.\",\n        \"operationId\": \"getRuntimeLogs\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get logs for a deployment\",\n        \"tags\": [\n          \"logs\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/stream+json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"level\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"error\",\n                        \"warning\",\n                        \"info\"\n                      ]\n                    },\n                    \"message\": {\n                      \"type\": \"string\"\n                    },\n                    \"rowId\": {\n                      \"type\": \"string\"\n                    },\n                    \"source\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"delimiter\",\n                        \"edge-function\",\n                        \"edge-middleware\",\n                        \"serverless\",\n                        \"request\"\n                      ]\n                    },\n                    \"timestampInMs\": {\n                      \"type\": \"number\"\n                    },\n                    \"domain\": {\n                      \"type\": \"string\"\n                    },\n                    \"messageTruncated\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"requestMethod\": {\n                      \"type\": \"string\"\n                    },\n                    \"requestPath\": {\n                      \"type\": \"string\"\n                    },\n                    \"responseStatusCode\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"domain\",\n                    \"level\",\n                    \"message\",\n                    \"messageTruncated\",\n                    \"requestMethod\",\n                    \"requestPath\",\n                    \"responseStatusCode\",\n                    \"rowId\",\n                    \"source\",\n                    \"timestampInMs\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items\": {\n      \"post\": {\n        \"description\": \"Create one or multiple experimentation items\",\n        \"operationId\": \"createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItems\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create one or multiple experimentation items\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"The items were created\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"items\"\n                ],\n                \"properties\": {\n                  \"items\": {\n                    \"type\": \"array\",\n                    \"maxItems\": 50,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"id\",\n                        \"slug\",\n                        \"origin\"\n                      ],\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 1024\n                        },\n                        \"slug\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 1024\n                        },\n                        \"origin\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 2048\n                        },\n                        \"category\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"experiment\",\n                            \"flag\"\n                          ]\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 1024\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 1024\n                        },\n                        \"isArchived\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"x-speakeasy-name-override\": \"createInstallationIntegrationConfiguration\"\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/items/{itemId}\": {\n      \"patch\": {\n        \"description\": \"Patch an existing experimentation item\",\n        \"operationId\": \"updateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsByItemId\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Patch an existing experimentation item\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"The item was updated\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"itemId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"slug\",\n                  \"origin\"\n                ],\n                \"properties\": {\n                  \"slug\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 1024\n                  },\n                  \"origin\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 2048\n                  },\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 1024\n                  },\n                  \"category\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"experiment\",\n                      \"flag\"\n                    ]\n                  },\n                  \"description\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 1024\n                  },\n                  \"isArchived\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"createdAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"updatedAt\": {\n                    \"type\": \"number\"\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"x-speakeasy-name-override\": \"updateInstallationIntegrationConfiguration\"\n      },\n      \"delete\": {\n        \"description\": \"Delete an existing experimentation item\",\n        \"operationId\": \"deleteInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsByItemId\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an existing experimentation item\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"The item was deleted\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"itemId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"x-speakeasy-name-override\": \"deleteInstallationIntegrationConfiguration\"\n      }\n    },\n    \"/v1/installations/{integrationConfigurationId}/resources/{resourceId}/experimentation/edge-config\": {\n      \"head\": {\n        \"description\": \"When the user enabled Edge Config syncing, then this endpoint can be used by the partner to fetch the contents of the Edge Config.\",\n        \"operationId\": \"headInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get the data of a user-provided Edge Config\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The Edge Config data\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"items\": {\n                      \"additionalProperties\": {\n                        \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"digest\": {\n                      \"type\": \"string\"\n                    },\n                    \"purpose\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"flags\",\n                        \"experimentation\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"digest\",\n                    \"items\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"304\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"x-speakeasy-name-override\": \"createInstallationIntegrationEdgeConfig\",\n        \"x-speakeasy-test\": false\n      },\n      \"get\": {\n        \"description\": \"When the user enabled Edge Config syncing, then this endpoint can be used by the partner to fetch the contents of the Edge Config.\",\n        \"operationId\": \"getInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get the data of a user-provided Edge Config\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The Edge Config data\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"items\": {\n                      \"additionalProperties\": {\n                        \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"digest\": {\n                      \"type\": \"string\"\n                    },\n                    \"purpose\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"flags\",\n                        \"experimentation\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"digest\",\n                    \"items\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"304\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      },\n      \"put\": {\n        \"description\": \"When the user enabled Edge Config syncing, then this endpoint can be used by the partner to push their configuration data into the relevant Edge Config.\",\n        \"operationId\": \"replaceInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationEdgeConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Push data into a user-provided Edge Config\",\n        \"tags\": [\n          \"marketplace\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The Edge Config was updated\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"items\": {\n                      \"additionalProperties\": {\n                        \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"digest\": {\n                      \"type\": \"string\"\n                    },\n                    \"purpose\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"flags\",\n                        \"experimentation\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"digest\",\n                    \"items\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"412\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"integrationConfigurationId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"resourceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"data\"\n                ],\n                \"properties\": {\n                  \"data\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {}\n                  }\n                }\n              }\n            }\n          }\n        },\n        \"x-speakeasy-name-override\": \"updateInstallationIntegrationEdgeConfig\"\n      }\n    },\n    \"/v1/projects/{idOrName}/members\": {\n      \"get\": {\n        \"description\": \"Lists all members of a project.\",\n        \"operationId\": \"getProjectMembers\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List project members\",\n        \"tags\": [\n          \"projectMembers\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Paginated list of members for the project.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"members\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"avatar\": {\n                                \"type\": \"string\",\n                                \"description\": \"ID of the file for the Avatar of this member.\",\n                                \"example\": \"123a6c5209bc3778245d011443644c8d27dc2c50\"\n                              },\n                              \"email\": {\n                                \"type\": \"string\",\n                                \"description\": \"The email of this member.\",\n                                \"example\": \"jane.doe@example.com\"\n                              },\n                              \"role\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"ADMIN\",\n                                  \"PROJECT_DEVELOPER\",\n                                  \"PROJECT_VIEWER\",\n                                  \"PROJECT_GUEST\"\n                                ],\n                                \"description\": \"Role of this user in the project.\",\n                                \"example\": \"ADMIN\"\n                              },\n                              \"computedProjectRole\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"ADMIN\",\n                                  \"PROJECT_DEVELOPER\",\n                                  \"PROJECT_VIEWER\",\n                                  \"PROJECT_GUEST\"\n                                ],\n                                \"description\": \"Role of this user in the project.\",\n                                \"example\": \"ADMIN\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\",\n                                \"description\": \"The ID of this user.\",\n                                \"example\": \"zTuNVUXEAvvnNN3IaqinkyMw\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\",\n                                \"description\": \"The unique username of this user.\",\n                                \"example\": \"jane-doe\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"The name of this user.\",\n                                \"example\": \"Jane Doe\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\",\n                                \"description\": \"Timestamp in milliseconds when this member was added.\",\n                                \"example\": 1588720733602\n                              },\n                              \"teamRole\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"OWNER\",\n                                  \"MEMBER\",\n                                  \"DEVELOPER\",\n                                  \"SECURITY\",\n                                  \"BILLING\",\n                                  \"VIEWER\",\n                                  \"VIEWER_FOR_PLUS\",\n                                  \"CONTRIBUTOR\"\n                                ],\n                                \"description\": \"The role of this user in the team.\",\n                                \"example\": \"CONTRIBUTOR\"\n                              }\n                            },\n                            \"required\": [\n                              \"computedProjectRole\",\n                              \"createdAt\",\n                              \"email\",\n                              \"role\",\n                              \"teamRole\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"properties\": {\n                            \"hasNext\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"count\": {\n                              \"type\": \"number\",\n                              \"description\": \"Amount of items in the current page.\",\n                              \"example\": 20\n                            },\n                            \"next\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp that must be used to request the next page.\",\n                              \"example\": 1540095775951\n                            },\n                            \"prev\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp that must be used to request the previous page.\",\n                              \"example\": 1540095775951\n                            }\n                          },\n                          \"required\": [\n                            \"count\",\n                            \"hasNext\",\n                            \"next\",\n                            \"prev\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"members\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Paginated list of members for the project.\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The ID or name of the Project.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID or name of the Project.\",\n              \"example\": \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Limit how many project members should be returned\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Limit how many project members should be returned\",\n              \"example\": 20,\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Timestamp in milliseconds to only include members added since then.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Timestamp in milliseconds to only include members added since then.\",\n              \"example\": 1540095775951,\n              \"type\": \"integer\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Timestamp in milliseconds to only include members added until then.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Timestamp in milliseconds to only include members added until then.\",\n              \"example\": 1540095775951,\n              \"type\": \"integer\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search project members by their name, username, and email.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Search project members by their name, username, and email.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      },\n      \"post\": {\n        \"description\": \"Adds a new member to the project.\",\n        \"operationId\": \"addProjectMember\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Adds a new member to a project.\",\n        \"tags\": [\n          \"projectMembers\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Responds with the project ID on success.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Responds with the project ID on success.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The ID or name of the Project.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID or name of the Project.\",\n              \"example\": \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"role\"\n                ],\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"uid\"\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"username\"\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"email\"\n                    ]\n                  }\n                ],\n                \"properties\": {\n                  \"uid\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256,\n                    \"example\": \"ndlgr43fadlPyCtREAqxxdyFK\",\n                    \"description\": \"The ID of the team member that should be added to this project.\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256,\n                    \"example\": \"example\",\n                    \"description\": \"The username of the team member that should be added to this project.\"\n                  },\n                  \"email\": {\n                    \"type\": \"string\",\n                    \"format\": \"email\",\n                    \"example\": \"entity@example.com\",\n                    \"description\": \"The email of the team member that should be added to this project.\"\n                  },\n                  \"role\": {\n                    \"type\": \"string\",\n                    \"example\": \"ADMIN\",\n                    \"description\": \"The project role of the member that will be added.\",\n                    \"enum\": [\n                      \"ADMIN\",\n                      \"PROJECT_VIEWER\",\n                      \"PROJECT_DEVELOPER\"\n                    ]\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/projects/{idOrName}/members/{uid}\": {\n      \"delete\": {\n        \"description\": \"Remove a member from a specific project\",\n        \"operationId\": \"removeProjectMember\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove a Project Member\",\n        \"tags\": [\n          \"projectMembers\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The ID or name of the Project.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID or name of the Project.\",\n              \"example\": \"prj_pavWOn1iLObbXLRiwVvzmPrTWyTf\"\n            }\n          },\n          {\n            \"name\": \"uid\",\n            \"description\": \"The user ID of the member.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The user ID of the member.\",\n              \"example\": \"ndlgr43fadlPyCtREAqxxdyFK\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectId}/routes\": {\n      \"get\": {\n        \"description\": \"Get the routing rules for a project. Supports searching by name/ID/pattern, filtering by route type, and diffing staged changes against production.\",\n        \"operationId\": \"getRoutes\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get project routing rules\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"routes\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\",\n                                \"description\": \"Unique identifier for the routing rule.\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"Human-readable name for the routing rule.\"\n                              },\n                              \"description\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional description of what the routing rule does.\"\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the routing rule is enabled. Defaults to true.\"\n                              },\n                              \"staged\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production.\"\n                              },\n                              \"route\": {\n                                \"properties\": {\n                                  \"src\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"dest\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"headers\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"methods\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"continue\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"override\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"caseSensitive\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"check\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"important\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"status\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"has\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"missing\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"mitigate\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"challenge\",\n                                          \"deny\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"transforms\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"request.headers\",\n                                            \"request.query\",\n                                            \"response.headers\"\n                                          ]\n                                        },\n                                        \"op\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"append\",\n                                            \"set\",\n                                            \"delete\"\n                                          ]\n                                        },\n                                        \"target\": {\n                                          \"properties\": {\n                                            \"key\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"args\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          ]\n                                        },\n                                        \"env\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"op\",\n                                        \"target\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"env\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"locale\": {\n                                    \"properties\": {\n                                      \"redirect\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"cookie\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"source\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                                  },\n                                  \"destination\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"middlewarePath\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                                  },\n                                  \"middlewareRawSrc\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"The original middleware matchers.\"\n                                  },\n                                  \"middleware\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A middleware index in the `middleware` key under the build result\"\n                                  },\n                                  \"respectOriginCacheControl\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"src\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"The route definition from @vercel/routing-utils.\"\n                              },\n                              \"rawSrc\": {\n                                \"type\": \"string\",\n                                \"description\": \"Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses.\"\n                              },\n                              \"rawDest\": {\n                                \"type\": \"string\",\n                                \"description\": \"Original destination provided by user.\"\n                              },\n                              \"srcSyntax\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"equals\",\n                                  \"path-to-regexp\",\n                                  \"regex\"\n                                ],\n                                \"description\": \"The syntax type of the source pattern. Determines how the pattern is compiled to regex.\"\n                              },\n                              \"routeType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"rewrite\",\n                                  \"redirect\",\n                                  \"set_status\",\n                                  \"transform\"\n                                ],\n                                \"description\": \"Computed route type based on the route configuration. Only present in API responses, not stored in S3.\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"name\",\n                              \"route\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A routing rule with metadata for project-level routing.\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"Unique identifier for the version.\"\n                            },\n                            \"s3Key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The S3 key where the routing rules are stored.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp of when this version was last modified.\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\",\n                              \"description\": \"The user who created this version.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"ruleCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of routing rules in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging alias for previewing this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"lastModified\",\n                            \"s3Key\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"A version of routing rules stored in S3.\"\n                        },\n                        \"diffCount\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"diffCount\",\n                        \"routes\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"routes\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\",\n                                \"description\": \"Unique identifier for the routing rule.\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"Human-readable name for the routing rule.\"\n                              },\n                              \"description\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional description of what the routing rule does.\"\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the routing rule is enabled. Defaults to true.\"\n                              },\n                              \"staged\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production.\"\n                              },\n                              \"route\": {\n                                \"properties\": {\n                                  \"src\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"dest\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"headers\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"methods\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"continue\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"override\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"caseSensitive\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"check\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"important\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"status\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"has\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"missing\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"mitigate\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"challenge\",\n                                          \"deny\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"transforms\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"request.headers\",\n                                            \"request.query\",\n                                            \"response.headers\"\n                                          ]\n                                        },\n                                        \"op\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"append\",\n                                            \"set\",\n                                            \"delete\"\n                                          ]\n                                        },\n                                        \"target\": {\n                                          \"properties\": {\n                                            \"key\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"args\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          ]\n                                        },\n                                        \"env\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"op\",\n                                        \"target\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"env\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"locale\": {\n                                    \"properties\": {\n                                      \"redirect\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"cookie\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"source\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                                  },\n                                  \"destination\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"middlewarePath\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                                  },\n                                  \"middlewareRawSrc\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"The original middleware matchers.\"\n                                  },\n                                  \"middleware\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A middleware index in the `middleware` key under the build result\"\n                                  },\n                                  \"respectOriginCacheControl\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"src\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"The route definition from @vercel/routing-utils.\"\n                              },\n                              \"rawSrc\": {\n                                \"type\": \"string\",\n                                \"description\": \"Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses.\"\n                              },\n                              \"rawDest\": {\n                                \"type\": \"string\",\n                                \"description\": \"Original destination provided by user.\"\n                              },\n                              \"srcSyntax\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"equals\",\n                                  \"path-to-regexp\",\n                                  \"regex\"\n                                ],\n                                \"description\": \"The syntax type of the source pattern. Determines how the pattern is compiled to regex.\"\n                              },\n                              \"routeType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"rewrite\",\n                                  \"redirect\",\n                                  \"set_status\",\n                                  \"transform\"\n                                ],\n                                \"description\": \"Computed route type based on the route configuration. Only present in API responses, not stored in S3.\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"name\",\n                              \"route\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A routing rule with metadata for project-level routing.\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"Unique identifier for the version.\"\n                            },\n                            \"s3Key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The S3 key where the routing rules are stored.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp of when this version was last modified.\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\",\n                              \"description\": \"The user who created this version.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"ruleCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of routing rules in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging alias for previewing this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"lastModified\",\n                            \"s3Key\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"A version of routing rules stored in S3.\"\n                        }\n                      },\n                      \"required\": [\n                        \"routes\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"routes\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\",\n                                \"description\": \"Unique identifier for the routing rule.\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\",\n                                \"description\": \"Human-readable name for the routing rule.\"\n                              },\n                              \"description\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional description of what the routing rule does.\"\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the routing rule is enabled. Defaults to true.\"\n                              },\n                              \"staged\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production.\"\n                              },\n                              \"route\": {\n                                \"properties\": {\n                                  \"src\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"dest\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"headers\": {\n                                    \"additionalProperties\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"methods\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"continue\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"override\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"caseSensitive\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"check\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"important\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"status\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"has\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"missing\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"host\"\n                                              ]\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"type\",\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"header\",\n                                                \"cookie\",\n                                                \"query\"\n                                              ]\n                                            },\n                                            \"key\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"re\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"mitigate\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"challenge\",\n                                          \"deny\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"transforms\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"request.headers\",\n                                            \"request.query\",\n                                            \"response.headers\"\n                                          ]\n                                        },\n                                        \"op\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"append\",\n                                            \"set\",\n                                            \"delete\"\n                                          ]\n                                        },\n                                        \"target\": {\n                                          \"properties\": {\n                                            \"key\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"eq\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        {\n                                                          \"type\": \"number\"\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"neq\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"inc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"ninc\": {\n                                                      \"items\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"pre\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"suf\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"gt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"gte\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lt\": {\n                                                      \"type\": \"number\"\n                                                    },\n                                                    \"lte\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"key\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"args\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          ]\n                                        },\n                                        \"env\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"op\",\n                                        \"target\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"env\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"locale\": {\n                                    \"properties\": {\n                                      \"redirect\": {\n                                        \"additionalProperties\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"object\"\n                                      },\n                                      \"cookie\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"source\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                                  },\n                                  \"destination\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"middlewarePath\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                                  },\n                                  \"middlewareRawSrc\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"The original middleware matchers.\"\n                                  },\n                                  \"middleware\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A middleware index in the `middleware` key under the build result\"\n                                  },\n                                  \"respectOriginCacheControl\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"src\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"The route definition from @vercel/routing-utils.\"\n                              },\n                              \"rawSrc\": {\n                                \"type\": \"string\",\n                                \"description\": \"Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses.\"\n                              },\n                              \"rawDest\": {\n                                \"type\": \"string\",\n                                \"description\": \"Original destination provided by user.\"\n                              },\n                              \"srcSyntax\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"equals\",\n                                  \"path-to-regexp\",\n                                  \"regex\"\n                                ],\n                                \"description\": \"The syntax type of the source pattern. Determines how the pattern is compiled to regex.\"\n                              },\n                              \"routeType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"rewrite\",\n                                  \"redirect\",\n                                  \"set_status\",\n                                  \"transform\"\n                                ],\n                                \"description\": \"Computed route type based on the route configuration. Only present in API responses, not stored in S3.\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"name\",\n                              \"route\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A routing rule with metadata for project-level routing.\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"version\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"Unique identifier for the version.\"\n                            },\n                            \"s3Key\": {\n                              \"type\": \"string\",\n                              \"description\": \"The S3 key where the routing rules are stored.\"\n                            },\n                            \"lastModified\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp of when this version was last modified.\"\n                            },\n                            \"createdBy\": {\n                              \"type\": \"string\",\n                              \"description\": \"The user who created this version.\"\n                            },\n                            \"isStaging\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                            },\n                            \"isLive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether this version is currently live in production.\"\n                            },\n                            \"ruleCount\": {\n                              \"type\": \"number\",\n                              \"description\": \"The number of routing rules in this version.\"\n                            },\n                            \"alias\": {\n                              \"type\": \"string\",\n                              \"description\": \"The staging alias for previewing this version.\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdBy\",\n                            \"id\",\n                            \"lastModified\",\n                            \"s3Key\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"A version of routing rules stored in S3.\"\n                        },\n                        \"limit\": {\n                          \"properties\": {\n                            \"maxRoutes\": {\n                              \"type\": \"number\"\n                            },\n                            \"currentRoutes\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"currentRoutes\",\n                            \"maxRoutes\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"limit\",\n                        \"routes\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"versionId\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"q\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"rewrite\",\n                \"redirect\",\n                \"set_status\",\n                \"transform\"\n              ]\n            }\n          },\n          {\n            \"name\": \"diff\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"oneOf\": [\n                {\n                  \"type\": \"boolean\"\n                },\n                {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"only\"\n                  ]\n                }\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"put\": {\n        \"description\": \"Stage routing rules for a project. Set `overwrite` to true to replace all existing rules, or omit it to merge with existing rules by ID. Returns the new staged version.\",\n        \"operationId\": \"stageRoutes\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Stage routing rules\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the version.\"\n                        },\n                        \"s3Key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The S3 key where the routing rules are stored.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when this version was last modified.\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who created this version.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"ruleCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of routing rules in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging alias for previewing this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"lastModified\",\n                        \"s3Key\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A version of routing rules stored in S3.\"\n                    }\n                  },\n                  \"required\": [\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"overwrite\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"routes\": {\n                    \"type\": \"array\",\n                    \"default\": [],\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"id\",\n                        \"name\",\n                        \"route\"\n                      ],\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 256\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 256\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 1024\n                        },\n                        \"enabled\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"route\": {\n                          \"type\": \"object\",\n                          \"required\": [\n                            \"src\"\n                          ],\n                          \"properties\": {\n                            \"src\": {\n                              \"type\": \"string\"\n                            },\n                            \"dest\": {\n                              \"type\": \"string\"\n                            },\n                            \"headers\": {\n                              \"type\": \"object\"\n                            },\n                            \"caseSensitive\": {\n                              \"type\": \"boolean\"\n                            },\n                            \"status\": {\n                              \"type\": \"integer\"\n                            },\n                            \"has\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"host\",\n                                      \"header\",\n                                      \"cookie\",\n                                      \"query\"\n                                    ]\n                                  },\n                                  \"key\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            },\n                            \"missing\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"host\",\n                                      \"header\",\n                                      \"cookie\",\n                                      \"query\"\n                                    ]\n                                  },\n                                  \"key\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            },\n                            \"transforms\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"request.headers\",\n                                      \"request.query\",\n                                      \"response.headers\"\n                                    ]\n                                  },\n                                  \"op\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"append\",\n                                      \"set\",\n                                      \"delete\"\n                                    ]\n                                  },\n                                  \"target\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"args\": {},\n                                  \"env\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    }\n                                  }\n                                }\n                              }\n                            },\n                            \"respectOriginCacheControl\": {\n                              \"type\": \"boolean\"\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"post\": {\n        \"description\": \"Add a single routing rule to a project at a specified position. Defaults to the end of the list if no position is provided. The route is enabled by default. Stages a new version with the added route.\",\n        \"operationId\": \"addRoute\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Add a routing rule\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"route\": {\n                      \"properties\": {\n                        \"routeType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"rewrite\",\n                            \"redirect\",\n                            \"set_status\",\n                            \"transform\"\n                          ]\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the routing rule.\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Human-readable name for the routing rule.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"Optional description of what the routing rule does.\"\n                        },\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the routing rule is enabled. Defaults to true.\"\n                        },\n                        \"staged\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production.\"\n                        },\n                        \"route\": {\n                          \"properties\": {\n                            \"src\": {\n                              \"type\": \"string\"\n                            },\n                            \"dest\": {\n                              \"type\": \"string\"\n                            },\n                            \"headers\": {\n                              \"additionalProperties\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"methods\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"continue\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"override\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"caseSensitive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"check\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"important\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"status\": {\n                              \"type\": \"number\"\n                            },\n                            \"has\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"host\"\n                                        ]\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"header\",\n                                          \"cookie\",\n                                          \"query\"\n                                        ]\n                                      },\n                                      \"key\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"key\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"missing\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"host\"\n                                        ]\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"header\",\n                                          \"cookie\",\n                                          \"query\"\n                                        ]\n                                      },\n                                      \"key\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"key\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"mitigate\": {\n                              \"properties\": {\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"challenge\",\n                                    \"deny\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"transforms\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"request.headers\",\n                                      \"request.query\",\n                                      \"response.headers\"\n                                    ]\n                                  },\n                                  \"op\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"append\",\n                                      \"set\",\n                                      \"delete\"\n                                    ]\n                                  },\n                                  \"target\": {\n                                    \"properties\": {\n                                      \"key\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"key\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"args\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"array\"\n                                      }\n                                    ]\n                                  },\n                                  \"env\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"op\",\n                                  \"target\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"env\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"locale\": {\n                              \"properties\": {\n                                \"redirect\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"cookie\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                            },\n                            \"destination\": {\n                              \"type\": \"string\"\n                            },\n                            \"statusCode\": {\n                              \"type\": \"number\"\n                            },\n                            \"middlewarePath\": {\n                              \"type\": \"string\",\n                              \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                            },\n                            \"middlewareRawSrc\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"The original middleware matchers.\"\n                            },\n                            \"middleware\": {\n                              \"type\": \"number\",\n                              \"description\": \"A middleware index in the `middleware` key under the build result\"\n                            },\n                            \"respectOriginCacheControl\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"src\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The route definition from @vercel/routing-utils.\"\n                        },\n                        \"rawSrc\": {\n                          \"type\": \"string\",\n                          \"description\": \"Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses.\"\n                        },\n                        \"rawDest\": {\n                          \"type\": \"string\",\n                          \"description\": \"Original destination provided by user.\"\n                        },\n                        \"srcSyntax\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"equals\",\n                            \"path-to-regexp\",\n                            \"regex\"\n                          ],\n                          \"description\": \"The syntax type of the source pattern. Determines how the pattern is compiled to regex.\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\",\n                        \"route\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the version.\"\n                        },\n                        \"s3Key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The S3 key where the routing rules are stored.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when this version was last modified.\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who created this version.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"ruleCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of routing rules in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging alias for previewing this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"lastModified\",\n                        \"s3Key\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A version of routing rules stored in S3.\"\n                    }\n                  },\n                  \"required\": [\n                    \"route\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"route\"\n                ],\n                \"properties\": {\n                  \"route\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"name\",\n                      \"route\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"maxLength\": 256\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"maxLength\": 1024\n                      },\n                      \"enabled\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"srcSyntax\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"equals\",\n                          \"path-to-regexp\",\n                          \"regex\"\n                        ],\n                        \"description\": \"Pattern syntax type. If not provided, inferred from pattern.\"\n                      },\n                      \"route\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"src\"\n                        ],\n                        \"properties\": {\n                          \"src\": {\n                            \"type\": \"string\"\n                          },\n                          \"dest\": {\n                            \"type\": \"string\"\n                          },\n                          \"headers\": {\n                            \"type\": \"object\"\n                          },\n                          \"caseSensitive\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"status\": {\n                            \"type\": \"integer\"\n                          },\n                          \"has\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"host\",\n                                    \"header\",\n                                    \"cookie\",\n                                    \"query\"\n                                  ]\n                                },\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              }\n                            }\n                          },\n                          \"missing\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"host\",\n                                    \"header\",\n                                    \"cookie\",\n                                    \"query\"\n                                  ]\n                                },\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              }\n                            }\n                          },\n                          \"transforms\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"request.headers\",\n                                    \"request.query\",\n                                    \"response.headers\"\n                                  ]\n                                },\n                                \"op\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"append\",\n                                    \"set\",\n                                    \"delete\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"object\"\n                                },\n                                \"args\": {},\n                                \"env\": {\n                                  \"type\": \"array\",\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            }\n                          },\n                          \"respectOriginCacheControl\": {\n                            \"type\": \"boolean\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"position\": {\n                    \"type\": \"object\",\n                    \"description\": \"Controls where the route is inserted. Defaults to \\\\\\\"end\\\\\\\" if omitted.\",\n                    \"properties\": {\n                      \"placement\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"start\",\n                          \"end\",\n                          \"after\",\n                          \"before\"\n                        ],\n                        \"description\": \"\\\\\\\"after\\\\\\\"/\\\\\\\"before\\\\\\\" require referenceId.\"\n                      },\n                      \"referenceId\": {\n                        \"type\": \"string\",\n                        \"description\": \"Route ID to insert after/before. Required for \\\\\\\"after\\\\\\\"/\\\\\\\"before\\\\\\\".\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"description\": \"Delete one or more routing rules from a project by ID. Stages a new version with the routes removed.\",\n        \"operationId\": \"deleteRoutes\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete routing rules\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"deletedCount\": {\n                      \"type\": \"number\"\n                    },\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the version.\"\n                        },\n                        \"s3Key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The S3 key where the routing rules are stored.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when this version was last modified.\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who created this version.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"ruleCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of routing rules in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging alias for previewing this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"lastModified\",\n                        \"s3Key\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A version of routing rules stored in S3.\"\n                    }\n                  },\n                  \"required\": [\n                    \"deletedCount\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"routeIds\"\n                ],\n                \"properties\": {\n                  \"routeIds\": {\n                    \"type\": \"array\",\n                    \"description\": \"The IDs of the routes to delete\",\n                    \"minItems\": 1,\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{projectId}/routes/{routeId}\": {\n      \"patch\": {\n        \"description\": \"Replace a routing rule identified by its ID, or restore it from the current production version. Stages a new version with the modified route.\",\n        \"operationId\": \"editRoute\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Edit a routing rule\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"route\": {\n                      \"properties\": {\n                        \"routeType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"rewrite\",\n                            \"redirect\",\n                            \"set_status\",\n                            \"transform\"\n                          ]\n                        },\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the routing rule.\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"description\": \"Human-readable name for the routing rule.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"Optional description of what the routing rule does.\"\n                        },\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the routing rule is enabled. Defaults to true.\"\n                        },\n                        \"staged\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this route is new and not yet published to production. Set to true only when a route is first created via add-route. Cleared (set to false) when a version is promoted to production.\"\n                        },\n                        \"route\": {\n                          \"properties\": {\n                            \"src\": {\n                              \"type\": \"string\"\n                            },\n                            \"dest\": {\n                              \"type\": \"string\"\n                            },\n                            \"headers\": {\n                              \"additionalProperties\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"methods\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"continue\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"override\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"caseSensitive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"check\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"important\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"status\": {\n                              \"type\": \"number\"\n                            },\n                            \"has\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"host\"\n                                        ]\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"header\",\n                                          \"cookie\",\n                                          \"query\"\n                                        ]\n                                      },\n                                      \"key\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"key\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"missing\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"host\"\n                                        ]\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"header\",\n                                          \"cookie\",\n                                          \"query\"\n                                        ]\n                                      },\n                                      \"key\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"re\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"key\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"mitigate\": {\n                              \"properties\": {\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"challenge\",\n                                    \"deny\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"transforms\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"request.headers\",\n                                      \"request.query\",\n                                      \"response.headers\"\n                                    ]\n                                  },\n                                  \"op\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"append\",\n                                      \"set\",\n                                      \"delete\"\n                                    ]\n                                  },\n                                  \"target\": {\n                                    \"properties\": {\n                                      \"key\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"eq\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  }\n                                                ]\n                                              },\n                                              \"neq\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"inc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"ninc\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"pre\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"suf\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"gt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"gte\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lt\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"lte\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"key\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"args\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"array\"\n                                      }\n                                    ]\n                                  },\n                                  \"env\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"op\",\n                                  \"target\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"env\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"locale\": {\n                              \"properties\": {\n                                \"redirect\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"cookie\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"description\": \"Aliases for `src`, `dest`, and `status`. These provide consistency with the `rewrites`, `redirects`, and `headers` fields which use `source`, `destination`, and `statusCode`. During normalization, these are converted to their canonical forms (`src`, `dest`, `status`) and stripped from the route object.\"\n                            },\n                            \"destination\": {\n                              \"type\": \"string\"\n                            },\n                            \"statusCode\": {\n                              \"type\": \"number\"\n                            },\n                            \"middlewarePath\": {\n                              \"type\": \"string\",\n                              \"description\": \"A middleware key within the `output` key under the build result. Overrides a `middleware` definition.\"\n                            },\n                            \"middlewareRawSrc\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"The original middleware matchers.\"\n                            },\n                            \"middleware\": {\n                              \"type\": \"number\",\n                              \"description\": \"A middleware index in the `middleware` key under the build result\"\n                            },\n                            \"respectOriginCacheControl\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"src\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The route definition from @vercel/routing-utils.\"\n                        },\n                        \"rawSrc\": {\n                          \"type\": \"string\",\n                          \"description\": \"Original source pattern provided by user (path-to-regexp or regex). Used to display the user's input in API responses.\"\n                        },\n                        \"rawDest\": {\n                          \"type\": \"string\",\n                          \"description\": \"Original destination provided by user.\"\n                        },\n                        \"srcSyntax\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"equals\",\n                            \"path-to-regexp\",\n                            \"regex\"\n                          ],\n                          \"description\": \"The syntax type of the source pattern. Determines how the pattern is compiled to regex.\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"name\",\n                        \"route\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the version.\"\n                        },\n                        \"s3Key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The S3 key where the routing rules are stored.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when this version was last modified.\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who created this version.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"ruleCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of routing rules in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging alias for previewing this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"lastModified\",\n                        \"s3Key\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A version of routing rules stored in S3.\"\n                    }\n                  },\n                  \"required\": [\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"routeId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"route\": {\n                    \"type\": \"object\",\n                    \"description\": \"The full route object to replace the existing route with\",\n                    \"required\": [\n                      \"name\",\n                      \"route\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"maxLength\": 256\n                      },\n                      \"description\": {\n                        \"type\": \"string\",\n                        \"maxLength\": 1024\n                      },\n                      \"enabled\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"srcSyntax\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"equals\",\n                          \"path-to-regexp\",\n                          \"regex\"\n                        ],\n                        \"description\": \"Pattern syntax type. If not provided, inferred from pattern.\"\n                      },\n                      \"route\": {\n                        \"type\": \"object\",\n                        \"required\": [\n                          \"src\"\n                        ],\n                        \"properties\": {\n                          \"src\": {\n                            \"type\": \"string\"\n                          },\n                          \"dest\": {\n                            \"type\": \"string\"\n                          },\n                          \"headers\": {\n                            \"type\": \"object\"\n                          },\n                          \"caseSensitive\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"status\": {\n                            \"type\": \"integer\"\n                          },\n                          \"has\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"host\",\n                                    \"header\",\n                                    \"cookie\",\n                                    \"query\"\n                                  ]\n                                },\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              }\n                            }\n                          },\n                          \"missing\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"host\",\n                                    \"header\",\n                                    \"cookie\",\n                                    \"query\"\n                                  ]\n                                },\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                }\n                              }\n                            }\n                          },\n                          \"transforms\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"request.headers\",\n                                    \"request.query\",\n                                    \"response.headers\"\n                                  ]\n                                },\n                                \"op\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"append\",\n                                    \"set\",\n                                    \"delete\"\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"object\"\n                                },\n                                \"args\": {},\n                                \"env\": {\n                                  \"type\": \"array\",\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            }\n                          },\n                          \"respectOriginCacheControl\": {\n                            \"type\": \"boolean\"\n                          }\n                        }\n                      }\n                    }\n                  },\n                  \"restore\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If true, restores the staged route to the value in the production version.\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{projectId}/routes/generate\": {\n      \"post\": {\n        \"description\": \"Generate a routing rule configuration from a natural language description. Returns a suggested route configuration that can be reviewed and saved.\",\n        \"operationId\": \"generateRoute\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Generate a routing rule from natural language\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"route\": {\n                      \"properties\": {\n                        \"name\": {\n                          \"type\": \"string\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\"\n                        },\n                        \"pathCondition\": {\n                          \"properties\": {\n                            \"value\": {\n                              \"type\": \"string\"\n                            },\n                            \"syntax\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"equals\",\n                                \"path-to-regexp\",\n                                \"regex\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"syntax\",\n                            \"value\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"conditions\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"field\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"host\",\n                                  \"header\",\n                                  \"cookie\",\n                                  \"query\"\n                                ]\n                              },\n                              \"operator\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"contains\",\n                                  \"eq\",\n                                  \"re\",\n                                  \"exists\"\n                                ]\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"value\": {\n                                \"type\": \"string\"\n                              },\n                              \"missing\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"field\",\n                              \"missing\",\n                              \"operator\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"actions\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"rewrite\",\n                                  \"redirect\",\n                                  \"set-status\",\n                                  \"modify\"\n                                ]\n                              },\n                              \"subType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"response-headers\",\n                                  \"transform-request-header\",\n                                  \"transform-request-query\"\n                                ]\n                              },\n                              \"dest\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              },\n                              \"headers\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"key\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"op\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"append\",\n                                        \"set\",\n                                        \"delete\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"key\",\n                                    \"op\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"actions\",\n                        \"description\",\n                        \"name\",\n                        \"pathCondition\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"error\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"408\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"prompt\"\n                ],\n                \"properties\": {\n                  \"prompt\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 2000\n                  },\n                  \"currentRoute\": {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"pathCondition\",\n                      \"actions\"\n                    ],\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"description\": {\n                        \"type\": \"string\"\n                      },\n                      \"pathCondition\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"syntax\": {\n                            \"type\": \"string\"\n                          }\n                        }\n                      },\n                      \"conditions\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"field\": {\n                              \"type\": \"string\"\n                            },\n                            \"operator\": {\n                              \"type\": \"string\"\n                            },\n                            \"key\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            },\n                            \"missing\": {\n                              \"type\": \"boolean\"\n                            }\n                          }\n                        }\n                      },\n                      \"actions\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\"\n                            },\n                            \"subType\": {\n                              \"type\": \"string\"\n                            },\n                            \"dest\": {\n                              \"type\": \"string\"\n                            },\n                            \"status\": {\n                              \"type\": \"integer\"\n                            },\n                            \"headers\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"key\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"op\": {\n                                    \"type\": \"string\"\n                                  }\n                                }\n                              }\n                            }\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{projectId}/routes/versions\": {\n      \"get\": {\n        \"description\": \"Get the version history for a project's routing rules. Returns the staging version (if one exists) followed by production versions, most recent first. The staging version has `isStaging: true` and the current production version has `isLive: true`.\",\n        \"operationId\": \"getRouteVersions\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get routing rule version history\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"versions\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"Unique identifier for the version.\"\n                          },\n                          \"s3Key\": {\n                            \"type\": \"string\",\n                            \"description\": \"The S3 key where the routing rules are stored.\"\n                          },\n                          \"lastModified\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when this version was last modified.\"\n                          },\n                          \"createdBy\": {\n                            \"type\": \"string\",\n                            \"description\": \"The user who created this version.\"\n                          },\n                          \"isStaging\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                          },\n                          \"isLive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Whether this version is currently live in production.\"\n                          },\n                          \"ruleCount\": {\n                            \"type\": \"number\",\n                            \"description\": \"The number of routing rules in this version.\"\n                          },\n                          \"alias\": {\n                            \"type\": \"string\",\n                            \"description\": \"The staging alias for previewing this version.\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdBy\",\n                          \"id\",\n                          \"lastModified\",\n                          \"s3Key\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A version of routing rules stored in S3.\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"versions\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Promote staged routing rules to production, restore a previous production version, or discard staged changes. - `promote`: Publishes the staging version to production. - `restore`: Rolls back to a previous production version. - `discard`: Removes the staging version without publishing.\",\n        \"operationId\": \"updateRouteVersions\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Promote, restore, or discard a routing rule version\",\n        \"tags\": [\n          \"project-routes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"version\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"Unique identifier for the version.\"\n                        },\n                        \"s3Key\": {\n                          \"type\": \"string\",\n                          \"description\": \"The S3 key where the routing rules are stored.\"\n                        },\n                        \"lastModified\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when this version was last modified.\"\n                        },\n                        \"createdBy\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who created this version.\"\n                        },\n                        \"isStaging\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is staged and not yet promoted to production.\"\n                        },\n                        \"isLive\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether this version is currently live in production.\"\n                        },\n                        \"ruleCount\": {\n                          \"type\": \"number\",\n                          \"description\": \"The number of routing rules in this version.\"\n                        },\n                        \"alias\": {\n                          \"type\": \"string\",\n                          \"description\": \"The staging alias for previewing this version.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdBy\",\n                        \"id\",\n                        \"lastModified\",\n                        \"s3Key\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A version of routing rules stored in S3.\"\n                    }\n                  },\n                  \"required\": [\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"id\",\n                  \"action\"\n                ],\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"promote\",\n                      \"restore\",\n                      \"discard\"\n                    ]\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v10/projects\": {\n      \"get\": {\n        \"description\": \"Allows to retrieve the list of projects of the authenticated user or team. The list will be paginated and the provided query parameters allow filtering the returned projects.\",\n        \"operationId\": \"getProjects\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve a list of projects\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"nullable\": true,\n                  \"oneOf\": [\n                    {\n                      \"items\": {\n                        \"properties\": {\n                          \"accountId\": {\n                            \"type\": \"string\"\n                          },\n                          \"alias\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"configuredBy\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"A\",\n                                    \"CNAME\",\n                                    \"http\",\n                                    \"dns-01\"\n                                  ]\n                                },\n                                \"configuredChangedAt\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"createdAt\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\"\n                                },\n                                \"deployment\": {\n                                  \"nullable\": true,\n                                  \"properties\": {\n                                    \"alias\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"aliasAssigned\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"builds\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"use\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"dest\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"use\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdIn\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"creator\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"email\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"githubLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"gitlabLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"uid\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"username\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"email\",\n                                        \"uid\",\n                                        \"username\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"deploymentHostname\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"forced\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"meta\": {\n                                      \"additionalProperties\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"plan\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"private\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"readyState\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"requestedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"target\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"teamId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"url\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"userId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"withCache\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdIn\",\n                                    \"creator\",\n                                    \"deploymentHostname\",\n                                    \"id\",\n                                    \"name\",\n                                    \"plan\",\n                                    \"private\",\n                                    \"readyState\",\n                                    \"type\",\n                                    \"url\",\n                                    \"userId\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"domain\": {\n                                  \"type\": \"string\"\n                                },\n                                \"environment\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\"\n                                  ]\n                                },\n                                \"gitBranch\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"redirect\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"redirectStatusCode\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\",\n                                  \"enum\": [\n                                    301,\n                                    302,\n                                    307,\n                                    308\n                                  ]\n                                },\n                                \"target\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"PRODUCTION\",\n                                    \"STAGING\",\n                                    \"PREVIEW\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"deployment\",\n                                \"domain\",\n                                \"environment\",\n                                \"target\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"analytics\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"canceledAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"disabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"enabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"paidAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"sampleRatePercent\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"spendLimitInDollars\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"disabledAt\",\n                              \"enabledAt\",\n                              \"id\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"appliedCve55182Migration\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"autoExposeSystemEnvs\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"autoAssignCustomDomains\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"autoAssignCustomDomainsUpdatedBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"buildCommand\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"commandForIgnoringBuildStep\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"customerSupportCodeVisibility\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"devCommand\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"directoryListing\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"deploymentExpiration\": {\n                            \"properties\": {\n                              \"expirationDays\": {\n                                \"type\": \"number\",\n                                \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n                              },\n                              \"expirationDaysProduction\": {\n                                \"type\": \"number\",\n                                \"description\": \"Number of days to keep production deployments before soft deletion.\"\n                              },\n                              \"expirationDaysCanceled\": {\n                                \"type\": \"number\",\n                                \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n                              },\n                              \"expirationDaysErrored\": {\n                                \"type\": \"number\",\n                                \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n                              },\n                              \"deploymentsToKeep\": {\n                                \"type\": \"number\",\n                                \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.\"\n                          },\n                          \"installCommand\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"ipBuckets\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"bucket\": {\n                                  \"type\": \"string\"\n                                },\n                                \"supportUntil\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"bucket\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"env\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"target\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"items\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"production\",\n                                          \"preview\",\n                                          \"development\",\n                                          \"preview\",\n                                          \"development\"\n                                        ]\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    }\n                                  ]\n                                },\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"secret\",\n                                    \"system\",\n                                    \"encrypted\",\n                                    \"plain\",\n                                    \"sensitive\"\n                                  ]\n                                },\n                                \"sunsetSecretId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                                },\n                                \"legacyValue\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                                },\n                                \"decrypted\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                },\n                                \"vsmValue\": {\n                                  \"type\": \"string\"\n                                },\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"key\": {\n                                  \"type\": \"string\"\n                                },\n                                \"configurationId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdBy\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"updatedBy\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"gitBranch\": {\n                                  \"type\": \"string\"\n                                },\n                                \"edgeConfigId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"edgeConfigTokenId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"contentHint\": {\n                                  \"nullable\": true,\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"redis-url\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"redis-rest-api-url\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"redis-rest-api-token\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"redis-rest-api-read-only-token\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"blob-read-write-token\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-url\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-url-non-pooling\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-prisma-url\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-user\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-host\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-password\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-database\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"postgres-url-no-ssl\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"integration-store-secret\"\n                                          ]\n                                        },\n                                        \"storeId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"integrationId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"integrationProductId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"integrationConfigurationId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"integrationConfigurationId\",\n                                        \"integrationId\",\n                                        \"integrationProductId\",\n                                        \"storeId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"flags-connection-string\"\n                                          ]\n                                        },\n                                        \"projectId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"projectId\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"internalContentHint\": {\n                                  \"nullable\": true,\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"flags-secret\"\n                                      ]\n                                    },\n                                    \"encryptedValue\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"encryptedValue\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                                },\n                                \"comment\": {\n                                  \"type\": \"string\"\n                                },\n                                \"customEnvironmentIds\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"key\",\n                                \"type\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"framework\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"services\",\n                              \"blitzjs\",\n                              \"nextjs\",\n                              \"gatsby\",\n                              \"remix\",\n                              \"react-router\",\n                              \"astro\",\n                              \"hexo\",\n                              \"eleventy\",\n                              \"docusaurus-2\",\n                              \"docusaurus\",\n                              \"preact\",\n                              \"solidstart-1\",\n                              \"solidstart\",\n                              \"dojo\",\n                              \"ember\",\n                              \"vue\",\n                              \"scully\",\n                              \"ionic-angular\",\n                              \"angular\",\n                              \"polymer\",\n                              \"svelte\",\n                              \"sveltekit\",\n                              \"sveltekit-1\",\n                              \"ionic-react\",\n                              \"create-react-app\",\n                              \"gridsome\",\n                              \"umijs\",\n                              \"sapper\",\n                              \"saber\",\n                              \"stencil\",\n                              \"nuxtjs\",\n                              \"redwoodjs\",\n                              \"hugo\",\n                              \"jekyll\",\n                              \"brunch\",\n                              \"middleman\",\n                              \"zola\",\n                              \"hydrogen\",\n                              \"vite\",\n                              \"tanstack-start\",\n                              \"vitepress\",\n                              \"vuepress\",\n                              \"parcel\",\n                              \"fastapi\",\n                              \"flask\",\n                              \"fasthtml\",\n                              \"django\",\n                              \"sanity-v3\",\n                              \"sanity\",\n                              \"storybook\",\n                              \"nitro\",\n                              \"hono\",\n                              \"express\",\n                              \"h3\",\n                              \"koa\",\n                              \"nestjs\",\n                              \"elysia\",\n                              \"fastify\",\n                              \"xmcp\",\n                              \"python\",\n                              \"ruby\",\n                              \"rust\",\n                              \"node\",\n                              \"go\"\n                            ]\n                          },\n                          \"gitForkProtection\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"latestDeployments\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"alias\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"aliasAssigned\": {\n                                  \"nullable\": true,\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"number\"\n                                    },\n                                    {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  ]\n                                },\n                                \"builds\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"use\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"src\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"dest\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"use\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdIn\": {\n                                  \"type\": \"string\"\n                                },\n                                \"creator\": {\n                                  \"nullable\": true,\n                                  \"properties\": {\n                                    \"email\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"githubLogin\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"gitlabLogin\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"uid\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"username\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"email\",\n                                    \"uid\",\n                                    \"username\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"deploymentHostname\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"forced\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"meta\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"plan\": {\n                                  \"type\": \"string\"\n                                },\n                                \"private\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"readyState\": {\n                                  \"type\": \"string\"\n                                },\n                                \"requestedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"target\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"teamId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"url\": {\n                                  \"type\": \"string\"\n                                },\n                                \"userId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"withCache\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"createdAt\",\n                                \"createdIn\",\n                                \"creator\",\n                                \"deploymentHostname\",\n                                \"id\",\n                                \"name\",\n                                \"plan\",\n                                \"private\",\n                                \"readyState\",\n                                \"type\",\n                                \"url\",\n                                \"userId\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"link\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"org\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"repoOwnerId\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                  },\n                                  \"repo\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"repoId\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"github\"\n                                    ]\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"deployHooks\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"name\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ref\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"url\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"id\",\n                                        \"name\",\n                                        \"ref\",\n                                        \"url\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"gitCredentialId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"sourceless\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"productionBranch\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"deployHooks\",\n                                  \"gitCredentialId\",\n                                  \"org\",\n                                  \"productionBranch\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"github-limited\"\n                                    ]\n                                  },\n                                  \"repo\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"repoId\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"org\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"repoOwnerId\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                  },\n                                  \"deployHooks\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"name\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ref\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"url\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"id\",\n                                        \"name\",\n                                        \"ref\",\n                                        \"url\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"gitCredentialId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"sourceless\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"productionBranch\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"deployHooks\",\n                                  \"gitCredentialId\",\n                                  \"org\",\n                                  \"productionBranch\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"org\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"repoOwnerId\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                  },\n                                  \"repo\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"repoId\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"github-custom-host\"\n                                    ]\n                                  },\n                                  \"host\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"deployHooks\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"name\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ref\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"url\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"id\",\n                                        \"name\",\n                                        \"ref\",\n                                        \"url\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"gitCredentialId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"sourceless\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"productionBranch\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"deployHooks\",\n                                  \"gitCredentialId\",\n                                  \"host\",\n                                  \"org\",\n                                  \"productionBranch\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectName\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectNameWithNamespace\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectNamespace\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectOwnerId\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).\"\n                                  },\n                                  \"projectUrl\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"gitlab\"\n                                    ]\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"deployHooks\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"name\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ref\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"url\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"id\",\n                                        \"name\",\n                                        \"ref\",\n                                        \"url\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"gitCredentialId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"sourceless\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"productionBranch\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"deployHooks\",\n                                  \"gitCredentialId\",\n                                  \"productionBranch\",\n                                  \"projectId\",\n                                  \"projectName\",\n                                  \"projectNameWithNamespace\",\n                                  \"projectNamespace\",\n                                  \"projectUrl\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"slug\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"owner\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"bitbucket\"\n                                    ]\n                                  },\n                                  \"uuid\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"workspaceUuid\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"deployHooks\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"name\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ref\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"url\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"id\",\n                                        \"name\",\n                                        \"ref\",\n                                        \"url\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"gitCredentialId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"sourceless\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"productionBranch\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"deployHooks\",\n                                  \"gitCredentialId\",\n                                  \"name\",\n                                  \"owner\",\n                                  \"productionBranch\",\n                                  \"slug\",\n                                  \"type\",\n                                  \"uuid\",\n                                  \"workspaceUuid\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"nodeVersion\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"24.x\",\n                              \"22.x\",\n                              \"20.x\",\n                              \"18.x\",\n                              \"16.x\",\n                              \"14.x\",\n                              \"12.x\",\n                              \"10.x\",\n                              \"8.10.x\"\n                            ]\n                          },\n                          \"outputDirectory\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"passwordProtection\": {\n                            \"nullable\": true,\n                            \"type\": \"object\"\n                          },\n                          \"publicSource\": {\n                            \"nullable\": true,\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"resourceConfig\": {\n                            \"properties\": {\n                              \"elasticConcurrencyEnabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"fluid\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"functionDefaultRegions\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"functionDefaultTimeout\": {\n                                \"type\": \"number\"\n                              },\n                              \"functionDefaultMemoryType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"standard_legacy\",\n                                  \"standard\",\n                                  \"performance\"\n                                ]\n                              },\n                              \"functionZeroConfigFailover\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"buildMachineType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"standard\",\n                                  \"enhanced\",\n                                  \"turbo\"\n                                ]\n                              },\n                              \"buildMachineSelection\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"fixed\",\n                                  \"elastic\"\n                                ]\n                              },\n                              \"buildMachineElasticLastUpdated\": {\n                                \"type\": \"number\"\n                              },\n                              \"isNSNBDisabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"buildQueue\": {\n                                \"properties\": {\n                                  \"configuration\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"SKIP_NAMESPACE_QUEUE\",\n                                      \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                    ]\n                                  }\n                                },\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"required\": [\n                              \"functionDefaultRegions\"\n                            ]\n                          },\n                          \"rollingRelease\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"target\": {\n                                \"type\": \"string\",\n                                \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                                \"example\": \"production\"\n                              },\n                              \"stages\": {\n                                \"nullable\": true,\n                                \"items\": {\n                                  \"properties\": {\n                                    \"targetPercentage\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                      \"example\": 25\n                                    },\n                                    \"requireApproval\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ],\n                                      \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                      \"example\": false\n                                    },\n                                    \"duration\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                      \"example\": 600\n                                    },\n                                    \"linearShift\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ],\n                                      \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                      \"example\": false\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"targetPercentage\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                                },\n                                \"type\": \"array\",\n                                \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                              },\n                              \"canaryResponseHeader\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"target\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                          },\n                          \"rootDirectory\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"serverlessFunctionRegion\": {\n                            \"type\": \"string\"\n                          },\n                          \"serverlessFunctionZeroConfigFailover\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"speedInsights\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"enabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"disabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"canceledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"hasData\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"paidAt\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"skipGitConnectDuringLink\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"sourceFilesOutsideRootDirectory\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"ssoProtection\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"deploymentType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"preview\",\n                                  \"all\",\n                                  \"prod_deployment_urls_and_all_previews\",\n                                  \"all_except_custom_domains\"\n                                ]\n                              },\n                              \"cve55182MigrationAppliedFrom\": {\n                                \"nullable\": true,\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"preview\",\n                                  \"all\",\n                                  \"prod_deployment_urls_and_all_previews\",\n                                  \"all_except_custom_domains\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"deploymentType\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"targets\": {\n                            \"additionalProperties\": {\n                              \"nullable\": true,\n                              \"properties\": {\n                                \"alias\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"aliasAssigned\": {\n                                  \"nullable\": true,\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"number\"\n                                    },\n                                    {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  ]\n                                },\n                                \"builds\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"use\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"src\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"dest\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"use\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdIn\": {\n                                  \"type\": \"string\"\n                                },\n                                \"creator\": {\n                                  \"nullable\": true,\n                                  \"properties\": {\n                                    \"email\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"githubLogin\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"gitlabLogin\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"uid\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"username\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"email\",\n                                    \"uid\",\n                                    \"username\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"deploymentHostname\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"forced\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"meta\": {\n                                  \"additionalProperties\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"plan\": {\n                                  \"type\": \"string\"\n                                },\n                                \"private\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"readyState\": {\n                                  \"type\": \"string\"\n                                },\n                                \"requestedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"target\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"teamId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"url\": {\n                                  \"type\": \"string\"\n                                },\n                                \"userId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"withCache\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"createdAt\",\n                                \"createdIn\",\n                                \"creator\",\n                                \"deploymentHostname\",\n                                \"id\",\n                                \"name\",\n                                \"plan\",\n                                \"private\",\n                                \"readyState\",\n                                \"type\",\n                                \"url\",\n                                \"userId\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"transferCompletedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"transferStartedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"transferToAccountId\": {\n                            \"type\": \"string\"\n                          },\n                          \"transferredFromAccountId\": {\n                            \"type\": \"string\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"live\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"hasActiveBranches\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the Vercel bot should comment on PRs\"\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the Vercel bot should comment on commits\"\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"gitProviderOptions\": {\n                            \"properties\": {\n                              \"createDeployments\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"enabled\",\n                                  \"disabled\"\n                                ],\n                                \"description\": \"Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead\"\n                              },\n                              \"disableRepositoryDispatchEvents\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events\"\n                              },\n                              \"requireVerifiedCommits\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the project requires commits to be signed before deployments will be created.\"\n                              }\n                            },\n                            \"required\": [\n                              \"createDeployments\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"paused\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"webAnalytics\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"disabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"canceledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"enabledAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"hasData\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"id\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"security\": {\n                            \"properties\": {\n                              \"attackModeEnabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"attackModeUpdatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"firewallEnabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"firewallUpdatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"attackModeActiveUntil\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"firewallConfigVersion\": {\n                                \"type\": \"number\"\n                              },\n                              \"firewallRoutes\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"src\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"re\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"neq\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"inc\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"ninc\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            \"pre\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"suf\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"gt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"gte\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"lt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"lte\": {\n                                              \"type\": \"number\"\n                                            }\n                                          },\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"has\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"path\",\n                                              \"query\",\n                                              \"host\",\n                                              \"method\",\n                                              \"header\",\n                                              \"cookie\",\n                                              \"ip_address\",\n                                              \"protocol\",\n                                              \"scheme\",\n                                              \"environment\",\n                                              \"region\",\n                                              \"initial_request_path\"\n                                            ]\n                                          },\n                                          \"key\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"value\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"re\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"eq\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"neq\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"inc\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  },\n                                                  \"ninc\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  },\n                                                  \"pre\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"suf\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"gt\": {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  \"gte\": {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  \"lt\": {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  \"lte\": {\n                                                    \"type\": \"number\"\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"missing\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"path\",\n                                              \"query\",\n                                              \"host\",\n                                              \"method\",\n                                              \"header\",\n                                              \"cookie\",\n                                              \"ip_address\",\n                                              \"protocol\",\n                                              \"scheme\",\n                                              \"environment\",\n                                              \"region\",\n                                              \"initial_request_path\"\n                                            ]\n                                          },\n                                          \"key\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"value\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"re\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"eq\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"neq\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"inc\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  },\n                                                  \"ninc\": {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  },\n                                                  \"pre\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"suf\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"gt\": {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  \"gte\": {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  \"lt\": {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  \"lte\": {\n                                                    \"type\": \"number\"\n                                                  }\n                                                },\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"dest\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"status\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"handle\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"init\",\n                                        \"finalize\"\n                                      ]\n                                    },\n                                    \"mitigate\": {\n                                      \"properties\": {\n                                        \"action\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"log\",\n                                            \"deny\",\n                                            \"challenge\",\n                                            \"bypass\",\n                                            \"rate_limit\",\n                                            \"redirect\"\n                                          ]\n                                        },\n                                        \"rule_id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ttl\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"erl\": {\n                                          \"properties\": {\n                                            \"algo\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"fixed_window\",\n                                                \"token_bucket\"\n                                              ]\n                                            },\n                                            \"window\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"limit\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"keys\": {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"algo\",\n                                            \"keys\",\n                                            \"limit\",\n                                            \"window\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"log_headers\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"items\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"type\": \"array\"\n                                            },\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"*\"\n                                              ]\n                                            }\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"action\",\n                                        \"rule_id\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"firewallSeawallEnabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"ja3Enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"ja4Enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"firewallBypassIps\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"managedRules\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"vercel_ruleset\": {\n                                    \"properties\": {\n                                      \"active\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"log\",\n                                          \"deny\",\n                                          \"challenge\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"active\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"bot_filter\": {\n                                    \"properties\": {\n                                      \"active\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"log\",\n                                          \"deny\",\n                                          \"challenge\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"active\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"ai_bots\": {\n                                    \"properties\": {\n                                      \"active\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"log\",\n                                          \"deny\",\n                                          \"challenge\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"active\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"owasp\": {\n                                    \"properties\": {\n                                      \"active\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"log\",\n                                          \"deny\",\n                                          \"challenge\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"active\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"ai_bots\",\n                                  \"bot_filter\",\n                                  \"owasp\",\n                                  \"vercel_ruleset\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"botIdEnabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"requestLogsKey\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"log_headers\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"*\"\n                                    ]\n                                  }\n                                ]\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"oidcTokenConfig\": {\n                            \"properties\": {\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\"\n                              },\n                              \"issuerMode\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"team\",\n                                  \"global\"\n                                ],\n                                \"description\": \"- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"tier\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"standard\",\n                              \"base\",\n                              \"advanced\",\n                              \"critical\"\n                            ]\n                          },\n                          \"abuse\": {\n                            \"properties\": {\n                              \"scanner\": {\n                                \"type\": \"string\"\n                              },\n                              \"history\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"scanner\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"reason\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"by\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"byId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"at\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"at\",\n                                    \"by\",\n                                    \"byId\",\n                                    \"reason\",\n                                    \"scanner\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"block\": {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blocked\"\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"statusCode\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"blockHistory\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"action\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"blocked\"\n                                          ]\n                                        },\n                                        \"reason\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"statusCode\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"caseId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"actor\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"comment\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ineligibleForAppeal\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"isCascading\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"action\",\n                                        \"createdAt\",\n                                        \"reason\",\n                                        \"statusCode\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"action\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"unblocked\"\n                                          ]\n                                        },\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"caseId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"actor\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"comment\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ineligibleForAppeal\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"isCascading\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"action\",\n                                        \"createdAt\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"action\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"route-blocked\"\n                                          ]\n                                        },\n                                        \"route\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"src\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"status\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"src\",\n                                                \"status\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"has\": {\n                                                  \"items\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"type\": {\n                                                            \"type\": \"string\",\n                                                            \"enum\": [\n                                                              \"header\"\n                                                            ]\n                                                          },\n                                                          \"key\": {\n                                                            \"type\": \"string\",\n                                                            \"enum\": [\n                                                              \"x-vercel-ip-country\"\n                                                            ]\n                                                          },\n                                                          \"value\": {\n                                                            \"properties\": {\n                                                              \"eq\": {\n                                                                \"type\": \"string\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"eq\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"key\",\n                                                          \"type\",\n                                                          \"value\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"properties\": {\n                                                          \"type\": {\n                                                            \"type\": \"string\",\n                                                            \"enum\": [\n                                                              \"host\"\n                                                            ]\n                                                          },\n                                                          \"value\": {\n                                                            \"properties\": {\n                                                              \"eq\": {\n                                                                \"type\": \"string\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"eq\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"type\",\n                                                          \"value\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"mitigate\": {\n                                                  \"properties\": {\n                                                    \"action\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"block_legal_cwc\"\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"action\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                \"src\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"has\",\n                                                \"mitigate\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"reason\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"caseId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"actor\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"comment\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ineligibleForAppeal\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"isCascading\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"action\",\n                                        \"createdAt\",\n                                        \"reason\",\n                                        \"route\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"action\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"route-unblocked\"\n                                          ]\n                                        },\n                                        \"route\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"properties\": {\n                                                \"src\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"status\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"src\",\n                                                \"status\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"has\": {\n                                                  \"items\": {\n                                                    \"oneOf\": [\n                                                      {\n                                                        \"properties\": {\n                                                          \"type\": {\n                                                            \"type\": \"string\",\n                                                            \"enum\": [\n                                                              \"header\"\n                                                            ]\n                                                          },\n                                                          \"key\": {\n                                                            \"type\": \"string\",\n                                                            \"enum\": [\n                                                              \"x-vercel-ip-country\"\n                                                            ]\n                                                          },\n                                                          \"value\": {\n                                                            \"properties\": {\n                                                              \"eq\": {\n                                                                \"type\": \"string\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"eq\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"key\",\n                                                          \"type\",\n                                                          \"value\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      },\n                                                      {\n                                                        \"properties\": {\n                                                          \"type\": {\n                                                            \"type\": \"string\",\n                                                            \"enum\": [\n                                                              \"host\"\n                                                            ]\n                                                          },\n                                                          \"value\": {\n                                                            \"properties\": {\n                                                              \"eq\": {\n                                                                \"type\": \"string\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"eq\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        },\n                                                        \"required\": [\n                                                          \"type\",\n                                                          \"value\"\n                                                        ],\n                                                        \"type\": \"object\"\n                                                      }\n                                                    ]\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"mitigate\": {\n                                                  \"properties\": {\n                                                    \"action\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"block_legal_cwc\"\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"action\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                \"src\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"has\",\n                                                \"mitigate\"\n                                              ],\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"statusCode\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"caseId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"actor\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"comment\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"ineligibleForAppeal\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"isCascading\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"action\",\n                                        \"createdAt\",\n                                        \"route\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"interstitial\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"history\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"internalRoutes\": {\n                            \"items\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"src\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"status\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"src\",\n                                    \"status\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"has\": {\n                                      \"items\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"header\"\n                                                ]\n                                              },\n                                              \"key\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"x-vercel-ip-country\"\n                                                ]\n                                              },\n                                              \"value\": {\n                                                \"properties\": {\n                                                  \"eq\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"eq\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"key\",\n                                              \"type\",\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"host\"\n                                                ]\n                                              },\n                                              \"value\": {\n                                                \"properties\": {\n                                                  \"eq\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"eq\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\",\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"mitigate\": {\n                                      \"properties\": {\n                                        \"action\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"block_legal_cwc\"\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"action\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"src\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"has\",\n                                    \"mitigate\"\n                                  ],\n                                  \"type\": \"object\"\n                                }\n                              ]\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"accountId\",\n                          \"alias\",\n                          \"deploymentExpiration\",\n                          \"directoryListing\",\n                          \"id\",\n                          \"name\",\n                          \"nodeVersion\",\n                          \"resourceConfig\",\n                          \"serverlessFunctionRegion\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    {\n                      \"properties\": {\n                        \"projects\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"accountId\": {\n                                \"type\": \"string\"\n                              },\n                              \"alias\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"configuredBy\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"A\",\n                                        \"CNAME\",\n                                        \"http\",\n                                        \"dns-01\"\n                                      ]\n                                    },\n                                    \"configuredChangedAt\": {\n                                      \"nullable\": true,\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdAt\": {\n                                      \"nullable\": true,\n                                      \"type\": \"number\"\n                                    },\n                                    \"deployment\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"alias\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"aliasAssigned\": {\n                                          \"nullable\": true,\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"number\"\n                                            },\n                                            {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          ]\n                                        },\n                                        \"builds\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"use\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"src\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"dest\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"use\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"createdIn\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"creator\": {\n                                          \"nullable\": true,\n                                          \"properties\": {\n                                            \"email\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"githubLogin\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"gitlabLogin\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"uid\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"username\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"email\",\n                                            \"uid\",\n                                            \"username\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"deploymentHostname\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"name\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"forced\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"id\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"meta\": {\n                                          \"additionalProperties\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"object\"\n                                        },\n                                        \"plan\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"private\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        },\n                                        \"readyState\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"requestedAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"target\": {\n                                          \"nullable\": true,\n                                          \"type\": \"string\"\n                                        },\n                                        \"teamId\": {\n                                          \"nullable\": true,\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"url\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"userId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"withCache\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"createdAt\",\n                                        \"createdIn\",\n                                        \"creator\",\n                                        \"deploymentHostname\",\n                                        \"id\",\n                                        \"name\",\n                                        \"plan\",\n                                        \"private\",\n                                        \"readyState\",\n                                        \"type\",\n                                        \"url\",\n                                        \"userId\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"domain\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"environment\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\"\n                                      ]\n                                    },\n                                    \"gitBranch\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"redirect\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"redirectStatusCode\": {\n                                      \"nullable\": true,\n                                      \"type\": \"number\",\n                                      \"enum\": [\n                                        301,\n                                        302,\n                                        307,\n                                        308\n                                      ]\n                                    },\n                                    \"target\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"PRODUCTION\",\n                                        \"STAGING\",\n                                        \"PREVIEW\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"deployment\",\n                                    \"domain\",\n                                    \"environment\",\n                                    \"target\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"analytics\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"paidAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"sampleRatePercent\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"spendLimitInDollars\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"disabledAt\",\n                                  \"enabledAt\",\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"appliedCve55182Migration\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"autoExposeSystemEnvs\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"autoAssignCustomDomains\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"autoAssignCustomDomainsUpdatedBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"buildCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"commandForIgnoringBuildStep\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"customerSupportCodeVisibility\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"devCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"directoryListing\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"deploymentExpiration\": {\n                                \"properties\": {\n                                  \"expirationDays\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n                                  },\n                                  \"expirationDaysProduction\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep production deployments before soft deletion.\"\n                                  },\n                                  \"expirationDaysCanceled\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n                                  },\n                                  \"expirationDaysErrored\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n                                  },\n                                  \"deploymentsToKeep\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n                                  }\n                                },\n                                \"type\": \"object\",\n                                \"description\": \"Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.\"\n                              },\n                              \"installCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"ipBuckets\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"bucket\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"supportUntil\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"bucket\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"env\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"target\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"items\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"production\",\n                                              \"preview\",\n                                              \"development\",\n                                              \"preview\",\n                                              \"development\"\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\",\n                                            \"development\",\n                                            \"preview\",\n                                            \"development\"\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"secret\",\n                                        \"system\",\n                                        \"encrypted\",\n                                        \"plain\",\n                                        \"sensitive\"\n                                      ]\n                                    },\n                                    \"sunsetSecretId\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                                    },\n                                    \"legacyValue\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                                    },\n                                    \"decrypted\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"vsmValue\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"key\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"configurationId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"updatedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdBy\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"updatedBy\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"gitBranch\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"edgeConfigId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"edgeConfigTokenId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"contentHint\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-rest-api-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-rest-api-token\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-rest-api-read-only-token\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"blob-read-write-token\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-url-non-pooling\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-prisma-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-user\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-host\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-password\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-database\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-url-no-ssl\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"integration-store-secret\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"integrationId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"integrationProductId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"integrationConfigurationId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"integrationConfigurationId\",\n                                            \"integrationId\",\n                                            \"integrationProductId\",\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"flags-connection-string\"\n                                              ]\n                                            },\n                                            \"projectId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"projectId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"internalContentHint\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"flags-secret\"\n                                          ]\n                                        },\n                                        \"encryptedValue\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"encryptedValue\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                                    },\n                                    \"comment\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"customEnvironmentIds\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"key\",\n                                    \"type\",\n                                    \"value\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"framework\": {\n                                \"nullable\": true,\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"services\",\n                                  \"blitzjs\",\n                                  \"nextjs\",\n                                  \"gatsby\",\n                                  \"remix\",\n                                  \"react-router\",\n                                  \"astro\",\n                                  \"hexo\",\n                                  \"eleventy\",\n                                  \"docusaurus-2\",\n                                  \"docusaurus\",\n                                  \"preact\",\n                                  \"solidstart-1\",\n                                  \"solidstart\",\n                                  \"dojo\",\n                                  \"ember\",\n                                  \"vue\",\n                                  \"scully\",\n                                  \"ionic-angular\",\n                                  \"angular\",\n                                  \"polymer\",\n                                  \"svelte\",\n                                  \"sveltekit\",\n                                  \"sveltekit-1\",\n                                  \"ionic-react\",\n                                  \"create-react-app\",\n                                  \"gridsome\",\n                                  \"umijs\",\n                                  \"sapper\",\n                                  \"saber\",\n                                  \"stencil\",\n                                  \"nuxtjs\",\n                                  \"redwoodjs\",\n                                  \"hugo\",\n                                  \"jekyll\",\n                                  \"brunch\",\n                                  \"middleman\",\n                                  \"zola\",\n                                  \"hydrogen\",\n                                  \"vite\",\n                                  \"tanstack-start\",\n                                  \"vitepress\",\n                                  \"vuepress\",\n                                  \"parcel\",\n                                  \"fastapi\",\n                                  \"flask\",\n                                  \"fasthtml\",\n                                  \"django\",\n                                  \"sanity-v3\",\n                                  \"sanity\",\n                                  \"storybook\",\n                                  \"nitro\",\n                                  \"hono\",\n                                  \"express\",\n                                  \"h3\",\n                                  \"koa\",\n                                  \"nestjs\",\n                                  \"elysia\",\n                                  \"fastify\",\n                                  \"xmcp\",\n                                  \"python\",\n                                  \"ruby\",\n                                  \"rust\",\n                                  \"node\",\n                                  \"go\"\n                                ]\n                              },\n                              \"gitForkProtection\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"latestDeployments\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"alias\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"aliasAssigned\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"builds\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"use\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"dest\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"use\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdIn\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"creator\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"email\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"githubLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"gitlabLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"uid\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"username\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"email\",\n                                        \"uid\",\n                                        \"username\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"deploymentHostname\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"forced\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"meta\": {\n                                      \"additionalProperties\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"plan\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"private\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"readyState\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"requestedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"target\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"teamId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"url\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"userId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"withCache\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdIn\",\n                                    \"creator\",\n                                    \"deploymentHostname\",\n                                    \"id\",\n                                    \"name\",\n                                    \"plan\",\n                                    \"private\",\n                                    \"readyState\",\n                                    \"type\",\n                                    \"url\",\n                                    \"userId\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"link\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"org\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                      },\n                                      \"repo\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoId\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github\"\n                                        ]\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"org\",\n                                      \"productionBranch\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github-limited\"\n                                        ]\n                                      },\n                                      \"repo\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoId\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"org\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"org\",\n                                      \"productionBranch\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"org\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                      },\n                                      \"repo\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoId\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github-custom-host\"\n                                        ]\n                                      },\n                                      \"host\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"host\",\n                                      \"org\",\n                                      \"productionBranch\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectName\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectNameWithNamespace\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectNamespace\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).\"\n                                      },\n                                      \"projectUrl\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"gitlab\"\n                                        ]\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"productionBranch\",\n                                      \"projectId\",\n                                      \"projectName\",\n                                      \"projectNameWithNamespace\",\n                                      \"projectNamespace\",\n                                      \"projectUrl\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"slug\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"owner\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"bitbucket\"\n                                        ]\n                                      },\n                                      \"uuid\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"workspaceUuid\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"name\",\n                                      \"owner\",\n                                      \"productionBranch\",\n                                      \"slug\",\n                                      \"type\",\n                                      \"uuid\",\n                                      \"workspaceUuid\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"nodeVersion\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"24.x\",\n                                  \"22.x\",\n                                  \"20.x\",\n                                  \"18.x\",\n                                  \"16.x\",\n                                  \"14.x\",\n                                  \"12.x\",\n                                  \"10.x\",\n                                  \"8.10.x\"\n                                ]\n                              },\n                              \"outputDirectory\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"passwordProtection\": {\n                                \"nullable\": true,\n                                \"type\": \"object\"\n                              },\n                              \"publicSource\": {\n                                \"nullable\": true,\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"resourceConfig\": {\n                                \"properties\": {\n                                  \"elasticConcurrencyEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"fluid\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"functionDefaultRegions\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"functionDefaultTimeout\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"functionDefaultMemoryType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard_legacy\",\n                                      \"standard\",\n                                      \"performance\"\n                                    ]\n                                  },\n                                  \"functionZeroConfigFailover\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"buildMachineType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard\",\n                                      \"enhanced\",\n                                      \"turbo\"\n                                    ]\n                                  },\n                                  \"buildMachineSelection\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"fixed\",\n                                      \"elastic\"\n                                    ]\n                                  },\n                                  \"buildMachineElasticLastUpdated\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"isNSNBDisabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"buildQueue\": {\n                                    \"properties\": {\n                                      \"configuration\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"SKIP_NAMESPACE_QUEUE\",\n                                          \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                        ]\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\",\n                                \"required\": [\n                                  \"functionDefaultRegions\"\n                                ]\n                              },\n                              \"rollingRelease\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"target\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                                    \"example\": \"production\"\n                                  },\n                                  \"stages\": {\n                                    \"nullable\": true,\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"targetPercentage\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                          \"example\": 25\n                                        },\n                                        \"requireApproval\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ],\n                                          \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                          \"example\": false\n                                        },\n                                        \"duration\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                          \"example\": 600\n                                        },\n                                        \"linearShift\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ],\n                                          \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                          \"example\": false\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"targetPercentage\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                                  },\n                                  \"canaryResponseHeader\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                                    \"example\": false\n                                  }\n                                },\n                                \"required\": [\n                                  \"target\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                              },\n                              \"rootDirectory\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"serverlessFunctionRegion\": {\n                                \"type\": \"string\"\n                              },\n                              \"serverlessFunctionZeroConfigFailover\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"speedInsights\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"hasData\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"paidAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"skipGitConnectDuringLink\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"sourceFilesOutsideRootDirectory\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"ssoProtection\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"deploymentType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"preview\",\n                                      \"all\",\n                                      \"prod_deployment_urls_and_all_previews\",\n                                      \"all_except_custom_domains\"\n                                    ]\n                                  },\n                                  \"cve55182MigrationAppliedFrom\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"preview\",\n                                      \"all\",\n                                      \"prod_deployment_urls_and_all_previews\",\n                                      \"all_except_custom_domains\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"deploymentType\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"targets\": {\n                                \"additionalProperties\": {\n                                  \"nullable\": true,\n                                  \"properties\": {\n                                    \"alias\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"aliasAssigned\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"builds\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"use\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"dest\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"use\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdIn\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"creator\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"email\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"githubLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"gitlabLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"uid\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"username\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"email\",\n                                        \"uid\",\n                                        \"username\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"deploymentHostname\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"forced\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"meta\": {\n                                      \"additionalProperties\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"plan\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"private\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"readyState\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"requestedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"target\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"teamId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"url\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"userId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"withCache\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdIn\",\n                                    \"creator\",\n                                    \"deploymentHostname\",\n                                    \"id\",\n                                    \"name\",\n                                    \"plan\",\n                                    \"private\",\n                                    \"readyState\",\n                                    \"type\",\n                                    \"url\",\n                                    \"userId\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"transferCompletedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"transferStartedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"transferToAccountId\": {\n                                \"type\": \"string\"\n                              },\n                              \"transferredFromAccountId\": {\n                                \"type\": \"string\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"live\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"hasActiveBranches\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"gitComments\": {\n                                \"properties\": {\n                                  \"onPullRequest\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should comment on PRs\"\n                                  },\n                                  \"onCommit\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should comment on commits\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"onCommit\",\n                                  \"onPullRequest\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"gitProviderOptions\": {\n                                \"properties\": {\n                                  \"createDeployments\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"enabled\",\n                                      \"disabled\"\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead\"\n                                  },\n                                  \"disableRepositoryDispatchEvents\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events\"\n                                  },\n                                  \"requireVerifiedCommits\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the project requires commits to be signed before deployments will be created.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"createDeployments\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"paused\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"webAnalytics\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"hasData\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"security\": {\n                                \"properties\": {\n                                  \"attackModeEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"attackModeUpdatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"firewallEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"firewallUpdatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"attackModeActiveUntil\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"firewallConfigVersion\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"firewallRoutes\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"src\": {\n                                          \"oneOf\": [\n                                            {\n                                              \"type\": \"string\"\n                                            },\n                                            {\n                                              \"properties\": {\n                                                \"re\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"eq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"neq\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"inc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"ninc\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                \"pre\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"suf\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"gt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"gte\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lt\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"lte\": {\n                                                  \"type\": \"number\"\n                                                }\n                                              },\n                                              \"type\": \"object\"\n                                            }\n                                          ]\n                                        },\n                                        \"has\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"path\",\n                                                  \"query\",\n                                                  \"host\",\n                                                  \"method\",\n                                                  \"header\",\n                                                  \"cookie\",\n                                                  \"ip_address\",\n                                                  \"protocol\",\n                                                  \"scheme\",\n                                                  \"environment\",\n                                                  \"region\",\n                                                  \"initial_request_path\"\n                                                ]\n                                              },\n                                              \"key\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"value\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"properties\": {\n                                                      \"re\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"eq\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"neq\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"inc\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"type\": \"array\"\n                                                      },\n                                                      \"ninc\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"type\": \"array\"\n                                                      },\n                                                      \"pre\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"suf\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"gt\": {\n                                                        \"type\": \"number\"\n                                                      },\n                                                      \"gte\": {\n                                                        \"type\": \"number\"\n                                                      },\n                                                      \"lt\": {\n                                                        \"type\": \"number\"\n                                                      },\n                                                      \"lte\": {\n                                                        \"type\": \"number\"\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"missing\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"path\",\n                                                  \"query\",\n                                                  \"host\",\n                                                  \"method\",\n                                                  \"header\",\n                                                  \"cookie\",\n                                                  \"ip_address\",\n                                                  \"protocol\",\n                                                  \"scheme\",\n                                                  \"environment\",\n                                                  \"region\",\n                                                  \"initial_request_path\"\n                                                ]\n                                              },\n                                              \"key\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"value\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"properties\": {\n                                                      \"re\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"eq\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"neq\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"inc\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"type\": \"array\"\n                                                      },\n                                                      \"ninc\": {\n                                                        \"items\": {\n                                                          \"type\": \"string\"\n                                                        },\n                                                        \"type\": \"array\"\n                                                      },\n                                                      \"pre\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"suf\": {\n                                                        \"type\": \"string\"\n                                                      },\n                                                      \"gt\": {\n                                                        \"type\": \"number\"\n                                                      },\n                                                      \"gte\": {\n                                                        \"type\": \"number\"\n                                                      },\n                                                      \"lt\": {\n                                                        \"type\": \"number\"\n                                                      },\n                                                      \"lte\": {\n                                                        \"type\": \"number\"\n                                                      }\n                                                    },\n                                                    \"type\": \"object\"\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"dest\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"status\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"handle\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"init\",\n                                            \"finalize\"\n                                          ]\n                                        },\n                                        \"mitigate\": {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"log\",\n                                                \"deny\",\n                                                \"challenge\",\n                                                \"bypass\",\n                                                \"rate_limit\",\n                                                \"redirect\"\n                                              ]\n                                            },\n                                            \"rule_id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ttl\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"erl\": {\n                                              \"properties\": {\n                                                \"algo\": {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"fixed_window\",\n                                                    \"token_bucket\"\n                                                  ]\n                                                },\n                                                \"window\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"limit\": {\n                                                  \"type\": \"number\"\n                                                },\n                                                \"keys\": {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"algo\",\n                                                \"keys\",\n                                                \"limit\",\n                                                \"window\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"log_headers\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"items\": {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  \"type\": \"array\"\n                                                },\n                                                {\n                                                  \"type\": \"string\",\n                                                  \"enum\": [\n                                                    \"*\"\n                                                  ]\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"rule_id\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"firewallSeawallEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"ja3Enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"ja4Enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"firewallBypassIps\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"managedRules\": {\n                                    \"nullable\": true,\n                                    \"properties\": {\n                                      \"vercel_ruleset\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"bot_filter\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"ai_bots\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"owasp\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"ai_bots\",\n                                      \"bot_filter\",\n                                      \"owasp\",\n                                      \"vercel_ruleset\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"botIdEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"requestLogsKey\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"log_headers\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"*\"\n                                        ]\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"oidcTokenConfig\": {\n                                \"properties\": {\n                                  \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\"\n                                  },\n                                  \"issuerMode\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"team\",\n                                      \"global\"\n                                    ],\n                                    \"description\": \"- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"tier\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"standard\",\n                                  \"base\",\n                                  \"advanced\",\n                                  \"critical\"\n                                ]\n                              },\n                              \"abuse\": {\n                                \"properties\": {\n                                  \"scanner\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"history\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"scanner\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"reason\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"by\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"byId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"at\": {\n                                          \"type\": \"number\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"at\",\n                                        \"by\",\n                                        \"byId\",\n                                        \"reason\",\n                                        \"scanner\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"block\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"blocked\"\n                                        ]\n                                      },\n                                      \"reason\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"statusCode\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"caseId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"actor\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"comment\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"ineligibleForAppeal\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"isCascading\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\",\n                                      \"createdAt\",\n                                      \"reason\",\n                                      \"statusCode\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"blockHistory\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"blocked\"\n                                              ]\n                                            },\n                                            \"reason\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"statusCode\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\",\n                                            \"reason\",\n                                            \"statusCode\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"unblocked\"\n                                              ]\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"route-blocked\"\n                                              ]\n                                            },\n                                            \"route\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"status\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"src\",\n                                                    \"status\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"has\": {\n                                                      \"items\": {\n                                                        \"oneOf\": [\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"header\"\n                                                                ]\n                                                              },\n                                                              \"key\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"x-vercel-ip-country\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"key\",\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          },\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"host\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        ]\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"mitigate\": {\n                                                      \"properties\": {\n                                                        \"action\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"block_legal_cwc\"\n                                                          ]\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"action\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"has\",\n                                                    \"mitigate\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"reason\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\",\n                                            \"reason\",\n                                            \"route\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"route-unblocked\"\n                                              ]\n                                            },\n                                            \"route\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"status\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"src\",\n                                                    \"status\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"has\": {\n                                                      \"items\": {\n                                                        \"oneOf\": [\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"header\"\n                                                                ]\n                                                              },\n                                                              \"key\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"x-vercel-ip-country\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"key\",\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          },\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"host\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        ]\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"mitigate\": {\n                                                      \"properties\": {\n                                                        \"action\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"block_legal_cwc\"\n                                                          ]\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"action\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"has\",\n                                                    \"mitigate\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"statusCode\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\",\n                                            \"route\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"interstitial\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"history\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"internalRoutes\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"src\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"status\": {\n                                          \"type\": \"number\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"src\",\n                                        \"status\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"has\": {\n                                          \"items\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"header\"\n                                                    ]\n                                                  },\n                                                  \"key\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"x-vercel-ip-country\"\n                                                    ]\n                                                  },\n                                                  \"value\": {\n                                                    \"properties\": {\n                                                      \"eq\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"eq\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"key\",\n                                                  \"type\",\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"host\"\n                                                    ]\n                                                  },\n                                                  \"value\": {\n                                                    \"properties\": {\n                                                      \"eq\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"eq\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"type\",\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"mitigate\": {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"block_legal_cwc\"\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"src\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"has\",\n                                        \"mitigate\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"accountId\",\n                              \"alias\",\n                              \"deploymentExpiration\",\n                              \"directoryListing\",\n                              \"id\",\n                              \"name\",\n                              \"nodeVersion\",\n                              \"resourceConfig\",\n                              \"serverlessFunctionRegion\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"count\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Amount of items in the current page.\",\n                                  \"example\": 20\n                                },\n                                \"next\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"description\": \"Continuation token that must be used to request the next page. Base32 encoded for safe URL transmission.\",\n                                  \"example\": \"JBSWY3DPEHPK3PXP\"\n                                }\n                              },\n                              \"required\": [\n                                \"count\",\n                                \"next\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"This object contains information related to the pagination of the current request using continuation tokens. Since CosmosDB doesn't support going to previous pages, only count and next are provided.\"\n                            },\n                            {\n                              \"$ref\": \"#/components/schemas/Pagination\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"pagination\",\n                        \"projects\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"projects\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"accountId\": {\n                                \"type\": \"string\"\n                              },\n                              \"analytics\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"paidAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"sampleRatePercent\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"spendLimitInDollars\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"disabledAt\",\n                                  \"enabledAt\",\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"appliedCve55182Migration\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"speedInsights\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"hasData\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"paidAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"autoExposeSystemEnvs\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"autoAssignCustomDomains\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"autoAssignCustomDomainsUpdatedBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"buildCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"commandForIgnoringBuildStep\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"connectConfigurations\": {\n                                \"nullable\": true,\n                                \"items\": {\n                                  \"properties\": {\n                                    \"envId\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\"\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"connectConfigurationId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"dc\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"passive\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"buildsEnabled\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"aws\": {\n                                      \"properties\": {\n                                        \"subnetIds\": {\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"securityGroupId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"subnetIds\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"updatedAt\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"buildsEnabled\",\n                                    \"connectConfigurationId\",\n                                    \"createdAt\",\n                                    \"envId\",\n                                    \"passive\",\n                                    \"updatedAt\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"connectConfigurationId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"connectBuildsEnabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"passiveConnectConfigurationId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"customerSupportCodeVisibility\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"crons\": {\n                                \"properties\": {\n                                  \"enabledAt\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs.\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\",\n                                    \"description\": \"The time the feature was disabled for this project.\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"deploymentId\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\",\n                                    \"description\": \"The ID of the Deployment from which the definitions originated.\"\n                                  },\n                                  \"definitions\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"host\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The hostname that should be used.\",\n                                          \"example\": \"vercel.com\"\n                                        },\n                                        \"path\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The path that should be called for the cronjob.\",\n                                          \"example\": \"/api/crons/sync-something?hello=world\"\n                                        },\n                                        \"schedule\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The cron expression.\",\n                                          \"example\": \"0 0 * * *\"\n                                        },\n                                        \"source\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"api\"\n                                          ],\n                                          \"description\": \"The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json).\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"host\",\n                                        \"path\",\n                                        \"schedule\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"definitions\",\n                                  \"deploymentId\",\n                                  \"disabledAt\",\n                                  \"enabledAt\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"dataCache\": {\n                                \"properties\": {\n                                  \"userDisabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"storageSizeBytes\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"unlimited\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"userDisabled\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"deploymentExpiration\": {\n                                \"properties\": {\n                                  \"expirationDays\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n                                  },\n                                  \"expirationDaysProduction\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep production deployments before soft deletion.\"\n                                  },\n                                  \"expirationDaysCanceled\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n                                  },\n                                  \"expirationDaysErrored\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n                                  },\n                                  \"deploymentsToKeep\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n                                  }\n                                },\n                                \"type\": \"object\",\n                                \"description\": \"Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.\"\n                              },\n                              \"devCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"directoryListing\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"installCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"env\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"target\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"items\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"production\",\n                                              \"preview\",\n                                              \"development\",\n                                              \"preview\",\n                                              \"development\"\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"production\",\n                                            \"preview\",\n                                            \"development\",\n                                            \"preview\",\n                                            \"development\"\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"secret\",\n                                        \"system\",\n                                        \"encrypted\",\n                                        \"plain\",\n                                        \"sensitive\"\n                                      ]\n                                    },\n                                    \"sunsetSecretId\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                                    },\n                                    \"legacyValue\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                                    },\n                                    \"decrypted\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"vsmValue\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"key\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"configurationId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"updatedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdBy\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"updatedBy\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"gitBranch\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"edgeConfigId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"edgeConfigTokenId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"contentHint\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-rest-api-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-rest-api-token\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"redis-rest-api-read-only-token\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"blob-read-write-token\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-url-non-pooling\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-prisma-url\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-user\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-host\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-password\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-database\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"postgres-url-no-ssl\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"integration-store-secret\"\n                                              ]\n                                            },\n                                            \"storeId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"integrationId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"integrationProductId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"integrationConfigurationId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"integrationConfigurationId\",\n                                            \"integrationId\",\n                                            \"integrationProductId\",\n                                            \"storeId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"type\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"flags-connection-string\"\n                                              ]\n                                            },\n                                            \"projectId\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"projectId\",\n                                            \"type\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"internalContentHint\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"flags-secret\"\n                                          ]\n                                        },\n                                        \"encryptedValue\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"encryptedValue\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                                    },\n                                    \"comment\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"customEnvironmentIds\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"key\",\n                                    \"type\",\n                                    \"value\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"customEnvironments\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"id\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                                    },\n                                    \"slug\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"URL-friendly name of the environment\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\"\n                                      ],\n                                      \"description\": \"The type of environment (production, preview, or development)\"\n                                    },\n                                    \"description\": {\n                                      \"type\": \"string\",\n                                      \"description\": \"Optional description of the environment's purpose\"\n                                    },\n                                    \"branchMatcher\": {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"endsWith\",\n                                            \"startsWith\",\n                                            \"equals\"\n                                          ],\n                                          \"description\": \"The type of matching to perform\"\n                                        },\n                                        \"pattern\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The pattern to match against branch names\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"pattern\",\n                                        \"type\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"Configuration for matching git branches to this environment\"\n                                    },\n                                    \"domains\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"name\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"apexName\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"projectId\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"redirect\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\"\n                                          },\n                                          \"redirectStatusCode\": {\n                                            \"nullable\": true,\n                                            \"type\": \"number\",\n                                            \"enum\": [\n                                              301,\n                                              302,\n                                              307,\n                                              308\n                                            ]\n                                          },\n                                          \"gitBranch\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\"\n                                          },\n                                          \"customEnvironmentId\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\"\n                                          },\n                                          \"updatedAt\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"createdAt\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"verified\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ],\n                                            \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                          },\n                                          \"verification\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"type\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"domain\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"value\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"reason\": {\n                                                  \"type\": \"string\"\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"domain\",\n                                                \"reason\",\n                                                \"type\",\n                                                \"value\"\n                                              ],\n                                              \"type\": \"object\",\n                                              \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                            },\n                                            \"type\": \"array\",\n                                            \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"apexName\",\n                                          \"name\",\n                                          \"projectId\",\n                                          \"verified\"\n                                        ],\n                                        \"type\": \"object\",\n                                        \"description\": \"List of domains associated with this environment\"\n                                      },\n                                      \"type\": \"array\",\n                                      \"description\": \"List of domains associated with this environment\"\n                                    },\n                                    \"currentDeploymentAliases\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\",\n                                      \"description\": \"List of aliases for the current deployment\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Timestamp when the environment was created\"\n                                    },\n                                    \"updatedAt\": {\n                                      \"type\": \"number\",\n                                      \"description\": \"Timestamp when the environment was last updated\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"id\",\n                                    \"slug\",\n                                    \"type\",\n                                    \"updatedAt\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"Internal representation of a custom environment with all required properties\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"framework\": {\n                                \"nullable\": true,\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"services\",\n                                  \"blitzjs\",\n                                  \"nextjs\",\n                                  \"gatsby\",\n                                  \"remix\",\n                                  \"react-router\",\n                                  \"astro\",\n                                  \"hexo\",\n                                  \"eleventy\",\n                                  \"docusaurus-2\",\n                                  \"docusaurus\",\n                                  \"preact\",\n                                  \"solidstart-1\",\n                                  \"solidstart\",\n                                  \"dojo\",\n                                  \"ember\",\n                                  \"vue\",\n                                  \"scully\",\n                                  \"ionic-angular\",\n                                  \"angular\",\n                                  \"polymer\",\n                                  \"svelte\",\n                                  \"sveltekit\",\n                                  \"sveltekit-1\",\n                                  \"ionic-react\",\n                                  \"create-react-app\",\n                                  \"gridsome\",\n                                  \"umijs\",\n                                  \"sapper\",\n                                  \"saber\",\n                                  \"stencil\",\n                                  \"nuxtjs\",\n                                  \"redwoodjs\",\n                                  \"hugo\",\n                                  \"jekyll\",\n                                  \"brunch\",\n                                  \"middleman\",\n                                  \"zola\",\n                                  \"hydrogen\",\n                                  \"vite\",\n                                  \"tanstack-start\",\n                                  \"vitepress\",\n                                  \"vuepress\",\n                                  \"parcel\",\n                                  \"fastapi\",\n                                  \"flask\",\n                                  \"fasthtml\",\n                                  \"django\",\n                                  \"sanity-v3\",\n                                  \"sanity\",\n                                  \"storybook\",\n                                  \"nitro\",\n                                  \"hono\",\n                                  \"express\",\n                                  \"h3\",\n                                  \"koa\",\n                                  \"nestjs\",\n                                  \"elysia\",\n                                  \"fastify\",\n                                  \"xmcp\",\n                                  \"python\",\n                                  \"ruby\",\n                                  \"rust\",\n                                  \"node\",\n                                  \"go\"\n                                ]\n                              },\n                              \"gitForkProtection\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"gitLFS\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"ipBuckets\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"bucket\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"supportUntil\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"bucket\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"jobs\": {\n                                \"properties\": {\n                                  \"lint\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"typecheck\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"latestDeployments\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"alias\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"aliasAssigned\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"builds\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"use\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"dest\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"use\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdIn\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"creator\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"email\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"githubLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"gitlabLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"uid\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"username\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"email\",\n                                        \"uid\",\n                                        \"username\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"deploymentHostname\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"forced\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"meta\": {\n                                      \"additionalProperties\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"plan\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"private\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"readyState\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"requestedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"target\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"teamId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"url\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"userId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"withCache\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdIn\",\n                                    \"creator\",\n                                    \"deploymentHostname\",\n                                    \"id\",\n                                    \"name\",\n                                    \"plan\",\n                                    \"private\",\n                                    \"readyState\",\n                                    \"type\",\n                                    \"url\",\n                                    \"userId\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"link\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"org\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                      },\n                                      \"repo\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoId\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github\"\n                                        ]\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"org\",\n                                      \"productionBranch\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github-limited\"\n                                        ]\n                                      },\n                                      \"repo\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoId\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"org\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"org\",\n                                      \"productionBranch\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"org\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                                      },\n                                      \"repo\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"repoId\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github-custom-host\"\n                                        ]\n                                      },\n                                      \"host\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"host\",\n                                      \"org\",\n                                      \"productionBranch\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectName\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectNameWithNamespace\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectNamespace\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"projectOwnerId\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).\"\n                                      },\n                                      \"projectUrl\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"gitlab\"\n                                        ]\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"productionBranch\",\n                                      \"projectId\",\n                                      \"projectName\",\n                                      \"projectNameWithNamespace\",\n                                      \"projectNamespace\",\n                                      \"projectUrl\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"name\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"slug\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"owner\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"bitbucket\"\n                                        ]\n                                      },\n                                      \"uuid\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"workspaceUuid\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"deployHooks\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"id\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"name\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ref\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"url\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"id\",\n                                            \"name\",\n                                            \"ref\",\n                                            \"url\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"gitCredentialId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"sourceless\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"productionBranch\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deployHooks\",\n                                      \"gitCredentialId\",\n                                      \"name\",\n                                      \"owner\",\n                                      \"productionBranch\",\n                                      \"slug\",\n                                      \"type\",\n                                      \"uuid\",\n                                      \"workspaceUuid\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"microfrontends\": {\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"isDefaultApp\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          true\n                                        ]\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                                      },\n                                      \"groupIds\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"minItems\": 1,\n                                        \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                                      },\n                                      \"enabled\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          true\n                                        ],\n                                        \"description\": \"Whether microfrontends are enabled for this project.\"\n                                      },\n                                      \"defaultRoute\": {\n                                        \"type\": \"string\",\n                                        \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                                      },\n                                      \"freeProjectForLegacyLimits\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ],\n                                        \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"enabled\",\n                                      \"groupIds\",\n                                      \"isDefaultApp\",\n                                      \"updatedAt\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"isDefaultApp\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false\n                                        ]\n                                      },\n                                      \"routeObservabilityToThisProject\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ],\n                                        \"description\": \"Whether observability data should be routed to this microfrontend project or a root project.\"\n                                      },\n                                      \"doNotRouteWithMicrofrontendsRouting\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ],\n                                        \"description\": \"Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.\"\n                                      },\n                                      \"updatedAt\": {\n                                        \"type\": \"number\",\n                                        \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                                      },\n                                      \"groupIds\": {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"minItems\": 1,\n                                        \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                                      },\n                                      \"enabled\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          true\n                                        ],\n                                        \"description\": \"Whether microfrontends are enabled for this project.\"\n                                      },\n                                      \"defaultRoute\": {\n                                        \"type\": \"string\",\n                                        \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                                      },\n                                      \"freeProjectForLegacyLimits\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ],\n                                        \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"enabled\",\n                                      \"groupIds\",\n                                      \"updatedAt\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"updatedAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"groupIds\": {\n                                        \"type\": \"array\",\n                                        \"items\": {},\n                                        \"minItems\": 0,\n                                        \"maxItems\": 0\n                                      },\n                                      \"enabled\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false\n                                        ]\n                                      },\n                                      \"freeProjectForLegacyLimits\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"enabled\",\n                                      \"groupIds\",\n                                      \"updatedAt\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"nodeVersion\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"24.x\",\n                                  \"22.x\",\n                                  \"20.x\",\n                                  \"18.x\",\n                                  \"16.x\",\n                                  \"14.x\",\n                                  \"12.x\",\n                                  \"10.x\",\n                                  \"8.10.x\"\n                                ]\n                              },\n                              \"optionsAllowlist\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"paths\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"value\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"paths\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"outputDirectory\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"passwordProtection\": {\n                                \"nullable\": true,\n                                \"type\": \"object\"\n                              },\n                              \"productionDeploymentsFastLane\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"publicSource\": {\n                                \"nullable\": true,\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"resourceConfig\": {\n                                \"properties\": {\n                                  \"elasticConcurrencyEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"fluid\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"functionDefaultRegions\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"functionDefaultTimeout\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"functionDefaultMemoryType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard_legacy\",\n                                      \"standard\",\n                                      \"performance\"\n                                    ]\n                                  },\n                                  \"functionZeroConfigFailover\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"buildMachineType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard\",\n                                      \"enhanced\",\n                                      \"turbo\"\n                                    ]\n                                  },\n                                  \"buildMachineSelection\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"fixed\",\n                                      \"elastic\"\n                                    ]\n                                  },\n                                  \"buildMachineElasticLastUpdated\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"isNSNBDisabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"buildQueue\": {\n                                    \"properties\": {\n                                      \"configuration\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"SKIP_NAMESPACE_QUEUE\",\n                                          \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                        ]\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\",\n                                \"required\": [\n                                  \"functionDefaultRegions\"\n                                ]\n                              },\n                              \"rollbackDescription\": {\n                                \"properties\": {\n                                  \"userId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The user who rolled back the project.\"\n                                  },\n                                  \"username\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The username of the user who rolled back the project.\"\n                                  },\n                                  \"description\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"User-supplied explanation of why they rolled back the project. Limited to 250 characters.\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Timestamp of when the rollback was requested.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"createdAt\",\n                                  \"description\",\n                                  \"userId\",\n                                  \"username\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback.\"\n                              },\n                              \"rollingRelease\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"target\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                                    \"example\": \"production\"\n                                  },\n                                  \"stages\": {\n                                    \"nullable\": true,\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"targetPercentage\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                          \"example\": 25\n                                        },\n                                        \"requireApproval\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ],\n                                          \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                          \"example\": false\n                                        },\n                                        \"duration\": {\n                                          \"type\": \"number\",\n                                          \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                          \"example\": 600\n                                        },\n                                        \"linearShift\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ],\n                                          \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                          \"example\": false\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"targetPercentage\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                                  },\n                                  \"canaryResponseHeader\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                                    \"example\": false\n                                  }\n                                },\n                                \"required\": [\n                                  \"target\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                              },\n                              \"defaultResourceConfig\": {\n                                \"properties\": {\n                                  \"elasticConcurrencyEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"fluid\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"functionDefaultRegions\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"functionDefaultTimeout\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"functionDefaultMemoryType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard_legacy\",\n                                      \"standard\",\n                                      \"performance\"\n                                    ]\n                                  },\n                                  \"functionZeroConfigFailover\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"buildMachineType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard\",\n                                      \"enhanced\",\n                                      \"turbo\"\n                                    ]\n                                  },\n                                  \"buildMachineSelection\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"fixed\",\n                                      \"elastic\"\n                                    ]\n                                  },\n                                  \"buildMachineElasticLastUpdated\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"isNSNBDisabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"buildQueue\": {\n                                    \"properties\": {\n                                      \"configuration\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"SKIP_NAMESPACE_QUEUE\",\n                                          \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                        ]\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\",\n                                \"required\": [\n                                  \"functionDefaultRegions\"\n                                ]\n                              },\n                              \"rootDirectory\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"serverlessFunctionZeroConfigFailover\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"skewProtectionBoundaryAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"skewProtectionMaxAge\": {\n                                \"type\": \"number\"\n                              },\n                              \"skewProtectionAllowedDomains\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"skipGitConnectDuringLink\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"staticIps\": {\n                                \"properties\": {\n                                  \"builds\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"regions\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"builds\",\n                                  \"enabled\",\n                                  \"regions\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"sourceFilesOutsideRootDirectory\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"enableAffectedProjectsDeployments\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"ssoProtection\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"deploymentType\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"preview\",\n                                      \"all\",\n                                      \"prod_deployment_urls_and_all_previews\",\n                                      \"all_except_custom_domains\"\n                                    ]\n                                  },\n                                  \"cve55182MigrationAppliedFrom\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"preview\",\n                                      \"all\",\n                                      \"prod_deployment_urls_and_all_previews\",\n                                      \"all_except_custom_domains\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"deploymentType\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"targets\": {\n                                \"additionalProperties\": {\n                                  \"nullable\": true,\n                                  \"properties\": {\n                                    \"alias\": {\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"aliasAssigned\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    },\n                                    \"builds\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"use\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"dest\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"use\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdIn\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"creator\": {\n                                      \"nullable\": true,\n                                      \"properties\": {\n                                        \"email\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"githubLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"gitlabLogin\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"uid\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"username\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"email\",\n                                        \"uid\",\n                                        \"username\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"deploymentHostname\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"name\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"forced\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"id\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"meta\": {\n                                      \"additionalProperties\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"plan\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"private\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    },\n                                    \"readyState\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"requestedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"target\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"teamId\": {\n                                      \"nullable\": true,\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"url\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"userId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"withCache\": {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false,\n                                        true\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdIn\",\n                                    \"creator\",\n                                    \"deploymentHostname\",\n                                    \"id\",\n                                    \"name\",\n                                    \"plan\",\n                                    \"private\",\n                                    \"readyState\",\n                                    \"type\",\n                                    \"url\",\n                                    \"userId\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"transferCompletedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"transferStartedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"transferToAccountId\": {\n                                \"type\": \"string\"\n                              },\n                              \"transferredFromAccountId\": {\n                                \"type\": \"string\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"live\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"enablePreviewFeedback\": {\n                                \"nullable\": true,\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"enableProductionFeedback\": {\n                                \"nullable\": true,\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"permissions\": {\n                                \"properties\": {\n                                  \"oauth2Connection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"user\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"userConnection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"userSudo\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"webAuthn\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"accessGroup\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"agent\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"aiGatewayUsage\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"alerts\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"alertRules\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"aliasGlobal\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"analyticsSampling\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"analyticsUsage\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"apiKey\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"apiKeyAiGateway\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"apiKeyOwnedBySelf\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"oauth2Application\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"vercelAppInstallation\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"vercelAppInstallationRequest\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"auditLog\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingAddress\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingInformation\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingInvoice\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingInvoiceEmailRecipient\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingInvoiceLanguage\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingPlan\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingPurchaseOrder\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingRefund\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"billingTaxId\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"blob\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"blobStoreTokenSet\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"budget\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"cacheArtifact\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"cacheArtifactUsageEvent\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"codeChecks\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"concurrentBuilds\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"connect\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"connectConfiguration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"buildMachineDefault\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"dataCacheBillingSettings\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"defaultDeploymentProtection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domain\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainAcceptDelegation\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainAuthCodes\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainCertificate\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainCheckConfig\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainMove\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainPurchase\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainRecord\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"domainTransferIn\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"drain\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"edgeConfig\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"edgeConfigItem\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"edgeConfigSchema\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"edgeConfigToken\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"endpointVerification\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"event\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"fileUpload\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"flagsExplorerSubscription\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"gitRepository\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"imageOptimizationNewPrice\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationAccount\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationConfiguration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationConfigurationProjects\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationConfigurationRole\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationConfigurationTransfer\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationDeploymentAction\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationEvent\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationLog\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationResource\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationResourceData\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationResourceReplCommand\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationResourceSecrets\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationSSOSession\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationStrict\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationStoreTokenSet\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationVercelConfigurationOverride\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"integrationPullRequest\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"ipBlocking\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"jobGlobal\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"logDrain\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"marketplaceBillingData\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"marketplaceExperimentationEdgeConfigData\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"marketplaceExperimentationItem\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"marketplaceInstallationMember\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"marketplaceInvoice\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"marketplaceSettings\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"Monitoring\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"monitoringAlert\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"monitoringChart\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"monitoringQuery\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"monitoringSettings\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationCustomerBudget\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDeploymentFailed\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainConfiguration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainExpire\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainMoved\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainPurchase\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainRenewal\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainTransfer\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationDomainUnverified\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"NotificationMonitoringAlert\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationPaymentFailed\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationPreferences\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationStatementOfReasons\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"notificationUsageAlert\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"observabilityConfiguration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"observabilityFunnel\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"observabilityNotebook\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"openTelemetryEndpoint\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"ownEvent\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"organizationDomain\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"passwordProtectionInvoiceItem\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"paymentMethod\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"permissions\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"postgres\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"postgresStoreTokenSet\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"previewDeploymentSuffix\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"privateCloudAccount\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectTransferIn\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"proTrialOnboarding\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"rateLimit\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"redis\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"redisStoreTokenSet\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"remoteCaching\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"repository\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"samlConfig\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"secret\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"securityPlusConfiguration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"sensitiveEnvironmentVariablePolicy\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"sharedEnvVars\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"sharedEnvVarsProduction\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"space\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"spaceRun\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"storeTransfer\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"supportCase\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"supportCaseComment\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"team\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamAccessRequest\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamFellowMembership\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamGitExclusivity\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamInvite\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamInviteCode\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamJoin\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamMemberMfaStatus\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamMicrofrontends\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamOwnMembership\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"teamOwnMembershipDisconnectSAML\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"token\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"toolbarComment\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"usage\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"usageCycle\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"vercelRun\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"vercelRunExec\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"vpcPeeringConnection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"webAnalyticsPlan\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"webhook\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"webhook-event\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"aliasProject\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"aliasProtectionBypass\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"bulkRedirects\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"buildMachine\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"connectConfigurationLink\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"dataCacheNamespace\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deployment\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentBuildLogs\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentCheck\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentCheckPreview\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentCheckReRunFromProductionBranch\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentProductionGit\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentV0\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentPreview\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentPrivate\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentPromote\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"deploymentRollback\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"edgeCacheNamespace\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"environments\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"job\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"logs\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"logsPreset\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"observabilityData\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"onDemandBuild\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"onDemandConcurrency\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"optionsAllowlist\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"passwordProtection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"productionAliasProtectionBypass\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"project\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectAccessGroup\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectAnalyticsSampling\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectAnalyticsUsage\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectCheck\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectCheckRun\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectDeploymentExpiration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectDeploymentHook\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectDeploymentProtectionStrict\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectDomain\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectDomainCheckConfig\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectDomainMove\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectEvent\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectEnvVars\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectEnvVarsProduction\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectEnvVarsUnownedByIntegration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectFlags\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectFlagsProduction\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectFromV0\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectId\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectIntegrationConfiguration\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectLink\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectMember\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectMonitoring\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectOIDCToken\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectPermissions\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectProductionBranch\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectProtectionBypass\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectRollingRelease\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectRoutes\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectSupportCase\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectSupportCaseComment\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectTier\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectTransfer\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectTransferOut\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"projectUsage\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"seawallConfig\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"sharedEnvVarConnection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"skewProtection\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"analytics\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"trustedIps\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"v0Chat\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"webAnalytics\": {\n                                    \"items\": {\n                                      \"$ref\": \"#/components/schemas/ACLAction\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"lastRollbackTarget\": {\n                                \"nullable\": true,\n                                \"type\": \"object\"\n                              },\n                              \"lastAliasRequest\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"fromDeploymentId\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"toDeploymentId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"fromRollingReleaseId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"If rolling back from a rolling release, fromDeploymentId captures the \\\"base\\\" of that rolling release, and fromRollingReleaseId captures the \\\"target\\\" of that rolling release.\"\n                                  },\n                                  \"jobStatus\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"succeeded\",\n                                      \"failed\",\n                                      \"skipped\",\n                                      \"pending\",\n                                      \"in-progress\"\n                                    ]\n                                  },\n                                  \"requestedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"promote\",\n                                      \"rollback\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"fromDeploymentId\",\n                                  \"jobStatus\",\n                                  \"requestedAt\",\n                                  \"toDeploymentId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"protectionBypass\": {\n                                \"additionalProperties\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"createdBy\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"scope\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"integration-automation-bypass\"\n                                          ]\n                                        },\n                                        \"integrationId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"configurationId\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"configurationId\",\n                                        \"createdAt\",\n                                        \"createdBy\",\n                                        \"integrationId\",\n                                        \"scope\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"createdAt\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"createdBy\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"scope\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"automation-bypass\"\n                                          ]\n                                        },\n                                        \"isEnvVar\": {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ],\n                                          \"description\": \"When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var.\"\n                                        },\n                                        \"note\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Optional note about the bypass to be displayed in the UI\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"createdAt\",\n                                        \"createdBy\",\n                                        \"scope\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"hasActiveBranches\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"trustedIps\": {\n                                \"nullable\": true,\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"deploymentType\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"production\",\n                                          \"preview\",\n                                          \"all\",\n                                          \"prod_deployment_urls_and_all_previews\",\n                                          \"all_except_custom_domains\"\n                                        ]\n                                      },\n                                      \"addresses\": {\n                                        \"items\": {\n                                          \"properties\": {\n                                            \"value\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"note\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      \"protectionMode\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"additional\",\n                                          \"exclusive\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"addresses\",\n                                      \"deploymentType\",\n                                      \"protectionMode\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"deploymentType\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"production\",\n                                          \"preview\",\n                                          \"all\",\n                                          \"prod_deployment_urls_and_all_previews\",\n                                          \"all_except_custom_domains\"\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"deploymentType\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"gitComments\": {\n                                \"properties\": {\n                                  \"onPullRequest\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should comment on PRs\"\n                                  },\n                                  \"onCommit\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should comment on commits\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"onCommit\",\n                                  \"onPullRequest\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"gitProviderOptions\": {\n                                \"properties\": {\n                                  \"createDeployments\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"enabled\",\n                                      \"disabled\"\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead\"\n                                  },\n                                  \"disableRepositoryDispatchEvents\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events\"\n                                  },\n                                  \"requireVerifiedCommits\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the project requires commits to be signed before deployments will be created.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"createDeployments\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"paused\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"concurrencyBucketName\": {\n                                \"type\": \"string\"\n                              },\n                              \"webAnalytics\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"hasData\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"security\": {\n                                \"properties\": {\n                                  \"attackModeEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"attackModeUpdatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"firewallEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"firewallUpdatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"attackModeActiveUntil\": {\n                                    \"nullable\": true,\n                                    \"type\": \"number\"\n                                  },\n                                  \"firewallConfigVersion\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"firewallSeawallEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"ja3Enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"ja4Enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"firewallBypassIps\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"managedRules\": {\n                                    \"nullable\": true,\n                                    \"properties\": {\n                                      \"vercel_ruleset\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"bot_filter\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"ai_bots\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"owasp\": {\n                                        \"properties\": {\n                                          \"active\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"log\",\n                                              \"deny\",\n                                              \"challenge\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"active\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"ai_bots\",\n                                      \"bot_filter\",\n                                      \"owasp\",\n                                      \"vercel_ruleset\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"botIdEnabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"log_headers\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"type\": \"array\"\n                                      },\n                                      {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"*\"\n                                        ]\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"oidcTokenConfig\": {\n                                \"properties\": {\n                                  \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\"\n                                  },\n                                  \"issuerMode\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"team\",\n                                      \"global\"\n                                    ],\n                                    \"description\": \"- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"tier\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"standard\",\n                                  \"base\",\n                                  \"advanced\",\n                                  \"critical\"\n                                ]\n                              },\n                              \"scheduledTierChange\": {\n                                \"properties\": {\n                                  \"tier\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"standard\",\n                                      \"base\",\n                                      \"advanced\",\n                                      \"critical\"\n                                    ]\n                                  },\n                                  \"effectiveAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"effectiveAt\",\n                                  \"tier\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"usageStatus\": {\n                                \"properties\": {\n                                  \"kind\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flat\"\n                                    ],\n                                    \"description\": \"Billing mode. Always 'flat' for flat-rate projects.\"\n                                  },\n                                  \"exceededAllowanceUntil\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Timestamp until which the project has exceeded its CDN allowance.\"\n                                  },\n                                  \"bypassThrottleUntil\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Timestamp until which throttling is bypassed (project pays list rates for overage).\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"kind\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"features\": {\n                                \"properties\": {\n                                  \"webAnalytics\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"v0\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"abuse\": {\n                                \"properties\": {\n                                  \"scanner\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"history\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"scanner\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"reason\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"by\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"byId\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"at\": {\n                                          \"type\": \"number\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"at\",\n                                        \"by\",\n                                        \"byId\",\n                                        \"reason\",\n                                        \"scanner\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"block\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"blocked\"\n                                        ]\n                                      },\n                                      \"reason\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"statusCode\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"createdAt\": {\n                                        \"type\": \"number\"\n                                      },\n                                      \"caseId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"actor\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"comment\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"ineligibleForAppeal\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"isCascading\": {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\",\n                                      \"createdAt\",\n                                      \"reason\",\n                                      \"statusCode\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  \"blockHistory\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"blocked\"\n                                              ]\n                                            },\n                                            \"reason\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"statusCode\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\",\n                                            \"reason\",\n                                            \"statusCode\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"unblocked\"\n                                              ]\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"route-blocked\"\n                                              ]\n                                            },\n                                            \"route\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"status\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"src\",\n                                                    \"status\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"has\": {\n                                                      \"items\": {\n                                                        \"oneOf\": [\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"header\"\n                                                                ]\n                                                              },\n                                                              \"key\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"x-vercel-ip-country\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"key\",\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          },\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"host\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        ]\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"mitigate\": {\n                                                      \"properties\": {\n                                                        \"action\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"block_legal_cwc\"\n                                                          ]\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"action\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"has\",\n                                                    \"mitigate\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"reason\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\",\n                                            \"reason\",\n                                            \"route\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"route-unblocked\"\n                                              ]\n                                            },\n                                            \"route\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"status\": {\n                                                      \"type\": \"number\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"src\",\n                                                    \"status\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"has\": {\n                                                      \"items\": {\n                                                        \"oneOf\": [\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"header\"\n                                                                ]\n                                                              },\n                                                              \"key\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"x-vercel-ip-country\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"key\",\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          },\n                                                          {\n                                                            \"properties\": {\n                                                              \"type\": {\n                                                                \"type\": \"string\",\n                                                                \"enum\": [\n                                                                  \"host\"\n                                                                ]\n                                                              },\n                                                              \"value\": {\n                                                                \"properties\": {\n                                                                  \"eq\": {\n                                                                    \"type\": \"string\"\n                                                                  }\n                                                                },\n                                                                \"required\": [\n                                                                  \"eq\"\n                                                                ],\n                                                                \"type\": \"object\"\n                                                              }\n                                                            },\n                                                            \"required\": [\n                                                              \"type\",\n                                                              \"value\"\n                                                            ],\n                                                            \"type\": \"object\"\n                                                          }\n                                                        ]\n                                                      },\n                                                      \"type\": \"array\"\n                                                    },\n                                                    \"mitigate\": {\n                                                      \"properties\": {\n                                                        \"action\": {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"block_legal_cwc\"\n                                                          ]\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"action\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    \"src\": {\n                                                      \"type\": \"string\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"has\",\n                                                    \"mitigate\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"statusCode\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"createdAt\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"caseId\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"actor\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"comment\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"ineligibleForAppeal\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            },\n                                            \"isCascading\": {\n                                              \"type\": \"boolean\",\n                                              \"enum\": [\n                                                false,\n                                                true\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\",\n                                            \"createdAt\",\n                                            \"route\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"interstitial\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"history\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"internalRoutes\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"src\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"status\": {\n                                          \"type\": \"number\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"src\",\n                                        \"status\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"has\": {\n                                          \"items\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"header\"\n                                                    ]\n                                                  },\n                                                  \"key\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"x-vercel-ip-country\"\n                                                    ]\n                                                  },\n                                                  \"value\": {\n                                                    \"properties\": {\n                                                      \"eq\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"eq\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"key\",\n                                                  \"type\",\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"type\": {\n                                                    \"type\": \"string\",\n                                                    \"enum\": [\n                                                      \"host\"\n                                                    ]\n                                                  },\n                                                  \"value\": {\n                                                    \"properties\": {\n                                                      \"eq\": {\n                                                        \"type\": \"string\"\n                                                      }\n                                                    },\n                                                    \"required\": [\n                                                      \"eq\"\n                                                    ],\n                                                    \"type\": \"object\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"type\",\n                                                  \"value\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        },\n                                        \"mitigate\": {\n                                          \"properties\": {\n                                            \"action\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"block_legal_cwc\"\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"action\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        \"src\": {\n                                          \"type\": \"string\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"has\",\n                                        \"mitigate\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"hasDeployments\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"dismissedToasts\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"key\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"dismissedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"action\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"delete\",\n                                        \"cancel\",\n                                        \"accept\"\n                                      ]\n                                    },\n                                    \"value\": {\n                                      \"nullable\": true,\n                                      \"oneOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"number\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"previousValue\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"type\": \"number\"\n                                                },\n                                                {\n                                                  \"type\": \"boolean\",\n                                                  \"enum\": [\n                                                    false,\n                                                    true\n                                                  ]\n                                                }\n                                              ]\n                                            },\n                                            \"currentValue\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"type\": \"number\"\n                                                },\n                                                {\n                                                  \"type\": \"boolean\",\n                                                  \"enum\": [\n                                                    false,\n                                                    true\n                                                  ]\n                                                }\n                                              ]\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"currentValue\",\n                                            \"previousValue\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"type\": \"boolean\",\n                                          \"enum\": [\n                                            false,\n                                            true\n                                          ]\n                                        }\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"action\",\n                                    \"dismissedAt\",\n                                    \"key\",\n                                    \"value\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"protectedSourcemaps\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"accountId\",\n                              \"defaultResourceConfig\",\n                              \"deploymentExpiration\",\n                              \"directoryListing\",\n                              \"id\",\n                              \"name\",\n                              \"nodeVersion\",\n                              \"resourceConfig\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"count\": {\n                                  \"type\": \"number\",\n                                  \"description\": \"Amount of items in the current page.\",\n                                  \"example\": 20\n                                },\n                                \"next\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"description\": \"Continuation token that must be used to request the next page. Base32 encoded for safe URL transmission.\",\n                                  \"example\": \"JBSWY3DPEHPK3PXP\"\n                                }\n                              },\n                              \"required\": [\n                                \"count\",\n                                \"next\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"This object contains information related to the pagination of the current request using continuation tokens. Since CosmosDB doesn't support going to previous pages, only count and next are provided.\"\n                            },\n                            {\n                              \"$ref\": \"#/components/schemas/Pagination\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"pagination\",\n                        \"projects\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"from\",\n            \"description\": \"Query only projects updated after the given timestamp or continuation token.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Query only projects updated after the given timestamp or continuation token.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"gitForkProtection\",\n            \"description\": \"Specifies whether PRs from Git forks should require a team member's authorization before it can be deployed\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Specifies whether PRs from Git forks should require a team member's authorization before it can be deployed\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"1\",\n                \"0\"\n              ],\n              \"example\": \"1\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Limit the number of projects returned\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Limit the number of projects returned\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search projects by the name field\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Search projects by the name field\",\n              \"type\": \"string\",\n              \"maxLength\": 100\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"description\": \"Filter results by repo. Also used for project count\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by repo. Also used for project count\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repoId\",\n            \"description\": \"Filter results by Repository ID.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by Repository ID.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repoUrl\",\n            \"description\": \"Filter results by Repository URL.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by Repository URL.\",\n              \"type\": \"string\",\n              \"example\": \"https://github.com/vercel/next.js\"\n            }\n          },\n          {\n            \"name\": \"excludeRepos\",\n            \"description\": \"Filter results by excluding those projects that belong to a repo\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by excluding those projects that belong to a repo\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"edgeConfigId\",\n            \"description\": \"Filter results by connected Edge Config ID\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by connected Edge Config ID\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"edgeConfigTokenId\",\n            \"description\": \"Filter results by connected Edge Config Token ID\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by connected Edge Config Token ID\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"deprecated\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"name\": \"elasticConcurrencyEnabled\",\n            \"description\": \"Filter results by projects with elastic concurrency enabled\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by projects with elastic concurrency enabled\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"1\",\n                \"0\"\n              ],\n              \"example\": \"1\"\n            }\n          },\n          {\n            \"name\": \"staticIpsEnabled\",\n            \"description\": \"Filter results by projects with Static IPs enabled\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by projects with Static IPs enabled\",\n              \"enum\": [\n                \"0\",\n                \"1\"\n              ],\n              \"example\": \"1\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"buildMachineTypes\",\n            \"description\": \"Filter results by build machine types. Accepts comma-separated values. Use \\\\\\\"default\\\\\\\" for projects without a build machine type set.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by build machine types. Accepts comma-separated values. Use \\\\\\\"default\\\\\\\" for projects without a build machine type set.\",\n              \"type\": \"string\",\n              \"example\": \"default,enhanced\"\n            }\n          },\n          {\n            \"name\": \"buildQueueConfiguration\",\n            \"description\": \"Filter results by build queue configuration. SKIP_NAMESPACE_QUEUE includes projects without a configuration set.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter results by build queue configuration. SKIP_NAMESPACE_QUEUE includes projects without a configuration set.\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"SKIP_NAMESPACE_QUEUE\",\n                \"WAIT_FOR_NAMESPACE_QUEUE\"\n              ],\n              \"example\": \"SKIP_NAMESPACE_QUEUE\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v11/projects\": {\n      \"post\": {\n        \"description\": \"Allows to create a new project with the provided configuration. It only requires the project `name` but more configuration can be provided to override the defaults.\",\n        \"operationId\": \"createProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a new project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The project was successfuly created\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"accountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"analytics\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"canceledAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"paidAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"sampleRatePercent\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"spendLimitInDollars\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"disabledAt\",\n                        \"enabledAt\",\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"appliedCve55182Migration\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"speedInsights\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"hasData\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"paidAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"autoExposeSystemEnvs\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"autoAssignCustomDomains\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"autoAssignCustomDomainsUpdatedBy\": {\n                      \"type\": \"string\"\n                    },\n                    \"buildCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"commandForIgnoringBuildStep\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"connectConfigurations\": {\n                      \"nullable\": true,\n                      \"items\": {\n                        \"properties\": {\n                          \"envId\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"connectConfigurationId\": {\n                            \"type\": \"string\"\n                          },\n                          \"dc\": {\n                            \"type\": \"string\"\n                          },\n                          \"passive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"buildsEnabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"aws\": {\n                            \"properties\": {\n                              \"subnetIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"securityGroupId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"subnetIds\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"buildsEnabled\",\n                          \"connectConfigurationId\",\n                          \"createdAt\",\n                          \"envId\",\n                          \"passive\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"connectConfigurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"connectBuildsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"passiveConnectConfigurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"customerSupportCodeVisibility\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"crons\": {\n                      \"properties\": {\n                        \"enabledAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs.\"\n                        },\n                        \"disabledAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"The time the feature was disabled for this project.\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"deploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the Deployment from which the definitions originated.\"\n                        },\n                        \"definitions\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"host\": {\n                                \"type\": \"string\",\n                                \"description\": \"The hostname that should be used.\",\n                                \"example\": \"vercel.com\"\n                              },\n                              \"path\": {\n                                \"type\": \"string\",\n                                \"description\": \"The path that should be called for the cronjob.\",\n                                \"example\": \"/api/crons/sync-something?hello=world\"\n                              },\n                              \"schedule\": {\n                                \"type\": \"string\",\n                                \"description\": \"The cron expression.\",\n                                \"example\": \"0 0 * * *\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"api\"\n                                ],\n                                \"description\": \"The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json).\"\n                              }\n                            },\n                            \"required\": [\n                              \"host\",\n                              \"path\",\n                              \"schedule\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"definitions\",\n                        \"deploymentId\",\n                        \"disabledAt\",\n                        \"enabledAt\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"dataCache\": {\n                      \"properties\": {\n                        \"userDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"storageSizeBytes\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"unlimited\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"userDisabled\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"deploymentExpiration\": {\n                      \"properties\": {\n                        \"expirationDays\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n                        },\n                        \"expirationDaysProduction\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep production deployments before soft deletion.\"\n                        },\n                        \"expirationDaysCanceled\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n                        },\n                        \"expirationDaysErrored\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n                        },\n                        \"deploymentsToKeep\": {\n                          \"type\": \"number\",\n                          \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.\"\n                    },\n                    \"devCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"directoryListing\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"installCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"env\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"target\": {\n                            \"oneOf\": [\n                              {\n                                \"items\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\",\n                                    \"preview\",\n                                    \"development\"\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"secret\",\n                              \"system\",\n                              \"encrypted\",\n                              \"plain\",\n                              \"sensitive\"\n                            ]\n                          },\n                          \"sunsetSecretId\": {\n                            \"type\": \"string\",\n                            \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                          },\n                          \"legacyValue\": {\n                            \"type\": \"string\",\n                            \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"vsmValue\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"configurationId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"gitBranch\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigTokenId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"contentHint\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-read-only-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blob-read-write-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-non-pooling\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-prisma-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-user\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-host\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-password\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-database\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-no-ssl\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration-store-secret\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationProductId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"integrationProductId\",\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-connection-string\"\n                                    ]\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"projectId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"internalContentHint\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"flags-secret\"\n                                ]\n                              },\n                              \"encryptedValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                              }\n                            },\n                            \"required\": [\n                              \"encryptedValue\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"key\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"customEnvironments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"description\": \"URL-friendly name of the environment\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ],\n                            \"description\": \"The type of environment (production, preview, or development)\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"description\": \"Optional description of the environment's purpose\"\n                          },\n                          \"branchMatcher\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"endsWith\",\n                                  \"startsWith\",\n                                  \"equals\"\n                                ],\n                                \"description\": \"The type of matching to perform\"\n                              },\n                              \"pattern\": {\n                                \"type\": \"string\",\n                                \"description\": \"The pattern to match against branch names\"\n                              }\n                            },\n                            \"required\": [\n                              \"pattern\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Configuration for matching git branches to this environment\"\n                          },\n                          \"domains\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"apexName\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"redirect\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"redirectStatusCode\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\",\n                                  \"enum\": [\n                                    301,\n                                    302,\n                                    307,\n                                    308\n                                  ]\n                                },\n                                \"gitBranch\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"customEnvironmentId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"verified\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ],\n                                  \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                },\n                                \"verification\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"domain\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"reason\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"domain\",\n                                      \"reason\",\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                }\n                              },\n                              \"required\": [\n                                \"apexName\",\n                                \"name\",\n                                \"projectId\",\n                                \"verified\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"List of domains associated with this environment\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of domains associated with this environment\"\n                          },\n                          \"currentDeploymentAliases\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of aliases for the current deployment\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was created\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was last updated\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"id\",\n                          \"slug\",\n                          \"type\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Internal representation of a custom environment with all required properties\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"framework\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"services\",\n                        \"blitzjs\",\n                        \"nextjs\",\n                        \"gatsby\",\n                        \"remix\",\n                        \"react-router\",\n                        \"astro\",\n                        \"hexo\",\n                        \"eleventy\",\n                        \"docusaurus-2\",\n                        \"docusaurus\",\n                        \"preact\",\n                        \"solidstart-1\",\n                        \"solidstart\",\n                        \"dojo\",\n                        \"ember\",\n                        \"vue\",\n                        \"scully\",\n                        \"ionic-angular\",\n                        \"angular\",\n                        \"polymer\",\n                        \"svelte\",\n                        \"sveltekit\",\n                        \"sveltekit-1\",\n                        \"ionic-react\",\n                        \"create-react-app\",\n                        \"gridsome\",\n                        \"umijs\",\n                        \"sapper\",\n                        \"saber\",\n                        \"stencil\",\n                        \"nuxtjs\",\n                        \"redwoodjs\",\n                        \"hugo\",\n                        \"jekyll\",\n                        \"brunch\",\n                        \"middleman\",\n                        \"zola\",\n                        \"hydrogen\",\n                        \"vite\",\n                        \"tanstack-start\",\n                        \"vitepress\",\n                        \"vuepress\",\n                        \"parcel\",\n                        \"fastapi\",\n                        \"flask\",\n                        \"fasthtml\",\n                        \"django\",\n                        \"sanity-v3\",\n                        \"sanity\",\n                        \"storybook\",\n                        \"nitro\",\n                        \"hono\",\n                        \"express\",\n                        \"h3\",\n                        \"koa\",\n                        \"nestjs\",\n                        \"elysia\",\n                        \"fastify\",\n                        \"xmcp\",\n                        \"python\",\n                        \"ruby\",\n                        \"rust\",\n                        \"node\",\n                        \"go\"\n                      ]\n                    },\n                    \"gitForkProtection\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"gitLFS\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"ipBuckets\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"bucket\": {\n                            \"type\": \"string\"\n                          },\n                          \"supportUntil\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"bucket\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"jobs\": {\n                      \"properties\": {\n                        \"lint\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"typecheck\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"latestDeployments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"alias\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"builds\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"use\": {\n                                  \"type\": \"string\"\n                                },\n                                \"src\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dest\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"use\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdIn\": {\n                            \"type\": \"string\"\n                          },\n                          \"creator\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentHostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"plan\": {\n                            \"type\": \"string\"\n                          },\n                          \"private\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"createdIn\",\n                          \"creator\",\n                          \"deploymentHostname\",\n                          \"id\",\n                          \"name\",\n                          \"plan\",\n                          \"private\",\n                          \"readyState\",\n                          \"type\",\n                          \"url\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"link\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"host\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectName\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectNameWithNamespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectNamespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).\"\n                            },\n                            \"projectUrl\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"productionBranch\",\n                            \"projectId\",\n                            \"projectName\",\n                            \"projectNameWithNamespace\",\n                            \"projectNamespace\",\n                            \"projectUrl\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"uuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"name\",\n                            \"owner\",\n                            \"productionBranch\",\n                            \"slug\",\n                            \"type\",\n                            \"uuid\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"microfrontends\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ],\n                              \"description\": \"Whether microfrontends are enabled for this project.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"isDefaultApp\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"routeObservabilityToThisProject\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether observability data should be routed to this microfrontend project or a root project.\"\n                            },\n                            \"doNotRouteWithMicrofrontendsRouting\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ],\n                              \"description\": \"Whether microfrontends are enabled for this project.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {},\n                              \"minItems\": 0,\n                              \"maxItems\": 0\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"nodeVersion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"24.x\",\n                        \"22.x\",\n                        \"20.x\",\n                        \"18.x\",\n                        \"16.x\",\n                        \"14.x\",\n                        \"12.x\",\n                        \"10.x\",\n                        \"8.10.x\"\n                      ]\n                    },\n                    \"optionsAllowlist\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"paths\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"paths\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"outputDirectory\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"passwordProtection\": {\n                      \"nullable\": true,\n                      \"type\": \"object\"\n                    },\n                    \"productionDeploymentsFastLane\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"publicSource\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"resourceConfig\": {\n                      \"properties\": {\n                        \"elasticConcurrencyEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"fluid\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"functionDefaultRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functionDefaultTimeout\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionDefaultMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard_legacy\",\n                            \"standard\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionZeroConfigFailover\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildMachineType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"enhanced\",\n                            \"turbo\"\n                          ]\n                        },\n                        \"buildMachineSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed\",\n                            \"elastic\"\n                          ]\n                        },\n                        \"buildMachineElasticLastUpdated\": {\n                          \"type\": \"number\"\n                        },\n                        \"isNSNBDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildQueue\": {\n                          \"properties\": {\n                            \"configuration\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"SKIP_NAMESPACE_QUEUE\",\n                                \"WAIT_FOR_NAMESPACE_QUEUE\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"functionDefaultRegions\"\n                      ]\n                    },\n                    \"rollbackDescription\": {\n                      \"properties\": {\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who rolled back the project.\"\n                        },\n                        \"username\": {\n                          \"type\": \"string\",\n                          \"description\": \"The username of the user who rolled back the project.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"User-supplied explanation of why they rolled back the project. Limited to 250 characters.\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when the rollback was requested.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"description\",\n                        \"userId\",\n                        \"username\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback.\"\n                    },\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"target\": {\n                          \"type\": \"string\",\n                          \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                          \"example\": \"production\"\n                        },\n                        \"stages\": {\n                          \"nullable\": true,\n                          \"items\": {\n                            \"properties\": {\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                \"example\": false\n                              },\n                              \"duration\": {\n                                \"type\": \"number\",\n                                \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                \"example\": 600\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                        },\n                        \"canaryResponseHeader\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                          \"example\": false\n                        }\n                      },\n                      \"required\": [\n                        \"target\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                    },\n                    \"defaultResourceConfig\": {\n                      \"properties\": {\n                        \"elasticConcurrencyEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"fluid\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"functionDefaultRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functionDefaultTimeout\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionDefaultMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard_legacy\",\n                            \"standard\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionZeroConfigFailover\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildMachineType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"enhanced\",\n                            \"turbo\"\n                          ]\n                        },\n                        \"buildMachineSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed\",\n                            \"elastic\"\n                          ]\n                        },\n                        \"buildMachineElasticLastUpdated\": {\n                          \"type\": \"number\"\n                        },\n                        \"isNSNBDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildQueue\": {\n                          \"properties\": {\n                            \"configuration\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"SKIP_NAMESPACE_QUEUE\",\n                                \"WAIT_FOR_NAMESPACE_QUEUE\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"functionDefaultRegions\"\n                      ]\n                    },\n                    \"rootDirectory\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"serverlessFunctionZeroConfigFailover\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"skewProtectionBoundaryAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"skewProtectionMaxAge\": {\n                      \"type\": \"number\"\n                    },\n                    \"skewProtectionAllowedDomains\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"skipGitConnectDuringLink\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"staticIps\": {\n                      \"properties\": {\n                        \"builds\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"regions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"builds\",\n                        \"enabled\",\n                        \"regions\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"sourceFilesOutsideRootDirectory\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enableAffectedProjectsDeployments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"ssoProtection\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"deploymentType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"preview\",\n                            \"all\",\n                            \"prod_deployment_urls_and_all_previews\",\n                            \"all_except_custom_domains\"\n                          ]\n                        },\n                        \"cve55182MigrationAppliedFrom\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"preview\",\n                            \"all\",\n                            \"prod_deployment_urls_and_all_previews\",\n                            \"all_except_custom_domains\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"deploymentType\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"targets\": {\n                      \"additionalProperties\": {\n                        \"nullable\": true,\n                        \"properties\": {\n                          \"alias\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"builds\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"use\": {\n                                  \"type\": \"string\"\n                                },\n                                \"src\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dest\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"use\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdIn\": {\n                            \"type\": \"string\"\n                          },\n                          \"creator\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentHostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"plan\": {\n                            \"type\": \"string\"\n                          },\n                          \"private\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"createdIn\",\n                          \"creator\",\n                          \"deploymentHostname\",\n                          \"id\",\n                          \"name\",\n                          \"plan\",\n                          \"private\",\n                          \"readyState\",\n                          \"type\",\n                          \"url\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"transferCompletedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"transferStartedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"transferToAccountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"transferredFromAccountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"live\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enablePreviewFeedback\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enableProductionFeedback\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"permissions\": {\n                      \"properties\": {\n                        \"oauth2Connection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"user\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"userConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"userSudo\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAuthn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"accessGroup\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"agent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aiGatewayUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"alerts\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"alertRules\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasGlobal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analyticsSampling\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analyticsUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKey\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKeyAiGateway\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKeyOwnedBySelf\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"oauth2Application\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelAppInstallation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelAppInstallationRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"auditLog\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingAddress\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInformation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoiceEmailRecipient\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoiceLanguage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPlan\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPurchaseOrder\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingRefund\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingTaxId\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"blob\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"blobStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"budget\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"cacheArtifact\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"cacheArtifactUsageEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"codeChecks\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"concurrentBuilds\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connect\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connectConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildMachineDefault\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dataCacheBillingSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"defaultDeploymentProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainAcceptDelegation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainAuthCodes\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainCertificate\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainCheckConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainMove\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainPurchase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainRecord\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainTransferIn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"drain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigSchema\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigToken\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"endpointVerification\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"event\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"fileUpload\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"flagsExplorerSubscription\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"gitRepository\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"imageOptimizationNewPrice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationAccount\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationProjects\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationRole\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationDeploymentAction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationLog\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResource\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceReplCommand\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceSecrets\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationSSOSession\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationStrict\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationVercelConfigurationOverride\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationPullRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ipBlocking\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"jobGlobal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logDrain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceBillingData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceExperimentationEdgeConfigData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceExperimentationItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceInstallationMember\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceInvoice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"Monitoring\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringChart\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringQuery\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationCustomerBudget\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDeploymentFailed\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainExpire\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainMoved\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainPurchase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainRenewal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainUnverified\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"NotificationMonitoringAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationPaymentFailed\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationPreferences\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationStatementOfReasons\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationUsageAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityFunnel\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityNotebook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"openTelemetryEndpoint\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ownEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"organizationDomain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"passwordProtectionInvoiceItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"paymentMethod\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"permissions\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"postgres\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"postgresStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"previewDeploymentSuffix\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"privateCloudAccount\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransferIn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"proTrialOnboarding\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"rateLimit\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"redis\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"redisStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"remoteCaching\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"repository\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"samlConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"secret\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"securityPlusConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sensitiveEnvironmentVariablePolicy\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVars\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVarsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"space\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"spaceRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"storeTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"supportCase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"supportCaseComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"team\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamAccessRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamFellowMembership\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamGitExclusivity\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamInvite\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamInviteCode\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamJoin\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamMemberMfaStatus\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamMicrofrontends\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamOwnMembership\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamOwnMembershipDisconnectSAML\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"token\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"toolbarComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usageCycle\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelRunExec\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vpcPeeringConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAnalyticsPlan\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webhook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webhook-event\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasProject\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"bulkRedirects\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildMachine\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connectConfigurationLink\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dataCacheNamespace\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deployment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentBuildLogs\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheck\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheckPreview\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheckReRunFromProductionBranch\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentProductionGit\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentV0\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPreview\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPrivate\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPromote\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentRollback\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeCacheNamespace\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"environments\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"job\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logs\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logsPreset\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"onDemandBuild\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"onDemandConcurrency\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"optionsAllowlist\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"passwordProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"productionAliasProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"project\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAccessGroup\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAnalyticsSampling\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAnalyticsUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectCheck\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectCheckRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentExpiration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentHook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentProtectionStrict\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomainCheckConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomainMove\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVars\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVarsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVarsUnownedByIntegration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFlags\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFlagsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFromV0\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectId\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectIntegrationConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectLink\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectMember\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectMonitoring\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectOIDCToken\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectPermissions\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectProductionBranch\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectRollingRelease\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectRoutes\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectSupportCase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectSupportCaseComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTier\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransferOut\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"seawallConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVarConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"skewProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analytics\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"trustedIps\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"v0Chat\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAnalytics\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"lastRollbackTarget\": {\n                      \"nullable\": true,\n                      \"type\": \"object\"\n                    },\n                    \"lastAliasRequest\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"fromDeploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"toDeploymentId\": {\n                          \"type\": \"string\"\n                        },\n                        \"fromRollingReleaseId\": {\n                          \"type\": \"string\",\n                          \"description\": \"If rolling back from a rolling release, fromDeploymentId captures the \\\"base\\\" of that rolling release, and fromRollingReleaseId captures the \\\"target\\\" of that rolling release.\"\n                        },\n                        \"jobStatus\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"succeeded\",\n                            \"failed\",\n                            \"skipped\",\n                            \"pending\",\n                            \"in-progress\"\n                          ]\n                        },\n                        \"requestedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"promote\",\n                            \"rollback\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"fromDeploymentId\",\n                        \"jobStatus\",\n                        \"requestedAt\",\n                        \"toDeploymentId\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"protectionBypass\": {\n                      \"additionalProperties\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"integration-automation-bypass\"\n                                ]\n                              },\n                              \"integrationId\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"configurationId\",\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"integrationId\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"automation-bypass\"\n                                ]\n                              },\n                              \"isEnvVar\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var.\"\n                              },\n                              \"note\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional note about the bypass to be displayed in the UI\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"hasActiveBranches\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"trustedIps\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"deploymentType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"all\",\n                                \"prod_deployment_urls_and_all_previews\",\n                                \"all_except_custom_domains\"\n                              ]\n                            },\n                            \"addresses\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"note\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"protectionMode\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"additional\",\n                                \"exclusive\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"addresses\",\n                            \"deploymentType\",\n                            \"protectionMode\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"deploymentType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"all\",\n                                \"prod_deployment_urls_and_all_previews\",\n                                \"all_except_custom_domains\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"deploymentType\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"gitComments\": {\n                      \"properties\": {\n                        \"onPullRequest\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should comment on PRs\"\n                        },\n                        \"onCommit\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should comment on commits\"\n                        }\n                      },\n                      \"required\": [\n                        \"onCommit\",\n                        \"onPullRequest\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"gitProviderOptions\": {\n                      \"properties\": {\n                        \"createDeployments\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\"\n                          ],\n                          \"description\": \"Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead\"\n                        },\n                        \"disableRepositoryDispatchEvents\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events\"\n                        },\n                        \"requireVerifiedCommits\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the project requires commits to be signed before deployments will be created.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createDeployments\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"paused\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"concurrencyBucketName\": {\n                      \"type\": \"string\"\n                    },\n                    \"webAnalytics\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"hasData\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"security\": {\n                      \"properties\": {\n                        \"attackModeEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"attackModeUpdatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"firewallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"firewallUpdatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"attackModeActiveUntil\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"firewallConfigVersion\": {\n                          \"type\": \"number\"\n                        },\n                        \"firewallSeawallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"ja3Enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"ja4Enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"firewallBypassIps\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"managedRules\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"vercel_ruleset\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"bot_filter\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"ai_bots\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"owasp\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"ai_bots\",\n                            \"bot_filter\",\n                            \"owasp\",\n                            \"vercel_ruleset\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"botIdEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"log_headers\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"*\"\n                              ]\n                            }\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"oidcTokenConfig\": {\n                      \"properties\": {\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\"\n                        },\n                        \"issuerMode\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"team\",\n                            \"global\"\n                          ],\n                          \"description\": \"- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"tier\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"standard\",\n                        \"base\",\n                        \"advanced\",\n                        \"critical\"\n                      ]\n                    },\n                    \"scheduledTierChange\": {\n                      \"properties\": {\n                        \"tier\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"base\",\n                            \"advanced\",\n                            \"critical\"\n                          ]\n                        },\n                        \"effectiveAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"effectiveAt\",\n                        \"tier\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"usageStatus\": {\n                      \"properties\": {\n                        \"kind\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"flat\"\n                          ],\n                          \"description\": \"Billing mode. Always 'flat' for flat-rate projects.\"\n                        },\n                        \"exceededAllowanceUntil\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp until which the project has exceeded its CDN allowance.\"\n                        },\n                        \"bypassThrottleUntil\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp until which throttling is bypassed (project pays list rates for overage).\"\n                        }\n                      },\n                      \"required\": [\n                        \"kind\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"features\": {\n                      \"properties\": {\n                        \"webAnalytics\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"v0\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"abuse\": {\n                      \"properties\": {\n                        \"scanner\": {\n                          \"type\": \"string\"\n                        },\n                        \"history\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"scanner\": {\n                                \"type\": \"string\"\n                              },\n                              \"reason\": {\n                                \"type\": \"string\"\n                              },\n                              \"by\": {\n                                \"type\": \"string\"\n                              },\n                              \"byId\": {\n                                \"type\": \"string\"\n                              },\n                              \"at\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"at\",\n                              \"by\",\n                              \"byId\",\n                              \"reason\",\n                              \"scanner\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"block\": {\n                          \"properties\": {\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"blocked\"\n                              ]\n                            },\n                            \"reason\": {\n                              \"type\": \"string\"\n                            },\n                            \"statusCode\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"caseId\": {\n                              \"type\": \"string\"\n                            },\n                            \"actor\": {\n                              \"type\": \"string\"\n                            },\n                            \"comment\": {\n                              \"type\": \"string\"\n                            },\n                            \"ineligibleForAppeal\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"isCascading\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"createdAt\",\n                            \"reason\",\n                            \"statusCode\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"blockHistory\": {\n                          \"items\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blocked\"\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"statusCode\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"unblocked\"\n                                    ]\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"route-blocked\"\n                                    ]\n                                  },\n                                  \"route\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"status\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"src\",\n                                          \"status\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"has\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"header\"\n                                                      ]\n                                                    },\n                                                    \"key\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"x-vercel-ip-country\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"key\",\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"host\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"mitigate\": {\n                                            \"properties\": {\n                                              \"action\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"block_legal_cwc\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"action\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"has\",\n                                          \"mitigate\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"route\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"route-unblocked\"\n                                    ]\n                                  },\n                                  \"route\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"status\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"src\",\n                                          \"status\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"has\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"header\"\n                                                      ]\n                                                    },\n                                                    \"key\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"x-vercel-ip-country\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"key\",\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"host\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"mitigate\": {\n                                            \"properties\": {\n                                              \"action\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"block_legal_cwc\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"action\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"has\",\n                                          \"mitigate\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"route\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"interstitial\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"history\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"internalRoutes\": {\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"src\",\n                              \"status\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"has\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"x-vercel-ip-country\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"properties\": {\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"eq\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"properties\": {\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"eq\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"mitigate\": {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"block_legal_cwc\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"src\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"has\",\n                              \"mitigate\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"hasDeployments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"dismissedToasts\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"dismissedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"delete\",\n                              \"cancel\",\n                              \"accept\"\n                            ]\n                          },\n                          \"value\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"previousValue\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    ]\n                                  },\n                                  \"currentValue\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"currentValue\",\n                                  \"previousValue\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"action\",\n                          \"dismissedAt\",\n                          \"key\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"protectedSourcemaps\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"accountId\",\n                    \"defaultResourceConfig\",\n                    \"deploymentExpiration\",\n                    \"directoryListing\",\n                    \"id\",\n                    \"name\",\n                    \"nodeVersion\",\n                    \"resourceConfig\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nAt least one environment variable failed validation\\nThe Bitbucket Webhook for the project link could not be created\\nThe Gitlab Webhook for the project link could not be created\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\\nPro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced.\\nDeploying to Serverless Functions to multiple regions requires a plan update\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"A project with the provided name already exists.\"\n          },\n          \"428\": {\n            \"description\": \"Owner does not have protection add-on\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"enablePreviewFeedback\": {\n                    \"description\": \"Opt-in to preview toolbar on the project level\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"enableProductionFeedback\": {\n                    \"description\": \"Opt-in to production toolbar on the project level\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"previewDeploymentsDisabled\": {\n                    \"description\": \"Specifies whether preview deployments are disabled for this project.\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"previewDeploymentSuffix\": {\n                    \"description\": \"Custom domain suffix for preview deployments. Takes precedence over team-level suffix. Must be a domain owned by the team.\",\n                    \"type\": \"string\",\n                    \"maxLength\": 253,\n                    \"nullable\": true\n                  },\n                  \"buildCommand\": {\n                    \"description\": \"The build command for this project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"commandForIgnoringBuildStep\": {\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"devCommand\": {\n                    \"description\": \"The dev command for this project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"environmentVariables\": {\n                    \"description\": \"Collection of ENV Variables the Project will use\",\n                    \"items\": {\n                      \"properties\": {\n                        \"key\": {\n                          \"description\": \"Name of the ENV variable\",\n                          \"type\": \"string\"\n                        },\n                        \"target\": {\n                          \"description\": \"Deployment Target or Targets in which the ENV variable will be used\",\n                          \"oneOf\": [\n                            {\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ]\n                            },\n                            {\n                              \"items\": {\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            }\n                          ]\n                        },\n                        \"gitBranch\": {\n                          \"description\": \"If defined, the git branch of the environment variable (must have target=preview)\",\n                          \"type\": \"string\",\n                          \"maxLength\": 250\n                        },\n                        \"type\": {\n                          \"description\": \"Type of the ENV variable\",\n                          \"enum\": [\n                            \"system\",\n                            \"secret\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ],\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"description\": \"Value for the ENV variable\",\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"key\",\n                        \"value\",\n                        \"target\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"framework\": {\n                    \"description\": \"The framework that is being used for this project. When `null` is used no framework is selected\",\n                    \"enum\": [\n                      null,\n                      \"services\",\n                      \"blitzjs\",\n                      \"nextjs\",\n                      \"gatsby\",\n                      \"remix\",\n                      \"react-router\",\n                      \"astro\",\n                      \"hexo\",\n                      \"eleventy\",\n                      \"docusaurus-2\",\n                      \"docusaurus\",\n                      \"preact\",\n                      \"solidstart-1\",\n                      \"solidstart\",\n                      \"dojo\",\n                      \"ember\",\n                      \"vue\",\n                      \"scully\",\n                      \"ionic-angular\",\n                      \"angular\",\n                      \"polymer\",\n                      \"svelte\",\n                      \"sveltekit\",\n                      \"sveltekit-1\",\n                      \"ionic-react\",\n                      \"create-react-app\",\n                      \"gridsome\",\n                      \"umijs\",\n                      \"sapper\",\n                      \"saber\",\n                      \"stencil\",\n                      \"nuxtjs\",\n                      \"redwoodjs\",\n                      \"hugo\",\n                      \"jekyll\",\n                      \"brunch\",\n                      \"middleman\",\n                      \"zola\",\n                      \"hydrogen\",\n                      \"vite\",\n                      \"tanstack-start\",\n                      \"vitepress\",\n                      \"vuepress\",\n                      \"parcel\",\n                      \"fastapi\",\n                      \"flask\",\n                      \"fasthtml\",\n                      \"django\",\n                      \"sanity-v3\",\n                      \"sanity\",\n                      \"storybook\",\n                      \"nitro\",\n                      \"hono\",\n                      \"express\",\n                      \"h3\",\n                      \"koa\",\n                      \"nestjs\",\n                      \"elysia\",\n                      \"fastify\",\n                      \"xmcp\",\n                      \"python\",\n                      \"ruby\",\n                      \"rust\",\n                      \"node\",\n                      \"go\"\n                    ]\n                  },\n                  \"gitRepository\": {\n                    \"description\": \"The Git Repository that will be connected to the project. When this is defined, any pushes to the specified connected Git Repository will be automatically deployed\",\n                    \"properties\": {\n                      \"repo\": {\n                        \"description\": \"The name of the git repository. For example: \\\\\\\"vercel/next.js\\\\\\\"\",\n                        \"type\": \"string\"\n                      },\n                      \"type\": {\n                        \"description\": \"The Git Provider of the repository\",\n                        \"enum\": [\n                          \"github\",\n                          \"github-limited\",\n                          \"gitlab\",\n                          \"bitbucket\"\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"type\",\n                      \"repo\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"installCommand\": {\n                    \"description\": \"The install command for this project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"name\": {\n                    \"description\": \"The desired name for the project\",\n                    \"example\": \"a-project-name\",\n                    \"type\": \"string\",\n                    \"maxLength\": 100\n                  },\n                  \"skipGitConnectDuringLink\": {\n                    \"description\": \"Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.\",\n                    \"type\": \"boolean\",\n                    \"deprecated\": true\n                  },\n                  \"ssoProtection\": {\n                    \"description\": \"The Vercel Auth setting for the project (historically named \\\\\\\"SSO Protection\\\\\\\")\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"deploymentType\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"deploymentType\"\n                    ],\n                    \"nullable\": true\n                  },\n                  \"outputDirectory\": {\n                    \"description\": \"The output directory of the project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"publicSource\": {\n                    \"description\": \"Specifies whether the source code and logs of the deployments for this project should be public or not\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"rootDirectory\": {\n                    \"description\": \"The name of a directory or relative path to the source code of your project. When `null` is used it will default to the project root\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"serverlessFunctionRegion\": {\n                    \"description\": \"The region to deploy Serverless Functions in this project\",\n                    \"maxLength\": 4,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"serverlessFunctionZeroConfigFailover\": {\n                    \"description\": \"Specifies whether Zero Config Failover is enabled for this project.\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"boolean\"\n                      }\n                    ]\n                  },\n                  \"oidcTokenConfig\": {\n                    \"description\": \"OpenID Connect JSON Web Token generation configuration.\",\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"enabled\": {\n                        \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\",\n                        \"deprecated\": true,\n                        \"type\": \"boolean\",\n                        \"default\": true\n                      },\n                      \"issuerMode\": {\n                        \"description\": \"team: `https://oidc.vercel.com/[team_slug]` global: `https://oidc.vercel.com`\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"team\",\n                          \"global\"\n                        ],\n                        \"default\": \"team\"\n                      }\n                    }\n                  },\n                  \"enableAffectedProjectsDeployments\": {\n                    \"description\": \"Opt-in to skip deployments when there are no changes to the root directory and its dependencies\",\n                    \"type\": \"boolean\"\n                  },\n                  \"resourceConfig\": {\n                    \"type\": \"object\",\n                    \"description\": \"Specifies resource override configuration for the project\",\n                    \"properties\": {\n                      \"fluid\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"functionDefaultRegions\": {\n                        \"description\": \"The regions to deploy Vercel Functions to for this project\",\n                        \"type\": \"array\",\n                        \"minItems\": 1,\n                        \"uniqueItems\": true,\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 4\n                        }\n                      },\n                      \"functionDefaultTimeout\": {\n                        \"type\": \"number\",\n                        \"maximum\": 900,\n                        \"minimum\": 1\n                      },\n                      \"functionDefaultMemoryType\": {\n                        \"enum\": [\n                          \"standard_legacy\",\n                          \"standard\",\n                          \"performance\"\n                        ]\n                      },\n                      \"functionZeroConfigFailover\": {\n                        \"description\": \"Specifies whether Zero Config Failover is enabled for this project.\",\n                        \"oneOf\": [\n                          {\n                            \"type\": \"boolean\"\n                          }\n                        ]\n                      },\n                      \"elasticConcurrencyEnabled\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"buildMachineType\": {\n                        \"enum\": [\n                          \"enhanced\",\n                          \"turbo\",\n                          \"standard\"\n                        ]\n                      },\n                      \"buildMachineSelection\": {\n                        \"enum\": [\n                          \"elastic\",\n                          \"fixed\"\n                        ]\n                      },\n                      \"buildMachineElasticLastUpdated\": {\n                        \"type\": \"number\"\n                      },\n                      \"isNSNBDisabled\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"buildQueue\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"configuration\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"SKIP_NAMESPACE_QUEUE\",\n                              \"WAIT_FOR_NAMESPACE_QUEUE\"\n                            ]\n                          }\n                        }\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v9/projects/{idOrName}\": {\n      \"get\": {\n        \"description\": \"Get the information for a specific project by passing either the project `id` or `name` in the URL.\",\n        \"operationId\": \"getProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Find a project by id or name\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The project information\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"integrations\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"installationId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The integration installation ID.\",\n                            \"example\": \"icfg_3bwCLgxL8qt5kjRLcv2Dit7F\"\n                          },\n                          \"resources\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"externalResourceId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"externalResourceId\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"The list of the installation resources connected to the project.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The list of the installation resources connected to the project.\"\n                          }\n                        },\n                        \"required\": [\n                          \"installationId\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Integration installation enabled on the project.\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"accountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"analytics\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"canceledAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"paidAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"sampleRatePercent\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"spendLimitInDollars\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"disabledAt\",\n                        \"enabledAt\",\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"appliedCve55182Migration\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"speedInsights\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"hasData\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"paidAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"autoExposeSystemEnvs\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"autoAssignCustomDomains\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"autoAssignCustomDomainsUpdatedBy\": {\n                      \"type\": \"string\"\n                    },\n                    \"buildCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"commandForIgnoringBuildStep\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"connectConfigurations\": {\n                      \"nullable\": true,\n                      \"items\": {\n                        \"properties\": {\n                          \"envId\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"connectConfigurationId\": {\n                            \"type\": \"string\"\n                          },\n                          \"dc\": {\n                            \"type\": \"string\"\n                          },\n                          \"passive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"buildsEnabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"aws\": {\n                            \"properties\": {\n                              \"subnetIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"securityGroupId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"subnetIds\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"buildsEnabled\",\n                          \"connectConfigurationId\",\n                          \"createdAt\",\n                          \"envId\",\n                          \"passive\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"connectConfigurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"connectBuildsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"passiveConnectConfigurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"customerSupportCodeVisibility\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"crons\": {\n                      \"properties\": {\n                        \"enabledAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs.\"\n                        },\n                        \"disabledAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"The time the feature was disabled for this project.\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"deploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the Deployment from which the definitions originated.\"\n                        },\n                        \"definitions\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"host\": {\n                                \"type\": \"string\",\n                                \"description\": \"The hostname that should be used.\",\n                                \"example\": \"vercel.com\"\n                              },\n                              \"path\": {\n                                \"type\": \"string\",\n                                \"description\": \"The path that should be called for the cronjob.\",\n                                \"example\": \"/api/crons/sync-something?hello=world\"\n                              },\n                              \"schedule\": {\n                                \"type\": \"string\",\n                                \"description\": \"The cron expression.\",\n                                \"example\": \"0 0 * * *\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"api\"\n                                ],\n                                \"description\": \"The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json).\"\n                              }\n                            },\n                            \"required\": [\n                              \"host\",\n                              \"path\",\n                              \"schedule\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"definitions\",\n                        \"deploymentId\",\n                        \"disabledAt\",\n                        \"enabledAt\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"dataCache\": {\n                      \"properties\": {\n                        \"userDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"storageSizeBytes\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"unlimited\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"userDisabled\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"deploymentExpiration\": {\n                      \"properties\": {\n                        \"expirationDays\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n                        },\n                        \"expirationDaysProduction\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep production deployments before soft deletion.\"\n                        },\n                        \"expirationDaysCanceled\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n                        },\n                        \"expirationDaysErrored\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n                        },\n                        \"deploymentsToKeep\": {\n                          \"type\": \"number\",\n                          \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.\"\n                    },\n                    \"devCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"directoryListing\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"installCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"env\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"target\": {\n                            \"oneOf\": [\n                              {\n                                \"items\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\",\n                                    \"preview\",\n                                    \"development\"\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"secret\",\n                              \"system\",\n                              \"encrypted\",\n                              \"plain\",\n                              \"sensitive\"\n                            ]\n                          },\n                          \"sunsetSecretId\": {\n                            \"type\": \"string\",\n                            \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                          },\n                          \"legacyValue\": {\n                            \"type\": \"string\",\n                            \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"vsmValue\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"configurationId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"gitBranch\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigTokenId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"contentHint\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-read-only-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blob-read-write-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-non-pooling\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-prisma-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-user\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-host\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-password\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-database\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-no-ssl\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration-store-secret\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationProductId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"integrationProductId\",\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-connection-string\"\n                                    ]\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"projectId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"internalContentHint\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"flags-secret\"\n                                ]\n                              },\n                              \"encryptedValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                              }\n                            },\n                            \"required\": [\n                              \"encryptedValue\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"key\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"customEnvironments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"description\": \"URL-friendly name of the environment\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ],\n                            \"description\": \"The type of environment (production, preview, or development)\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"description\": \"Optional description of the environment's purpose\"\n                          },\n                          \"branchMatcher\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"endsWith\",\n                                  \"startsWith\",\n                                  \"equals\"\n                                ],\n                                \"description\": \"The type of matching to perform\"\n                              },\n                              \"pattern\": {\n                                \"type\": \"string\",\n                                \"description\": \"The pattern to match against branch names\"\n                              }\n                            },\n                            \"required\": [\n                              \"pattern\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Configuration for matching git branches to this environment\"\n                          },\n                          \"domains\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"apexName\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"redirect\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"redirectStatusCode\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\",\n                                  \"enum\": [\n                                    301,\n                                    302,\n                                    307,\n                                    308\n                                  ]\n                                },\n                                \"gitBranch\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"customEnvironmentId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"verified\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ],\n                                  \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                },\n                                \"verification\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"domain\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"reason\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"domain\",\n                                      \"reason\",\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                }\n                              },\n                              \"required\": [\n                                \"apexName\",\n                                \"name\",\n                                \"projectId\",\n                                \"verified\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"List of domains associated with this environment\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of domains associated with this environment\"\n                          },\n                          \"currentDeploymentAliases\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of aliases for the current deployment\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was created\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was last updated\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"id\",\n                          \"slug\",\n                          \"type\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Internal representation of a custom environment with all required properties\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"framework\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"services\",\n                        \"blitzjs\",\n                        \"nextjs\",\n                        \"gatsby\",\n                        \"remix\",\n                        \"react-router\",\n                        \"astro\",\n                        \"hexo\",\n                        \"eleventy\",\n                        \"docusaurus-2\",\n                        \"docusaurus\",\n                        \"preact\",\n                        \"solidstart-1\",\n                        \"solidstart\",\n                        \"dojo\",\n                        \"ember\",\n                        \"vue\",\n                        \"scully\",\n                        \"ionic-angular\",\n                        \"angular\",\n                        \"polymer\",\n                        \"svelte\",\n                        \"sveltekit\",\n                        \"sveltekit-1\",\n                        \"ionic-react\",\n                        \"create-react-app\",\n                        \"gridsome\",\n                        \"umijs\",\n                        \"sapper\",\n                        \"saber\",\n                        \"stencil\",\n                        \"nuxtjs\",\n                        \"redwoodjs\",\n                        \"hugo\",\n                        \"jekyll\",\n                        \"brunch\",\n                        \"middleman\",\n                        \"zola\",\n                        \"hydrogen\",\n                        \"vite\",\n                        \"tanstack-start\",\n                        \"vitepress\",\n                        \"vuepress\",\n                        \"parcel\",\n                        \"fastapi\",\n                        \"flask\",\n                        \"fasthtml\",\n                        \"django\",\n                        \"sanity-v3\",\n                        \"sanity\",\n                        \"storybook\",\n                        \"nitro\",\n                        \"hono\",\n                        \"express\",\n                        \"h3\",\n                        \"koa\",\n                        \"nestjs\",\n                        \"elysia\",\n                        \"fastify\",\n                        \"xmcp\",\n                        \"python\",\n                        \"ruby\",\n                        \"rust\",\n                        \"node\",\n                        \"go\"\n                      ]\n                    },\n                    \"gitForkProtection\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"gitLFS\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"ipBuckets\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"bucket\": {\n                            \"type\": \"string\"\n                          },\n                          \"supportUntil\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"bucket\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"jobs\": {\n                      \"properties\": {\n                        \"lint\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"typecheck\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"latestDeployments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"alias\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"builds\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"use\": {\n                                  \"type\": \"string\"\n                                },\n                                \"src\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dest\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"use\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdIn\": {\n                            \"type\": \"string\"\n                          },\n                          \"creator\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentHostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"plan\": {\n                            \"type\": \"string\"\n                          },\n                          \"private\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"createdIn\",\n                          \"creator\",\n                          \"deploymentHostname\",\n                          \"id\",\n                          \"name\",\n                          \"plan\",\n                          \"private\",\n                          \"readyState\",\n                          \"type\",\n                          \"url\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"link\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"host\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectName\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectNameWithNamespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectNamespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).\"\n                            },\n                            \"projectUrl\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"productionBranch\",\n                            \"projectId\",\n                            \"projectName\",\n                            \"projectNameWithNamespace\",\n                            \"projectNamespace\",\n                            \"projectUrl\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"uuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"name\",\n                            \"owner\",\n                            \"productionBranch\",\n                            \"slug\",\n                            \"type\",\n                            \"uuid\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"microfrontends\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ],\n                              \"description\": \"Whether microfrontends are enabled for this project.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"isDefaultApp\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"routeObservabilityToThisProject\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether observability data should be routed to this microfrontend project or a root project.\"\n                            },\n                            \"doNotRouteWithMicrofrontendsRouting\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ],\n                              \"description\": \"Whether microfrontends are enabled for this project.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {},\n                              \"minItems\": 0,\n                              \"maxItems\": 0\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"nodeVersion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"24.x\",\n                        \"22.x\",\n                        \"20.x\",\n                        \"18.x\",\n                        \"16.x\",\n                        \"14.x\",\n                        \"12.x\",\n                        \"10.x\",\n                        \"8.10.x\"\n                      ]\n                    },\n                    \"optionsAllowlist\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"paths\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"paths\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"outputDirectory\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"passwordProtection\": {\n                      \"nullable\": true,\n                      \"type\": \"object\"\n                    },\n                    \"productionDeploymentsFastLane\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"publicSource\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"resourceConfig\": {\n                      \"properties\": {\n                        \"elasticConcurrencyEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"fluid\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"functionDefaultRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functionDefaultTimeout\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionDefaultMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard_legacy\",\n                            \"standard\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionZeroConfigFailover\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildMachineType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"enhanced\",\n                            \"turbo\"\n                          ]\n                        },\n                        \"buildMachineSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed\",\n                            \"elastic\"\n                          ]\n                        },\n                        \"buildMachineElasticLastUpdated\": {\n                          \"type\": \"number\"\n                        },\n                        \"isNSNBDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildQueue\": {\n                          \"properties\": {\n                            \"configuration\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"SKIP_NAMESPACE_QUEUE\",\n                                \"WAIT_FOR_NAMESPACE_QUEUE\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"functionDefaultRegions\"\n                      ]\n                    },\n                    \"rollbackDescription\": {\n                      \"properties\": {\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who rolled back the project.\"\n                        },\n                        \"username\": {\n                          \"type\": \"string\",\n                          \"description\": \"The username of the user who rolled back the project.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"User-supplied explanation of why they rolled back the project. Limited to 250 characters.\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when the rollback was requested.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"description\",\n                        \"userId\",\n                        \"username\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback.\"\n                    },\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"target\": {\n                          \"type\": \"string\",\n                          \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                          \"example\": \"production\"\n                        },\n                        \"stages\": {\n                          \"nullable\": true,\n                          \"items\": {\n                            \"properties\": {\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                \"example\": false\n                              },\n                              \"duration\": {\n                                \"type\": \"number\",\n                                \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                \"example\": 600\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                        },\n                        \"canaryResponseHeader\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                          \"example\": false\n                        }\n                      },\n                      \"required\": [\n                        \"target\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                    },\n                    \"defaultResourceConfig\": {\n                      \"properties\": {\n                        \"elasticConcurrencyEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"fluid\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"functionDefaultRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functionDefaultTimeout\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionDefaultMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard_legacy\",\n                            \"standard\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionZeroConfigFailover\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildMachineType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"enhanced\",\n                            \"turbo\"\n                          ]\n                        },\n                        \"buildMachineSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed\",\n                            \"elastic\"\n                          ]\n                        },\n                        \"buildMachineElasticLastUpdated\": {\n                          \"type\": \"number\"\n                        },\n                        \"isNSNBDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildQueue\": {\n                          \"properties\": {\n                            \"configuration\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"SKIP_NAMESPACE_QUEUE\",\n                                \"WAIT_FOR_NAMESPACE_QUEUE\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"functionDefaultRegions\"\n                      ]\n                    },\n                    \"rootDirectory\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"serverlessFunctionZeroConfigFailover\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"skewProtectionBoundaryAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"skewProtectionMaxAge\": {\n                      \"type\": \"number\"\n                    },\n                    \"skewProtectionAllowedDomains\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"skipGitConnectDuringLink\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"staticIps\": {\n                      \"properties\": {\n                        \"builds\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"regions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"builds\",\n                        \"enabled\",\n                        \"regions\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"sourceFilesOutsideRootDirectory\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enableAffectedProjectsDeployments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"ssoProtection\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"deploymentType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"preview\",\n                            \"all\",\n                            \"prod_deployment_urls_and_all_previews\",\n                            \"all_except_custom_domains\"\n                          ]\n                        },\n                        \"cve55182MigrationAppliedFrom\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"preview\",\n                            \"all\",\n                            \"prod_deployment_urls_and_all_previews\",\n                            \"all_except_custom_domains\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"deploymentType\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"targets\": {\n                      \"additionalProperties\": {\n                        \"nullable\": true,\n                        \"properties\": {\n                          \"alias\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"builds\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"use\": {\n                                  \"type\": \"string\"\n                                },\n                                \"src\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dest\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"use\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdIn\": {\n                            \"type\": \"string\"\n                          },\n                          \"creator\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentHostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"plan\": {\n                            \"type\": \"string\"\n                          },\n                          \"private\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"createdIn\",\n                          \"creator\",\n                          \"deploymentHostname\",\n                          \"id\",\n                          \"name\",\n                          \"plan\",\n                          \"private\",\n                          \"readyState\",\n                          \"type\",\n                          \"url\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"transferCompletedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"transferStartedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"transferToAccountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"transferredFromAccountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"live\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enablePreviewFeedback\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enableProductionFeedback\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"permissions\": {\n                      \"properties\": {\n                        \"oauth2Connection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"user\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"userConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"userSudo\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAuthn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"accessGroup\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"agent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aiGatewayUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"alerts\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"alertRules\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasGlobal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analyticsSampling\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analyticsUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKey\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKeyAiGateway\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKeyOwnedBySelf\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"oauth2Application\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelAppInstallation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelAppInstallationRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"auditLog\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingAddress\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInformation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoiceEmailRecipient\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoiceLanguage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPlan\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPurchaseOrder\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingRefund\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingTaxId\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"blob\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"blobStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"budget\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"cacheArtifact\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"cacheArtifactUsageEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"codeChecks\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"concurrentBuilds\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connect\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connectConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildMachineDefault\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dataCacheBillingSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"defaultDeploymentProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainAcceptDelegation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainAuthCodes\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainCertificate\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainCheckConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainMove\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainPurchase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainRecord\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainTransferIn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"drain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigSchema\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigToken\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"endpointVerification\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"event\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"fileUpload\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"flagsExplorerSubscription\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"gitRepository\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"imageOptimizationNewPrice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationAccount\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationProjects\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationRole\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationDeploymentAction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationLog\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResource\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceReplCommand\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceSecrets\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationSSOSession\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationStrict\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationVercelConfigurationOverride\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationPullRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ipBlocking\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"jobGlobal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logDrain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceBillingData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceExperimentationEdgeConfigData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceExperimentationItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceInstallationMember\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceInvoice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"Monitoring\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringChart\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringQuery\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationCustomerBudget\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDeploymentFailed\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainExpire\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainMoved\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainPurchase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainRenewal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainUnverified\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"NotificationMonitoringAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationPaymentFailed\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationPreferences\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationStatementOfReasons\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationUsageAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityFunnel\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityNotebook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"openTelemetryEndpoint\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ownEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"organizationDomain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"passwordProtectionInvoiceItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"paymentMethod\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"permissions\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"postgres\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"postgresStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"previewDeploymentSuffix\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"privateCloudAccount\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransferIn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"proTrialOnboarding\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"rateLimit\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"redis\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"redisStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"remoteCaching\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"repository\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"samlConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"secret\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"securityPlusConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sensitiveEnvironmentVariablePolicy\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVars\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVarsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"space\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"spaceRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"storeTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"supportCase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"supportCaseComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"team\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamAccessRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamFellowMembership\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamGitExclusivity\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamInvite\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamInviteCode\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamJoin\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamMemberMfaStatus\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamMicrofrontends\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamOwnMembership\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamOwnMembershipDisconnectSAML\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"token\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"toolbarComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usageCycle\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelRunExec\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vpcPeeringConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAnalyticsPlan\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webhook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webhook-event\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasProject\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"bulkRedirects\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildMachine\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connectConfigurationLink\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dataCacheNamespace\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deployment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentBuildLogs\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheck\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheckPreview\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheckReRunFromProductionBranch\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentProductionGit\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentV0\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPreview\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPrivate\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPromote\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentRollback\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeCacheNamespace\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"environments\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"job\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logs\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logsPreset\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"onDemandBuild\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"onDemandConcurrency\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"optionsAllowlist\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"passwordProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"productionAliasProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"project\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAccessGroup\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAnalyticsSampling\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAnalyticsUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectCheck\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectCheckRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentExpiration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentHook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentProtectionStrict\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomainCheckConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomainMove\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVars\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVarsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVarsUnownedByIntegration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFlags\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFlagsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFromV0\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectId\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectIntegrationConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectLink\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectMember\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectMonitoring\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectOIDCToken\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectPermissions\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectProductionBranch\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectRollingRelease\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectRoutes\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectSupportCase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectSupportCaseComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTier\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransferOut\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"seawallConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVarConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"skewProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analytics\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"trustedIps\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"v0Chat\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAnalytics\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"lastRollbackTarget\": {\n                      \"nullable\": true,\n                      \"type\": \"object\"\n                    },\n                    \"lastAliasRequest\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"fromDeploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"toDeploymentId\": {\n                          \"type\": \"string\"\n                        },\n                        \"fromRollingReleaseId\": {\n                          \"type\": \"string\",\n                          \"description\": \"If rolling back from a rolling release, fromDeploymentId captures the \\\"base\\\" of that rolling release, and fromRollingReleaseId captures the \\\"target\\\" of that rolling release.\"\n                        },\n                        \"jobStatus\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"succeeded\",\n                            \"failed\",\n                            \"skipped\",\n                            \"pending\",\n                            \"in-progress\"\n                          ]\n                        },\n                        \"requestedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"promote\",\n                            \"rollback\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"fromDeploymentId\",\n                        \"jobStatus\",\n                        \"requestedAt\",\n                        \"toDeploymentId\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"protectionBypass\": {\n                      \"additionalProperties\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"integration-automation-bypass\"\n                                ]\n                              },\n                              \"integrationId\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"configurationId\",\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"integrationId\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"automation-bypass\"\n                                ]\n                              },\n                              \"isEnvVar\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var.\"\n                              },\n                              \"note\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional note about the bypass to be displayed in the UI\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"hasActiveBranches\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"trustedIps\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"deploymentType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"all\",\n                                \"prod_deployment_urls_and_all_previews\",\n                                \"all_except_custom_domains\"\n                              ]\n                            },\n                            \"addresses\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"note\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"protectionMode\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"additional\",\n                                \"exclusive\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"addresses\",\n                            \"deploymentType\",\n                            \"protectionMode\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"deploymentType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"all\",\n                                \"prod_deployment_urls_and_all_previews\",\n                                \"all_except_custom_domains\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"deploymentType\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"gitComments\": {\n                      \"properties\": {\n                        \"onPullRequest\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should comment on PRs\"\n                        },\n                        \"onCommit\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should comment on commits\"\n                        }\n                      },\n                      \"required\": [\n                        \"onCommit\",\n                        \"onPullRequest\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"gitProviderOptions\": {\n                      \"properties\": {\n                        \"createDeployments\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\"\n                          ],\n                          \"description\": \"Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead\"\n                        },\n                        \"disableRepositoryDispatchEvents\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events\"\n                        },\n                        \"requireVerifiedCommits\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the project requires commits to be signed before deployments will be created.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createDeployments\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"paused\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"concurrencyBucketName\": {\n                      \"type\": \"string\"\n                    },\n                    \"webAnalytics\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"hasData\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"security\": {\n                      \"properties\": {\n                        \"attackModeEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"attackModeUpdatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"firewallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"firewallUpdatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"attackModeActiveUntil\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"firewallConfigVersion\": {\n                          \"type\": \"number\"\n                        },\n                        \"firewallSeawallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"ja3Enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"ja4Enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"firewallBypassIps\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"managedRules\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"vercel_ruleset\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"bot_filter\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"ai_bots\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"owasp\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"ai_bots\",\n                            \"bot_filter\",\n                            \"owasp\",\n                            \"vercel_ruleset\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"botIdEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"log_headers\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"*\"\n                              ]\n                            }\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"oidcTokenConfig\": {\n                      \"properties\": {\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\"\n                        },\n                        \"issuerMode\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"team\",\n                            \"global\"\n                          ],\n                          \"description\": \"- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"tier\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"standard\",\n                        \"base\",\n                        \"advanced\",\n                        \"critical\"\n                      ]\n                    },\n                    \"scheduledTierChange\": {\n                      \"properties\": {\n                        \"tier\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"base\",\n                            \"advanced\",\n                            \"critical\"\n                          ]\n                        },\n                        \"effectiveAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"effectiveAt\",\n                        \"tier\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"usageStatus\": {\n                      \"properties\": {\n                        \"kind\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"flat\"\n                          ],\n                          \"description\": \"Billing mode. Always 'flat' for flat-rate projects.\"\n                        },\n                        \"exceededAllowanceUntil\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp until which the project has exceeded its CDN allowance.\"\n                        },\n                        \"bypassThrottleUntil\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp until which throttling is bypassed (project pays list rates for overage).\"\n                        }\n                      },\n                      \"required\": [\n                        \"kind\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"features\": {\n                      \"properties\": {\n                        \"webAnalytics\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"v0\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"abuse\": {\n                      \"properties\": {\n                        \"scanner\": {\n                          \"type\": \"string\"\n                        },\n                        \"history\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"scanner\": {\n                                \"type\": \"string\"\n                              },\n                              \"reason\": {\n                                \"type\": \"string\"\n                              },\n                              \"by\": {\n                                \"type\": \"string\"\n                              },\n                              \"byId\": {\n                                \"type\": \"string\"\n                              },\n                              \"at\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"at\",\n                              \"by\",\n                              \"byId\",\n                              \"reason\",\n                              \"scanner\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"block\": {\n                          \"properties\": {\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"blocked\"\n                              ]\n                            },\n                            \"reason\": {\n                              \"type\": \"string\"\n                            },\n                            \"statusCode\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"caseId\": {\n                              \"type\": \"string\"\n                            },\n                            \"actor\": {\n                              \"type\": \"string\"\n                            },\n                            \"comment\": {\n                              \"type\": \"string\"\n                            },\n                            \"ineligibleForAppeal\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"isCascading\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"createdAt\",\n                            \"reason\",\n                            \"statusCode\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"blockHistory\": {\n                          \"items\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blocked\"\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"statusCode\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"unblocked\"\n                                    ]\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"route-blocked\"\n                                    ]\n                                  },\n                                  \"route\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"status\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"src\",\n                                          \"status\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"has\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"header\"\n                                                      ]\n                                                    },\n                                                    \"key\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"x-vercel-ip-country\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"key\",\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"host\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"mitigate\": {\n                                            \"properties\": {\n                                              \"action\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"block_legal_cwc\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"action\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"has\",\n                                          \"mitigate\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"route\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"route-unblocked\"\n                                    ]\n                                  },\n                                  \"route\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"status\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"src\",\n                                          \"status\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"has\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"header\"\n                                                      ]\n                                                    },\n                                                    \"key\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"x-vercel-ip-country\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"key\",\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"host\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"mitigate\": {\n                                            \"properties\": {\n                                              \"action\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"block_legal_cwc\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"action\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"has\",\n                                          \"mitigate\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"route\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"interstitial\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"history\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"internalRoutes\": {\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"src\",\n                              \"status\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"has\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"x-vercel-ip-country\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"properties\": {\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"eq\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"properties\": {\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"eq\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"mitigate\": {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"block_legal_cwc\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"src\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"has\",\n                              \"mitigate\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"hasDeployments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"dismissedToasts\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"dismissedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"delete\",\n                              \"cancel\",\n                              \"accept\"\n                            ]\n                          },\n                          \"value\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"previousValue\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    ]\n                                  },\n                                  \"currentValue\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"currentValue\",\n                                  \"previousValue\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"action\",\n                          \"dismissedAt\",\n                          \"key\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"protectedSourcemaps\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"accountId\",\n                    \"defaultResourceConfig\",\n                    \"deploymentExpiration\",\n                    \"directoryListing\",\n                    \"id\",\n                    \"name\",\n                    \"nodeVersion\",\n                    \"resourceConfig\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"oneOf\": [\n                {\n                  \"type\": \"string\"\n                },\n                {\n                  \"type\": \"boolean\"\n                }\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update the fields of a project using either its `name` or `id`.\",\n        \"operationId\": \"updateProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update an existing project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The project was successfully updated\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"accountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"analytics\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"canceledAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"paidAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"sampleRatePercent\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"spendLimitInDollars\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"disabledAt\",\n                        \"enabledAt\",\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"appliedCve55182Migration\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"speedInsights\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"hasData\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"paidAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"autoExposeSystemEnvs\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"autoAssignCustomDomains\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"autoAssignCustomDomainsUpdatedBy\": {\n                      \"type\": \"string\"\n                    },\n                    \"buildCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"commandForIgnoringBuildStep\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"connectConfigurations\": {\n                      \"nullable\": true,\n                      \"items\": {\n                        \"properties\": {\n                          \"envId\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"connectConfigurationId\": {\n                            \"type\": \"string\"\n                          },\n                          \"dc\": {\n                            \"type\": \"string\"\n                          },\n                          \"passive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"buildsEnabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"aws\": {\n                            \"properties\": {\n                              \"subnetIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"securityGroupId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"subnetIds\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"buildsEnabled\",\n                          \"connectConfigurationId\",\n                          \"createdAt\",\n                          \"envId\",\n                          \"passive\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"connectConfigurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"connectBuildsEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"passiveConnectConfigurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"customerSupportCodeVisibility\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"crons\": {\n                      \"properties\": {\n                        \"enabledAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"The time the feature was enabled for this project. Note: It enables automatically with the first Deployment that outputs cronjobs.\"\n                        },\n                        \"disabledAt\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"The time the feature was disabled for this project.\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"deploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the Deployment from which the definitions originated.\"\n                        },\n                        \"definitions\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"host\": {\n                                \"type\": \"string\",\n                                \"description\": \"The hostname that should be used.\",\n                                \"example\": \"vercel.com\"\n                              },\n                              \"path\": {\n                                \"type\": \"string\",\n                                \"description\": \"The path that should be called for the cronjob.\",\n                                \"example\": \"/api/crons/sync-something?hello=world\"\n                              },\n                              \"schedule\": {\n                                \"type\": \"string\",\n                                \"description\": \"The cron expression.\",\n                                \"example\": \"0 0 * * *\"\n                              },\n                              \"source\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"api\"\n                                ],\n                                \"description\": \"The origin of this definition. 'api' means created via the API. Undefined means it originated from a deployment (vercel.json).\"\n                              }\n                            },\n                            \"required\": [\n                              \"host\",\n                              \"path\",\n                              \"schedule\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"definitions\",\n                        \"deploymentId\",\n                        \"disabledAt\",\n                        \"enabledAt\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"dataCache\": {\n                      \"properties\": {\n                        \"userDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"storageSizeBytes\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"unlimited\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"userDisabled\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"deploymentExpiration\": {\n                      \"properties\": {\n                        \"expirationDays\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n                        },\n                        \"expirationDaysProduction\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep production deployments before soft deletion.\"\n                        },\n                        \"expirationDaysCanceled\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n                        },\n                        \"expirationDaysErrored\": {\n                          \"type\": \"number\",\n                          \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n                        },\n                        \"deploymentsToKeep\": {\n                          \"type\": \"number\",\n                          \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Retention policies for deployments. These are enforced at the project level, but we also maintain an instance of this at the team level as a default policy that gets applied to new projects.\"\n                    },\n                    \"devCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"directoryListing\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"installCommand\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"env\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"target\": {\n                            \"oneOf\": [\n                              {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"secret\",\n                              \"system\",\n                              \"encrypted\",\n                              \"plain\",\n                              \"sensitive\"\n                            ]\n                          },\n                          \"sunsetSecretId\": {\n                            \"type\": \"string\",\n                            \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                          },\n                          \"legacyValue\": {\n                            \"type\": \"string\",\n                            \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"vsmValue\": {\n                            \"type\": \"string\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"configurationId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"gitBranch\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigTokenId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"contentHint\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-read-only-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blob-read-write-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-non-pooling\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-prisma-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-user\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-host\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-password\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-database\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-no-ssl\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration-store-secret\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationProductId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"integrationProductId\",\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-connection-string\"\n                                    ]\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"projectId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"internalContentHint\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"flags-secret\"\n                                ]\n                              },\n                              \"encryptedValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                              }\n                            },\n                            \"required\": [\n                              \"encryptedValue\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"key\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"customEnvironments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"description\": \"URL-friendly name of the environment\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ],\n                            \"description\": \"The type of environment (production, preview, or development)\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"description\": \"Optional description of the environment's purpose\"\n                          },\n                          \"branchMatcher\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"endsWith\",\n                                  \"startsWith\",\n                                  \"equals\"\n                                ],\n                                \"description\": \"The type of matching to perform\"\n                              },\n                              \"pattern\": {\n                                \"type\": \"string\",\n                                \"description\": \"The pattern to match against branch names\"\n                              }\n                            },\n                            \"required\": [\n                              \"pattern\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Configuration for matching git branches to this environment\"\n                          },\n                          \"domains\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"apexName\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"redirect\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"redirectStatusCode\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\",\n                                  \"enum\": [\n                                    301,\n                                    302,\n                                    307,\n                                    308\n                                  ]\n                                },\n                                \"gitBranch\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"customEnvironmentId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"verified\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ],\n                                  \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                },\n                                \"verification\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"domain\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"reason\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"domain\",\n                                      \"reason\",\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                }\n                              },\n                              \"required\": [\n                                \"apexName\",\n                                \"name\",\n                                \"projectId\",\n                                \"verified\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"List of domains associated with this environment\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of domains associated with this environment\"\n                          },\n                          \"currentDeploymentAliases\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of aliases for the current deployment\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was created\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was last updated\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"id\",\n                          \"slug\",\n                          \"type\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Internal representation of a custom environment with all required properties\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"framework\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"services\",\n                        \"blitzjs\",\n                        \"nextjs\",\n                        \"gatsby\",\n                        \"remix\",\n                        \"react-router\",\n                        \"astro\",\n                        \"hexo\",\n                        \"eleventy\",\n                        \"docusaurus-2\",\n                        \"docusaurus\",\n                        \"preact\",\n                        \"solidstart-1\",\n                        \"solidstart\",\n                        \"dojo\",\n                        \"ember\",\n                        \"vue\",\n                        \"scully\",\n                        \"ionic-angular\",\n                        \"angular\",\n                        \"polymer\",\n                        \"svelte\",\n                        \"sveltekit\",\n                        \"sveltekit-1\",\n                        \"ionic-react\",\n                        \"create-react-app\",\n                        \"gridsome\",\n                        \"umijs\",\n                        \"sapper\",\n                        \"saber\",\n                        \"stencil\",\n                        \"nuxtjs\",\n                        \"redwoodjs\",\n                        \"hugo\",\n                        \"jekyll\",\n                        \"brunch\",\n                        \"middleman\",\n                        \"zola\",\n                        \"hydrogen\",\n                        \"vite\",\n                        \"tanstack-start\",\n                        \"vitepress\",\n                        \"vuepress\",\n                        \"parcel\",\n                        \"fastapi\",\n                        \"flask\",\n                        \"fasthtml\",\n                        \"django\",\n                        \"sanity-v3\",\n                        \"sanity\",\n                        \"storybook\",\n                        \"nitro\",\n                        \"hono\",\n                        \"express\",\n                        \"h3\",\n                        \"koa\",\n                        \"nestjs\",\n                        \"elysia\",\n                        \"fastify\",\n                        \"xmcp\",\n                        \"python\",\n                        \"ruby\",\n                        \"rust\",\n                        \"node\",\n                        \"go\"\n                      ]\n                    },\n                    \"gitForkProtection\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"gitLFS\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"ipBuckets\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"bucket\": {\n                            \"type\": \"string\"\n                          },\n                          \"supportUntil\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"bucket\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"jobs\": {\n                      \"properties\": {\n                        \"lint\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"typecheck\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"latestDeployments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"alias\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"builds\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"use\": {\n                                  \"type\": \"string\"\n                                },\n                                \"src\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dest\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"use\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdIn\": {\n                            \"type\": \"string\"\n                          },\n                          \"creator\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentHostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"plan\": {\n                            \"type\": \"string\"\n                          },\n                          \"private\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"createdIn\",\n                          \"creator\",\n                          \"deploymentHostname\",\n                          \"id\",\n                          \"name\",\n                          \"plan\",\n                          \"private\",\n                          \"readyState\",\n                          \"type\",\n                          \"url\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"link\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github\"\n                              ]\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-limited\"\n                              ]\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"org\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes.\"\n                            },\n                            \"repo\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"github-custom-host\"\n                              ]\n                            },\n                            \"host\": {\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"host\",\n                            \"org\",\n                            \"productionBranch\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectName\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectNameWithNamespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectNamespace\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectOwnerId\": {\n                              \"type\": \"number\",\n                              \"description\": \"A new field, should be included in all new project links, is being added just in time when a deployment is created. This is needed for Protected Git scopes. This is the id of the top level group that a namespace belongs to. Gitlab supports group nesting (up to 20 levels).\"\n                            },\n                            \"projectUrl\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"gitlab\"\n                              ]\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"productionBranch\",\n                            \"projectId\",\n                            \"projectName\",\n                            \"projectNameWithNamespace\",\n                            \"projectNamespace\",\n                            \"projectUrl\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"owner\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"bitbucket\"\n                              ]\n                            },\n                            \"uuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"workspaceUuid\": {\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"deployHooks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ref\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\",\n                                  \"name\",\n                                  \"ref\",\n                                  \"url\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"gitCredentialId\": {\n                              \"type\": \"string\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"sourceless\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"productionBranch\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"deployHooks\",\n                            \"gitCredentialId\",\n                            \"name\",\n                            \"owner\",\n                            \"productionBranch\",\n                            \"slug\",\n                            \"type\",\n                            \"uuid\",\n                            \"workspaceUuid\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"microfrontends\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ],\n                              \"description\": \"Whether microfrontends are enabled for this project.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"isDefaultApp\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"isDefaultApp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"routeObservabilityToThisProject\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether observability data should be routed to this microfrontend project or a root project.\"\n                            },\n                            \"doNotRouteWithMicrofrontendsRouting\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"minItems\": 1,\n                              \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ],\n                              \"description\": \"Whether microfrontends are enabled for this project.\"\n                            },\n                            \"defaultRoute\": {\n                              \"type\": \"string\",\n                              \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"groupIds\": {\n                              \"type\": \"array\",\n                              \"items\": {},\n                              \"minItems\": 0,\n                              \"maxItems\": 0\n                            },\n                            \"enabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false\n                              ]\n                            },\n                            \"freeProjectForLegacyLimits\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"enabled\",\n                            \"groupIds\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"nodeVersion\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"24.x\",\n                        \"22.x\",\n                        \"20.x\",\n                        \"18.x\",\n                        \"16.x\",\n                        \"14.x\",\n                        \"12.x\",\n                        \"10.x\",\n                        \"8.10.x\"\n                      ]\n                    },\n                    \"optionsAllowlist\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"paths\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"value\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"paths\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"outputDirectory\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"passwordProtection\": {\n                      \"nullable\": true,\n                      \"type\": \"object\"\n                    },\n                    \"productionDeploymentsFastLane\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"publicSource\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"resourceConfig\": {\n                      \"properties\": {\n                        \"elasticConcurrencyEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"fluid\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"functionDefaultRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functionDefaultTimeout\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionDefaultMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard_legacy\",\n                            \"standard\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionZeroConfigFailover\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildMachineType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"enhanced\",\n                            \"turbo\"\n                          ]\n                        },\n                        \"buildMachineSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed\",\n                            \"elastic\"\n                          ]\n                        },\n                        \"buildMachineElasticLastUpdated\": {\n                          \"type\": \"number\"\n                        },\n                        \"isNSNBDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildQueue\": {\n                          \"properties\": {\n                            \"configuration\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"SKIP_NAMESPACE_QUEUE\",\n                                \"WAIT_FOR_NAMESPACE_QUEUE\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"functionDefaultRegions\"\n                      ]\n                    },\n                    \"rollbackDescription\": {\n                      \"properties\": {\n                        \"userId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The user who rolled back the project.\"\n                        },\n                        \"username\": {\n                          \"type\": \"string\",\n                          \"description\": \"The username of the user who rolled back the project.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"User-supplied explanation of why they rolled back the project. Limited to 250 characters.\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp of when the rollback was requested.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createdAt\",\n                        \"description\",\n                        \"userId\",\n                        \"username\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Description of why a project was rolled back, and by whom. Note that lastAliasRequest contains the from/to details of the rollback.\"\n                    },\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"target\": {\n                          \"type\": \"string\",\n                          \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                          \"example\": \"production\"\n                        },\n                        \"stages\": {\n                          \"nullable\": true,\n                          \"items\": {\n                            \"properties\": {\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                \"example\": false\n                              },\n                              \"duration\": {\n                                \"type\": \"number\",\n                                \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                \"example\": 600\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                        },\n                        \"canaryResponseHeader\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                          \"example\": false\n                        }\n                      },\n                      \"required\": [\n                        \"target\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                    },\n                    \"defaultResourceConfig\": {\n                      \"properties\": {\n                        \"elasticConcurrencyEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"fluid\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"functionDefaultRegions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"functionDefaultTimeout\": {\n                          \"type\": \"number\"\n                        },\n                        \"functionDefaultMemoryType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard_legacy\",\n                            \"standard\",\n                            \"performance\"\n                          ]\n                        },\n                        \"functionZeroConfigFailover\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildMachineType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"enhanced\",\n                            \"turbo\"\n                          ]\n                        },\n                        \"buildMachineSelection\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"fixed\",\n                            \"elastic\"\n                          ]\n                        },\n                        \"buildMachineElasticLastUpdated\": {\n                          \"type\": \"number\"\n                        },\n                        \"isNSNBDisabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"buildQueue\": {\n                          \"properties\": {\n                            \"configuration\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"SKIP_NAMESPACE_QUEUE\",\n                                \"WAIT_FOR_NAMESPACE_QUEUE\"\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"functionDefaultRegions\"\n                      ]\n                    },\n                    \"rootDirectory\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"serverlessFunctionZeroConfigFailover\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"skewProtectionBoundaryAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"skewProtectionMaxAge\": {\n                      \"type\": \"number\"\n                    },\n                    \"skewProtectionAllowedDomains\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"skipGitConnectDuringLink\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"staticIps\": {\n                      \"properties\": {\n                        \"builds\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"regions\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"builds\",\n                        \"enabled\",\n                        \"regions\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"sourceFilesOutsideRootDirectory\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enableAffectedProjectsDeployments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"ssoProtection\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"deploymentType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"preview\",\n                            \"all\",\n                            \"prod_deployment_urls_and_all_previews\",\n                            \"all_except_custom_domains\"\n                          ]\n                        },\n                        \"cve55182MigrationAppliedFrom\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"preview\",\n                            \"all\",\n                            \"prod_deployment_urls_and_all_previews\",\n                            \"all_except_custom_domains\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"deploymentType\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"targets\": {\n                      \"additionalProperties\": {\n                        \"nullable\": true,\n                        \"properties\": {\n                          \"alias\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"builds\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"use\": {\n                                  \"type\": \"string\"\n                                },\n                                \"src\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dest\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"use\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdIn\": {\n                            \"type\": \"string\"\n                          },\n                          \"creator\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"email\": {\n                                \"type\": \"string\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"uid\": {\n                                \"type\": \"string\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentHostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"plan\": {\n                            \"type\": \"string\"\n                          },\n                          \"private\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\"\n                          },\n                          \"requestedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"teamId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"userId\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"createdIn\",\n                          \"creator\",\n                          \"deploymentHostname\",\n                          \"id\",\n                          \"name\",\n                          \"plan\",\n                          \"private\",\n                          \"readyState\",\n                          \"type\",\n                          \"url\",\n                          \"userId\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"transferCompletedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"transferStartedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"transferToAccountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"transferredFromAccountId\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"live\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enablePreviewFeedback\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"enableProductionFeedback\": {\n                      \"nullable\": true,\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"permissions\": {\n                      \"properties\": {\n                        \"oauth2Connection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"user\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"userConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"userSudo\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAuthn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"accessGroup\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"agent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aiGatewayUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"alerts\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"alertRules\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasGlobal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analyticsSampling\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analyticsUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKey\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKeyAiGateway\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"apiKeyOwnedBySelf\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"oauth2Application\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelAppInstallation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelAppInstallationRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"auditLog\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingAddress\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInformation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoiceEmailRecipient\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingInvoiceLanguage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPlan\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPurchaseOrder\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingRefund\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingTaxId\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"blob\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"blobStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"budget\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"cacheArtifact\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"cacheArtifactUsageEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"codeChecks\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"concurrentBuilds\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connect\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connectConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildMachineDefault\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dataCacheBillingSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"defaultDeploymentProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainAcceptDelegation\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainAuthCodes\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainCertificate\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainCheckConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainMove\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainPurchase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainRecord\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"domainTransferIn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"drain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigSchema\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeConfigToken\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"endpointVerification\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"event\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"fileUpload\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"flagsExplorerSubscription\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"gitRepository\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"imageOptimizationNewPrice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationAccount\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationProjects\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationRole\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationConfigurationTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationDeploymentAction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationLog\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResource\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceReplCommand\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationResourceSecrets\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationSSOSession\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationStrict\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationVercelConfigurationOverride\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"integrationPullRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ipBlocking\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"jobGlobal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logDrain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceBillingData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceExperimentationEdgeConfigData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceExperimentationItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceInstallationMember\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceInvoice\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"marketplaceSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"Monitoring\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringChart\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringQuery\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"monitoringSettings\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationCustomerBudget\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDeploymentFailed\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainExpire\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainMoved\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainPurchase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainRenewal\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationDomainUnverified\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"NotificationMonitoringAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationPaymentFailed\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationPreferences\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationStatementOfReasons\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"notificationUsageAlert\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityFunnel\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityNotebook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"openTelemetryEndpoint\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ownEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"organizationDomain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"passwordProtectionInvoiceItem\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"paymentMethod\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"permissions\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"postgres\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"postgresStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"previewDeploymentSuffix\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"privateCloudAccount\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransferIn\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"proTrialOnboarding\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"rateLimit\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"redis\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"redisStoreTokenSet\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"remoteCaching\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"repository\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"samlConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"secret\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"securityPlusConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sensitiveEnvironmentVariablePolicy\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVars\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVarsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"space\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"spaceRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"storeTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"supportCase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"supportCaseComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"team\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamAccessRequest\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamFellowMembership\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamGitExclusivity\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamInvite\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamInviteCode\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamJoin\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamMemberMfaStatus\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamMicrofrontends\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamOwnMembership\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"teamOwnMembershipDisconnectSAML\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"token\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"toolbarComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"usageCycle\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vercelRunExec\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"vpcPeeringConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAnalyticsPlan\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webhook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webhook-event\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasProject\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"aliasProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"bulkRedirects\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"buildMachine\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"connectConfigurationLink\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"dataCacheNamespace\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deployment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentBuildLogs\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheck\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheckPreview\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentCheckReRunFromProductionBranch\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentProductionGit\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentV0\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPreview\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPrivate\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentPromote\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"deploymentRollback\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"edgeCacheNamespace\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"environments\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"job\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logs\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"logsPreset\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"observabilityData\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"onDemandBuild\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"onDemandConcurrency\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"optionsAllowlist\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"passwordProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"productionAliasProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"project\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAccessGroup\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAnalyticsSampling\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectAnalyticsUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectCheck\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectCheckRun\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentExpiration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentHook\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDeploymentProtectionStrict\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomain\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomainCheckConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectDomainMove\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEvent\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVars\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVarsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectEnvVarsUnownedByIntegration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFlags\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFlagsProduction\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFromV0\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectId\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectIntegrationConfiguration\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectLink\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectMember\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectMonitoring\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectOIDCToken\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectPermissions\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectProductionBranch\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectProtectionBypass\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectRollingRelease\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectRoutes\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectSupportCase\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectSupportCaseComment\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTier\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransfer\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectTransferOut\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectUsage\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"seawallConfig\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"sharedEnvVarConnection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"skewProtection\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"analytics\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"trustedIps\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"v0Chat\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"webAnalytics\": {\n                          \"items\": {\n                            \"$ref\": \"#/components/schemas/ACLAction\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"lastRollbackTarget\": {\n                      \"nullable\": true,\n                      \"type\": \"object\"\n                    },\n                    \"lastAliasRequest\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"fromDeploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"toDeploymentId\": {\n                          \"type\": \"string\"\n                        },\n                        \"fromRollingReleaseId\": {\n                          \"type\": \"string\",\n                          \"description\": \"If rolling back from a rolling release, fromDeploymentId captures the \\\"base\\\" of that rolling release, and fromRollingReleaseId captures the \\\"target\\\" of that rolling release.\"\n                        },\n                        \"jobStatus\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"succeeded\",\n                            \"failed\",\n                            \"skipped\",\n                            \"pending\",\n                            \"in-progress\"\n                          ]\n                        },\n                        \"requestedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"promote\",\n                            \"rollback\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"fromDeploymentId\",\n                        \"jobStatus\",\n                        \"requestedAt\",\n                        \"toDeploymentId\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"protectionBypass\": {\n                      \"additionalProperties\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"integration-automation-bypass\"\n                                ]\n                              },\n                              \"integrationId\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"configurationId\",\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"integrationId\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"automation-bypass\"\n                                ]\n                              },\n                              \"isEnvVar\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var.\"\n                              },\n                              \"note\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional note about the bypass to be displayed in the UI\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"hasActiveBranches\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"trustedIps\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"deploymentType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"all\",\n                                \"prod_deployment_urls_and_all_previews\",\n                                \"all_except_custom_domains\"\n                              ]\n                            },\n                            \"addresses\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"note\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"protectionMode\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"additional\",\n                                \"exclusive\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"addresses\",\n                            \"deploymentType\",\n                            \"protectionMode\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"deploymentType\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"all\",\n                                \"prod_deployment_urls_and_all_previews\",\n                                \"all_except_custom_domains\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"deploymentType\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"gitComments\": {\n                      \"properties\": {\n                        \"onPullRequest\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should comment on PRs\"\n                        },\n                        \"onCommit\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should comment on commits\"\n                        }\n                      },\n                      \"required\": [\n                        \"onCommit\",\n                        \"onPullRequest\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"gitProviderOptions\": {\n                      \"properties\": {\n                        \"createDeployments\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"enabled\",\n                            \"disabled\"\n                          ],\n                          \"description\": \"Whether the Vercel bot should automatically create GitHub deployments https://docs.github.com/en/rest/deployments/deployments#about-deployments NOTE: repository-dispatch events should be used instead\"\n                        },\n                        \"disableRepositoryDispatchEvents\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the Vercel bot should not automatically create GitHub repository-dispatch events on deployment events. https://vercel.com/docs/git/vercel-for-github#repository-dispatch-events\"\n                        },\n                        \"requireVerifiedCommits\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the project requires commits to be signed before deployments will be created.\"\n                        }\n                      },\n                      \"required\": [\n                        \"createDeployments\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"paused\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"concurrencyBucketName\": {\n                      \"type\": \"string\"\n                    },\n                    \"webAnalytics\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"disabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"canceledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"enabledAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"hasData\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"id\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"security\": {\n                      \"properties\": {\n                        \"attackModeEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"attackModeUpdatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"firewallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"firewallUpdatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"attackModeActiveUntil\": {\n                          \"nullable\": true,\n                          \"type\": \"number\"\n                        },\n                        \"firewallConfigVersion\": {\n                          \"type\": \"number\"\n                        },\n                        \"firewallSeawallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"ja3Enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"ja4Enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"firewallBypassIps\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"managedRules\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"vercel_ruleset\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"bot_filter\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"ai_bots\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"owasp\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"deny\",\n                                    \"challenge\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"ai_bots\",\n                            \"bot_filter\",\n                            \"owasp\",\n                            \"vercel_ruleset\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"botIdEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"log_headers\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"*\"\n                              ]\n                            }\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"oidcTokenConfig\": {\n                      \"properties\": {\n                        \"enabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\"\n                        },\n                        \"issuerMode\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"team\",\n                            \"global\"\n                          ],\n                          \"description\": \"- team: `https://oidc.vercel.com/[team_slug]` - global: `https://oidc.vercel.com`\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"tier\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"standard\",\n                        \"base\",\n                        \"advanced\",\n                        \"critical\"\n                      ]\n                    },\n                    \"scheduledTierChange\": {\n                      \"properties\": {\n                        \"tier\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"standard\",\n                            \"base\",\n                            \"advanced\",\n                            \"critical\"\n                          ]\n                        },\n                        \"effectiveAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"effectiveAt\",\n                        \"tier\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"usageStatus\": {\n                      \"properties\": {\n                        \"kind\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"flat\"\n                          ],\n                          \"description\": \"Billing mode. Always 'flat' for flat-rate projects.\"\n                        },\n                        \"exceededAllowanceUntil\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp until which the project has exceeded its CDN allowance.\"\n                        },\n                        \"bypassThrottleUntil\": {\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp until which throttling is bypassed (project pays list rates for overage).\"\n                        }\n                      },\n                      \"required\": [\n                        \"kind\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"features\": {\n                      \"properties\": {\n                        \"webAnalytics\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"v0\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"abuse\": {\n                      \"properties\": {\n                        \"scanner\": {\n                          \"type\": \"string\"\n                        },\n                        \"history\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"scanner\": {\n                                \"type\": \"string\"\n                              },\n                              \"reason\": {\n                                \"type\": \"string\"\n                              },\n                              \"by\": {\n                                \"type\": \"string\"\n                              },\n                              \"byId\": {\n                                \"type\": \"string\"\n                              },\n                              \"at\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"at\",\n                              \"by\",\n                              \"byId\",\n                              \"reason\",\n                              \"scanner\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"block\": {\n                          \"properties\": {\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"blocked\"\n                              ]\n                            },\n                            \"reason\": {\n                              \"type\": \"string\"\n                            },\n                            \"statusCode\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"caseId\": {\n                              \"type\": \"string\"\n                            },\n                            \"actor\": {\n                              \"type\": \"string\"\n                            },\n                            \"comment\": {\n                              \"type\": \"string\"\n                            },\n                            \"ineligibleForAppeal\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"isCascading\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"createdAt\",\n                            \"reason\",\n                            \"statusCode\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"blockHistory\": {\n                          \"items\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blocked\"\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"statusCode\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"unblocked\"\n                                    ]\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"route-blocked\"\n                                    ]\n                                  },\n                                  \"route\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"status\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"src\",\n                                          \"status\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"has\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"header\"\n                                                      ]\n                                                    },\n                                                    \"key\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"x-vercel-ip-country\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"key\",\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"host\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"mitigate\": {\n                                            \"properties\": {\n                                              \"action\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"block_legal_cwc\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"action\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"has\",\n                                          \"mitigate\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"reason\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"reason\",\n                                  \"route\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"route-unblocked\"\n                                    ]\n                                  },\n                                  \"route\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"status\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"src\",\n                                          \"status\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"has\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"header\"\n                                                      ]\n                                                    },\n                                                    \"key\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"x-vercel-ip-country\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"key\",\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"type\": {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"host\"\n                                                      ]\n                                                    },\n                                                    \"value\": {\n                                                      \"properties\": {\n                                                        \"eq\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"eq\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"type\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"mitigate\": {\n                                            \"properties\": {\n                                              \"action\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"block_legal_cwc\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"action\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"src\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"has\",\n                                          \"mitigate\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"statusCode\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"caseId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"actor\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"comment\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"ineligibleForAppeal\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"isCascading\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"createdAt\",\n                                  \"route\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"interstitial\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"history\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"internalRoutes\": {\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"src\": {\n                                \"type\": \"string\"\n                              },\n                              \"status\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"src\",\n                              \"status\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"has\": {\n                                \"items\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"header\"\n                                          ]\n                                        },\n                                        \"key\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"x-vercel-ip-country\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"properties\": {\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"eq\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"key\",\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"properties\": {\n                                        \"type\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"host\"\n                                          ]\n                                        },\n                                        \"value\": {\n                                          \"properties\": {\n                                            \"eq\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"eq\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"type\",\n                                        \"value\"\n                                      ],\n                                      \"type\": \"object\"\n                                    }\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"mitigate\": {\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"block_legal_cwc\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"src\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"has\",\n                              \"mitigate\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"hasDeployments\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"dismissedToasts\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"dismissedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"delete\",\n                              \"cancel\",\n                              \"accept\"\n                            ]\n                          },\n                          \"value\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"previousValue\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    ]\n                                  },\n                                  \"currentValue\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"number\"\n                                      },\n                                      {\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"currentValue\",\n                                  \"previousValue\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"action\",\n                          \"dismissedAt\",\n                          \"key\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"protectedSourcemaps\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"accountId\",\n                    \"defaultResourceConfig\",\n                    \"deploymentExpiration\",\n                    \"directoryListing\",\n                    \"id\",\n                    \"name\",\n                    \"nodeVersion\",\n                    \"resourceConfig\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nTrusted IPs is only accessible for enterprise customers\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\\nPro customers are allowed to deploy Serverless Functions to up to `proMaxRegions` regions, or if the project was created before the limit was introduced.\\nDeploying to Serverless Functions to multiple regions requires a plan update\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The provided name for the project is already being used\\nThe project is currently being transferred.\"\n          },\n          \"428\": {\n            \"description\": \"Owner does not have protection add-on\\nAdvanced Deployment Protection is not available for the user plan\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"autoExposeSystemEnvs\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"autoAssignCustomDomains\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"autoAssignCustomDomainsUpdatedBy\": {\n                    \"type\": \"string\"\n                  },\n                  \"buildCommand\": {\n                    \"description\": \"The build command for this project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"commandForIgnoringBuildStep\": {\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"customerSupportCodeVisibility\": {\n                    \"description\": \"Specifies whether customer support can see git source for a deployment\",\n                    \"type\": \"boolean\"\n                  },\n                  \"devCommand\": {\n                    \"description\": \"The dev command for this project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"directoryListing\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"framework\": {\n                    \"description\": \"The framework that is being used for this project. When `null` is used no framework is selected\",\n                    \"enum\": [\n                      null,\n                      \"services\",\n                      \"blitzjs\",\n                      \"nextjs\",\n                      \"gatsby\",\n                      \"remix\",\n                      \"react-router\",\n                      \"astro\",\n                      \"hexo\",\n                      \"eleventy\",\n                      \"docusaurus-2\",\n                      \"docusaurus\",\n                      \"preact\",\n                      \"solidstart-1\",\n                      \"solidstart\",\n                      \"dojo\",\n                      \"ember\",\n                      \"vue\",\n                      \"scully\",\n                      \"ionic-angular\",\n                      \"angular\",\n                      \"polymer\",\n                      \"svelte\",\n                      \"sveltekit\",\n                      \"sveltekit-1\",\n                      \"ionic-react\",\n                      \"create-react-app\",\n                      \"gridsome\",\n                      \"umijs\",\n                      \"sapper\",\n                      \"saber\",\n                      \"stencil\",\n                      \"nuxtjs\",\n                      \"redwoodjs\",\n                      \"hugo\",\n                      \"jekyll\",\n                      \"brunch\",\n                      \"middleman\",\n                      \"zola\",\n                      \"hydrogen\",\n                      \"vite\",\n                      \"tanstack-start\",\n                      \"vitepress\",\n                      \"vuepress\",\n                      \"parcel\",\n                      \"fastapi\",\n                      \"flask\",\n                      \"fasthtml\",\n                      \"django\",\n                      \"sanity-v3\",\n                      \"sanity\",\n                      \"storybook\",\n                      \"nitro\",\n                      \"hono\",\n                      \"express\",\n                      \"h3\",\n                      \"koa\",\n                      \"nestjs\",\n                      \"elysia\",\n                      \"fastify\",\n                      \"xmcp\",\n                      \"python\",\n                      \"ruby\",\n                      \"rust\",\n                      \"node\",\n                      \"go\"\n                    ],\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"gitForkProtection\": {\n                    \"description\": \"Specifies whether PRs from Git forks should require a team member's authorization before it can be deployed\",\n                    \"type\": \"boolean\"\n                  },\n                  \"gitLFS\": {\n                    \"description\": \"Specifies whether Git LFS is enabled for this project.\",\n                    \"type\": \"boolean\"\n                  },\n                  \"protectedSourcemaps\": {\n                    \"description\": \"Specifies whether sourcemaps are protected and require authentication to access.\",\n                    \"type\": \"boolean\"\n                  },\n                  \"installCommand\": {\n                    \"description\": \"The install command for this project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"name\": {\n                    \"description\": \"The desired name for the project\",\n                    \"example\": \"a-project-name\",\n                    \"type\": \"string\",\n                    \"maxLength\": 100\n                  },\n                  \"nodeVersion\": {\n                    \"enum\": [\n                      \"24.x\",\n                      \"22.x\",\n                      \"20.x\",\n                      \"18.x\",\n                      \"16.x\",\n                      \"14.x\",\n                      \"12.x\",\n                      \"10.x\"\n                    ],\n                    \"type\": \"string\"\n                  },\n                  \"outputDirectory\": {\n                    \"description\": \"The output directory of the project. When `null` is used this value will be automatically detected\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"previewDeploymentsDisabled\": {\n                    \"description\": \"Specifies whether preview deployments are disabled for this project.\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"previewDeploymentSuffix\": {\n                    \"description\": \"Custom domain suffix for preview deployments. Takes precedence over team-level suffix. Must be a domain owned by the team.\",\n                    \"type\": \"string\",\n                    \"maxLength\": 253,\n                    \"nullable\": true\n                  },\n                  \"publicSource\": {\n                    \"description\": \"Specifies whether the source code and logs of the deployments for this project should be public or not\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"resourceConfig\": {\n                    \"properties\": {\n                      \"buildMachineType\": {\n                        \"enum\": [\n                          null,\n                          \"enhanced\",\n                          \"turbo\",\n                          \"standard\",\n                          \"elastic\"\n                        ]\n                      },\n                      \"buildQueue\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"configuration\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"SKIP_NAMESPACE_QUEUE\",\n                              \"WAIT_FOR_NAMESPACE_QUEUE\"\n                            ]\n                          }\n                        }\n                      },\n                      \"fluid\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"functionDefaultRegions\": {\n                        \"description\": \"The regions to deploy Vercel Functions to for this project\",\n                        \"type\": \"array\",\n                        \"minItems\": 1,\n                        \"uniqueItems\": true,\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 4\n                        }\n                      },\n                      \"functionDefaultTimeout\": {\n                        \"type\": \"number\",\n                        \"maximum\": 900,\n                        \"minimum\": 1\n                      },\n                      \"functionDefaultMemoryType\": {\n                        \"enum\": [\n                          \"standard_legacy\",\n                          \"standard\",\n                          \"performance\"\n                        ]\n                      },\n                      \"functionZeroConfigFailover\": {\n                        \"description\": \"Specifies whether Zero Config Failover is enabled for this project.\",\n                        \"oneOf\": [\n                          {\n                            \"type\": \"boolean\"\n                          }\n                        ]\n                      },\n                      \"elasticConcurrencyEnabled\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"buildMachineSelection\": {\n                        \"enum\": [\n                          \"elastic\",\n                          \"fixed\"\n                        ]\n                      },\n                      \"buildMachineElasticLastUpdated\": {\n                        \"type\": \"number\"\n                      },\n                      \"isNSNBDisabled\": {\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"type\": \"object\",\n                    \"description\": \"Specifies resource override configuration for the project\",\n                    \"additionalProperties\": false\n                  },\n                  \"rootDirectory\": {\n                    \"description\": \"The name of a directory or relative path to the source code of your project. When `null` is used it will default to the project root\",\n                    \"maxLength\": 256,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"serverlessFunctionRegion\": {\n                    \"description\": \"The region to deploy Serverless Functions in this project\",\n                    \"maxLength\": 4,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"serverlessFunctionZeroConfigFailover\": {\n                    \"description\": \"Specifies whether Zero Config Failover is enabled for this project.\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"boolean\"\n                      }\n                    ]\n                  },\n                  \"skewProtectionBoundaryAt\": {\n                    \"description\": \"Deployments created before this absolute datetime have Skew Protection disabled. Value is in milliseconds since epoch to match \\\\\\\"createdAt\\\\\\\" fields.\",\n                    \"minimum\": 0,\n                    \"type\": \"integer\"\n                  },\n                  \"skewProtectionMaxAge\": {\n                    \"description\": \"Deployments created before this rolling window have Skew Protection disabled. Value is in seconds to match \\\\\\\"revalidate\\\\\\\" fields.\",\n                    \"minimum\": 0,\n                    \"type\": \"integer\"\n                  },\n                  \"skewProtectionAllowedDomains\": {\n                    \"description\": \"Cross-site domains allowed to fetch skew-protected assets (hostnames, optionally with leading wildcard like *.example.com).\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"maxLength\": 254\n                    },\n                    \"maxItems\": 12\n                  },\n                  \"skipGitConnectDuringLink\": {\n                    \"description\": \"Opts-out of the message prompting a CLI user to connect a Git repository in `vercel link`.\",\n                    \"type\": \"boolean\",\n                    \"deprecated\": true\n                  },\n                  \"sourceFilesOutsideRootDirectory\": {\n                    \"description\": \"Indicates if there are source files outside of the root directory\",\n                    \"type\": \"boolean\"\n                  },\n                  \"enablePreviewFeedback\": {\n                    \"description\": \"Opt-in to preview toolbar on the project level\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"enableProductionFeedback\": {\n                    \"description\": \"Opt-in to production toolbar on the project level\",\n                    \"type\": \"boolean\",\n                    \"nullable\": true\n                  },\n                  \"enableAffectedProjectsDeployments\": {\n                    \"description\": \"Opt-in to skip deployments when there are no changes to the root directory and its dependencies\",\n                    \"type\": \"boolean\"\n                  },\n                  \"staticIps\": {\n                    \"additionalProperties\": false,\n                    \"description\": \"Manage Static IPs for this project\",\n                    \"properties\": {\n                      \"enabled\": {\n                        \"description\": \"Opt-in to Static IPs for this project\",\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"required\": [\n                      \"enabled\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"oidcTokenConfig\": {\n                    \"description\": \"OpenID Connect JSON Web Token generation configuration.\",\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"enabled\": {\n                        \"description\": \"Whether or not to generate OpenID Connect JSON Web Tokens.\",\n                        \"deprecated\": true,\n                        \"type\": \"boolean\",\n                        \"default\": true\n                      },\n                      \"issuerMode\": {\n                        \"description\": \"team: `https://oidc.vercel.com/[team_slug]` global: `https://oidc.vercel.com`\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"team\",\n                          \"global\"\n                        ],\n                        \"default\": \"team\"\n                      }\n                    }\n                  },\n                  \"passwordProtection\": {\n                    \"additionalProperties\": false,\n                    \"description\": \"Allows to protect project deployments with a password\",\n                    \"properties\": {\n                      \"deploymentType\": {\n                        \"description\": \"Specify if the password will apply to every Deployment Target or just Preview\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ],\n                        \"type\": \"string\"\n                      },\n                      \"password\": {\n                        \"description\": \"The password that will be used to protect Project Deployments\",\n                        \"maxLength\": 72,\n                        \"type\": \"string\",\n                        \"nullable\": true\n                      }\n                    },\n                    \"required\": [\n                      \"deploymentType\"\n                    ],\n                    \"type\": \"object\",\n                    \"nullable\": true\n                  },\n                  \"ssoProtection\": {\n                    \"additionalProperties\": false,\n                    \"description\": \"Ensures visitors to your Preview Deployments are logged into Vercel and have a minimum of Viewer access on your team\",\n                    \"properties\": {\n                      \"deploymentType\": {\n                        \"default\": \"preview\",\n                        \"description\": \"Specify if the Vercel Authentication (SSO Protection) will apply to every Deployment Target or just Preview\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ],\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"deploymentType\"\n                    ],\n                    \"type\": \"object\",\n                    \"nullable\": true\n                  },\n                  \"trustedIps\": {\n                    \"additionalProperties\": false,\n                    \"description\": \"Restricts access to deployments based on the incoming request IP address\",\n                    \"properties\": {\n                      \"deploymentType\": {\n                        \"description\": \"Specify if the Trusted IPs will apply to every Deployment Target or just Preview\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"production\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ],\n                        \"type\": \"string\"\n                      },\n                      \"addresses\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"value\": {\n                              \"type\": \"string\",\n                              \"description\": \"The IP addresses that are allowlisted. Supports IPv4 addresses and CIDR notations. IPv6 is not supported\"\n                            },\n                            \"note\": {\n                              \"type\": \"string\",\n                              \"description\": \"An optional note explaining what the IP address or subnet is used for\",\n                              \"maxLength\": 20\n                            }\n                          },\n                          \"required\": [\n                            \"value\"\n                          ],\n                          \"additionalProperties\": false\n                        },\n                        \"minItems\": 1\n                      },\n                      \"protectionMode\": {\n                        \"description\": \"exclusive: ip match is enough to bypass deployment protection (regardless of other settings). additional: ip must match + any other protection should be also provided (password, vercel auth, shareable link, automation bypass header, automation bypass query param)\",\n                        \"enum\": [\n                          \"exclusive\",\n                          \"additional\"\n                        ],\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"deploymentType\",\n                      \"addresses\",\n                      \"protectionMode\"\n                    ],\n                    \"type\": \"object\",\n                    \"nullable\": true\n                  },\n                  \"optionsAllowlist\": {\n                    \"additionalProperties\": false,\n                    \"description\": \"Specify a list of paths that should not be protected by Deployment Protection to enable Cors preflight requests\",\n                    \"properties\": {\n                      \"paths\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"value\": {\n                              \"type\": \"string\",\n                              \"description\": \"The regex path that should not be protected by Deployment Protection\",\n                              \"pattern\": \"^/.*\"\n                            }\n                          },\n                          \"required\": [\n                            \"value\"\n                          ],\n                          \"additionalProperties\": false\n                        },\n                        \"minItems\": 1,\n                        \"maxItems\": 5\n                      }\n                    },\n                    \"required\": [\n                      \"paths\"\n                    ],\n                    \"type\": \"object\",\n                    \"nullable\": true\n                  },\n                  \"connectConfigurations\": {\n                    \"type\": \"array\",\n                    \"description\": \"The list of connections from project environment to Secure Compute network\",\n                    \"items\": {\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"envId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the environment\"\n                        },\n                        \"connectConfigurationId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the Secure Compute network\"\n                        },\n                        \"passive\": {\n                          \"type\": \"boolean\",\n                          \"description\": \"Whether the configuration should be passive, meaning builds will not run there and only passive Serverless Functions will be deployed\"\n                        },\n                        \"buildsEnabled\": {\n                          \"type\": \"boolean\",\n                          \"description\": \"Flag saying if project builds should use Secure Compute\"\n                        }\n                      },\n                      \"required\": [\n                        \"envId\",\n                        \"connectConfigurationId\",\n                        \"passive\",\n                        \"buildsEnabled\"\n                      ],\n                      \"oneOf\": [\n                        {\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"minItems\": 1,\n                    \"nullable\": true\n                  },\n                  \"dismissedToasts\": {\n                    \"description\": \"An array of objects representing a Dismissed Toast in regards to a Project. Objects are either merged with existing toasts (on key match), or added to the `dimissedToasts` array.`\",\n                    \"type\": \"array\",\n                    \"minItems\": 0,\n                    \"maxItems\": 50,\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"key\",\n                        \"dismissedAt\",\n                        \"action\",\n                        \"value\"\n                      ],\n                      \"properties\": {\n                        \"key\": {\n                          \"type\": \"string\",\n                          \"description\": \"unique identifier for the dismissed toast\"\n                        },\n                        \"dismissedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"unix timestamp representing the time the toast was dimissed\"\n                        },\n                        \"action\": {\n                          \"enum\": [\n                            \"cancel\",\n                            \"accept\",\n                            \"delete\"\n                          ],\n                          \"description\": \"Whether the toast was dismissed, the action was accepted, or the dismissal with this key should be removed\"\n                        },\n                        \"value\": {\n                          \"oneOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"boolean\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"required\": [\n                                \"previousValue\",\n                                \"currentValue\"\n                              ],\n                              \"properties\": {\n                                \"previousValue\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"number\"\n                                    },\n                                    {\n                                      \"type\": \"boolean\"\n                                    },\n                                    {\n                                      \"type\": \"string\"\n                                    }\n                                  ]\n                                },\n                                \"currentValue\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"number\"\n                                    },\n                                    {\n                                      \"type\": \"boolean\"\n                                    },\n                                    {\n                                      \"type\": \"string\"\n                                    }\n                                  ]\n                                }\n                              }\n                            }\n                          ]\n                        }\n                      }\n                    }\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        },\n        \"x-speakeasy-usage-example\": {\n          \"title\": \"Update an existing project\",\n          \"description\": \"Update the fields of a project using either its name or id.\",\n          \"position\": 2\n        }\n      },\n      \"delete\": {\n        \"description\": \"Delete a specific project by passing either the project `id` or `name` in the URL.\",\n        \"operationId\": \"deleteProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a Project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"The project was successfuly removed\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{idOrName}/shared-connect-links\": {\n      \"patch\": {\n        \"description\": \"Allows configuring Static IPs for a project\",\n        \"operationId\": \"updateStaticIps\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Configures Static IPs for a project\",\n        \"tags\": [\n          \"connect\",\n          \"static-ips\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"items\": {\n                    \"properties\": {\n                      \"envId\": {\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\"\n                            ]\n                          }\n                        ]\n                      },\n                      \"connectConfigurationId\": {\n                        \"type\": \"string\"\n                      },\n                      \"dc\": {\n                        \"type\": \"string\"\n                      },\n                      \"passive\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"buildsEnabled\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"aws\": {\n                        \"properties\": {\n                          \"subnetIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"securityGroupId\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"subnetIds\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"buildsEnabled\",\n                      \"connectConfigurationId\",\n                      \"createdAt\",\n                      \"envId\",\n                      \"passive\",\n                      \"updatedAt\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"type\": \"array\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"anyOf\": [\n                  {\n                    \"required\": [\n                      \"builds\"\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"regions\"\n                    ]\n                  }\n                ],\n                \"properties\": {\n                  \"builds\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Whether to use Static IPs for builds.\"\n                  },\n                  \"regions\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"maxLength\": 4,\n                      \"description\": \"The region in which to enable Static IPs.\",\n                      \"example\": \"iad1\"\n                    },\n                    \"minItems\": 0,\n                    \"maxItems\": 3,\n                    \"uniqueItems\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v9/projects/{idOrName}/custom-environments\": {\n      \"post\": {\n        \"description\": \"Creates a custom environment for the current project. Cannot be named 'Production' or 'Preview'.\",\n        \"operationId\": \"createCustomEnvironment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a custom environment for the current project.\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"URL-friendly name of the environment\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ],\n                      \"description\": \"The type of environment (production, preview, or development)\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"Optional description of the environment's purpose\"\n                    },\n                    \"branchMatcher\": {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"endsWith\",\n                            \"startsWith\",\n                            \"equals\"\n                          ],\n                          \"description\": \"The type of matching to perform\"\n                        },\n                        \"pattern\": {\n                          \"type\": \"string\",\n                          \"description\": \"The pattern to match against branch names\"\n                        }\n                      },\n                      \"required\": [\n                        \"pattern\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Configuration for matching git branches to this environment\"\n                    },\n                    \"domains\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"apexName\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"redirect\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"redirectStatusCode\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"enum\": [\n                              301,\n                              302,\n                              307,\n                              308\n                            ]\n                          },\n                          \"gitBranch\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"verified\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                          },\n                          \"verification\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"domain\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"domain\",\n                                \"reason\",\n                                \"type\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                          }\n                        },\n                        \"required\": [\n                          \"apexName\",\n                          \"name\",\n                          \"projectId\",\n                          \"verified\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"List of domains associated with this environment\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of domains associated with this environment\"\n                    },\n                    \"currentDeploymentAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of aliases for the current deployment\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was created\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was last updated\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"id\",\n                    \"slug\",\n                    \"type\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Internal representation of a custom environment with all required properties\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"slug\": {\n                    \"description\": \"The slug of the custom environment to create.\",\n                    \"type\": \"string\",\n                    \"maxLength\": 32\n                  },\n                  \"description\": {\n                    \"description\": \"Description of the custom environment. This is optional.\",\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"branchMatcher\": {\n                    \"required\": [\n                      \"type\",\n                      \"pattern\"\n                    ],\n                    \"description\": \"How we want to determine a matching branch. This is optional.\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"type\": {\n                        \"description\": \"Type of matcher. One of \\\\\\\"equals\\\\\\\", \\\\\\\"startsWith\\\\\\\", or \\\\\\\"endsWith\\\\\\\".\",\n                        \"enum\": [\n                          \"equals\",\n                          \"startsWith\",\n                          \"endsWith\"\n                        ]\n                      },\n                      \"pattern\": {\n                        \"description\": \"Git branch name or portion thereof.\",\n                        \"type\": \"string\",\n                        \"maxLength\": 100\n                      }\n                    }\n                  },\n                  \"copyEnvVarsFrom\": {\n                    \"description\": \"Where to copy environment variables from. This is optional.\",\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"get\": {\n        \"description\": \"Retrieve custom environments for the project. Must not be named 'Production' or 'Preview'.\",\n        \"operationId\": \"getProjectsByIdOrNameCustomEnvironments\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve custom environments\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"accountLimit\": {\n                      \"properties\": {\n                        \"total\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"total\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The maximum number of custom environments allowed either by the team's plan type or a custom override.\"\n                    },\n                    \"environments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ],\n                            \"description\": \"The type of environment (production, preview, or development)\"\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"description\": \"Optional description of the environment's purpose\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was created\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp when the environment was last updated\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\",\n                            \"description\": \"URL-friendly name of the environment\"\n                          },\n                          \"branchMatcher\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"endsWith\",\n                                  \"startsWith\",\n                                  \"equals\"\n                                ],\n                                \"description\": \"The type of matching to perform\"\n                              },\n                              \"pattern\": {\n                                \"type\": \"string\",\n                                \"description\": \"The pattern to match against branch names\"\n                              }\n                            },\n                            \"required\": [\n                              \"pattern\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Configuration for matching git branches to this environment\"\n                          },\n                          \"domains\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"apexName\": {\n                                  \"type\": \"string\"\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"redirect\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"redirectStatusCode\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\",\n                                  \"enum\": [\n                                    301,\n                                    302,\n                                    307,\n                                    308\n                                  ]\n                                },\n                                \"gitBranch\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"customEnvironmentId\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\"\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"verified\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ],\n                                  \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                                },\n                                \"verification\": {\n                                  \"items\": {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"domain\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"reason\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"domain\",\n                                      \"reason\",\n                                      \"type\",\n                                      \"value\"\n                                    ],\n                                    \"type\": \"object\",\n                                    \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                  },\n                                  \"type\": \"array\",\n                                  \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                }\n                              },\n                              \"required\": [\n                                \"apexName\",\n                                \"name\",\n                                \"projectId\",\n                                \"verified\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"List of domains associated with this environment\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of domains associated with this environment\"\n                          },\n                          \"currentDeploymentAliases\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"List of aliases for the current deployment\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"id\",\n                          \"slug\",\n                          \"type\",\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"accountLimit\",\n                    \"environments\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"gitBranch\",\n            \"description\": \"Fetch custom environments for a specific git branch\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Fetch custom environments for a specific git branch\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v9/projects/{idOrName}/custom-environments/{environmentSlugOrId}\": {\n      \"get\": {\n        \"description\": \"Retrieve a custom environment for the project. Must not be named 'Production' or 'Preview'.\",\n        \"operationId\": \"getCustomEnvironment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve a custom environment\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"URL-friendly name of the environment\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ],\n                      \"description\": \"The type of environment (production, preview, or development)\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"Optional description of the environment's purpose\"\n                    },\n                    \"branchMatcher\": {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"endsWith\",\n                            \"startsWith\",\n                            \"equals\"\n                          ],\n                          \"description\": \"The type of matching to perform\"\n                        },\n                        \"pattern\": {\n                          \"type\": \"string\",\n                          \"description\": \"The pattern to match against branch names\"\n                        }\n                      },\n                      \"required\": [\n                        \"pattern\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Configuration for matching git branches to this environment\"\n                    },\n                    \"domains\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"apexName\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"redirect\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"redirectStatusCode\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"enum\": [\n                              301,\n                              302,\n                              307,\n                              308\n                            ]\n                          },\n                          \"gitBranch\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"verified\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                          },\n                          \"verification\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"domain\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"domain\",\n                                \"reason\",\n                                \"type\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                          }\n                        },\n                        \"required\": [\n                          \"apexName\",\n                          \"name\",\n                          \"projectId\",\n                          \"verified\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"List of domains associated with this environment\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of domains associated with this environment\"\n                    },\n                    \"currentDeploymentAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of aliases for the current deployment\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was created\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was last updated\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"id\",\n                    \"slug\",\n                    \"type\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Internal representation of a custom environment with all required properties\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"environmentSlugOrId\",\n            \"description\": \"The unique custom environment identifier within the project\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique custom environment identifier within the project\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update a custom environment for the project. Must not be named 'Production' or 'Preview'.\",\n        \"operationId\": \"updateCustomEnvironment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a custom environment\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"URL-friendly name of the environment\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ],\n                      \"description\": \"The type of environment (production, preview, or development)\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"Optional description of the environment's purpose\"\n                    },\n                    \"branchMatcher\": {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"endsWith\",\n                            \"startsWith\",\n                            \"equals\"\n                          ],\n                          \"description\": \"The type of matching to perform\"\n                        },\n                        \"pattern\": {\n                          \"type\": \"string\",\n                          \"description\": \"The pattern to match against branch names\"\n                        }\n                      },\n                      \"required\": [\n                        \"pattern\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Configuration for matching git branches to this environment\"\n                    },\n                    \"domains\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"apexName\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"redirect\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"redirectStatusCode\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"enum\": [\n                              301,\n                              302,\n                              307,\n                              308\n                            ]\n                          },\n                          \"gitBranch\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"verified\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                          },\n                          \"verification\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"domain\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"domain\",\n                                \"reason\",\n                                \"type\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                          }\n                        },\n                        \"required\": [\n                          \"apexName\",\n                          \"name\",\n                          \"projectId\",\n                          \"verified\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"List of domains associated with this environment\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of domains associated with this environment\"\n                    },\n                    \"currentDeploymentAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of aliases for the current deployment\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was created\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was last updated\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"id\",\n                    \"slug\",\n                    \"type\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Internal representation of a custom environment with all required properties\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"environmentSlugOrId\",\n            \"description\": \"The unique custom environment identifier within the project\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique custom environment identifier within the project\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"slug\": {\n                    \"description\": \"The slug of the custom environment.\",\n                    \"type\": \"string\",\n                    \"maxLength\": 32\n                  },\n                  \"description\": {\n                    \"description\": \"Description of the custom environment. This is optional.\",\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"branchMatcher\": {\n                    \"required\": [\n                      \"type\",\n                      \"pattern\"\n                    ],\n                    \"description\": \"How we want to determine a matching branch. This is optional.\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"type\": {\n                        \"description\": \"Type of matcher. One of \\\\\\\"equals\\\\\\\", \\\\\\\"startsWith\\\\\\\", or \\\\\\\"endsWith\\\\\\\".\",\n                        \"enum\": [\n                          \"equals\",\n                          \"startsWith\",\n                          \"endsWith\"\n                        ]\n                      },\n                      \"pattern\": {\n                        \"description\": \"Git branch name or portion thereof.\",\n                        \"type\": \"string\",\n                        \"maxLength\": 100\n                      }\n                    },\n                    \"nullable\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"description\": \"Remove a custom environment for the project. Must not be named 'Production' or 'Preview'.\",\n        \"operationId\": \"removeCustomEnvironment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove a custom environment\",\n        \"tags\": [\n          \"environment\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unique identifier for the custom environment (format: env_*)\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"URL-friendly name of the environment\"\n                    },\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ],\n                      \"description\": \"The type of environment (production, preview, or development)\"\n                    },\n                    \"description\": {\n                      \"type\": \"string\",\n                      \"description\": \"Optional description of the environment's purpose\"\n                    },\n                    \"branchMatcher\": {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"endsWith\",\n                            \"startsWith\",\n                            \"equals\"\n                          ],\n                          \"description\": \"The type of matching to perform\"\n                        },\n                        \"pattern\": {\n                          \"type\": \"string\",\n                          \"description\": \"The pattern to match against branch names\"\n                        }\n                      },\n                      \"required\": [\n                        \"pattern\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Configuration for matching git branches to this environment\"\n                    },\n                    \"domains\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"apexName\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"redirect\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"redirectStatusCode\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"enum\": [\n                              301,\n                              302,\n                              307,\n                              308\n                            ]\n                          },\n                          \"gitBranch\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"verified\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                          },\n                          \"verification\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\"\n                                },\n                                \"domain\": {\n                                  \"type\": \"string\"\n                                },\n                                \"value\": {\n                                  \"type\": \"string\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"domain\",\n                                \"reason\",\n                                \"type\",\n                                \"value\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                          }\n                        },\n                        \"required\": [\n                          \"apexName\",\n                          \"name\",\n                          \"projectId\",\n                          \"verified\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"List of domains associated with this environment\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of domains associated with this environment\"\n                    },\n                    \"currentDeploymentAliases\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"List of aliases for the current deployment\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was created\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp when the environment was last updated\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"id\",\n                    \"slug\",\n                    \"type\",\n                    \"updatedAt\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Internal representation of a custom environment with all required properties\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"environmentSlugOrId\",\n            \"description\": \"The unique custom environment identifier within the project\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique custom environment identifier within the project\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"deleteUnassignedEnvironmentVariables\": {\n                    \"description\": \"Delete Environment Variables that are not assigned to any environments.\",\n                    \"type\": \"boolean\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v9/projects/{idOrName}/domains\": {\n      \"get\": {\n        \"description\": \"Retrieve the domains associated with a given project by passing either the project `id` or `name` in the URL.\",\n        \"operationId\": \"getProjectDomains\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve project domains by project by id or name\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response retrieving a list of domains\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"domains\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"apexName\": {\n                                \"type\": \"string\"\n                              },\n                              \"projectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"redirect\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"redirectStatusCode\": {\n                                \"nullable\": true,\n                                \"type\": \"number\",\n                                \"enum\": [\n                                  301,\n                                  302,\n                                  307,\n                                  308\n                                ]\n                              },\n                              \"gitBranch\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"customEnvironmentId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"verified\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                              },\n                              \"verification\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"domain\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"reason\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"domain\",\n                                    \"reason\",\n                                    \"type\",\n                                    \"value\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                },\n                                \"type\": \"array\",\n                                \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                              }\n                            },\n                            \"required\": [\n                              \"apexName\",\n                              \"name\",\n                              \"projectId\",\n                              \"verified\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"properties\": {\n                            \"count\": {\n                              \"type\": \"number\"\n                            },\n                            \"next\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            },\n                            \"prev\": {\n                              \"nullable\": true,\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"count\",\n                            \"next\",\n                            \"prev\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"domains\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"domains\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"apexName\": {\n                                \"type\": \"string\"\n                              },\n                              \"projectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"redirect\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"redirectStatusCode\": {\n                                \"nullable\": true,\n                                \"type\": \"number\",\n                                \"enum\": [\n                                  301,\n                                  302,\n                                  307,\n                                  308\n                                ]\n                              },\n                              \"gitBranch\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"customEnvironmentId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"verified\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                              },\n                              \"verification\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"domain\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"reason\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"domain\",\n                                    \"reason\",\n                                    \"type\",\n                                    \"value\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                                },\n                                \"type\": \"array\",\n                                \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                              }\n                            },\n                            \"required\": [\n                              \"apexName\",\n                              \"name\",\n                              \"projectId\",\n                              \"verified\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"$ref\": \"#/components/schemas/Pagination\"\n                        }\n                      },\n                      \"required\": [\n                        \"domains\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"oneOf\": [\n                {\n                  \"type\": \"string\"\n                }\n              ]\n            }\n          },\n          {\n            \"name\": \"production\",\n            \"description\": \"Filters only production domains when set to `true`.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"default\": \"false\",\n              \"description\": \"Filters only production domains when set to `true`.\",\n              \"enum\": [\n                \"true\",\n                \"false\"\n              ]\n            }\n          },\n          {\n            \"name\": \"target\",\n            \"description\": \"Filters on the target of the domain. Can be either \\\\\\\"production\\\\\\\", \\\\\\\"preview\\\\\\\"\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filters on the target of the domain. Can be either \\\\\\\"production\\\\\\\", \\\\\\\"preview\\\\\\\"\",\n              \"enum\": [\n                \"production\",\n                \"preview\"\n              ],\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"customEnvironmentId\",\n            \"description\": \"The unique custom environment identifier within the project\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"The unique custom environment identifier within the project\",\n              \"type\": \"string\",\n              \"example\": \"env_123abc4567\"\n            }\n          },\n          {\n            \"name\": \"gitBranch\",\n            \"description\": \"Filters domains based on specific branch.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filters domains based on specific branch.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"redirects\",\n            \"description\": \"Excludes redirect project domains when \\\\\\\"false\\\\\\\". Includes redirect project domains when \\\\\\\"true\\\\\\\" (default).\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"default\": \"true\",\n              \"description\": \"Excludes redirect project domains when \\\\\\\"false\\\\\\\". Includes redirect project domains when \\\\\\\"true\\\\\\\" (default).\",\n              \"enum\": [\n                \"true\",\n                \"false\"\n              ]\n            }\n          },\n          {\n            \"name\": \"redirect\",\n            \"description\": \"Filters domains based on their redirect target.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filters domains based on their redirect target.\",\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"name\": \"verified\",\n            \"description\": \"Filters domains based on their verification status.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filters domains based on their verification status.\",\n              \"enum\": [\n                \"true\",\n                \"false\"\n              ]\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of domains to list from a request (max 100).\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of domains to list from a request (max 100).\",\n              \"type\": \"number\",\n              \"example\": 20\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get domains created after this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get domains created after this JavaScript timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1609499532000\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get domains created before this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get domains created before this JavaScript timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1612264332000\n            }\n          },\n          {\n            \"name\": \"order\",\n            \"description\": \"Domains sort order by createdAt\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"default\": \"DESC\",\n              \"description\": \"Domains sort order by createdAt\",\n              \"enum\": [\n                \"ASC\",\n                \"DESC\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v9/projects/{idOrName}/domains/{domain}\": {\n      \"get\": {\n        \"description\": \"Get project domain by project id/name and domain name.\",\n        \"operationId\": \"getProjectDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a project domain\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"apexName\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"redirect\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"redirectStatusCode\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"enum\": [\n                        301,\n                        302,\n                        307,\n                        308\n                      ]\n                    },\n                    \"gitBranch\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"customEnvironmentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"verified\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                    },\n                    \"verification\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"domain\": {\n                            \"type\": \"string\"\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"domain\",\n                          \"reason\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                    }\n                  },\n                  \"required\": [\n                    \"apexName\",\n                    \"name\",\n                    \"projectId\",\n                    \"verified\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"domain\",\n            \"description\": \"The project domain name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project domain name\",\n              \"type\": \"string\",\n              \"example\": \"www.example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update a project domain's configuration, including the name, git branch and redirect of the domain.\",\n        \"operationId\": \"updateProjectDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a project domain\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The domain was updated successfuly\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"apexName\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"redirect\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"redirectStatusCode\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"enum\": [\n                        301,\n                        302,\n                        307,\n                        308\n                      ]\n                    },\n                    \"gitBranch\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"customEnvironmentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"verified\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                    },\n                    \"verification\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"domain\": {\n                            \"type\": \"string\"\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"domain\",\n                          \"reason\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                    }\n                  },\n                  \"required\": [\n                    \"apexName\",\n                    \"name\",\n                    \"projectId\",\n                    \"verified\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nThe domain redirect is not valid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"The project is currently being transferred\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"domain\",\n            \"description\": \"The project domain name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project domain name\",\n              \"type\": \"string\",\n              \"example\": \"www.example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"gitBranch\": {\n                    \"description\": \"Git branch to link the project domain\",\n                    \"example\": null,\n                    \"type\": \"string\",\n                    \"maxLength\": 250,\n                    \"nullable\": true\n                  },\n                  \"redirect\": {\n                    \"description\": \"Target destination domain for redirect\",\n                    \"example\": \"foobar.com\",\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"redirectStatusCode\": {\n                    \"description\": \"Status code for domain redirect\",\n                    \"example\": 307,\n                    \"type\": \"integer\",\n                    \"enum\": [\n                      null,\n                      301,\n                      302,\n                      307,\n                      308\n                    ],\n                    \"nullable\": true\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"delete\": {\n        \"description\": \"Remove a domain from a project by passing the domain name and by specifying the project by either passing the project `id` or `name` in the URL.\",\n        \"operationId\": \"removeProjectDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove a domain from a project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The domain was succesfully removed from the project\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The project is currently being transferred\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"domain\",\n            \"description\": \"The project domain name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project domain name\",\n              \"type\": \"string\",\n              \"example\": \"www.example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"removeRedirects\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Whether to remove all domains from this project that redirect to the domain being removed.\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v10/projects/{idOrName}/domains\": {\n      \"post\": {\n        \"description\": \"Add a domain to the project by passing its domain name and by specifying the project by either passing the project `id` or `name` in the URL. If the domain is not yet verified to be used on this project, the request will return `verified = false`, and the domain will need to be verified according to the `verification` challenge via `POST /projects/:idOrName/domains/:domain/verify`. If the domain already exists on the project, the request will fail with a `400` status code.\",\n        \"operationId\": \"addProjectDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Add a domain to a project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The domain was successfully added to the project\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"apexName\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"redirect\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"redirectStatusCode\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"enum\": [\n                        301,\n                        302,\n                        307,\n                        308\n                      ]\n                    },\n                    \"gitBranch\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"customEnvironmentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"verified\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                    },\n                    \"verification\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"domain\": {\n                            \"type\": \"string\"\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"domain\",\n                          \"reason\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                    }\n                  },\n                  \"required\": [\n                    \"apexName\",\n                    \"name\",\n                    \"projectId\",\n                    \"verified\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nThe domain is not valid\\nYou can't set both a git branch and a redirect for the domain\\nThe domain can not be added because the latest production deployment for the project was not successful\\nThe domain redirect is not valid\\nA domain cannot redirect to itself\\nYou can not set the production branch as a branch for your domain\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nYou don't have access to the domain you are adding\"\n          },\n          \"409\": {\n            \"description\": \"The domain is already assigned to another Vercel project\\nCannot create project domain since owner already has `domain` on their account, but it's not verified yet.\\nCannot create project domain since owner already has `domain` on their account, and it's verified.\\nThe domain is not allowed to be used\\nThe project is currently being transferred\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"name\": {\n                    \"description\": \"The project domain name\",\n                    \"example\": \"www.example.com\",\n                    \"type\": \"string\"\n                  },\n                  \"gitBranch\": {\n                    \"description\": \"Git branch to link the project domain\",\n                    \"example\": null,\n                    \"maxLength\": 250,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"customEnvironmentId\": {\n                    \"description\": \"The unique custom environment identifier within the project\",\n                    \"type\": \"string\"\n                  },\n                  \"redirect\": {\n                    \"description\": \"Target destination domain for redirect\",\n                    \"example\": \"foobar.com\",\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"redirectStatusCode\": {\n                    \"description\": \"Status code for domain redirect\",\n                    \"example\": 307,\n                    \"type\": \"integer\",\n                    \"enum\": [\n                      null,\n                      301,\n                      302,\n                      307,\n                      308\n                    ],\n                    \"nullable\": true\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ],\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/projects/{idOrName}/domains/{domain}/move\": {\n      \"post\": {\n        \"description\": \"Move one project's domain to another project. Also allows the move of all redirects pointed to that domain in the same project.\",\n        \"operationId\": \"moveProjectDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Move a project domain\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The domain was updated successfuly\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"apexName\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"redirect\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"redirectStatusCode\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"enum\": [\n                        301,\n                        302,\n                        307,\n                        308\n                      ]\n                    },\n                    \"gitBranch\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"customEnvironmentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"verified\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                    },\n                    \"verification\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\"\n                          },\n                          \"domain\": {\n                            \"type\": \"string\"\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"domain\",\n                          \"reason\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of verification challenges, one of which must be completed to verify the domain for use on the project. After the challenge is complete `POST /projects/:idOrName/domains/:domain/verify` to verify the domain. Possible challenges: - If `verification.type = TXT` the `verification.domain` will be checked for a TXT record matching `verification.value`.\"\n                    }\n                  },\n                  \"required\": [\n                    \"apexName\",\n                    \"name\",\n                    \"projectId\",\n                    \"verified\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nThe domain redirect is not valid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"The project is currently being transferred\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"domain\",\n            \"description\": \"The project domain name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The project domain name\",\n              \"type\": \"string\",\n              \"example\": \"www.example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"required\": [\n                  \"projectId\"\n                ],\n                \"properties\": {\n                  \"projectId\": {\n                    \"description\": \"The unique target project identifier\",\n                    \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      }\n                    ]\n                  },\n                  \"gitBranch\": {\n                    \"description\": \"Git branch to link the project domain\",\n                    \"example\": null,\n                    \"type\": \"string\",\n                    \"maxLength\": 250,\n                    \"nullable\": true\n                  },\n                  \"redirect\": {\n                    \"description\": \"Target destination domain for redirect\",\n                    \"example\": \"foobar.com\",\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  },\n                  \"redirectStatusCode\": {\n                    \"description\": \"Status code for domain redirect\",\n                    \"example\": 307,\n                    \"type\": \"integer\",\n                    \"enum\": [\n                      null,\n                      301,\n                      302,\n                      307,\n                      308\n                    ],\n                    \"nullable\": true\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v9/projects/{idOrName}/domains/{domain}/verify\": {\n      \"post\": {\n        \"description\": \"Attempts to verify a project domain with `verified = false` by checking the correctness of the project domain's `verification` challenge.\",\n        \"operationId\": \"verifyProjectDomain\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Verify project domain\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The project domain was verified successfully\\nDomain is already verified\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"name\": {\n                      \"type\": \"string\"\n                    },\n                    \"apexName\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectId\": {\n                      \"type\": \"string\"\n                    },\n                    \"redirect\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"redirectStatusCode\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"enum\": [\n                        301,\n                        302,\n                        307,\n                        308\n                      ]\n                    },\n                    \"gitBranch\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"customEnvironmentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"verified\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"`true` if the domain is verified for use with the project. If `false` it will not be used as an alias on this project until the challenge in `verification` is completed.\"\n                    }\n                  },\n                  \"required\": [\n                    \"apexName\",\n                    \"name\",\n                    \"projectId\",\n                    \"verified\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\\nThere is an existing TXT record on the domain verifying it for another project\\nThe domain does not have a TXT record that attempts to verify the project domain\\nThe TXT record on the domain does not match the expected challenge for the project domain\\nProject domain is not assigned to project\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"domain\",\n            \"description\": \"The domain name you want to verify\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The domain name you want to verify\",\n              \"type\": \"string\",\n              \"example\": \"example.com\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v10/projects/{idOrName}/env\": {\n      \"get\": {\n        \"description\": \"Retrieve the environment variables for a given project by passing either the project `id` or `name` in the URL.\",\n        \"operationId\": \"filterProjectEnvs\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve the environment variables of a project by id or name\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The list of environment variables for the given project\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"target\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\",\n                                \"preview\",\n                                \"development\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"secret\",\n                            \"system\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ]\n                        },\n                        \"sunsetSecretId\": {\n                          \"type\": \"string\",\n                          \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                        },\n                        \"legacyValue\": {\n                          \"type\": \"string\",\n                          \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                        },\n                        \"decrypted\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"vsmValue\": {\n                          \"type\": \"string\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"key\": {\n                          \"type\": \"string\"\n                        },\n                        \"configurationId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"createdBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"updatedBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"gitBranch\": {\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigTokenId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"contentHint\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-read-only-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blob-read-write-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-non-pooling\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-prisma-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-user\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-host\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-password\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-database\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-no-ssl\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration-store-secret\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationProductId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"integrationProductId\",\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"flags-connection-string\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"internalContentHint\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags-secret\"\n                              ]\n                            },\n                            \"encryptedValue\": {\n                              \"type\": \"string\",\n                              \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                            }\n                          },\n                          \"required\": [\n                            \"encryptedValue\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\"\n                        },\n                        \"customEnvironmentIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"system\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"key\",\n                        \"type\",\n                        \"value\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"envs\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"secret\",\n                                  \"system\",\n                                  \"encrypted\",\n                                  \"plain\",\n                                  \"sensitive\"\n                                ]\n                              },\n                              \"sunsetSecretId\": {\n                                \"type\": \"string\",\n                                \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                              },\n                              \"legacyValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                              },\n                              \"decrypted\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"value\": {\n                                \"type\": \"string\"\n                              },\n                              \"vsmValue\": {\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"updatedBy\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"edgeConfigId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"edgeConfigTokenId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"contentHint\": {\n                                \"nullable\": true,\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-read-only-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"blob-read-write-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url-non-pooling\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-prisma-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-user\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-host\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-password\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-database\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url-no-ssl\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration-store-secret\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationProductId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationConfigurationId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"integrationConfigurationId\",\n                                      \"integrationId\",\n                                      \"integrationProductId\",\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"flags-connection-string\"\n                                        ]\n                                      },\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"projectId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"internalContentHint\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-secret\"\n                                    ]\n                                  },\n                                  \"encryptedValue\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"encryptedValue\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                              },\n                              \"comment\": {\n                                \"type\": \"string\"\n                              },\n                              \"customEnvironmentIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"system\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"key\",\n                              \"type\",\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"$ref\": \"#/components/schemas/Pagination\"\n                        }\n                      },\n                      \"required\": [\n                        \"envs\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"envs\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"secret\",\n                                  \"system\",\n                                  \"encrypted\",\n                                  \"plain\",\n                                  \"sensitive\"\n                                ]\n                              },\n                              \"sunsetSecretId\": {\n                                \"type\": \"string\",\n                                \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                              },\n                              \"legacyValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                              },\n                              \"decrypted\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"value\": {\n                                \"type\": \"string\"\n                              },\n                              \"vsmValue\": {\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"updatedBy\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"edgeConfigId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"edgeConfigTokenId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"contentHint\": {\n                                \"nullable\": true,\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-read-only-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"blob-read-write-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url-non-pooling\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-prisma-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-user\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-host\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-password\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-database\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url-no-ssl\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration-store-secret\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationProductId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationConfigurationId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"integrationConfigurationId\",\n                                      \"integrationId\",\n                                      \"integrationProductId\",\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"flags-connection-string\"\n                                        ]\n                                      },\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"projectId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"internalContentHint\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-secret\"\n                                    ]\n                                  },\n                                  \"encryptedValue\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"encryptedValue\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                              },\n                              \"comment\": {\n                                \"type\": \"string\"\n                              },\n                              \"customEnvironmentIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"system\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"key\",\n                              \"type\",\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"envs\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The list of environment variables for the given project\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\",\n              \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\"\n            }\n          },\n          {\n            \"name\": \"gitBranch\",\n            \"description\": \"If defined, the git branch of the environment variable to filter the results (must have target=preview)\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"If defined, the git branch of the environment variable to filter the results (must have target=preview)\",\n              \"type\": \"string\",\n              \"maxLength\": 250,\n              \"example\": \"feature-1\"\n            }\n          },\n          {\n            \"name\": \"decrypt\",\n            \"description\": \"If true, the environment variable value will be decrypted\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"If true, the environment variable value will be decrypted\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"true\",\n                \"false\"\n              ],\n              \"example\": \"true\",\n              \"deprecated\": true\n            }\n          },\n          {\n            \"name\": \"source\",\n            \"description\": \"The source that is calling the endpoint.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"The source that is calling the endpoint.\",\n              \"type\": \"string\",\n              \"example\": \"vercel-cli:pull\"\n            }\n          },\n          {\n            \"name\": \"customEnvironmentId\",\n            \"description\": \"The unique custom environment identifier within the project\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique custom environment identifier within the project\",\n              \"example\": \"env_123abc4567\"\n            }\n          },\n          {\n            \"name\": \"customEnvironmentSlug\",\n            \"description\": \"The custom environment slug (name) within the project\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The custom environment slug (name) within the project\",\n              \"example\": \"my-custom-env\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      },\n      \"post\": {\n        \"description\": \"Create one or more environment variables for a project by passing its `key`, `value`, `type` and `target` and by specifying the project by either passing the project `id` or `name` in the URL. If you include `upsert=true` as a query parameter, a new environment variable will not be created if it already exists but, the existing variable's value will be updated.\",\n        \"operationId\": \"createProjectEnv\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create one or more environment variables\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"The environment variable was created successfully\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"created\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"target\": {\n                              \"oneOf\": [\n                                {\n                                  \"items\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\"\n                                  ]\n                                }\n                              ]\n                            },\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"secret\",\n                                \"system\",\n                                \"encrypted\",\n                                \"plain\",\n                                \"sensitive\"\n                              ]\n                            },\n                            \"sunsetSecretId\": {\n                              \"type\": \"string\",\n                              \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                            },\n                            \"legacyValue\": {\n                              \"type\": \"string\",\n                              \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                            },\n                            \"decrypted\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            },\n                            \"vsmValue\": {\n                              \"type\": \"string\"\n                            },\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"key\": {\n                              \"type\": \"string\"\n                            },\n                            \"configurationId\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"createdBy\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"updatedBy\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"gitBranch\": {\n                              \"type\": \"string\"\n                            },\n                            \"edgeConfigId\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"edgeConfigTokenId\": {\n                              \"nullable\": true,\n                              \"type\": \"string\"\n                            },\n                            \"contentHint\": {\n                              \"nullable\": true,\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"redis-url\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"redis-rest-api-url\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"redis-rest-api-token\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"redis-rest-api-read-only-token\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"blob-read-write-token\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-url\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-url-non-pooling\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-prisma-url\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-user\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-host\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-password\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-database\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"postgres-url-no-ssl\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"integration-store-secret\"\n                                      ]\n                                    },\n                                    \"storeId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"integrationId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"integrationProductId\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"integrationConfigurationId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"integrationConfigurationId\",\n                                    \"integrationId\",\n                                    \"integrationProductId\",\n                                    \"storeId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"flags-connection-string\"\n                                      ]\n                                    },\n                                    \"projectId\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"projectId\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                }\n                              ]\n                            },\n                            \"internalContentHint\": {\n                              \"nullable\": true,\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"flags-secret\"\n                                  ]\n                                },\n                                \"encryptedValue\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                }\n                              },\n                              \"required\": [\n                                \"encryptedValue\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                            },\n                            \"comment\": {\n                              \"type\": \"string\"\n                            },\n                            \"customEnvironmentIds\": {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"system\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"key\",\n                            \"type\",\n                            \"value\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"items\": {\n                            \"properties\": {\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"secret\",\n                                  \"system\",\n                                  \"encrypted\",\n                                  \"plain\",\n                                  \"sensitive\"\n                                ]\n                              },\n                              \"sunsetSecretId\": {\n                                \"type\": \"string\",\n                                \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                              },\n                              \"legacyValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                              },\n                              \"decrypted\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"value\": {\n                                \"type\": \"string\"\n                              },\n                              \"vsmValue\": {\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"updatedBy\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"edgeConfigId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"edgeConfigTokenId\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"contentHint\": {\n                                \"nullable\": true,\n                                \"oneOf\": [\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"redis-rest-api-read-only-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"blob-read-write-token\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url-non-pooling\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-prisma-url\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-user\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-host\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-password\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-database\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"postgres-url-no-ssl\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"integration-store-secret\"\n                                        ]\n                                      },\n                                      \"storeId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationProductId\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"integrationConfigurationId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"integrationConfigurationId\",\n                                      \"integrationId\",\n                                      \"integrationProductId\",\n                                      \"storeId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  },\n                                  {\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"flags-connection-string\"\n                                        ]\n                                      },\n                                      \"projectId\": {\n                                        \"type\": \"string\"\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"projectId\",\n                                      \"type\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                ]\n                              },\n                              \"internalContentHint\": {\n                                \"nullable\": true,\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-secret\"\n                                    ]\n                                  },\n                                  \"encryptedValue\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"encryptedValue\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                              },\n                              \"comment\": {\n                                \"type\": \"string\"\n                              },\n                              \"customEnvironmentIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"system\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"key\",\n                              \"type\",\n                              \"value\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      ]\n                    },\n                    \"failed\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"error\": {\n                            \"properties\": {\n                              \"code\": {\n                                \"type\": \"string\"\n                              },\n                              \"message\": {\n                                \"type\": \"string\"\n                              },\n                              \"key\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarId\": {\n                                \"type\": \"string\"\n                              },\n                              \"envVarKey\": {\n                                \"type\": \"string\"\n                              },\n                              \"action\": {\n                                \"type\": \"string\"\n                              },\n                              \"link\": {\n                                \"type\": \"string\"\n                              },\n                              \"value\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                ]\n                              },\n                              \"gitBranch\": {\n                                \"type\": \"string\"\n                              },\n                              \"target\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"production\",\n                                        \"preview\",\n                                        \"development\",\n                                        \"preview\",\n                                        \"development\"\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"production\",\n                                      \"preview\",\n                                      \"development\"\n                                    ]\n                                  }\n                                ]\n                              },\n                              \"project\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"code\",\n                              \"message\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"error\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"created\",\n                    \"failed\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nThe environment variable coudn't be created because an ongoing update env update is already happening\\nThe environment variable coudn't be created because project document is too large\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nThe environment variable cannot be created because it already exists\\nAdditional permissions are required to create production environment variables\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The project is being transfered and creating an environment variable is not possible\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\",\n              \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\"\n            }\n          },\n          {\n            \"name\": \"upsert\",\n            \"description\": \"Allow override of environment variable if it already exists\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Allow override of environment variable if it already exists\",\n              \"type\": \"string\",\n              \"example\": \"true\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"oneOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"key\",\n                      \"value\",\n                      \"type\"\n                    ],\n                    \"anyOf\": [\n                      {\n                        \"required\": [\n                          \"target\"\n                        ]\n                      },\n                      {\n                        \"required\": [\n                          \"customEnvironmentIds\"\n                        ]\n                      }\n                    ],\n                    \"properties\": {\n                      \"key\": {\n                        \"description\": \"The name of the environment variable\",\n                        \"type\": \"string\",\n                        \"example\": \"API_URL\"\n                      },\n                      \"value\": {\n                        \"description\": \"The value of the environment variable\",\n                        \"type\": \"string\",\n                        \"example\": \"https://api.vercel.com\"\n                      },\n                      \"type\": {\n                        \"description\": \"The type of environment variable\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"system\",\n                          \"secret\",\n                          \"encrypted\",\n                          \"plain\",\n                          \"sensitive\"\n                        ],\n                        \"example\": \"plain\"\n                      },\n                      \"target\": {\n                        \"description\": \"The target environment of the environment variable\",\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"enum\": [\n                            \"production\",\n                            \"preview\",\n                            \"development\"\n                          ]\n                        },\n                        \"example\": [\n                          \"preview\"\n                        ]\n                      },\n                      \"gitBranch\": {\n                        \"description\": \"If defined, the git branch of the environment variable (must have target=preview)\",\n                        \"type\": \"string\",\n                        \"maxLength\": 250,\n                        \"example\": \"feature-1\",\n                        \"nullable\": true\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A comment to add context on what this environment variable is for\",\n                        \"example\": \"database connection string for production\",\n                        \"maxLength\": 500\n                      },\n                      \"customEnvironmentIds\": {\n                        \"type\": \"array\",\n                        \"description\": \"The custom environment IDs associated with the environment variable\",\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"example\": \"env_1234567890\"\n                        }\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"required\": [\n                        \"key\",\n                        \"value\",\n                        \"type\"\n                      ],\n                      \"anyOf\": [\n                        {\n                          \"required\": [\n                            \"target\"\n                          ]\n                        },\n                        {\n                          \"required\": [\n                            \"customEnvironmentIds\"\n                          ]\n                        }\n                      ],\n                      \"properties\": {\n                        \"key\": {\n                          \"description\": \"The name of the environment variable\",\n                          \"type\": \"string\",\n                          \"example\": \"API_URL\"\n                        },\n                        \"value\": {\n                          \"description\": \"The value of the environment variable\",\n                          \"type\": \"string\",\n                          \"example\": \"https://api.vercel.com\"\n                        },\n                        \"type\": {\n                          \"description\": \"The type of environment variable\",\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"system\",\n                            \"secret\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ],\n                          \"example\": \"plain\"\n                        },\n                        \"target\": {\n                          \"description\": \"The target environment of the environment variable\",\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ]\n                          },\n                          \"example\": [\n                            \"preview\"\n                          ]\n                        },\n                        \"gitBranch\": {\n                          \"description\": \"If defined, the git branch of the environment variable (must have target=preview)\",\n                          \"type\": \"string\",\n                          \"maxLength\": 250,\n                          \"example\": \"feature-1\",\n                          \"nullable\": true\n                        },\n                        \"comment\": {\n                          \"type\": \"string\",\n                          \"description\": \"A comment to add context on what this environment variable is for\",\n                          \"example\": \"database connection string for production\",\n                          \"maxLength\": 500\n                        },\n                        \"customEnvironmentIds\": {\n                          \"type\": \"array\",\n                          \"description\": \"The custom environment IDs associated with the environment variable\",\n                          \"items\": {\n                            \"type\": \"string\",\n                            \"example\": \"env_1234567890\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/projects/{idOrName}/env/{id}\": {\n      \"get\": {\n        \"description\": \"Retrieve the environment variable for a given project.\",\n        \"operationId\": \"getProjectEnv\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Retrieve the decrypted value of an environment variable of a project by id\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"decrypted\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"secret\",\n                            \"system\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ]\n                        },\n                        \"edgeConfigId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigTokenId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"target\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"key\": {\n                          \"type\": \"string\"\n                        },\n                        \"gitBranch\": {\n                          \"type\": \"string\"\n                        },\n                        \"updatedBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"sunsetSecretId\": {\n                          \"type\": \"string\",\n                          \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                        },\n                        \"legacyValue\": {\n                          \"type\": \"string\",\n                          \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                        },\n                        \"configurationId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"contentHint\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-read-only-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blob-read-write-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-non-pooling\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-prisma-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-user\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-host\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-password\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-database\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-no-ssl\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration-store-secret\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationProductId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"integrationProductId\",\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"flags-connection-string\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"internalContentHint\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags-secret\"\n                              ]\n                            },\n                            \"encryptedValue\": {\n                              \"type\": \"string\",\n                              \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                            }\n                          },\n                          \"required\": [\n                            \"encryptedValue\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\"\n                        },\n                        \"customEnvironmentIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"decrypted\",\n                        \"key\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"secret\",\n                            \"system\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ]\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigTokenId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"target\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"key\": {\n                          \"type\": \"string\"\n                        },\n                        \"gitBranch\": {\n                          \"type\": \"string\"\n                        },\n                        \"updatedBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"sunsetSecretId\": {\n                          \"type\": \"string\",\n                          \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                        },\n                        \"legacyValue\": {\n                          \"type\": \"string\",\n                          \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                        },\n                        \"decrypted\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"configurationId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"contentHint\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-read-only-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blob-read-write-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-non-pooling\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-prisma-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-user\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-host\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-password\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-database\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-no-ssl\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration-store-secret\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationProductId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"integrationProductId\",\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"flags-connection-string\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"internalContentHint\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags-secret\"\n                              ]\n                            },\n                            \"encryptedValue\": {\n                              \"type\": \"string\",\n                              \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                            }\n                          },\n                          \"required\": [\n                            \"encryptedValue\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\"\n                        },\n                        \"customEnvironmentIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"key\",\n                        \"type\",\n                        \"value\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\",\n              \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\"\n            }\n          },\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique ID for the environment variable to get the decrypted value.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique ID for the environment variable to get the decrypted value.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v9/projects/{idOrName}/env/{id}\": {\n      \"delete\": {\n        \"description\": \"Delete a specific environment variable for a given project by passing the environment variable identifier and either passing the project `id` or `name` in the URL.\",\n        \"operationId\": \"removeProjectEnv\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove an environment variable\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The environment variable was successfully removed\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"items\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"secret\",\n                              \"system\",\n                              \"encrypted\",\n                              \"plain\",\n                              \"sensitive\"\n                            ]\n                          },\n                          \"value\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigTokenId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"createdBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"target\": {\n                            \"oneOf\": [\n                              {\n                                \"items\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\",\n                                    \"preview\",\n                                    \"development\"\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              }\n                            ]\n                          },\n                          \"key\": {\n                            \"type\": \"string\"\n                          },\n                          \"gitBranch\": {\n                            \"type\": \"string\"\n                          },\n                          \"updatedBy\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"sunsetSecretId\": {\n                            \"type\": \"string\",\n                            \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                          },\n                          \"legacyValue\": {\n                            \"type\": \"string\",\n                            \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                          },\n                          \"decrypted\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"configurationId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"contentHint\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"redis-rest-api-read-only-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"blob-read-write-token\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-non-pooling\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-prisma-url\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-user\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-host\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-password\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-database\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"postgres-url-no-ssl\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"integration-store-secret\"\n                                    ]\n                                  },\n                                  \"storeId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationProductId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"integrationConfigurationId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"integrationConfigurationId\",\n                                  \"integrationId\",\n                                  \"integrationProductId\",\n                                  \"storeId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"flags-connection-string\"\n                                    ]\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"projectId\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"internalContentHint\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"flags-secret\"\n                                ]\n                              },\n                              \"encryptedValue\": {\n                                \"type\": \"string\",\n                                \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                              }\n                            },\n                            \"required\": [\n                              \"encryptedValue\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                          },\n                          \"comment\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvironmentIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"key\",\n                          \"type\",\n                          \"value\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    {\n                      \"properties\": {\n                        \"system\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"secret\",\n                            \"system\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ]\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigTokenId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"target\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"key\": {\n                          \"type\": \"string\"\n                        },\n                        \"gitBranch\": {\n                          \"type\": \"string\"\n                        },\n                        \"updatedBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"sunsetSecretId\": {\n                          \"type\": \"string\",\n                          \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                        },\n                        \"legacyValue\": {\n                          \"type\": \"string\",\n                          \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                        },\n                        \"decrypted\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"configurationId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"contentHint\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-read-only-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blob-read-write-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-non-pooling\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-prisma-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-user\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-host\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-password\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-database\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-no-ssl\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration-store-secret\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationProductId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"integrationProductId\",\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"flags-connection-string\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"internalContentHint\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags-secret\"\n                              ]\n                            },\n                            \"encryptedValue\": {\n                              \"type\": \"string\",\n                              \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                            }\n                          },\n                          \"required\": [\n                            \"encryptedValue\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\"\n                        },\n                        \"customEnvironmentIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"key\",\n                        \"type\",\n                        \"value\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"secret\",\n                            \"system\",\n                            \"encrypted\",\n                            \"plain\",\n                            \"sensitive\"\n                          ]\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"edgeConfigTokenId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"createdAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"createdBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"target\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"production\",\n                                  \"preview\",\n                                  \"development\",\n                                  \"preview\",\n                                  \"development\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"production\",\n                                \"preview\",\n                                \"development\"\n                              ]\n                            }\n                          ]\n                        },\n                        \"key\": {\n                          \"type\": \"string\"\n                        },\n                        \"gitBranch\": {\n                          \"type\": \"string\"\n                        },\n                        \"updatedBy\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"sunsetSecretId\": {\n                          \"type\": \"string\",\n                          \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                        },\n                        \"legacyValue\": {\n                          \"type\": \"string\",\n                          \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                        },\n                        \"decrypted\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"configurationId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\"\n                        },\n                        \"contentHint\": {\n                          \"nullable\": true,\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"redis-rest-api-read-only-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blob-read-write-token\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-non-pooling\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-prisma-url\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-user\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-host\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-password\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-database\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"postgres-url-no-ssl\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"integration-store-secret\"\n                                  ]\n                                },\n                                \"storeId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationProductId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"integrationConfigurationId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"integrationConfigurationId\",\n                                \"integrationId\",\n                                \"integrationProductId\",\n                                \"storeId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"flags-connection-string\"\n                                  ]\n                                },\n                                \"projectId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"projectId\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"internalContentHint\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags-secret\"\n                              ]\n                            },\n                            \"encryptedValue\": {\n                              \"type\": \"string\",\n                              \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                            }\n                          },\n                          \"required\": [\n                            \"encryptedValue\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                        },\n                        \"comment\": {\n                          \"type\": \"string\"\n                        },\n                        \"customEnvironmentIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"key\",\n                        \"type\",\n                        \"value\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The project is being transfered and removing an environment variable is not possible\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\",\n              \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\"\n            }\n          },\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique environment variable identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique environment variable identifier\",\n              \"type\": \"string\",\n              \"example\": \"XMbOEya1gUUO1ir4\"\n            }\n          },\n          {\n            \"name\": \"customEnvironmentId\",\n            \"description\": \"The unique custom environment identifier within the project\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique custom environment identifier within the project\",\n              \"example\": \"env_123abc4567\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Edit a specific environment variable for a given project by passing the environment variable identifier and either passing the project `id` or `name` in the URL.\",\n        \"operationId\": \"editProjectEnv\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Edit an environment variable\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The environment variable was successfully edited\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"nullable\": true,\n                  \"properties\": {\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"secret\",\n                        \"system\",\n                        \"encrypted\",\n                        \"plain\",\n                        \"sensitive\"\n                      ]\n                    },\n                    \"value\": {\n                      \"type\": \"string\"\n                    },\n                    \"edgeConfigId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"edgeConfigTokenId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdBy\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"target\": {\n                      \"oneOf\": [\n                        {\n                          \"items\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\",\n                              \"preview\",\n                              \"development\"\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\",\n                            \"development\",\n                            \"preview\",\n                            \"development\"\n                          ]\n                        }\n                      ]\n                    },\n                    \"key\": {\n                      \"type\": \"string\"\n                    },\n                    \"gitBranch\": {\n                      \"type\": \"string\"\n                    },\n                    \"updatedBy\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"sunsetSecretId\": {\n                      \"type\": \"string\",\n                      \"description\": \"This is used to identify variables that have been migrated from type secret to sensitive.\"\n                    },\n                    \"legacyValue\": {\n                      \"type\": \"string\",\n                      \"description\": \"Legacy now-encryption ciphertext, present after migration swaps value/vsmValue\"\n                    },\n                    \"decrypted\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"configurationId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\"\n                    },\n                    \"contentHint\": {\n                      \"nullable\": true,\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"redis-url\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"redis-rest-api-url\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"redis-rest-api-token\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"redis-rest-api-read-only-token\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"blob-read-write-token\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-url\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-url-non-pooling\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-prisma-url\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-user\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-host\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-password\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-database\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"postgres-url-no-ssl\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"integration-store-secret\"\n                              ]\n                            },\n                            \"storeId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationProductId\": {\n                              \"type\": \"string\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"integrationConfigurationId\",\n                            \"integrationId\",\n                            \"integrationProductId\",\n                            \"storeId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"flags-connection-string\"\n                              ]\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"internalContentHint\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"flags-secret\"\n                          ]\n                        },\n                        \"encryptedValue\": {\n                          \"type\": \"string\",\n                          \"description\": \"Contains the `value` of the env variable, encrypted with a special key to make decryption possible in the subscriber Lambda.\"\n                        }\n                      },\n                      \"required\": [\n                        \"encryptedValue\",\n                        \"type\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Similar to `contentHints`, but should not be exposed to the user.\"\n                    },\n                    \"comment\": {\n                      \"type\": \"string\"\n                    },\n                    \"customEnvironmentIds\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"key\",\n                    \"type\",\n                    \"value\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nAt least one environment variable failed validation\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"The project is being transfered and removing an environment variable is not possible\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\",\n              \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\"\n            }\n          },\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique environment variable identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique environment variable identifier\",\n              \"type\": \"string\",\n              \"example\": \"XMbOEya1gUUO1ir4\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"key\": {\n                    \"description\": \"The name of the environment variable\",\n                    \"type\": \"string\",\n                    \"example\": \"GITHUB_APP_ID\"\n                  },\n                  \"target\": {\n                    \"description\": \"The target environment of the environment variable\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ]\n                    },\n                    \"example\": [\n                      \"preview\"\n                    ]\n                  },\n                  \"gitBranch\": {\n                    \"description\": \"If defined, the git branch of the environment variable (must have target=preview)\",\n                    \"type\": \"string\",\n                    \"maxLength\": 250,\n                    \"example\": \"feature-1\",\n                    \"nullable\": true\n                  },\n                  \"type\": {\n                    \"description\": \"The type of environment variable\",\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"system\",\n                      \"secret\",\n                      \"encrypted\",\n                      \"plain\",\n                      \"sensitive\"\n                    ],\n                    \"example\": \"plain\"\n                  },\n                  \"value\": {\n                    \"description\": \"The value of the environment variable\",\n                    \"type\": \"string\",\n                    \"example\": \"bkWIjbnxcvo78\"\n                  },\n                  \"customEnvironmentIds\": {\n                    \"type\": \"array\",\n                    \"description\": \"The custom environments that the environment variable should be synced to\",\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"example\": \"env_1234567890\"\n                    }\n                  },\n                  \"comment\": {\n                    \"type\": \"string\",\n                    \"description\": \"A comment to add context on what this env var is for\",\n                    \"example\": \"database connection string for production\",\n                    \"maxLength\": 500\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        },\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v1/projects/{idOrName}/env\": {\n      \"delete\": {\n        \"description\": \"Delete multiple environment variables for a given project in a single batch operation.\",\n        \"operationId\": \"batchRemoveProjectEnv\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Batch remove environment variables\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"deleted\": {\n                      \"type\": \"number\"\n                    },\n                    \"ids\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"deleted\",\n                    \"ids\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\",\n              \"example\": \"prj_XLKmu1DyR1eY7zq8UgeRKbA7yVLA\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"ids\"\n                ],\n                \"properties\": {\n                  \"ids\": {\n                    \"description\": \"Array of environment variable IDs to delete\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"minItems\": 1,\n                    \"maxItems\": 1000\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{idOrName}/rolling-release/billing\": {\n      \"get\": {\n        \"description\": \"Get the Rolling Releases billing status for a project. The team level billing status is used to determine if the project can be configured for rolling releases.\",\n        \"operationId\": \"getRollingReleaseBillingStatus\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get rolling release billing status\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"availableSlots\": {\n                          \"type\": \"number\",\n                          \"enum\": [\n                            0\n                          ]\n                        },\n                        \"reason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"plan_not_supported\"\n                          ]\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"availableSlots\",\n                        \"message\",\n                        \"reason\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"availableSlots\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"unlimited\"\n                          ]\n                        },\n                        \"reason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"unlimited_slots\"\n                          ]\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"availableSlots\",\n                        \"message\",\n                        \"reason\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"availableSlots\": {\n                          \"type\": \"number\",\n                          \"enum\": [\n                            0\n                          ]\n                        },\n                        \"reason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"no_available_slots\"\n                          ]\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        },\n                        \"enabledProjects\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"availableSlots\",\n                        \"enabledProjects\",\n                        \"message\",\n                        \"reason\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"availableSlots\": {\n                          \"type\": \"number\"\n                        },\n                        \"reason\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"available_slots\"\n                          ]\n                        },\n                        \"message\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"availableSlots\",\n                        \"message\",\n                        \"reason\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{idOrName}/rolling-release/config\": {\n      \"get\": {\n        \"description\": \"Get the Rolling Releases configuration for a project. The project-level config is simply a template that will be used for any future rolling release, and not the configuration for any active rolling release.\",\n        \"operationId\": \"getRollingReleaseConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get rolling release configuration\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"target\": {\n                          \"type\": \"string\",\n                          \"description\": \"The environment that the release targets, currently only supports production. Adding in case we want to configure with alias groups or custom environments.\",\n                          \"example\": \"production\"\n                        },\n                        \"stages\": {\n                          \"nullable\": true,\n                          \"items\": {\n                            \"properties\": {\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                \"example\": false\n                              },\n                              \"duration\": {\n                                \"type\": \"number\",\n                                \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                \"example\": 600\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"An array of all the stages required during a deployment release. Each stage defines a target percentage and advancement rules. The final stage must always have targetPercentage: 100.\"\n                        },\n                        \"canaryResponseHeader\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ],\n                          \"description\": \"Whether the request served by a canary deployment should return a header indicating a canary was served. Defaults to `false` when omitted.\",\n                          \"example\": false\n                        }\n                      },\n                      \"required\": [\n                        \"target\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Project-level rolling release configuration that defines how deployments should be gradually rolled out\"\n                    }\n                  },\n                  \"required\": [\n                    \"rollingRelease\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Disable Rolling Releases for a project means that future deployments will not undergo a rolling release. Changing the config never alters a rollout that's already in-flight—it only affects the next production deployment. If you want to also stop the current rollout, call this endpoint to disable the feature, and then call either the /complete or /abort endpoint.\",\n        \"operationId\": \"deleteRollingReleaseConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete rolling release configuration\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"rollingRelease\": {\n                      \"nullable\": true\n                    }\n                  },\n                  \"required\": [\n                    \"rollingRelease\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update (or disable) Rolling Releases for a project. When disabling with the resolve-on-disable feature flag enabled, any active rolling release document is resolved using the disableRolloutAction parameter: \\\"abort\\\" to roll back (default), or \\\"complete\\\" to promote the canary to production. When enabling or updating config, changes only affect the next production deployment and do not alter a rollout that's already in-flight. Note: Enabling Rolling Releases automatically enables skew protection on the project with the default value if it wasn't configured already.\",\n        \"operationId\": \"updateRollingReleaseConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update the rolling release settings for the project\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"rollingRelease\": {\n                          \"nullable\": true\n                        }\n                      },\n                      \"required\": [\n                        \"rollingRelease\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"rollingRelease\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"stages\": {\n                              \"nullable\": true,\n                              \"items\": {\n                                \"properties\": {\n                                  \"targetPercentage\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                    \"example\": 25\n                                  },\n                                  \"requireApproval\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether or not this stage requires manual approval to proceed\",\n                                    \"example\": false\n                                  },\n                                  \"duration\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Duration in minutes for automatic advancement to the next stage\",\n                                    \"example\": 600\n                                  },\n                                  \"linearShift\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                    \"example\": false\n                                  }\n                                },\n                                \"required\": [\n                                  \"targetPercentage\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"A stage object configured for a rolling release once a new deployment is triggered the first stage will be read in the proxy for first time visitors, and if a RNG \\u003c targetPercentage then it will serve the new deployment. Upon approval the next stage will be read, etc.\"\n                              },\n                              \"type\": \"array\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"rollingRelease\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{idOrName}/rolling-release\": {\n      \"get\": {\n        \"description\": \"Return the Rolling Release for a project, regardless of whether the rollout is active, aborted, or completed. If the feature is enabled but no deployment has occurred yet, null will be returned.\",\n        \"operationId\": \"getRollingRelease\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get the active rolling release information for a project\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"state\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"ACTIVE\",\n                            \"COMPLETE\",\n                            \"ABORTED\"\n                          ],\n                          \"description\": \"The current state of the rolling release\",\n                          \"example\": \"ACTIVE\"\n                        },\n                        \"currentDeployment\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                              \"example\": \"my-project\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                              \"example\": 1540257589405\n                            },\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string holding the unique ID of the deployment\",\n                              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"BUILDING\",\n                                \"ERROR\",\n                                \"INITIALIZING\",\n                                \"QUEUED\",\n                                \"READY\",\n                                \"CANCELED\"\n                              ],\n                              \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                              \"example\": \"READY\"\n                            },\n                            \"readyStateAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"import\",\n                                \"api-trigger-git-deploy\",\n                                \"cli\",\n                                \"clone/repo\",\n                                \"git\",\n                                \"import/repo\",\n                                \"redeploy\",\n                                \"v0-web\"\n                              ],\n                              \"description\": \"Where was the deployment created from\",\n                              \"example\": \"cli\"\n                            },\n                            \"target\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"staging\",\n                                \"production\"\n                              ],\n                              \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                              \"example\": null\n                            },\n                            \"url\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string with the unique URL of the deployment\",\n                              \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"name\",\n                            \"readyState\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The current deployment receiving production traffic\",\n                          \"example\": {\n                            \"id\": \"dpl_abc123\",\n                            \"name\": \"my-shop@main\",\n                            \"url\": \"my-shop.vercel.app\",\n                            \"target\": \"production\",\n                            \"source\": \"git\",\n                            \"createdAt\": 1716206500000,\n                            \"readyState\": \"READY\",\n                            \"readyStateAt\": 1716206800000\n                          }\n                        },\n                        \"canaryDeployment\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                              \"example\": \"my-project\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                              \"example\": 1540257589405\n                            },\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string holding the unique ID of the deployment\",\n                              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"BUILDING\",\n                                \"ERROR\",\n                                \"INITIALIZING\",\n                                \"QUEUED\",\n                                \"READY\",\n                                \"CANCELED\"\n                              ],\n                              \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                              \"example\": \"READY\"\n                            },\n                            \"readyStateAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"import\",\n                                \"api-trigger-git-deploy\",\n                                \"cli\",\n                                \"clone/repo\",\n                                \"git\",\n                                \"import/repo\",\n                                \"redeploy\",\n                                \"v0-web\"\n                              ],\n                              \"description\": \"Where was the deployment created from\",\n                              \"example\": \"cli\"\n                            },\n                            \"target\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"staging\",\n                                \"production\"\n                              ],\n                              \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                              \"example\": null\n                            },\n                            \"url\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string with the unique URL of the deployment\",\n                              \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"name\",\n                            \"readyState\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The canary deployment being rolled out\",\n                          \"example\": {\n                            \"id\": \"dpl_def456\",\n                            \"name\": \"my-shop@9c7e2f4\",\n                            \"url\": \"9c7e2f4-my-shop.vercel.app\",\n                            \"target\": \"production\",\n                            \"source\": \"git\",\n                            \"createdAt\": 1716210100000,\n                            \"readyState\": \"READY\",\n                            \"readyStateAt\": 1716210400000\n                          }\n                        },\n                        \"queuedDeploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"The ID of a deployment queued for the next rolling release\",\n                          \"example\": \"dpl_ghi789\"\n                        },\n                        \"advancementType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"automatic\",\n                            \"manual-approval\"\n                          ],\n                          \"description\": \"The advancement type of the rolling release\",\n                          \"example\": \"manual-approval\"\n                        },\n                        \"stages\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"index\": {\n                                \"type\": \"number\",\n                                \"description\": \"The zero-based index of the stage\",\n                                \"example\": 0\n                              },\n                              \"isFinalStage\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                                \"example\": false\n                              },\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                              },\n                              \"duration\": {\n                                \"nullable\": true,\n                                \"type\": \"number\",\n                                \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                                \"example\": null\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"duration\",\n                              \"index\",\n                              \"isFinalStage\",\n                              \"requireApproval\",\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"All stages configured for this rolling release\",\n                            \"example\": [\n                              {\n                                \"index\": 0,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 5,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 1,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 25,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 2,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 60,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 3,\n                                \"isFinalStage\": true,\n                                \"targetPercentage\": 100,\n                                \"requireApproval\": false,\n                                \"duration\": null\n                              }\n                            ]\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"All stages configured for this rolling release\",\n                          \"example\": [\n                            {\n                              \"index\": 0,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 5,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 1,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 25,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 2,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 60,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 3,\n                              \"isFinalStage\": true,\n                              \"targetPercentage\": 100,\n                              \"requireApproval\": false,\n                              \"duration\": null\n                            }\n                          ]\n                        },\n                        \"activeStage\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"index\": {\n                              \"type\": \"number\",\n                              \"description\": \"The zero-based index of the stage\",\n                              \"example\": 0\n                            },\n                            \"isFinalStage\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                              \"example\": false\n                            },\n                            \"targetPercentage\": {\n                              \"type\": \"number\",\n                              \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                              \"example\": 25\n                            },\n                            \"requireApproval\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                            },\n                            \"duration\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                              \"example\": null\n                            },\n                            \"linearShift\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                              \"example\": false\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"index\",\n                            \"isFinalStage\",\n                            \"requireApproval\",\n                            \"targetPercentage\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The currently active stage, null if the rollout is aborted\",\n                          \"example\": {\n                            \"index\": 1,\n                            \"isFinalStage\": false,\n                            \"targetPercentage\": 25,\n                            \"requireApproval\": true,\n                            \"duration\": null\n                          }\n                        },\n                        \"nextStage\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"index\": {\n                              \"type\": \"number\",\n                              \"description\": \"The zero-based index of the stage\",\n                              \"example\": 0\n                            },\n                            \"isFinalStage\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                              \"example\": false\n                            },\n                            \"targetPercentage\": {\n                              \"type\": \"number\",\n                              \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                              \"example\": 25\n                            },\n                            \"requireApproval\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                            },\n                            \"duration\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                              \"example\": null\n                            },\n                            \"linearShift\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                              \"example\": false\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"index\",\n                            \"isFinalStage\",\n                            \"requireApproval\",\n                            \"targetPercentage\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The next stage to be activated, null if not in ACTIVE state\",\n                          \"example\": {\n                            \"index\": 2,\n                            \"isFinalStage\": false,\n                            \"targetPercentage\": 60,\n                            \"requireApproval\": true,\n                            \"duration\": null\n                          }\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Unix timestamp in milliseconds when the rolling release started\",\n                          \"example\": 1716210500000\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Unix timestamp in milliseconds when the rolling release was last updated\",\n                          \"example\": 1716210600000\n                        }\n                      },\n                      \"required\": [\n                        \"activeStage\",\n                        \"advancementType\",\n                        \"canaryDeployment\",\n                        \"currentDeployment\",\n                        \"nextStage\",\n                        \"queuedDeploymentId\",\n                        \"stages\",\n                        \"startedAt\",\n                        \"state\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Rolling release information including configuration and document details, or null if no rolling release exists\"\n                    }\n                  },\n                  \"required\": [\n                    \"rollingRelease\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The response format for rolling release endpoints that return rolling release information\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"state\",\n            \"description\": \"Filter by rolling release state\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter by rolling release state\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"ACTIVE\",\n                \"COMPLETE\",\n                \"ABORTED\"\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{idOrName}/rolling-release/approve-stage\": {\n      \"post\": {\n        \"description\": \"Advance a rollout to the next stage. This is only needed when rolling releases is configured to require manual approval.\",\n        \"operationId\": \"approveRollingReleaseStage\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update the active rolling release to the next stage for a project\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"state\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"ACTIVE\",\n                            \"COMPLETE\",\n                            \"ABORTED\"\n                          ],\n                          \"description\": \"The current state of the rolling release\",\n                          \"example\": \"ACTIVE\"\n                        },\n                        \"currentDeployment\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                              \"example\": \"my-project\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                              \"example\": 1540257589405\n                            },\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string holding the unique ID of the deployment\",\n                              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"BUILDING\",\n                                \"ERROR\",\n                                \"INITIALIZING\",\n                                \"QUEUED\",\n                                \"READY\",\n                                \"CANCELED\"\n                              ],\n                              \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                              \"example\": \"READY\"\n                            },\n                            \"readyStateAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"import\",\n                                \"api-trigger-git-deploy\",\n                                \"cli\",\n                                \"clone/repo\",\n                                \"git\",\n                                \"import/repo\",\n                                \"redeploy\",\n                                \"v0-web\"\n                              ],\n                              \"description\": \"Where was the deployment created from\",\n                              \"example\": \"cli\"\n                            },\n                            \"target\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"staging\",\n                                \"production\"\n                              ],\n                              \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                              \"example\": null\n                            },\n                            \"url\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string with the unique URL of the deployment\",\n                              \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"name\",\n                            \"readyState\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The current deployment receiving production traffic\",\n                          \"example\": {\n                            \"id\": \"dpl_abc123\",\n                            \"name\": \"my-shop@main\",\n                            \"url\": \"my-shop.vercel.app\",\n                            \"target\": \"production\",\n                            \"source\": \"git\",\n                            \"createdAt\": 1716206500000,\n                            \"readyState\": \"READY\",\n                            \"readyStateAt\": 1716206800000\n                          }\n                        },\n                        \"canaryDeployment\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                              \"example\": \"my-project\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                              \"example\": 1540257589405\n                            },\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string holding the unique ID of the deployment\",\n                              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"BUILDING\",\n                                \"ERROR\",\n                                \"INITIALIZING\",\n                                \"QUEUED\",\n                                \"READY\",\n                                \"CANCELED\"\n                              ],\n                              \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                              \"example\": \"READY\"\n                            },\n                            \"readyStateAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"import\",\n                                \"api-trigger-git-deploy\",\n                                \"cli\",\n                                \"clone/repo\",\n                                \"git\",\n                                \"import/repo\",\n                                \"redeploy\",\n                                \"v0-web\"\n                              ],\n                              \"description\": \"Where was the deployment created from\",\n                              \"example\": \"cli\"\n                            },\n                            \"target\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"staging\",\n                                \"production\"\n                              ],\n                              \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                              \"example\": null\n                            },\n                            \"url\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string with the unique URL of the deployment\",\n                              \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"name\",\n                            \"readyState\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The canary deployment being rolled out\",\n                          \"example\": {\n                            \"id\": \"dpl_def456\",\n                            \"name\": \"my-shop@9c7e2f4\",\n                            \"url\": \"9c7e2f4-my-shop.vercel.app\",\n                            \"target\": \"production\",\n                            \"source\": \"git\",\n                            \"createdAt\": 1716210100000,\n                            \"readyState\": \"READY\",\n                            \"readyStateAt\": 1716210400000\n                          }\n                        },\n                        \"queuedDeploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"The ID of a deployment queued for the next rolling release\",\n                          \"example\": \"dpl_ghi789\"\n                        },\n                        \"advancementType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"automatic\",\n                            \"manual-approval\"\n                          ],\n                          \"description\": \"The advancement type of the rolling release\",\n                          \"example\": \"manual-approval\"\n                        },\n                        \"stages\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"index\": {\n                                \"type\": \"number\",\n                                \"description\": \"The zero-based index of the stage\",\n                                \"example\": 0\n                              },\n                              \"isFinalStage\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                                \"example\": false\n                              },\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                              },\n                              \"duration\": {\n                                \"nullable\": true,\n                                \"type\": \"number\",\n                                \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                                \"example\": null\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"duration\",\n                              \"index\",\n                              \"isFinalStage\",\n                              \"requireApproval\",\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"All stages configured for this rolling release\",\n                            \"example\": [\n                              {\n                                \"index\": 0,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 5,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 1,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 25,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 2,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 60,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 3,\n                                \"isFinalStage\": true,\n                                \"targetPercentage\": 100,\n                                \"requireApproval\": false,\n                                \"duration\": null\n                              }\n                            ]\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"All stages configured for this rolling release\",\n                          \"example\": [\n                            {\n                              \"index\": 0,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 5,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 1,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 25,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 2,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 60,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 3,\n                              \"isFinalStage\": true,\n                              \"targetPercentage\": 100,\n                              \"requireApproval\": false,\n                              \"duration\": null\n                            }\n                          ]\n                        },\n                        \"activeStage\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"index\": {\n                              \"type\": \"number\",\n                              \"description\": \"The zero-based index of the stage\",\n                              \"example\": 0\n                            },\n                            \"isFinalStage\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                              \"example\": false\n                            },\n                            \"targetPercentage\": {\n                              \"type\": \"number\",\n                              \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                              \"example\": 25\n                            },\n                            \"requireApproval\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                            },\n                            \"duration\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                              \"example\": null\n                            },\n                            \"linearShift\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                              \"example\": false\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"index\",\n                            \"isFinalStage\",\n                            \"requireApproval\",\n                            \"targetPercentage\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The currently active stage, null if the rollout is aborted\",\n                          \"example\": {\n                            \"index\": 1,\n                            \"isFinalStage\": false,\n                            \"targetPercentage\": 25,\n                            \"requireApproval\": true,\n                            \"duration\": null\n                          }\n                        },\n                        \"nextStage\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"index\": {\n                              \"type\": \"number\",\n                              \"description\": \"The zero-based index of the stage\",\n                              \"example\": 0\n                            },\n                            \"isFinalStage\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                              \"example\": false\n                            },\n                            \"targetPercentage\": {\n                              \"type\": \"number\",\n                              \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                              \"example\": 25\n                            },\n                            \"requireApproval\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                            },\n                            \"duration\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                              \"example\": null\n                            },\n                            \"linearShift\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                              \"example\": false\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"index\",\n                            \"isFinalStage\",\n                            \"requireApproval\",\n                            \"targetPercentage\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The next stage to be activated, null if not in ACTIVE state\",\n                          \"example\": {\n                            \"index\": 2,\n                            \"isFinalStage\": false,\n                            \"targetPercentage\": 60,\n                            \"requireApproval\": true,\n                            \"duration\": null\n                          }\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Unix timestamp in milliseconds when the rolling release started\",\n                          \"example\": 1716210500000\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Unix timestamp in milliseconds when the rolling release was last updated\",\n                          \"example\": 1716210600000\n                        }\n                      },\n                      \"required\": [\n                        \"activeStage\",\n                        \"advancementType\",\n                        \"canaryDeployment\",\n                        \"currentDeployment\",\n                        \"nextStage\",\n                        \"queuedDeploymentId\",\n                        \"stages\",\n                        \"startedAt\",\n                        \"state\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Rolling release information including configuration and document details, or null if no rolling release exists\"\n                    }\n                  },\n                  \"required\": [\n                    \"rollingRelease\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The response format for rolling release endpoints that return rolling release information\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"nextStageIndex\",\n                  \"canaryDeploymentId\"\n                ],\n                \"properties\": {\n                  \"nextStageIndex\": {\n                    \"description\": \"The index of the stage to transition to\",\n                    \"type\": \"number\"\n                  },\n                  \"canaryDeploymentId\": {\n                    \"description\": \"The id of the canary deployment to approve for the next stage\",\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{idOrName}/rolling-release/complete\": {\n      \"post\": {\n        \"description\": \"Force-complete a Rolling Release. The canary deployment will begin serving 100% of the traffic.\",\n        \"operationId\": \"completeRollingRelease\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Complete the rolling release for the project\",\n        \"tags\": [\n          \"rolling-release\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"rollingRelease\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"state\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"ACTIVE\",\n                            \"COMPLETE\",\n                            \"ABORTED\"\n                          ],\n                          \"description\": \"The current state of the rolling release\",\n                          \"example\": \"ACTIVE\"\n                        },\n                        \"currentDeployment\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                              \"example\": \"my-project\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                              \"example\": 1540257589405\n                            },\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string holding the unique ID of the deployment\",\n                              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"BUILDING\",\n                                \"ERROR\",\n                                \"INITIALIZING\",\n                                \"QUEUED\",\n                                \"READY\",\n                                \"CANCELED\"\n                              ],\n                              \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                              \"example\": \"READY\"\n                            },\n                            \"readyStateAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"import\",\n                                \"api-trigger-git-deploy\",\n                                \"cli\",\n                                \"clone/repo\",\n                                \"git\",\n                                \"import/repo\",\n                                \"redeploy\",\n                                \"v0-web\"\n                              ],\n                              \"description\": \"Where was the deployment created from\",\n                              \"example\": \"cli\"\n                            },\n                            \"target\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"staging\",\n                                \"production\"\n                              ],\n                              \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                              \"example\": null\n                            },\n                            \"url\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string with the unique URL of the deployment\",\n                              \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"name\",\n                            \"readyState\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The current deployment receiving production traffic\",\n                          \"example\": {\n                            \"id\": \"dpl_abc123\",\n                            \"name\": \"my-shop@main\",\n                            \"url\": \"my-shop.vercel.app\",\n                            \"target\": \"production\",\n                            \"source\": \"git\",\n                            \"createdAt\": 1716206500000,\n                            \"readyState\": \"READY\",\n                            \"readyStateAt\": 1716206800000\n                          }\n                        },\n                        \"canaryDeployment\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\",\n                              \"description\": \"The name of the project associated with the deployment at the time that the deployment was created\",\n                              \"example\": \"my-project\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\",\n                              \"description\": \"A number containing the date when the deployment was created in milliseconds\",\n                              \"example\": 1540257589405\n                            },\n                            \"id\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string holding the unique ID of the deployment\",\n                              \"example\": \"dpl_89qyp1cskzkLrVicDaZoDbjyHuDJ\"\n                            },\n                            \"readyState\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"BUILDING\",\n                                \"ERROR\",\n                                \"INITIALIZING\",\n                                \"QUEUED\",\n                                \"READY\",\n                                \"CANCELED\"\n                              ],\n                              \"description\": \"The state of the deployment depending on the process of deploying, or if it is ready or in an error state\",\n                              \"example\": \"READY\"\n                            },\n                            \"readyStateAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"source\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"import\",\n                                \"api-trigger-git-deploy\",\n                                \"cli\",\n                                \"clone/repo\",\n                                \"git\",\n                                \"import/repo\",\n                                \"redeploy\",\n                                \"v0-web\"\n                              ],\n                              \"description\": \"Where was the deployment created from\",\n                              \"example\": \"cli\"\n                            },\n                            \"target\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"staging\",\n                                \"production\"\n                              ],\n                              \"description\": \"If defined, either `staging` if a staging alias in the format `\\u003cproject\\u003e.\\u003cteam\\u003e.now.sh` was assigned upon creation, or `production` if the aliases from `alias` were assigned. `null` value indicates the \\\"preview\\\" deployment.\",\n                              \"example\": null\n                            },\n                            \"url\": {\n                              \"type\": \"string\",\n                              \"description\": \"A string with the unique URL of the deployment\",\n                              \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                            }\n                          },\n                          \"required\": [\n                            \"createdAt\",\n                            \"id\",\n                            \"name\",\n                            \"readyState\",\n                            \"url\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The canary deployment being rolled out\",\n                          \"example\": {\n                            \"id\": \"dpl_def456\",\n                            \"name\": \"my-shop@9c7e2f4\",\n                            \"url\": \"9c7e2f4-my-shop.vercel.app\",\n                            \"target\": \"production\",\n                            \"source\": \"git\",\n                            \"createdAt\": 1716210100000,\n                            \"readyState\": \"READY\",\n                            \"readyStateAt\": 1716210400000\n                          }\n                        },\n                        \"queuedDeploymentId\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"description\": \"The ID of a deployment queued for the next rolling release\",\n                          \"example\": \"dpl_ghi789\"\n                        },\n                        \"advancementType\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"automatic\",\n                            \"manual-approval\"\n                          ],\n                          \"description\": \"The advancement type of the rolling release\",\n                          \"example\": \"manual-approval\"\n                        },\n                        \"stages\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"index\": {\n                                \"type\": \"number\",\n                                \"description\": \"The zero-based index of the stage\",\n                                \"example\": 0\n                              },\n                              \"isFinalStage\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                                \"example\": false\n                              },\n                              \"targetPercentage\": {\n                                \"type\": \"number\",\n                                \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                                \"example\": 25\n                              },\n                              \"requireApproval\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                              },\n                              \"duration\": {\n                                \"nullable\": true,\n                                \"type\": \"number\",\n                                \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                                \"example\": null\n                              },\n                              \"linearShift\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                                \"example\": false\n                              }\n                            },\n                            \"required\": [\n                              \"duration\",\n                              \"index\",\n                              \"isFinalStage\",\n                              \"requireApproval\",\n                              \"targetPercentage\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"All stages configured for this rolling release\",\n                            \"example\": [\n                              {\n                                \"index\": 0,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 5,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 1,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 25,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 2,\n                                \"isFinalStage\": false,\n                                \"targetPercentage\": 60,\n                                \"requireApproval\": true,\n                                \"duration\": null\n                              },\n                              {\n                                \"index\": 3,\n                                \"isFinalStage\": true,\n                                \"targetPercentage\": 100,\n                                \"requireApproval\": false,\n                                \"duration\": null\n                              }\n                            ]\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"All stages configured for this rolling release\",\n                          \"example\": [\n                            {\n                              \"index\": 0,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 5,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 1,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 25,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 2,\n                              \"isFinalStage\": false,\n                              \"targetPercentage\": 60,\n                              \"requireApproval\": true,\n                              \"duration\": null\n                            },\n                            {\n                              \"index\": 3,\n                              \"isFinalStage\": true,\n                              \"targetPercentage\": 100,\n                              \"requireApproval\": false,\n                              \"duration\": null\n                            }\n                          ]\n                        },\n                        \"activeStage\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"index\": {\n                              \"type\": \"number\",\n                              \"description\": \"The zero-based index of the stage\",\n                              \"example\": 0\n                            },\n                            \"isFinalStage\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                              \"example\": false\n                            },\n                            \"targetPercentage\": {\n                              \"type\": \"number\",\n                              \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                              \"example\": 25\n                            },\n                            \"requireApproval\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                            },\n                            \"duration\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                              \"example\": null\n                            },\n                            \"linearShift\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                              \"example\": false\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"index\",\n                            \"isFinalStage\",\n                            \"requireApproval\",\n                            \"targetPercentage\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The currently active stage, null if the rollout is aborted\",\n                          \"example\": {\n                            \"index\": 1,\n                            \"isFinalStage\": false,\n                            \"targetPercentage\": 25,\n                            \"requireApproval\": true,\n                            \"duration\": null\n                          }\n                        },\n                        \"nextStage\": {\n                          \"nullable\": true,\n                          \"properties\": {\n                            \"index\": {\n                              \"type\": \"number\",\n                              \"description\": \"The zero-based index of the stage\",\n                              \"example\": 0\n                            },\n                            \"isFinalStage\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage is the final stage (targetPercentage === 100)\",\n                              \"example\": false\n                            },\n                            \"targetPercentage\": {\n                              \"type\": \"number\",\n                              \"description\": \"The percentage of traffic to serve to the canary deployment (0-100)\",\n                              \"example\": 25\n                            },\n                            \"requireApproval\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether or not this stage requires manual approval to proceed\"\n                            },\n                            \"duration\": {\n                              \"nullable\": true,\n                              \"type\": \"number\",\n                              \"description\": \"Duration in seconds for automatic advancement, null for manual stages or the final stage\",\n                              \"example\": null\n                            },\n                            \"linearShift\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ],\n                              \"description\": \"Whether to linearly shift traffic over the duration of this stage\",\n                              \"example\": false\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"index\",\n                            \"isFinalStage\",\n                            \"requireApproval\",\n                            \"targetPercentage\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"The next stage to be activated, null if not in ACTIVE state\",\n                          \"example\": {\n                            \"index\": 2,\n                            \"isFinalStage\": false,\n                            \"targetPercentage\": 60,\n                            \"requireApproval\": true,\n                            \"duration\": null\n                          }\n                        },\n                        \"startedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Unix timestamp in milliseconds when the rolling release started\",\n                          \"example\": 1716210500000\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"Unix timestamp in milliseconds when the rolling release was last updated\",\n                          \"example\": 1716210600000\n                        }\n                      },\n                      \"required\": [\n                        \"activeStage\",\n                        \"advancementType\",\n                        \"canaryDeployment\",\n                        \"currentDeployment\",\n                        \"nextStage\",\n                        \"queuedDeploymentId\",\n                        \"stages\",\n                        \"startedAt\",\n                        \"state\",\n                        \"updatedAt\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Rolling release information including configuration and document details, or null if no rolling release exists\"\n                    }\n                  },\n                  \"required\": [\n                    \"rollingRelease\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The response format for rolling release endpoints that return rolling release information\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"Project ID or project name (URL-encoded)\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"Project ID or project name (URL-encoded)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"canaryDeploymentId\"\n                ],\n                \"properties\": {\n                  \"canaryDeploymentId\": {\n                    \"description\": \"The ID of the canary deployment to complete\",\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/projects/{idOrName}/transfer-request\": {\n      \"post\": {\n        \"description\": \"Initiates a project transfer request from one team to another. \\u003cbr/\\u003e Returns a `code` that remains valid for 24 hours and can be used to accept the transfer request by another team using the `PUT /projects/transfer-request/:code` endpoint. \\u003cbr/\\u003e Users can also accept the project transfer request using the claim URL: `https://vercel.com/claim-deployment?code=\\u003ccode\\u003e\\u0026returnUrl=\\u003creturnUrl\\u003e`. \\u003cbr/\\u003e The `code` parameter specifies the project transfer request code generated using this endpoint. \\u003cbr/\\u003e The `returnUrl` parameter redirects users to a specific page of the application if the claim URL is invalid or expired.\",\n        \"operationId\": \"createProjectTransferRequest\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create project transfer request\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The project transfer request has been initiated successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"code\": {\n                      \"type\": \"string\",\n                      \"description\": \"Code that can be used to accept the project transfer request.\",\n                      \"example\": \"f99cc49a-602e-4786-a748-762dfb205880\"\n                    }\n                  },\n                  \"required\": [\n                    \"code\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The ID or name of the project to transfer.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID or name of the project to transfer.\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"callbackUrl\": {\n                    \"type\": \"string\",\n                    \"description\": \"The URL to send a webhook to when the transfer is accepted.\"\n                  },\n                  \"callbackSecret\": {\n                    \"type\": \"string\",\n                    \"description\": \"The secret to use to sign the webhook payload with HMAC-SHA256.\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/projects/transfer-request/{code}\": {\n      \"put\": {\n        \"description\": \"Accept a project transfer request initated by another team. \\u003cbr/\\u003e The `code` is generated using the `POST /projects/:idOrName/transfer-request` endpoint.\",\n        \"operationId\": \"acceptProjectTransferRequest\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Accept project transfer request\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"202\": {\n            \"description\": \"The project has been transferred successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"partnerCalls\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"installationId\": {\n                                \"type\": \"string\"\n                              },\n                              \"resourceIds\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"result\": {\n                                \"properties\": {\n                                  \"status\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"errored\",\n                                      \"fulfilled\"\n                                    ]\n                                  },\n                                  \"error\": {\n                                    \"type\": \"object\"\n                                  },\n                                  \"code\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"status\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"installationId\",\n                              \"resourceIds\",\n                              \"result\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"resourceTransferErrors\": {\n                          \"items\": {\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"transferredStoreIds\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"partnerCalls\",\n                        \"resourceTransferErrors\",\n                        \"transferredStoreIds\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"code\",\n            \"description\": \"The code of the project transfer request.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The code of the project transfer request.\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"newProjectName\": {\n                    \"description\": \"The desired name for the project\",\n                    \"example\": \"a-project-name\",\n                    \"type\": \"string\",\n                    \"maxLength\": 100\n                  },\n                  \"paidFeatures\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"concurrentBuilds\": {\n                        \"type\": \"integer\",\n                        \"nullable\": true\n                      },\n                      \"passwordProtection\": {\n                        \"type\": \"boolean\",\n                        \"nullable\": true\n                      },\n                      \"previewDeploymentSuffix\": {\n                        \"type\": \"boolean\",\n                        \"nullable\": true\n                      }\n                    }\n                  },\n                  \"acceptedPolicies\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\"\n                      },\n                      \"required\": [\n                        \"eula\",\n                        \"privacy\"\n                      ],\n                      \"properties\": {\n                        \"eula\": {\n                          \"type\": \"string\",\n                          \"format\": \"date-time\"\n                        },\n                        \"privacy\": {\n                          \"type\": \"string\",\n                          \"format\": \"date-time\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/projects/{idOrName}/protection-bypass\": {\n      \"patch\": {\n        \"description\": \"Update the deployment protection automation bypass for a project\",\n        \"operationId\": \"updateProjectProtectionBypass\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Protection Bypass for Automation\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"protectionBypass\": {\n                      \"additionalProperties\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"integration-automation-bypass\"\n                                ]\n                              },\n                              \"integrationId\": {\n                                \"type\": \"string\"\n                              },\n                              \"configurationId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"configurationId\",\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"integrationId\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"automation-bypass\"\n                                ]\n                              },\n                              \"isEnvVar\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"When there was only one bypass, it was automatically set as an env var on deployments. With multiple bypasses, there is always one bypass that is selected as the default, and gets set as an env var on deployments. As this is a new field, undefined means that the bypass is the env var. If there are any automation bypasses, exactly one must be the env var.\"\n                              },\n                              \"note\": {\n                                \"type\": \"string\",\n                                \"description\": \"Optional note about the bypass to be displayed in the UI\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"idOrName\",\n            \"description\": \"The unique project identifier or the project name\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique project identifier or the project name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"revoke\": {\n                    \"description\": \"Optional instructions for revoking and regenerating a automation bypass\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"secret\": {\n                        \"description\": \"Automation bypass to revoked\",\n                        \"type\": \"string\"\n                      },\n                      \"regenerate\": {\n                        \"description\": \"Whether or not a new automation bypass should be created after the provided secret is revoked\",\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"required\": [\n                      \"secret\",\n                      \"regenerate\"\n                    ]\n                  },\n                  \"generate\": {\n                    \"description\": \"Generate a new secret. If neither generate or revoke are provided, a new random secret will be generated.\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"secret\": {\n                        \"description\": \"Optional value of the secret to generate, don't send it for oauth2 tokens\",\n                        \"type\": \"string\",\n                        \"pattern\": \"^[a-zA-Z0-9]{32}$\"\n                      },\n                      \"note\": {\n                        \"type\": \"string\",\n                        \"description\": \"Note to be displayed in the UI for this bypass\",\n                        \"maxLength\": 100\n                      }\n                    }\n                  },\n                  \"update\": {\n                    \"description\": \"Update an existing bypass\",\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"secret\"\n                    ],\n                    \"properties\": {\n                      \"secret\": {\n                        \"description\": \"Automation bypass to updated\",\n                        \"type\": \"string\"\n                      },\n                      \"isEnvVar\": {\n                        \"type\": \"boolean\",\n                        \"description\": \"Whether or not this bypass is set as the VERCEL_AUTOMATION_BYPASS_SECRET environment variable on deployments\"\n                      },\n                      \"note\": {\n                        \"type\": \"string\",\n                        \"description\": \"Note to be displayed in the UI for this bypass\",\n                        \"maxLength\": 100\n                      }\n                    }\n                  }\n                },\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/projects/{projectId}/rollback/{deploymentId}\": {\n      \"post\": {\n        \"description\": \"Allows users to rollback to a deployment.\",\n        \"operationId\": \"requestRollback\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Points all production domains for a project to the given deploy\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"deploymentId\",\n            \"description\": \"The ID of the deployment to rollback *to*\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the deployment to rollback *to*\"\n            }\n          },\n          {\n            \"name\": \"description\",\n            \"description\": \"The reason for the rollback\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The reason for the rollback\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectId}/rollback/{deploymentId}/update-description\": {\n      \"patch\": {\n        \"description\": \"Updates the reason for a rollback, without changing the rollback status itself.\",\n        \"operationId\": \"updateProjectsByProjectIdRollbackByDeploymentIdUpdateDescription\",\n        \"security\": [],\n        \"summary\": \"Updates the description for a rollback\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"description\": {\n                    \"type\": \"string\",\n                    \"description\": \"The reason for the rollback\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v10/projects/{projectId}/promote/{deploymentId}\": {\n      \"post\": {\n        \"description\": \"Allows users to promote a deployment to production. Note: This does NOT rebuild the deployment. If you need that, then call create-deployments endpoint.\",\n        \"operationId\": \"requestPromote\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Points all production domains for a project to the given deploy\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\"\n          },\n          \"202\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"deploymentId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectId}/promote/aliases\": {\n      \"get\": {\n        \"description\": \"Get a list of aliases related to the last promote request with their mapping status\",\n        \"operationId\": \"listPromoteAliases\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Gets a list of aliases with status for the current promote\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"aliases\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"status\": {\n                                \"type\": \"string\"\n                              },\n                              \"alias\": {\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"alias\",\n                              \"id\",\n                              \"status\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"$ref\": \"#/components/schemas/Pagination\"\n                        }\n                      },\n                      \"required\": [\n                        \"aliases\",\n                        \"pagination\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of aliases to list from a request (max 100).\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of aliases to list from a request (max 100).\",\n              \"type\": \"number\",\n              \"example\": 20,\n              \"maximum\": 100\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get aliases created after this epoch timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get aliases created after this epoch timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1609499532000\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get aliases created before this epoch timestamp.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get aliases created before this epoch timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1612264332000\n            }\n          },\n          {\n            \"name\": \"failedOnly\",\n            \"description\": \"Filter results down to aliases that failed to map to the requested deployment\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter results down to aliases that failed to map to the requested deployment\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectId}/pause\": {\n      \"post\": {\n        \"description\": \"Pause a project by passing its project `id` in the URL. If the project does not exist given the id then the request will fail with 400 status code. If the project disables auto assigning custom production domains and blocks the active Production Deployment then the request will return with 200 status code.\",\n        \"operationId\": \"pauseProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Pause a project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"description\": \"The unique project identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique project identifier\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/projects/{projectId}/unpause\": {\n      \"post\": {\n        \"description\": \"Unpause a project by passing its project `id` in the URL. If the project does not exist given the id then the request will fail with 400 status code. If the project enables auto assigning custom production domains and unblocks the active Production Deployment then the request will return with 200 status code.\",\n        \"operationId\": \"unpauseProject\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Unpause a project\",\n        \"tags\": [\n          \"projects\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"description\": \"The unique project identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique project identifier\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes\": {\n      \"get\": {\n        \"description\": \"Retrieves a paginated list of sandboxes belonging to a specific project. Results can be filtered by creation time using the `since` and `until` parameters.\",\n        \"operationId\": \"listSandboxes\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List sandboxes\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The list of sandboxes matching the request filters.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"sandboxes\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/Sandbox\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"total\": {\n                          \"type\": \"number\"\n                        },\n                        \"count\": {\n                          \"type\": \"number\",\n                          \"description\": \"Amount of items in the current page.\",\n                          \"example\": 20\n                        },\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp that must be used to request the next page.\",\n                          \"example\": 1540095775951\n                        },\n                        \"prev\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp that must be used to request the previous page.\",\n                          \"example\": 1540095775951\n                        }\n                      },\n                      \"required\": [\n                        \"count\",\n                        \"next\",\n                        \"prev\",\n                        \"total\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"pagination\",\n                    \"sandboxes\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The project does not exist or the team does not have access to it.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"project\",\n            \"description\": \"The unique identifier or name of the project to list sandboxes for.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"The unique identifier or name of the project to list sandboxes for.\",\n              \"type\": \"string\",\n              \"example\": \"prj_abc123\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of sandboxes to return in the response. Used for pagination.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of sandboxes to return in the response. Used for pagination.\",\n              \"type\": \"number\",\n              \"example\": 20\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Filter sandboxes created after this timestamp. Specified as Unix time in milliseconds.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter sandboxes created after this timestamp. Specified as Unix time in milliseconds.\",\n              \"type\": \"number\",\n              \"example\": 1540095775941\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Filter sandboxes created before this timestamp. Specified as Unix time in milliseconds.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter sandboxes created before this timestamp. Specified as Unix time in milliseconds.\",\n              \"type\": \"number\",\n              \"example\": 1540095775951\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates a new sandbox environment for executing code in an isolated virtual machine. A sandbox can be initialized from various sources including Git repositories, tarballs, or existing snapshots. Once created, you can execute commands, read/write files, and manage the sandbox lifecycle.\",\n        \"operationId\": \"createSandbox\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a sandbox\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"sandbox\": {\n                      \"$ref\": \"#/components/schemas/Sandbox\"\n                    },\n                    \"routes\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/SandboxPublicRoute\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"routes\",\n                    \"sandbox\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          },\n          \"429\": {\n            \"description\": \"The concurrency limit has been exceeded.\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"resources\": {\n                    \"description\": \"Resources to define the VM\",\n                    \"additionalProperties\": false,\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"vcpus\": {\n                        \"description\": \"The number of virtual CPUs to allocate to the sandbox. Must be 1, or an even number.\",\n                        \"type\": \"integer\",\n                        \"minimum\": 1,\n                        \"default\": 2,\n                        \"example\": 2\n                      },\n                      \"memory\": {\n                        \"description\": \"The amount of memory in megabytes to allocate to the sandbox. Must equal vcpus * 2048.\",\n                        \"type\": \"integer\",\n                        \"minimum\": 2048,\n                        \"example\": 4096\n                      }\n                    }\n                  },\n                  \"runtime\": {\n                    \"description\": \"The runtime environment for the sandbox. Determines the pre-installed language runtimes and tools available.\",\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"node22\",\n                      \"node24\",\n                      \"python3.13\"\n                    ],\n                    \"default\": \"node24\",\n                    \"example\": \"node24\"\n                  },\n                  \"source\": {\n                    \"description\": \"The source from which to initialize the sandbox filesystem. Can be a Git repository, a tarball URL, or an existing snapshot.\",\n                    \"oneOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"description\": \"Clone a Git repository into the sandbox.\",\n                        \"properties\": {\n                          \"type\": {\n                            \"description\": \"Indicates the source is a Git repository.\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"format\": \"uri\",\n                            \"description\": \"The URL of the Git repository to clone.\",\n                            \"example\": \"https://github.com/vercel/next.js.git\"\n                          },\n                          \"username\": {\n                            \"type\": \"string\",\n                            \"description\": \"Username for Git authentication. Required together with password for private repositories.\"\n                          },\n                          \"password\": {\n                            \"type\": \"string\",\n                            \"description\": \"Password or personal access token for Git authentication. Required together with username for private repositories.\"\n                          },\n                          \"depth\": {\n                            \"type\": \"integer\",\n                            \"minimum\": 1,\n                            \"description\": \"Create a shallow clone with history truncated to the specified number of commits. Useful for faster cloning of large repositories.\",\n                            \"example\": 1\n                          },\n                          \"revision\": {\n                            \"type\": \"string\",\n                            \"description\": \"The specific commit SHA, branch name, or tag to checkout after cloning.\",\n                            \"example\": \"main\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"url\"\n                        ],\n                        \"additionalProperties\": false\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"description\": \"Download and extract a gzipped tarball into the sandbox.\",\n                        \"properties\": {\n                          \"type\": {\n                            \"description\": \"Indicates the source is a tarball.\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"format\": \"uri\",\n                            \"description\": \"URL of a gzipped tarball (.tar.gz) to download and extract.\",\n                            \"example\": \"https://example.com/project.tar.gz\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"url\"\n                        ],\n                        \"additionalProperties\": false\n                      },\n                      {\n                        \"type\": \"object\",\n                        \"description\": \"Restore the sandbox filesystem from an existing snapshot.\",\n                        \"properties\": {\n                          \"type\": {\n                            \"description\": \"Indicates the source is a snapshot.\"\n                          },\n                          \"snapshotId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the snapshot to restore.\",\n                            \"example\": \"snap_abc123\"\n                          }\n                        },\n                        \"required\": [\n                          \"type\",\n                          \"snapshotId\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    ]\n                  },\n                  \"projectId\": {\n                    \"description\": \"The target project slug or ID in which the sandbox will be assigned to.\",\n                    \"example\": \"prj_abc123\",\n                    \"type\": \"string\"\n                  },\n                  \"ports\": {\n                    \"description\": \"List of ports to expose from the sandbox. Each port will be accessible via a unique URL. Maximum of 15 ports can be exposed.\",\n                    \"type\": \"array\",\n                    \"maxItems\": 15,\n                    \"uniqueItems\": true,\n                    \"example\": [\n                      3000,\n                      4000\n                    ],\n                    \"items\": {\n                      \"type\": \"integer\",\n                      \"description\": \"A port number to expose from the sandbox. Must be between 1024 and 65535.\",\n                      \"not\": {},\n                      \"maximum\": 65535,\n                      \"minimum\": 1024\n                    }\n                  },\n                  \"timeout\": {\n                    \"type\": \"integer\",\n                    \"description\": \"Maximum duration in milliseconds that the sandbox can run before being automatically stopped.\",\n                    \"minimum\": 1000,\n                    \"example\": 300000\n                  },\n                  \"networkPolicy\": {\n                    \"description\": \"Network access policy for the sandbox.\\\\n    Controls which external hosts the sandbox can communicate with.\\\\n    Use \\\\\\\"allow-all\\\\\\\" mode to allow all traffic, \\\\\\\"deny-all\\\\\\\" to block all traffic or \\\\\\\"custom\\\\\\\" to provide specific rules.\",\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"mode\"\n                    ],\n                    \"properties\": {\n                      \"mode\": {\n                        \"description\": \"The network access policy mode. Use \\\\\\\"allow-all\\\\\\\" to permit all outbound traffic. Use \\\\\\\"deny-all\\\\\\\" to block all outbound traffic. Use \\\\\\\"custom\\\\\\\" to specify explicit allow/deny rules.\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"allow-all\",\n                          \"deny-all\",\n                          \"custom\",\n                          \"default-allow\",\n                          \"default-deny\"\n                        ],\n                        \"example\": \"custom\"\n                      },\n                      \"allowedDomains\": {\n                        \"description\": \"List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\\\\\"custom\\\\\\\". Supports wildcard patterns (e.g., \\\\\\\"*.example.com\\\\\\\" matches all subdomains).\",\n                        \"type\": \"array\",\n                        \"example\": [\n                          \"api.github.com\",\n                          \"*.npmjs.org\"\n                        ],\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"description\": \"A domain name pattern. Use \\\\\\\"*\\\\\\\" for wildcard matching of subdomains (e.g., \\\\\\\"*.example.com\\\\\\\").\"\n                        }\n                      },\n                      \"allowedCIDRs\": {\n                        \"description\": \"List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.\",\n                        \"type\": \"array\",\n                        \"example\": [\n                          \"35.192.0.0/12\",\n                          \"104.16.0.0/12\"\n                        ],\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"description\": \"An IP address range in CIDR notation (e.g., \\\\\\\"35.192.0.0/12\\\\\\\" for IPv4 or \\\\\\\"2001:db8::/32\\\\\\\" for IPv6).\"\n                        }\n                      },\n                      \"deniedCIDRs\": {\n                        \"description\": \"List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.\",\n                        \"type\": \"array\",\n                        \"example\": [\n                          \"35.192.0.0/12\"\n                        ],\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"description\": \"An IP address range in CIDR notation to block.\"\n                        }\n                      }\n                    }\n                  },\n                  \"env\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"string\"\n                    },\n                    \"description\": \"Default environment variables for the sandbox. These are inherited by all commands unless overridden.\",\n                    \"default\": {},\n                    \"example\": {\n                      \"NODE_ENV\": \"production\",\n                      \"HELLO\": \"world\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/snapshots\": {\n      \"get\": {\n        \"description\": \"Retrieves a paginated list of snapshots for a specific project.\",\n        \"operationId\": \"listSnapshots\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List snapshots\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"snapshots\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/Snapshot\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"total\": {\n                          \"type\": \"number\"\n                        },\n                        \"count\": {\n                          \"type\": \"number\",\n                          \"description\": \"Amount of items in the current page.\",\n                          \"example\": 20\n                        },\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp that must be used to request the next page.\",\n                          \"example\": 1540095775951\n                        },\n                        \"prev\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp that must be used to request the previous page.\",\n                          \"example\": 1540095775951\n                        }\n                      },\n                      \"required\": [\n                        \"count\",\n                        \"next\",\n                        \"prev\",\n                        \"total\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"pagination\",\n                    \"snapshots\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"project\",\n            \"description\": \"The unique identifier or name of the project to list snapshots for.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"The unique identifier or name of the project to list snapshots for.\",\n              \"type\": \"string\",\n              \"example\": \"prj_abc123\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of snapshots to return in the response. Used for pagination.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Maximum number of snapshots to return in the response. Used for pagination.\",\n              \"type\": \"number\",\n              \"example\": 20\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Filter snapshots created after this timestamp. Specified as Unix time in milliseconds.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter snapshots created after this timestamp. Specified as Unix time in milliseconds.\",\n              \"type\": \"number\",\n              \"example\": 1540095775941\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Filter snapshots created before this timestamp. Specified as Unix time in milliseconds.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter snapshots created before this timestamp. Specified as Unix time in milliseconds.\",\n              \"type\": \"number\",\n              \"example\": 1540095775951\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}\": {\n      \"get\": {\n        \"description\": \"Retrieves detailed information about a specific sandbox, including its current status, resource configuration, and exposed routes.\",\n        \"operationId\": \"getSandbox\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a sandbox\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"sandbox\": {\n                      \"$ref\": \"#/components/schemas/Sandbox\"\n                    },\n                    \"routes\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/SandboxPublicRoute\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"routes\",\n                    \"sandbox\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to retrieve.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to retrieve.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/cmd\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of all commands that have been executed in a sandbox, including their current status, exit codes, and execution times, ordered from the most recent to the oldest.\",\n        \"operationId\": \"listCommands\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List commands\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The list of commands executed in the sandbox.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"commands\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/SandboxCommand\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"commands\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to list commands for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to list commands for.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Executes a shell command inside a running sandbox. The command runs asynchronously and returns immediately with a command ID that can be used to track its progress and retrieve its output. Optionally, use the `wait` parameter to stream the command status until completion.\",\n        \"operationId\": \"runCommand\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Execute a command\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"command\": {\n                      \"$ref\": \"#/components/schemas/SandboxCommand\"\n                    }\n                  },\n                  \"required\": [\n                    \"command\"\n                  ],\n                  \"type\": \"object\"\n                }\n              },\n              \"application/x-ndjson\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"command\": {\n                      \"$ref\": \"#/components/schemas/SandboxCommand\"\n                    }\n                  },\n                  \"required\": [\n                    \"command\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox in which to execute the command.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox in which to execute the command.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"command\"\n                ],\n                \"properties\": {\n                  \"command\": {\n                    \"type\": \"string\",\n                    \"description\": \"The executable or shell command to run. This is the program name without arguments.\",\n                    \"example\": \"npm\"\n                  },\n                  \"args\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"description\": \"Arguments to pass to the command. Each argument should be a separate array element.\",\n                    \"example\": [\n                      \"install\",\n                      \"--save\",\n                      \"lodash\"\n                    ]\n                  },\n                  \"cwd\": {\n                    \"type\": \"string\",\n                    \"description\": \"The working directory in which to execute the command. Defaults to the sandbox home directory if not specified.\",\n                    \"example\": \"/home/vercel-sandbox\"\n                  },\n                  \"env\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": {\n                      \"type\": \"string\"\n                    },\n                    \"description\": \"Additional environment variables to set for this command. These are merged with the sandbox environment.\",\n                    \"default\": {},\n                    \"example\": {\n                      \"NODE_ENV\": \"production\",\n                      \"DEBUG\": \"true\"\n                    }\n                  },\n                  \"sudo\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Execute the command with root (superuser) privileges.\",\n                    \"default\": false\n                  },\n                  \"wait\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If true, returns an ND-JSON stream that emits the command status when started and again when finished. Useful for synchronously waiting for command completion.\",\n                    \"default\": false\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/{cmdId}/kill\": {\n      \"post\": {\n        \"description\": \"Sends a signal to terminate a running command in a sandbox. The signal can be used to gracefully stop (SIGTERM) or forcefully kill (SIGKILL) the process. The command must still be running for this operation to succeed.\",\n        \"operationId\": \"killCommand\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Kill a command\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The command was terminated successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"command\": {\n                      \"$ref\": \"#/components/schemas/SandboxCommand\"\n                    }\n                  },\n                  \"required\": [\n                    \"command\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"cmdId\",\n            \"description\": \"The unique identifier of the command to terminate.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the command to terminate.\",\n              \"example\": \"cmd_abc123\"\n            }\n          },\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox containing the command.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox containing the command.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"signal\"\n                ],\n                \"properties\": {\n                  \"signal\": {\n                    \"type\": \"number\",\n                    \"description\": \"The POSIX signal number to send to the process. Common values: 15 (SIGTERM) for graceful termination, 9 (SIGKILL) for forced termination.\",\n                    \"example\": 15\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/stop\": {\n      \"post\": {\n        \"description\": \"Stops a running sandbox and releases its allocated resources. All running processes within the sandbox will be terminated. This action cannot be undone. A stopped sandbox cannot be restarted.\",\n        \"operationId\": \"stopSandbox\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Stop a sandbox\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The sandbox was stopped successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"sandbox\": {\n                      \"$ref\": \"#/components/schemas/Sandbox\"\n                    }\n                  },\n                  \"required\": [\n                    \"sandbox\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to stop.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to stop.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/extend-timeout\": {\n      \"post\": {\n        \"description\": \"Extends the maximum execution time of a running sandbox. The sandbox must be active and able to accept commands. The total timeout cannot exceed the maximum allowed limit for your account.\",\n        \"operationId\": \"extendSandboxTimeout\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Extend sandbox timeout\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The sandbox timeout was extended successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"sandbox\": {\n                      \"$ref\": \"#/components/schemas/Sandbox\"\n                    }\n                  },\n                  \"required\": [\n                    \"sandbox\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to extend the timeout for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to extend the timeout for.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"duration\"\n                ],\n                \"properties\": {\n                  \"duration\": {\n                    \"type\": \"number\",\n                    \"description\": \"The amount of time in milliseconds to add to the current timeout. Must be at least 1000ms (1 second).\",\n                    \"minimum\": 1000,\n                    \"example\": 300000\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/network-policy\": {\n      \"post\": {\n        \"description\": \"Replaces the network access policy of a running sandbox. Use this to control which external hosts the sandbox can communicate with. This is a full replacement. Any previously configured network rules will be overwritten.\",\n        \"operationId\": \"updateNetworkPolicy\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update network policy\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The sandbox network policy was updated successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"sandbox\": {\n                      \"$ref\": \"#/components/schemas/Sandbox\"\n                    }\n                  },\n                  \"required\": [\n                    \"sandbox\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to update the network policy for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to update the network policy for.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"mode\": {\n                    \"description\": \"The network access policy mode. Use \\\\\\\"allow-all\\\\\\\" to permit all outbound traffic. Use \\\\\\\"deny-all\\\\\\\" to block all outbound traffic. Use \\\\\\\"custom\\\\\\\" to specify explicit allow/deny rules.\",\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"allow-all\",\n                      \"deny-all\",\n                      \"custom\",\n                      \"default-allow\",\n                      \"default-deny\"\n                    ],\n                    \"example\": \"custom\"\n                  },\n                  \"allowedDomains\": {\n                    \"description\": \"List of domain names the sandbox is allowed to connect to. Only applies when mode is \\\\\\\"custom\\\\\\\". Supports wildcard patterns (e.g., \\\\\\\"*.example.com\\\\\\\" matches all subdomains).\",\n                    \"type\": \"array\",\n                    \"example\": [\n                      \"api.github.com\",\n                      \"*.npmjs.org\"\n                    ],\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"description\": \"A domain name pattern. Use \\\\\\\"*\\\\\\\" for wildcard matching of subdomains (e.g., \\\\\\\"*.example.com\\\\\\\").\"\n                    }\n                  },\n                  \"allowedCIDRs\": {\n                    \"description\": \"List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to. Traffic to these addresses bypasses domain-based restrictions.\",\n                    \"type\": \"array\",\n                    \"example\": [\n                      \"35.192.0.0/12\",\n                      \"104.16.0.0/12\"\n                    ],\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"description\": \"An IP address range in CIDR notation (e.g., \\\\\\\"35.192.0.0/12\\\\\\\" for IPv4 or \\\\\\\"2001:db8::/32\\\\\\\" for IPv6).\"\n                    }\n                  },\n                  \"deniedCIDRs\": {\n                    \"description\": \"List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.\",\n                    \"type\": \"array\",\n                    \"example\": [\n                      \"35.192.0.0/12\"\n                    ],\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"description\": \"An IP address range in CIDR notation to block.\"\n                    }\n                  }\n                },\n                \"description\": \"Network access policy for the sandbox.\\\\n    Controls which external hosts the sandbox can communicate with.\\\\n    Use \\\\\\\"allow-all\\\\\\\" mode to allow all traffic, \\\\\\\"deny-all\\\\\\\" to block all traffic or \\\\\\\"custom\\\\\\\" to provide specific rules.\",\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"mode\"\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/cmd/{cmdId}\": {\n      \"get\": {\n        \"description\": \"Retrieves the current status and details of a command executed in a sandbox. Use the `wait` parameter to block until the command finishes execution.\",\n        \"operationId\": \"getCommand\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a command\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The command data along with the exit code if the command did finish.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"command\": {\n                      \"$ref\": \"#/components/schemas/SandboxCommand\"\n                    }\n                  },\n                  \"required\": [\n                    \"command\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox containing the command.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox containing the command.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"name\": \"cmdId\",\n            \"description\": \"The unique identifier of the command to retrieve.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the command to retrieve.\",\n              \"example\": \"cmd_abc123\"\n            }\n          },\n          {\n            \"name\": \"wait\",\n            \"description\": \"If set to \\\\\\\"true\\\\\\\", the request will block until the command finishes execution. Useful for synchronously waiting for command completion.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"If set to \\\\\\\"true\\\\\\\", the request will block until the command finishes execution. Useful for synchronously waiting for command completion.\",\n              \"enum\": [\n                \"true\",\n                \"false\"\n              ],\n              \"default\": \"false\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/cmd/{cmdId}/logs\": {\n      \"get\": {\n        \"description\": \"Streams the output of a command in real-time using newline-delimited JSON (ND-JSON). Each entry includes the output data and stream type. Stream types include `stdout`, `stderr`, and `error` (for stream failures).\",\n        \"operationId\": \"getCommandLogs\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Stream command logs\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/x-ndjson\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"stream\": {\n                          \"type\": \"string\"\n                        },\n                        \"data\": {\n                          \"properties\": {\n                            \"code\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"sandbox_stream_closed\"\n                              ]\n                            },\n                            \"message\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"Sandbox stream was closed and is not accepting commands.\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"code\",\n                            \"message\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"data\",\n                        \"stream\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"data\": {\n                          \"type\": \"string\"\n                        },\n                        \"stream\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"data\",\n                        \"stream\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox containing the command.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox containing the command.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"name\": \"cmdId\",\n            \"description\": \"The unique identifier of the command to stream logs for.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the command to stream logs for.\",\n              \"example\": \"cmd_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/fs/read\": {\n      \"post\": {\n        \"description\": \"Downloads the contents of a file from a sandbox's filesystem. The file content is returned as a binary stream with appropriate Content-Disposition headers for file download.\",\n        \"operationId\": \"readFile\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Read a file\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/octet-stream\": {\n                \"schema\": {\n                  \"type\": \"string\",\n                  \"format\": \"binary\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to read the file from.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to read the file from.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"path\"\n                ],\n                \"properties\": {\n                  \"cwd\": {\n                    \"description\": \"The base directory for resolving relative paths. If not specified, paths are resolved from the sandbox home directory.\",\n                    \"type\": \"string\",\n                    \"example\": \"/home/vercel-sandbox\"\n                  },\n                  \"path\": {\n                    \"description\": \"The path of the file to read. Can be absolute or relative to the working directory.\",\n                    \"type\": \"string\",\n                    \"example\": \"dist/agent-output.md\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/fs/mkdir\": {\n      \"post\": {\n        \"description\": \"Creates a new directory in a sandbox's filesystem. By default, parent directories are created recursively if they don't exist (similar to `mkdir -p`).\",\n        \"operationId\": \"createDirectory\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a directory\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The directory was created successfully.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to create the directory in.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to create the directory in.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"path\"\n                ],\n                \"properties\": {\n                  \"cwd\": {\n                    \"description\": \"The base directory for resolving relative paths. If not specified, paths are resolved from the sandbox home directory.\",\n                    \"type\": \"string\",\n                    \"example\": \"/home/vercel-sandbox\"\n                  },\n                  \"path\": {\n                    \"description\": \"The path of the directory to create. Can be absolute or relative to the working directory.\",\n                    \"type\": \"string\",\n                    \"example\": \"src/components\"\n                  },\n                  \"recursive\": {\n                    \"description\": \"If true, creates parent directories as needed (like `mkdir -p`). If false, fails if parent directories do not exist.\",\n                    \"type\": \"boolean\",\n                    \"default\": true\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/fs/write\": {\n      \"post\": {\n        \"description\": \"Uploads and extracts files to a sandbox's filesystem. Files must be uploaded as a gzipped tarball (`.tar.gz`) with the `Content-Type` header set to `application/gzip`. The tarball contents are extracted to the sandbox's working directory, or to a custom directory specified via the `x-cwd` header.\",\n        \"operationId\": \"writeFiles\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Write files\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The files were successfully written to the sandbox.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\\nOne of the provided values in the headers is invalid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"in\": \"header\",\n            \"description\": \"The target directory where the tarball contents will be extracted. If not specified, files are extracted to the sandbox home directory.\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The target directory where the tarball contents will be extracted. If not specified, files are extracted to the sandbox home directory.\",\n              \"example\": \"/home/vercel-sandbox\"\n            },\n            \"name\": \"x-cwd\"\n          },\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to write files to.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to write files to.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/snapshots/{snapshotId}\": {\n      \"get\": {\n        \"description\": \"Retrieves detailed information about a specific snapshot, including its creation time, size, expiration date, and the source sandbox it was created from.\",\n        \"operationId\": \"getSnapshot\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a snapshot\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"snapshot\": {\n                      \"$ref\": \"#/components/schemas/Snapshot\"\n                    }\n                  },\n                  \"required\": [\n                    \"snapshot\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"snapshotId\",\n            \"description\": \"The unique identifier of the snapshot to retrieve.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the snapshot to retrieve.\",\n              \"example\": \"snap_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Permanently deletes a snapshot and frees its associated storage. This action cannot be undone. After deletion, the snapshot can no longer be used to create new sandboxes.\",\n        \"operationId\": \"deleteSnapshot\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a snapshot\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"snapshot\": {\n                      \"$ref\": \"#/components/schemas/Snapshot\"\n                    }\n                  },\n                  \"required\": [\n                    \"snapshot\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"snapshotId\",\n            \"description\": \"The unique identifier of the snapshot to delete.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the snapshot to delete.\",\n              \"example\": \"snap_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/sandboxes/{sandboxId}/snapshot\": {\n      \"post\": {\n        \"description\": \"Creates a point-in-time snapshot of a running sandbox's filesystem. Snapshots can be used to quickly restore a sandbox to a previous state or to create new sandboxes with pre-configured environments. The sandbox must be running and able to accept commands for a snapshot to be created. The sandbox will be terminated after the snapshot is created.\",\n        \"operationId\": \"createSnapshot\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a snapshot\",\n        \"tags\": [\n          \"sandboxes\"\n        ],\n        \"responses\": {\n          \"201\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"snapshot\": {\n                      \"$ref\": \"#/components/schemas/Snapshot\"\n                    },\n                    \"sandbox\": {\n                      \"$ref\": \"#/components/schemas/Sandbox\"\n                    }\n                  },\n                  \"required\": [\n                    \"sandbox\",\n                    \"snapshot\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"410\": {\n            \"description\": \"The Sandbox has stopped execution and is no longer available.\"\n          },\n          \"422\": {\n            \"description\": \"The Sandbox is creating a snapshot and will be stopped shortly.\\nThe Sandbox is stopping and is no longer available.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"sandboxId\",\n            \"description\": \"The unique identifier of the sandbox to snapshot.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique identifier of the sandbox to snapshot.\",\n              \"example\": \"sbx_abc123\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"expiration\": {\n                    \"description\": \"The number of milliseconds after which the snapshot will expire and be deleted. Use 0 for no expiration.\",\n                    \"type\": \"integer\",\n                    \"minimum\": 0\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/security/attack-mode\": {\n      \"post\": {\n        \"description\": \"Update the setting for determining if the project has Attack Challenge mode enabled.\",\n        \"operationId\": \"updateAttackChallengeMode\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Attack Challenge mode\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"attackModeEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"attackModeUpdatedAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"attackModeEnabled\",\n                    \"attackModeUpdatedAt\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"projectId\",\n                      \"attackModeEnabled\",\n                      \"attackModeActiveUntil\"\n                    ],\n                    \"properties\": {\n                      \"projectId\": {\n                        \"type\": \"string\"\n                      },\n                      \"attackModeEnabled\": {\n                        \"type\": \"boolean\"\n                      },\n                      \"attackModeActiveUntil\": {\n                        \"type\": \"number\"\n                      }\n                    }\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"projectId\",\n                      \"attackModeEnabled\"\n                    ],\n                    \"properties\": {\n                      \"projectId\": {\n                        \"type\": \"string\"\n                      },\n                      \"attackModeEnabled\": {\n                        \"type\": \"boolean\"\n                      }\n                    }\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/security/firewall/config\": {\n      \"put\": {\n        \"description\": \"Set the firewall configuration to provided rules and settings. Creates or overwrite the existing firewall configuration.\",\n        \"operationId\": \"putFirewallConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Put Firewall Configuration\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"active\": {\n                      \"properties\": {\n                        \"ownerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"projectKey\": {\n                          \"type\": \"string\"\n                        },\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"version\": {\n                          \"type\": \"number\"\n                        },\n                        \"updatedAt\": {\n                          \"type\": \"string\"\n                        },\n                        \"firewallEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"crs\": {\n                          \"properties\": {\n                            \"sd\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Scanner Detection - Detect and prevent reconnaissance activities from network scanning tools.\"\n                            },\n                            \"ma\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Multipart Attack - Block attempts to bypass security controls using multipart/form-data encoding.\"\n                            },\n                            \"lfi\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Local File Inclusion Attack - Prevent unauthorized access to local files through web applications.\"\n                            },\n                            \"rfi\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Remote File Inclusion Attack - Prohibit unauthorized upload or execution of remote files.\"\n                            },\n                            \"rce\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Remote Execution Attack - Prevent unauthorized execution of remote scripts or commands.\"\n                            },\n                            \"php\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"PHP Attack - Safeguard against vulnerability exploits in PHP-based applications.\"\n                            },\n                            \"gen\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Generic Attack - Provide broad protection from various undefined or novel attack vectors.\"\n                            },\n                            \"xss\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"XSS Attack - Prevent injection of malicious scripts into trusted webpages.\"\n                            },\n                            \"sqli\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"SQL Injection Attack - Prohibit unauthorized use of SQL commands to manipulate databases.\"\n                            },\n                            \"sf\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Session Fixation Attack - Prevent unauthorized takeover of user sessions by enforcing unique session IDs.\"\n                            },\n                            \"java\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"active\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Java Attack - Mitigate risks of exploitation targeting Java-based applications or components.\"\n                            }\n                          },\n                          \"required\": [\n                            \"gen\",\n                            \"java\",\n                            \"lfi\",\n                            \"ma\",\n                            \"php\",\n                            \"rce\",\n                            \"rfi\",\n                            \"sd\",\n                            \"sf\",\n                            \"sqli\",\n                            \"xss\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Custom Ruleset\"\n                        },\n                        \"rules\": {\n                          \"items\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"description\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"active\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"conditionGroup\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"conditions\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"host\",\n                                                  \"path\",\n                                                  \"method\",\n                                                  \"header\",\n                                                  \"query\",\n                                                  \"cookie\",\n                                                  \"target_path\",\n                                                  \"route\",\n                                                  \"raw_path\",\n                                                  \"ip_address\",\n                                                  \"protocol\",\n                                                  \"region\",\n                                                  \"scheme\",\n                                                  \"environment\",\n                                                  \"user_agent\",\n                                                  \"geo_continent\",\n                                                  \"geo_country\",\n                                                  \"geo_country_region\",\n                                                  \"geo_city\",\n                                                  \"geo_as_number\",\n                                                  \"ja4_digest\",\n                                                  \"ja3_digest\",\n                                                  \"rate_limit_api_id\",\n                                                  \"server_action\",\n                                                  \"bot_name\",\n                                                  \"bot_category\"\n                                                ]\n                                              },\n                                              \"op\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"sub\",\n                                                  \"re\",\n                                                  \"eq\",\n                                                  \"ex\",\n                                                  \"inc\",\n                                                  \"pre\",\n                                                  \"suf\",\n                                                  \"gt\",\n                                                  \"gte\",\n                                                  \"lt\",\n                                                  \"lte\",\n                                                  \"nex\",\n                                                  \"ninc\",\n                                                  \"neq\"\n                                                ]\n                                              },\n                                              \"neg\": {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              \"key\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"value\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"op\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"conditions\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"action\": {\n                                    \"properties\": {\n                                      \"mitigate\": {\n                                        \"properties\": {\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"deny\",\n                                              \"log\",\n                                              \"challenge\",\n                                              \"bypass\",\n                                              \"rate_limit\",\n                                              \"redirect\"\n                                            ]\n                                          },\n                                          \"rateLimit\": {\n                                            \"nullable\": true,\n                                            \"properties\": {\n                                              \"algo\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"fixed_window\",\n                                                  \"token_bucket\"\n                                                ]\n                                              },\n                                              \"window\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"limit\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"keys\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"action\": {\n                                                \"nullable\": true,\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"deny\",\n                                                  \"log\",\n                                                  \"challenge\",\n                                                  \"rate_limit\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"algo\",\n                                              \"keys\",\n                                              \"limit\",\n                                              \"window\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"redirect\": {\n                                            \"nullable\": true,\n                                            \"properties\": {\n                                              \"location\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"permanent\": {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"location\",\n                                              \"permanent\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"actionDuration\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\"\n                                          },\n                                          \"bypassSystem\": {\n                                            \"nullable\": true,\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"logHeaders\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"*\"\n                                                ]\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"action\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"valid\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ]\n                                  },\n                                  \"validationErrors\": {\n                                    \"nullable\": true\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"active\",\n                                  \"conditionGroup\",\n                                  \"id\",\n                                  \"name\",\n                                  \"valid\",\n                                  \"validationErrors\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"description\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"active\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"conditionGroup\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"conditions\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"host\",\n                                                  \"path\",\n                                                  \"method\",\n                                                  \"header\",\n                                                  \"query\",\n                                                  \"cookie\",\n                                                  \"target_path\",\n                                                  \"route\",\n                                                  \"raw_path\",\n                                                  \"ip_address\",\n                                                  \"protocol\",\n                                                  \"region\",\n                                                  \"scheme\",\n                                                  \"environment\",\n                                                  \"user_agent\",\n                                                  \"geo_continent\",\n                                                  \"geo_country\",\n                                                  \"geo_country_region\",\n                                                  \"geo_city\",\n                                                  \"geo_as_number\",\n                                                  \"ja4_digest\",\n                                                  \"ja3_digest\",\n                                                  \"rate_limit_api_id\",\n                                                  \"server_action\",\n                                                  \"bot_name\",\n                                                  \"bot_category\"\n                                                ]\n                                              },\n                                              \"op\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"sub\",\n                                                  \"re\",\n                                                  \"eq\",\n                                                  \"ex\",\n                                                  \"inc\",\n                                                  \"pre\",\n                                                  \"suf\",\n                                                  \"gt\",\n                                                  \"gte\",\n                                                  \"lt\",\n                                                  \"lte\",\n                                                  \"nex\",\n                                                  \"ninc\",\n                                                  \"neq\"\n                                                ]\n                                              },\n                                              \"neg\": {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              \"key\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"value\": {\n                                                \"oneOf\": [\n                                                  {\n                                                    \"type\": \"string\"\n                                                  },\n                                                  {\n                                                    \"type\": \"number\"\n                                                  },\n                                                  {\n                                                    \"items\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"type\": \"array\"\n                                                  }\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"op\",\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"conditions\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  },\n                                  \"action\": {\n                                    \"properties\": {\n                                      \"mitigate\": {\n                                        \"properties\": {\n                                          \"action\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"deny\",\n                                              \"log\",\n                                              \"challenge\",\n                                              \"bypass\",\n                                              \"rate_limit\",\n                                              \"redirect\"\n                                            ]\n                                          },\n                                          \"rateLimit\": {\n                                            \"nullable\": true,\n                                            \"properties\": {\n                                              \"algo\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"fixed_window\",\n                                                  \"token_bucket\"\n                                                ]\n                                              },\n                                              \"window\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"limit\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"keys\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              \"action\": {\n                                                \"nullable\": true,\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"deny\",\n                                                  \"log\",\n                                                  \"challenge\",\n                                                  \"rate_limit\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"algo\",\n                                              \"keys\",\n                                              \"limit\",\n                                              \"window\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"redirect\": {\n                                            \"nullable\": true,\n                                            \"properties\": {\n                                              \"location\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"permanent\": {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"location\",\n                                              \"permanent\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"actionDuration\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\"\n                                          },\n                                          \"bypassSystem\": {\n                                            \"nullable\": true,\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"logHeaders\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"*\"\n                                                ]\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"action\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    },\n                                    \"type\": \"object\"\n                                  },\n                                  \"valid\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false\n                                    ]\n                                  },\n                                  \"validationErrors\": {\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\",\n                                  \"active\",\n                                  \"conditionGroup\",\n                                  \"id\",\n                                  \"name\",\n                                  \"valid\",\n                                  \"validationErrors\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"ips\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"hostname\": {\n                                \"type\": \"string\"\n                              },\n                              \"ip\": {\n                                \"type\": \"string\"\n                              },\n                              \"notes\": {\n                                \"type\": \"string\"\n                              },\n                              \"action\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"deny\",\n                                  \"log\",\n                                  \"challenge\",\n                                  \"bypass\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"hostname\",\n                              \"id\",\n                              \"ip\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"changes\": {\n                          \"items\": {\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"managedRules\": {\n                          \"properties\": {\n                            \"bot_protection\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\",\n                                    \"challenge\"\n                                  ]\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"string\"\n                                },\n                                \"userId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"username\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"ai_bots\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\",\n                                    \"challenge\"\n                                  ]\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"string\"\n                                },\n                                \"userId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"username\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"owasp\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\",\n                                    \"challenge\"\n                                  ]\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"string\"\n                                },\n                                \"userId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"username\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"vercel_ruleset\": {\n                              \"properties\": {\n                                \"active\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"deny\",\n                                    \"log\",\n                                    \"challenge\"\n                                  ]\n                                },\n                                \"updatedAt\": {\n                                  \"type\": \"string\"\n                                },\n                                \"userId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"username\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"active\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"botIdEnabled\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"logHeaders\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"type\": \"string\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"*\"\n                              ]\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"changes\",\n                        \"crs\",\n                        \"firewallEnabled\",\n                        \"id\",\n                        \"ips\",\n                        \"ownerId\",\n                        \"projectKey\",\n                        \"rules\",\n                        \"updatedAt\",\n                        \"version\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"active\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"firewallEnabled\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"managedRules\": {\n                    \"type\": \"object\"\n                  },\n                  \"crs\": {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"sd\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Scanner Detection - Detect and prevent reconnaissance activities from network scanning tools.\"\n                      },\n                      \"ma\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Multipart Attack - Block attempts to bypass security controls using multipart/form-data encoding.\"\n                      },\n                      \"lfi\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Local File Inclusion Attack - Prevent unauthorized access to local files through web applications.\"\n                      },\n                      \"rfi\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Remote File Inclusion Attack - Prohibit unauthorized upload or execution of remote files.\"\n                      },\n                      \"rce\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Remote Execution Attack - Prevent unauthorized execution of remote scripts or commands.\"\n                      },\n                      \"php\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"PHP Attack - Safeguard against vulnerability exploits in PHP-based applications.\"\n                      },\n                      \"gen\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Generic Attack - Provide broad protection from various undefined or novel attack vectors.\"\n                      },\n                      \"xss\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"XSS Attack - Prevent injection of malicious scripts into trusted webpages.\"\n                      },\n                      \"sqli\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"SQL Injection Attack - Prohibit unauthorized use of SQL commands to manipulate databases.\"\n                      },\n                      \"sf\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Session Fixation Attack - Prevent unauthorized takeover of user sessions by enforcing unique session IDs.\"\n                      },\n                      \"java\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false,\n                        \"description\": \"Java Attack - Mitigate risks of exploitation targeting Java-based applications or components.\"\n                      }\n                    },\n                    \"additionalProperties\": false,\n                    \"description\": \"Custom Ruleset\"\n                  },\n                  \"rules\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"name\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 160\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 256\n                        },\n                        \"active\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"conditionGroup\": {\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                              \"conditions\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"object\",\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"host\",\n                                        \"path\",\n                                        \"method\",\n                                        \"header\",\n                                        \"query\",\n                                        \"cookie\",\n                                        \"target_path\",\n                                        \"route\",\n                                        \"raw_path\",\n                                        \"ip_address\",\n                                        \"region\",\n                                        \"protocol\",\n                                        \"scheme\",\n                                        \"environment\",\n                                        \"user_agent\",\n                                        \"geo_continent\",\n                                        \"geo_country\",\n                                        \"geo_country_region\",\n                                        \"geo_city\",\n                                        \"geo_as_number\",\n                                        \"ja4_digest\",\n                                        \"ja3_digest\",\n                                        \"rate_limit_api_id\",\n                                        \"server_action\",\n                                        \"bot_name\",\n                                        \"bot_category\"\n                                      ],\n                                      \"description\": \"[Parameter](https://vercel.com/docs/security/vercel-waf/rule-configuration#parameters) from the incoming traffic.\"\n                                    },\n                                    \"op\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"re\",\n                                        \"eq\",\n                                        \"neq\",\n                                        \"ex\",\n                                        \"nex\",\n                                        \"inc\",\n                                        \"ninc\",\n                                        \"pre\",\n                                        \"suf\",\n                                        \"sub\",\n                                        \"gt\",\n                                        \"gte\",\n                                        \"lt\",\n                                        \"lte\"\n                                      ]\n                                    },\n                                    \"neg\": {\n                                      \"type\": \"boolean\"\n                                    },\n                                    \"key\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"value\": {\n                                      \"anyOf\": [\n                                        {\n                                          \"type\": \"string\"\n                                        },\n                                        {\n                                          \"type\": \"array\",\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"maxItems\": 75\n                                        },\n                                        {\n                                          \"type\": \"number\"\n                                        }\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"type\",\n                                    \"op\"\n                                  ],\n                                  \"additionalProperties\": false\n                                },\n                                \"maxItems\": 65\n                              }\n                            },\n                            \"required\": [\n                              \"conditions\"\n                            ],\n                            \"additionalProperties\": false\n                          },\n                          \"maxItems\": 25\n                        },\n                        \"action\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"mitigate\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"log\",\n                                    \"challenge\",\n                                    \"deny\",\n                                    \"bypass\",\n                                    \"rate_limit\",\n                                    \"redirect\"\n                                  ]\n                                },\n                                \"rateLimit\": {\n                                  \"anyOf\": [\n                                    {\n                                      \"type\": \"object\",\n                                      \"properties\": {\n                                        \"algo\": {\n                                          \"type\": \"string\",\n                                          \"enum\": [\n                                            \"fixed_window\",\n                                            \"token_bucket\"\n                                          ]\n                                        },\n                                        \"window\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"limit\": {\n                                          \"type\": \"number\"\n                                        },\n                                        \"keys\": {\n                                          \"type\": \"array\",\n                                          \"items\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"action\": {\n                                          \"anyOf\": [\n                                            {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"log\",\n                                                \"challenge\",\n                                                \"deny\",\n                                                \"rate_limit\"\n                                              ]\n                                            },\n                                            {}\n                                          ],\n                                          \"nullable\": true\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"algo\",\n                                        \"window\",\n                                        \"limit\",\n                                        \"keys\"\n                                      ],\n                                      \"additionalProperties\": false\n                                    },\n                                    {}\n                                  ],\n                                  \"nullable\": true\n                                },\n                                \"redirect\": {\n                                  \"anyOf\": [\n                                    {\n                                      \"type\": \"object\",\n                                      \"properties\": {\n                                        \"location\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"permanent\": {\n                                          \"type\": \"boolean\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"location\",\n                                        \"permanent\"\n                                      ],\n                                      \"additionalProperties\": false\n                                    },\n                                    {}\n                                  ],\n                                  \"nullable\": true\n                                },\n                                \"actionDuration\": {\n                                  \"type\": \"string\",\n                                  \"nullable\": true\n                                },\n                                \"bypassSystem\": {\n                                  \"type\": \"boolean\",\n                                  \"nullable\": true\n                                },\n                                \"logHeaders\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"array\",\n                                      \"items\": {\n                                        \"type\": \"string\"\n                                      }\n                                    }\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\"\n                              ],\n                              \"additionalProperties\": false\n                            }\n                          },\n                          \"additionalProperties\": false\n                        },\n                        \"valid\": {\n                          \"type\": \"boolean\"\n                        },\n                        \"validationErrors\": {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"array\",\n                              \"items\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            {\n                              \"type\": \"string\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"name\",\n                        \"active\",\n                        \"conditionGroup\",\n                        \"action\"\n                      ],\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"ips\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\"\n                        },\n                        \"hostname\": {\n                          \"type\": \"string\"\n                        },\n                        \"ip\": {\n                          \"type\": \"string\"\n                        },\n                        \"notes\": {\n                          \"type\": \"string\"\n                        },\n                        \"action\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"deny\",\n                            \"challenge\",\n                            \"log\",\n                            \"bypass\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"hostname\",\n                        \"ip\",\n                        \"action\"\n                      ],\n                      \"additionalProperties\": false\n                    }\n                  },\n                  \"botIdEnabled\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"logHeaders\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      },\n                      {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"firewallEnabled\"\n                ],\n                \"additionalProperties\": false\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"patch\": {\n        \"description\": \"Process updates to modify the existing firewall config for a project\",\n        \"operationId\": \"updateFirewallConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Firewall Configuration\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"oneOf\": [\n                  {\n                    \"description\": \"Enable Firewall\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"firewallEnabled\"\n                        ]\n                      },\n                      \"id\": {\n                        \"nullable\": true\n                      },\n                      \"value\": {\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Add a custom rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"rules.insert\"\n                        ]\n                      },\n                      \"id\": {\n                        \"nullable\": true\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"maxLength\": 160\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"maxLength\": 256\n                          },\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"conditionGroup\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"conditions\": {\n                                  \"type\": \"array\",\n                                  \"items\": {\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"host\",\n                                          \"path\",\n                                          \"method\",\n                                          \"header\",\n                                          \"query\",\n                                          \"cookie\",\n                                          \"target_path\",\n                                          \"route\",\n                                          \"raw_path\",\n                                          \"ip_address\",\n                                          \"region\",\n                                          \"protocol\",\n                                          \"scheme\",\n                                          \"environment\",\n                                          \"user_agent\",\n                                          \"geo_continent\",\n                                          \"geo_country\",\n                                          \"geo_country_region\",\n                                          \"geo_city\",\n                                          \"geo_as_number\",\n                                          \"ja4_digest\",\n                                          \"ja3_digest\",\n                                          \"rate_limit_api_id\",\n                                          \"server_action\",\n                                          \"bot_name\",\n                                          \"bot_category\"\n                                        ]\n                                      },\n                                      \"op\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"re\",\n                                          \"eq\",\n                                          \"neq\",\n                                          \"ex\",\n                                          \"nex\",\n                                          \"inc\",\n                                          \"ninc\",\n                                          \"pre\",\n                                          \"suf\",\n                                          \"sub\",\n                                          \"gt\",\n                                          \"gte\",\n                                          \"lt\",\n                                          \"lte\"\n                                        ]\n                                      },\n                                      \"neg\": {\n                                        \"type\": \"boolean\"\n                                      },\n                                      \"key\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"maxItems\": 75\n                                          },\n                                          {\n                                            \"type\": \"number\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"op\"\n                                    ],\n                                    \"additionalProperties\": false\n                                  },\n                                  \"maxItems\": 65\n                                }\n                              },\n                              \"required\": [\n                                \"conditions\"\n                              ],\n                              \"additionalProperties\": false\n                            },\n                            \"maxItems\": 25\n                          },\n                          \"action\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                              \"mitigate\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"log\",\n                                      \"challenge\",\n                                      \"deny\",\n                                      \"bypass\",\n                                      \"rate_limit\",\n                                      \"redirect\"\n                                    ]\n                                  },\n                                  \"rateLimit\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"properties\": {\n                                          \"algo\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"fixed_window\",\n                                              \"token_bucket\"\n                                            ]\n                                          },\n                                          \"window\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"limit\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"keys\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"action\": {\n                                            \"anyOf\": [\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"log\",\n                                                  \"challenge\",\n                                                  \"deny\",\n                                                  \"rate_limit\"\n                                                ]\n                                              },\n                                              {}\n                                            ],\n                                            \"nullable\": true\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"algo\",\n                                          \"window\",\n                                          \"limit\",\n                                          \"keys\"\n                                        ],\n                                        \"additionalProperties\": false\n                                      },\n                                      {}\n                                    ],\n                                    \"nullable\": true\n                                  },\n                                  \"redirect\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"properties\": {\n                                          \"location\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"permanent\": {\n                                            \"type\": \"boolean\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"location\",\n                                          \"permanent\"\n                                        ],\n                                        \"additionalProperties\": false\n                                      },\n                                      {}\n                                    ],\n                                    \"nullable\": true\n                                  },\n                                  \"actionDuration\": {\n                                    \"type\": \"string\",\n                                    \"nullable\": true\n                                  },\n                                  \"bypassSystem\": {\n                                    \"type\": \"boolean\",\n                                    \"nullable\": true\n                                  },\n                                  \"logHeaders\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        }\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"additionalProperties\": false\n                              }\n                            },\n                            \"additionalProperties\": false\n                          },\n                          \"valid\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"validationErrors\": {\n                            \"anyOf\": [\n                              {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              {\n                                \"type\": \"string\"\n                              }\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"name\",\n                          \"active\",\n                          \"conditionGroup\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Update a custom rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"rules.update\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"maxLength\": 160\n                          },\n                          \"description\": {\n                            \"type\": \"string\",\n                            \"maxLength\": 256\n                          },\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"conditionGroup\": {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"object\",\n                              \"properties\": {\n                                \"conditions\": {\n                                  \"type\": \"array\",\n                                  \"items\": {\n                                    \"type\": \"object\",\n                                    \"properties\": {\n                                      \"type\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"host\",\n                                          \"path\",\n                                          \"method\",\n                                          \"header\",\n                                          \"query\",\n                                          \"cookie\",\n                                          \"target_path\",\n                                          \"route\",\n                                          \"raw_path\",\n                                          \"ip_address\",\n                                          \"region\",\n                                          \"protocol\",\n                                          \"scheme\",\n                                          \"environment\",\n                                          \"user_agent\",\n                                          \"geo_continent\",\n                                          \"geo_country\",\n                                          \"geo_country_region\",\n                                          \"geo_city\",\n                                          \"geo_as_number\",\n                                          \"ja4_digest\",\n                                          \"ja3_digest\",\n                                          \"rate_limit_api_id\",\n                                          \"server_action\",\n                                          \"bot_name\",\n                                          \"bot_category\"\n                                        ]\n                                      },\n                                      \"op\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"re\",\n                                          \"eq\",\n                                          \"neq\",\n                                          \"ex\",\n                                          \"nex\",\n                                          \"inc\",\n                                          \"ninc\",\n                                          \"pre\",\n                                          \"suf\",\n                                          \"sub\",\n                                          \"gt\",\n                                          \"gte\",\n                                          \"lt\",\n                                          \"lte\"\n                                        ]\n                                      },\n                                      \"neg\": {\n                                        \"type\": \"boolean\"\n                                      },\n                                      \"key\": {\n                                        \"type\": \"string\"\n                                      },\n                                      \"value\": {\n                                        \"anyOf\": [\n                                          {\n                                            \"type\": \"string\"\n                                          },\n                                          {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"maxItems\": 75\n                                          },\n                                          {\n                                            \"type\": \"number\"\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"type\",\n                                      \"op\"\n                                    ],\n                                    \"additionalProperties\": false\n                                  },\n                                  \"maxItems\": 65\n                                }\n                              },\n                              \"required\": [\n                                \"conditions\"\n                              ],\n                              \"additionalProperties\": false\n                            },\n                            \"maxItems\": 25\n                          },\n                          \"action\": {\n                            \"type\": \"object\",\n                            \"properties\": {\n                              \"mitigate\": {\n                                \"type\": \"object\",\n                                \"properties\": {\n                                  \"action\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"log\",\n                                      \"challenge\",\n                                      \"deny\",\n                                      \"bypass\",\n                                      \"rate_limit\",\n                                      \"redirect\"\n                                    ]\n                                  },\n                                  \"rateLimit\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"properties\": {\n                                          \"algo\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"fixed_window\",\n                                              \"token_bucket\"\n                                            ]\n                                          },\n                                          \"window\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"limit\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"keys\": {\n                                            \"type\": \"array\",\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"action\": {\n                                            \"anyOf\": [\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"log\",\n                                                  \"challenge\",\n                                                  \"deny\",\n                                                  \"rate_limit\"\n                                                ]\n                                              },\n                                              {}\n                                            ],\n                                            \"nullable\": true\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"algo\",\n                                          \"window\",\n                                          \"limit\",\n                                          \"keys\"\n                                        ],\n                                        \"additionalProperties\": false\n                                      },\n                                      {}\n                                    ],\n                                    \"nullable\": true\n                                  },\n                                  \"redirect\": {\n                                    \"anyOf\": [\n                                      {\n                                        \"type\": \"object\",\n                                        \"properties\": {\n                                          \"location\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"permanent\": {\n                                            \"type\": \"boolean\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"location\",\n                                          \"permanent\"\n                                        ],\n                                        \"additionalProperties\": false\n                                      },\n                                      {}\n                                    ],\n                                    \"nullable\": true\n                                  },\n                                  \"actionDuration\": {\n                                    \"type\": \"string\",\n                                    \"nullable\": true\n                                  },\n                                  \"bypassSystem\": {\n                                    \"type\": \"boolean\",\n                                    \"nullable\": true\n                                  },\n                                  \"logHeaders\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"type\": \"string\"\n                                      },\n                                      {\n                                        \"type\": \"array\",\n                                        \"items\": {\n                                          \"type\": \"string\"\n                                        }\n                                      }\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"action\"\n                                ],\n                                \"additionalProperties\": false\n                              }\n                            },\n                            \"additionalProperties\": false\n                          },\n                          \"valid\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"validationErrors\": {\n                            \"anyOf\": [\n                              {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              {\n                                \"type\": \"string\"\n                              }\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"name\",\n                          \"active\",\n                          \"conditionGroup\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Remove a custom rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"rules.remove\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"nullable\": true\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Reorder a custom rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"rules.priority\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Enable a managed rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"crs.update\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"sd\",\n                          \"ma\",\n                          \"lfi\",\n                          \"rfi\",\n                          \"rce\",\n                          \"php\",\n                          \"gen\",\n                          \"xss\",\n                          \"sqli\",\n                          \"sf\",\n                          \"java\"\n                        ]\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"active\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Disable a managed rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"crs.disable\"\n                        ]\n                      },\n                      \"id\": {\n                        \"nullable\": true\n                      },\n                      \"value\": {\n                        \"nullable\": true\n                      }\n                    },\n                    \"required\": [\n                      \"action\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Add an IP Blocking rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ip.insert\"\n                        ]\n                      },\n                      \"id\": {\n                        \"nullable\": true\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"hostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"ip\": {\n                            \"type\": \"string\"\n                          },\n                          \"notes\": {\n                            \"type\": \"string\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"challenge\",\n                              \"log\",\n                              \"bypass\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"hostname\",\n                          \"ip\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Update an IP Blocking rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ip.update\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"hostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"ip\": {\n                            \"type\": \"string\"\n                          },\n                          \"notes\": {\n                            \"type\": \"string\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"challenge\",\n                              \"log\",\n                              \"bypass\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"hostname\",\n                          \"ip\",\n                          \"action\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Remove an IP Blocking rule\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ip.remove\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"nullable\": true\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Update a managed ruleset\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"managedRules.update\"\n                        ]\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ai_bots\",\n                          \"bot_filter\",\n                          \"bot_protection\",\n                          \"vercel_ruleset\",\n                          \"owasp\"\n                        ]\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"log\",\n                              \"challenge\",\n                              \"deny\"\n                            ]\n                          },\n                          \"active\": {\n                            \"type\": \"boolean\"\n                          }\n                        },\n                        \"required\": [\n                          \"active\"\n                        ],\n                        \"additionalProperties\": false\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Update a managed rule group\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ai_bots\",\n                          \"bot_filter\",\n                          \"bot_protection\",\n                          \"vercel_ruleset\",\n                          \"owasp\"\n                        ]\n                      },\n                      \"value\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": {\n                          \"type\": \"object\",\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\"\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"log\",\n                                \"challenge\",\n                                \"deny\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"active\"\n                          ],\n                          \"additionalProperties\": false\n                        }\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"id\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Toggle bot ID\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"type\": \"boolean\"\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"description\": \"Update log headers configuration\",\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"action\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"value\": {\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"array\",\n                            \"items\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          {\n                            \"type\": \"string\"\n                          }\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"action\",\n                      \"value\"\n                    ],\n                    \"additionalProperties\": false\n                  }\n                ]\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/security/firewall/config/{configVersion}\": {\n      \"get\": {\n        \"description\": \"Retrieve the specified firewall configuration for a project. The deployed configVersion will be `active`\",\n        \"operationId\": \"getFirewallConfig\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Read Firewall Configuration\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"If the firewall configuration includes a [custom managed ruleset](https://vercel.com/docs/security/vercel-waf/managed-rulesets), it will include a `crs` item that has the following values: sd: Scanner Detection ma: Multipart Attack lfi: Local File Inclusion Attack rfi: Remote File Inclusion Attack rce: Remote Execution Attack php: PHP Attack gen: Generic Attack xss: XSS Attack sqli: SQL Injection Attack sf: Session Fixation Attack java: Java Attack\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"ownerId\": {\n                      \"type\": \"string\"\n                    },\n                    \"projectKey\": {\n                      \"type\": \"string\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"version\": {\n                      \"type\": \"number\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"string\"\n                    },\n                    \"firewallEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"crs\": {\n                      \"properties\": {\n                        \"sd\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Scanner Detection - Detect and prevent reconnaissance activities from network scanning tools.\"\n                        },\n                        \"ma\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Multipart Attack - Block attempts to bypass security controls using multipart/form-data encoding.\"\n                        },\n                        \"lfi\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Local File Inclusion Attack - Prevent unauthorized access to local files through web applications.\"\n                        },\n                        \"rfi\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Remote File Inclusion Attack - Prohibit unauthorized upload or execution of remote files.\"\n                        },\n                        \"rce\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Remote Execution Attack - Prevent unauthorized execution of remote scripts or commands.\"\n                        },\n                        \"php\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"PHP Attack - Safeguard against vulnerability exploits in PHP-based applications.\"\n                        },\n                        \"gen\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Generic Attack - Provide broad protection from various undefined or novel attack vectors.\"\n                        },\n                        \"xss\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"XSS Attack - Prevent injection of malicious scripts into trusted webpages.\"\n                        },\n                        \"sqli\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"SQL Injection Attack - Prohibit unauthorized use of SQL commands to manipulate databases.\"\n                        },\n                        \"sf\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Session Fixation Attack - Prevent unauthorized takeover of user sessions by enforcing unique session IDs.\"\n                        },\n                        \"java\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"action\",\n                            \"active\"\n                          ],\n                          \"type\": \"object\",\n                          \"description\": \"Java Attack - Mitigate risks of exploitation targeting Java-based applications or components.\"\n                        }\n                      },\n                      \"required\": [\n                        \"gen\",\n                        \"java\",\n                        \"lfi\",\n                        \"ma\",\n                        \"php\",\n                        \"rce\",\n                        \"rfi\",\n                        \"sd\",\n                        \"sf\",\n                        \"sqli\",\n                        \"xss\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Custom Ruleset\"\n                    },\n                    \"rules\": {\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"description\": {\n                                \"type\": \"string\"\n                              },\n                              \"active\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"conditionGroup\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"conditions\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"host\",\n                                              \"path\",\n                                              \"method\",\n                                              \"header\",\n                                              \"query\",\n                                              \"cookie\",\n                                              \"target_path\",\n                                              \"route\",\n                                              \"raw_path\",\n                                              \"ip_address\",\n                                              \"protocol\",\n                                              \"region\",\n                                              \"scheme\",\n                                              \"environment\",\n                                              \"user_agent\",\n                                              \"geo_continent\",\n                                              \"geo_country\",\n                                              \"geo_country_region\",\n                                              \"geo_city\",\n                                              \"geo_as_number\",\n                                              \"ja4_digest\",\n                                              \"ja3_digest\",\n                                              \"rate_limit_api_id\",\n                                              \"server_action\",\n                                              \"bot_name\",\n                                              \"bot_category\"\n                                            ]\n                                          },\n                                          \"op\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"sub\",\n                                              \"re\",\n                                              \"eq\",\n                                              \"ex\",\n                                              \"inc\",\n                                              \"pre\",\n                                              \"suf\",\n                                              \"gt\",\n                                              \"gte\",\n                                              \"lt\",\n                                              \"lte\",\n                                              \"nex\",\n                                              \"ninc\",\n                                              \"neq\"\n                                            ]\n                                          },\n                                          \"neg\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"key\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"value\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"type\": \"number\"\n                                              },\n                                              {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"op\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"conditions\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"action\": {\n                                \"properties\": {\n                                  \"mitigate\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"deny\",\n                                          \"log\",\n                                          \"challenge\",\n                                          \"bypass\",\n                                          \"rate_limit\",\n                                          \"redirect\"\n                                        ]\n                                      },\n                                      \"rateLimit\": {\n                                        \"nullable\": true,\n                                        \"properties\": {\n                                          \"algo\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"fixed_window\",\n                                              \"token_bucket\"\n                                            ]\n                                          },\n                                          \"window\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"limit\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"keys\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"action\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"deny\",\n                                              \"log\",\n                                              \"challenge\",\n                                              \"rate_limit\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"algo\",\n                                          \"keys\",\n                                          \"limit\",\n                                          \"window\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"redirect\": {\n                                        \"nullable\": true,\n                                        \"properties\": {\n                                          \"location\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"permanent\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"location\",\n                                          \"permanent\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"actionDuration\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"bypassSystem\": {\n                                        \"nullable\": true,\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"logHeaders\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"*\"\n                                            ]\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"valid\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ]\n                              },\n                              \"validationErrors\": {\n                                \"nullable\": true\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"active\",\n                              \"conditionGroup\",\n                              \"id\",\n                              \"name\",\n                              \"valid\",\n                              \"validationErrors\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"description\": {\n                                \"type\": \"string\"\n                              },\n                              \"active\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"conditionGroup\": {\n                                \"items\": {\n                                  \"properties\": {\n                                    \"conditions\": {\n                                      \"items\": {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"host\",\n                                              \"path\",\n                                              \"method\",\n                                              \"header\",\n                                              \"query\",\n                                              \"cookie\",\n                                              \"target_path\",\n                                              \"route\",\n                                              \"raw_path\",\n                                              \"ip_address\",\n                                              \"protocol\",\n                                              \"region\",\n                                              \"scheme\",\n                                              \"environment\",\n                                              \"user_agent\",\n                                              \"geo_continent\",\n                                              \"geo_country\",\n                                              \"geo_country_region\",\n                                              \"geo_city\",\n                                              \"geo_as_number\",\n                                              \"ja4_digest\",\n                                              \"ja3_digest\",\n                                              \"rate_limit_api_id\",\n                                              \"server_action\",\n                                              \"bot_name\",\n                                              \"bot_category\"\n                                            ]\n                                          },\n                                          \"op\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"sub\",\n                                              \"re\",\n                                              \"eq\",\n                                              \"ex\",\n                                              \"inc\",\n                                              \"pre\",\n                                              \"suf\",\n                                              \"gt\",\n                                              \"gte\",\n                                              \"lt\",\n                                              \"lte\",\n                                              \"nex\",\n                                              \"ninc\",\n                                              \"neq\"\n                                            ]\n                                          },\n                                          \"neg\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"key\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"value\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"type\": \"number\"\n                                              },\n                                              {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              }\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"op\",\n                                          \"type\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"conditions\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"action\": {\n                                \"properties\": {\n                                  \"mitigate\": {\n                                    \"properties\": {\n                                      \"action\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"deny\",\n                                          \"log\",\n                                          \"challenge\",\n                                          \"bypass\",\n                                          \"rate_limit\",\n                                          \"redirect\"\n                                        ]\n                                      },\n                                      \"rateLimit\": {\n                                        \"nullable\": true,\n                                        \"properties\": {\n                                          \"algo\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"fixed_window\",\n                                              \"token_bucket\"\n                                            ]\n                                          },\n                                          \"window\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"limit\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"keys\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"action\": {\n                                            \"nullable\": true,\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"deny\",\n                                              \"log\",\n                                              \"challenge\",\n                                              \"rate_limit\"\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"algo\",\n                                          \"keys\",\n                                          \"limit\",\n                                          \"window\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"redirect\": {\n                                        \"nullable\": true,\n                                        \"properties\": {\n                                          \"location\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"permanent\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"location\",\n                                          \"permanent\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"actionDuration\": {\n                                        \"nullable\": true,\n                                        \"type\": \"string\"\n                                      },\n                                      \"bypassSystem\": {\n                                        \"nullable\": true,\n                                        \"type\": \"boolean\",\n                                        \"enum\": [\n                                          false,\n                                          true\n                                        ]\n                                      },\n                                      \"logHeaders\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"*\"\n                                            ]\n                                          }\n                                        ]\n                                      }\n                                    },\n                                    \"required\": [\n                                      \"action\"\n                                    ],\n                                    \"type\": \"object\"\n                                  }\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"valid\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false\n                                ]\n                              },\n                              \"validationErrors\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"active\",\n                              \"conditionGroup\",\n                              \"id\",\n                              \"name\",\n                              \"valid\",\n                              \"validationErrors\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"ips\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"hostname\": {\n                            \"type\": \"string\"\n                          },\n                          \"ip\": {\n                            \"type\": \"string\"\n                          },\n                          \"notes\": {\n                            \"type\": \"string\"\n                          },\n                          \"action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"deny\",\n                              \"log\",\n                              \"challenge\",\n                              \"bypass\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"action\",\n                          \"hostname\",\n                          \"id\",\n                          \"ip\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"changes\": {\n                      \"items\": {\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"managedRules\": {\n                      \"properties\": {\n                        \"bot_protection\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\",\n                                \"challenge\"\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"string\"\n                            },\n                            \"userId\": {\n                              \"type\": \"string\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"active\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"ai_bots\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\",\n                                \"challenge\"\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"string\"\n                            },\n                            \"userId\": {\n                              \"type\": \"string\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"active\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"owasp\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\",\n                                \"challenge\"\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"string\"\n                            },\n                            \"userId\": {\n                              \"type\": \"string\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"active\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"vercel_ruleset\": {\n                          \"properties\": {\n                            \"active\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"action\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"deny\",\n                                \"log\",\n                                \"challenge\"\n                              ]\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"string\"\n                            },\n                            \"userId\": {\n                              \"type\": \"string\"\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"active\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"botIdEnabled\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"logHeaders\": {\n                      \"oneOf\": [\n                        {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"*\"\n                          ]\n                        }\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"changes\",\n                    \"crs\",\n                    \"firewallEnabled\",\n                    \"id\",\n                    \"ips\",\n                    \"ownerId\",\n                    \"projectKey\",\n                    \"rules\",\n                    \"updatedAt\",\n                    \"version\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          },\n          {\n            \"description\": \"The deployed configVersion for the firewall configuration\",\n            \"in\": \"path\",\n            \"name\": \"configVersion\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/security/firewall/attack-status\": {\n      \"get\": {\n        \"description\": \"Retrieve active attack data within the last N days (default: 1 day)\",\n        \"operationId\": \"getActiveAttackStatus\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Read active attack data\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"anomalies\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"projectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"ownerId\": {\n                                \"type\": \"string\"\n                              },\n                              \"startTime\": {\n                                \"type\": \"number\"\n                              },\n                              \"endTime\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"atMinute\": {\n                                \"type\": \"number\"\n                              },\n                              \"state\": {\n                                \"type\": \"string\"\n                              },\n                              \"affectedHostMap\": {\n                                \"additionalProperties\": {\n                                  \"properties\": {\n                                    \"anomalyAlerts\": {\n                                      \"additionalProperties\": {\n                                        \"properties\": {\n                                          \"at_minute\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"zscore\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"total_requests_minute\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"avg_requests\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"stddev_requests\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"at_minute\",\n                                          \"avg_requests\",\n                                          \"stddev_requests\",\n                                          \"total_requests_minute\",\n                                          \"zscore\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"object\"\n                                    },\n                                    \"ddosAlerts\": {\n                                      \"additionalProperties\": {\n                                        \"properties\": {\n                                          \"atMinute\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"totalReqs\": {\n                                            \"type\": \"number\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"atMinute\",\n                                          \"totalReqs\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      \"type\": \"object\"\n                                    }\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"affectedHostMap\",\n                              \"atMinute\",\n                              \"endTime\",\n                              \"ownerId\",\n                              \"projectId\",\n                              \"startTime\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"anomalies\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"minimum\": 1\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v1/security/firewall/bypass\": {\n      \"get\": {\n        \"description\": \"Retrieve the system bypass rules configured for the specified project\",\n        \"operationId\": \"getBypassIp\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Read System Bypass\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"result\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"OwnerId\": {\n                            \"type\": \"string\"\n                          },\n                          \"Id\": {\n                            \"type\": \"string\"\n                          },\n                          \"Domain\": {\n                            \"type\": \"string\"\n                          },\n                          \"Ip\": {\n                            \"type\": \"string\"\n                          },\n                          \"Action\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"bypass\",\n                              \"block\"\n                            ]\n                          },\n                          \"ProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"IsProjectRule\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"Note\": {\n                            \"type\": \"string\"\n                          },\n                          \"CreatedAt\": {\n                            \"type\": \"string\"\n                          },\n                          \"ActorId\": {\n                            \"type\": \"string\"\n                          },\n                          \"UpdatedAt\": {\n                            \"type\": \"string\"\n                          },\n                          \"UpdatedAtHour\": {\n                            \"type\": \"string\"\n                          },\n                          \"DeletedAt\": {\n                            \"type\": \"string\"\n                          },\n                          \"ExpiresAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"CreatedAt\",\n                          \"Domain\",\n                          \"Id\",\n                          \"Ip\",\n                          \"OwnerId\",\n                          \"UpdatedAt\",\n                          \"UpdatedAtHour\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"OwnerId\": {\n                          \"type\": \"string\"\n                        },\n                        \"Id\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"Id\",\n                        \"OwnerId\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"result\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\",\n              \"example\": 10,\n              \"maximum\": 256\n            }\n          },\n          {\n            \"name\": \"sourceIp\",\n            \"description\": \"Filter by source IP\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter by source IP\",\n              \"type\": \"string\",\n              \"maxLength\": 49\n            }\n          },\n          {\n            \"name\": \"domain\",\n            \"description\": \"Filter by domain\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter by domain\",\n              \"type\": \"string\",\n              \"pattern\": \"([a-z]+[a-z.]+)$\",\n              \"maxLength\": 2544\n            }\n          },\n          {\n            \"name\": \"projectScope\",\n            \"description\": \"Filter by project scoped rules\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Filter by project scoped rules\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"name\": \"offset\",\n            \"description\": \"Used for pagination. Retrieves results after the provided id\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Used for pagination. Retrieves results after the provided id\",\n              \"type\": \"string\",\n              \"maxLength\": 2560\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Create new system bypass rules\",\n        \"operationId\": \"addBypassIp\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create System Bypass Rule\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"ok\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"result\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"OwnerId\": {\n                                \"type\": \"string\"\n                              },\n                              \"Id\": {\n                                \"type\": \"string\"\n                              },\n                              \"Domain\": {\n                                \"type\": \"string\"\n                              },\n                              \"Ip\": {\n                                \"type\": \"string\"\n                              },\n                              \"ProjectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"Note\": {\n                                \"type\": \"string\"\n                              },\n                              \"IsProjectRule\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"Domain\",\n                              \"Id\",\n                              \"IsProjectRule\",\n                              \"Note\",\n                              \"OwnerId\",\n                              \"ProjectId\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"pagination\": {\n                          \"nullable\": true\n                        }\n                      },\n                      \"required\": [\n                        \"ok\",\n                        \"pagination\",\n                        \"result\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"ok\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"result\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"OwnerId\": {\n                                \"type\": \"string\"\n                              },\n                              \"Id\": {\n                                \"type\": \"string\"\n                              },\n                              \"Domain\": {\n                                \"type\": \"string\"\n                              },\n                              \"Ip\": {\n                                \"type\": \"string\"\n                              },\n                              \"Action\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"bypass\",\n                                  \"block\"\n                                ]\n                              },\n                              \"ProjectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"IsProjectRule\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"Note\": {\n                                \"type\": \"string\"\n                              },\n                              \"CreatedAt\": {\n                                \"type\": \"string\"\n                              },\n                              \"ActorId\": {\n                                \"type\": \"string\"\n                              },\n                              \"UpdatedAt\": {\n                                \"type\": \"string\"\n                              },\n                              \"UpdatedAtHour\": {\n                                \"type\": \"string\"\n                              },\n                              \"DeletedAt\": {\n                                \"type\": \"string\"\n                              },\n                              \"ExpiresAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"CreatedAt\",\n                              \"Domain\",\n                              \"Id\",\n                              \"Ip\",\n                              \"OwnerId\",\n                              \"UpdatedAt\",\n                              \"UpdatedAtHour\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        }\n                      },\n                      \"required\": [\n                        \"ok\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"domain\"\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"projectScope\"\n                    ]\n                  }\n                ],\n                \"properties\": {\n                  \"domain\": {\n                    \"type\": \"string\",\n                    \"pattern\": \"([a-z]+[a-z.]+)$\",\n                    \"maxLength\": 2544\n                  },\n                  \"projectScope\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"If the specified bypass will apply to all domains for a project.\"\n                  },\n                  \"sourceIp\": {\n                    \"type\": \"string\"\n                  },\n                  \"allSources\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"ttl\": {\n                    \"type\": \"number\",\n                    \"description\": \"Time to live in milliseconds\"\n                  },\n                  \"note\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 500\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"description\": \"Remove system bypass rules\",\n        \"operationId\": \"removeBypassIp\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove System Bypass Rule\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"ok\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"ok\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"oneOf\": [\n                  {\n                    \"required\": [\n                      \"domain\"\n                    ]\n                  },\n                  {\n                    \"required\": [\n                      \"projectScope\"\n                    ]\n                  }\n                ],\n                \"properties\": {\n                  \"domain\": {\n                    \"type\": \"string\",\n                    \"pattern\": \"([a-z]+[a-z.]+)$\",\n                    \"maxLength\": 2544\n                  },\n                  \"projectScope\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"sourceIp\": {\n                    \"type\": \"string\"\n                  },\n                  \"allSources\": {\n                    \"type\": \"boolean\"\n                  },\n                  \"note\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 500\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/security/firewall/events\": {\n      \"get\": {\n        \"description\": \"Retrieve firewall actions for a project\",\n        \"operationId\": \"getSecurityFirewallEvents\",\n        \"security\": [],\n        \"summary\": \"Read Firewall Actions by Project\",\n        \"tags\": [\n          \"security\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"actions\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"startTime\": {\n                            \"type\": \"string\"\n                          },\n                          \"endTime\": {\n                            \"type\": \"string\"\n                          },\n                          \"isActive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"action_type\": {\n                            \"type\": \"string\"\n                          },\n                          \"host\": {\n                            \"type\": \"string\"\n                          },\n                          \"public_ip\": {\n                            \"type\": \"string\"\n                          },\n                          \"count\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"required\": [\n                          \"action_type\",\n                          \"count\",\n                          \"endTime\",\n                          \"host\",\n                          \"isActive\",\n                          \"public_ip\",\n                          \"startTime\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"actions\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"startTimestamp\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"endTimestamp\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"hosts\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/storage/stores/integration/direct\": {\n      \"post\": {\n        \"description\": \"Creates an integration store with automatic billing plan handling. For free resources, omit `billingPlanId` to auto-discover free plans. For paid resources, provide a `billingPlanId` from the billing plans endpoint.\",\n        \"operationId\": \"createIntegrationStoreDirect\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create integration store (free and paid plans)\",\n        \"tags\": [\n          \"integrations\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"store\": {\n                      \"nullable\": true,\n                      \"type\": \"object\",\n                      \"properties\": {\n                        \"projectsMetadata\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"projectId\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"framework\": {\n                                \"nullable\": true,\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"blitzjs\",\n                                  \"nextjs\",\n                                  \"gatsby\",\n                                  \"remix\",\n                                  \"react-router\",\n                                  \"astro\",\n                                  \"hexo\",\n                                  \"eleventy\",\n                                  \"docusaurus-2\",\n                                  \"docusaurus\",\n                                  \"preact\",\n                                  \"solidstart-1\",\n                                  \"solidstart\",\n                                  \"dojo\",\n                                  \"ember\",\n                                  \"vue\",\n                                  \"scully\",\n                                  \"ionic-angular\",\n                                  \"angular\",\n                                  \"polymer\",\n                                  \"svelte\",\n                                  \"sveltekit\",\n                                  \"sveltekit-1\",\n                                  \"ionic-react\",\n                                  \"create-react-app\",\n                                  \"gridsome\",\n                                  \"umijs\",\n                                  \"sapper\",\n                                  \"saber\",\n                                  \"stencil\",\n                                  \"nuxtjs\",\n                                  \"redwoodjs\",\n                                  \"hugo\",\n                                  \"jekyll\",\n                                  \"brunch\",\n                                  \"middleman\",\n                                  \"zola\",\n                                  \"hydrogen\",\n                                  \"vite\",\n                                  \"tanstack-start\",\n                                  \"vitepress\",\n                                  \"vuepress\",\n                                  \"parcel\",\n                                  \"fastapi\",\n                                  \"flask\",\n                                  \"fasthtml\",\n                                  \"django\",\n                                  \"sanity-v3\",\n                                  \"sanity\",\n                                  \"storybook\",\n                                  \"nitro\",\n                                  \"hono\",\n                                  \"express\",\n                                  \"h3\",\n                                  \"koa\",\n                                  \"nestjs\",\n                                  \"elysia\",\n                                  \"fastify\",\n                                  \"xmcp\",\n                                  \"python\",\n                                  \"ruby\",\n                                  \"rust\",\n                                  \"node\",\n                                  \"go\",\n                                  \"services\"\n                                ]\n                              },\n                              \"latestDeployment\": {\n                                \"type\": \"string\"\n                              },\n                              \"environments\": {\n                                \"items\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\",\n                                    \"development\"\n                                  ]\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"envVarPrefix\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"environmentVariables\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              \"deployments\": {\n                                \"properties\": {\n                                  \"required\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"actions\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"slug\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"environments\": {\n                                          \"items\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"production\",\n                                              \"preview\",\n                                              \"development\"\n                                            ]\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"environments\",\n                                        \"slug\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"actions\",\n                                  \"required\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"envVarPrefix\",\n                              \"environmentVariables\",\n                              \"environments\",\n                              \"id\",\n                              \"name\",\n                              \"projectId\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"projectFilter\": {\n                          \"properties\": {\n                            \"git\": {\n                              \"properties\": {\n                                \"providers\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"items\": {\n                                        \"type\": \"string\",\n                                        \"enum\": [\n                                          \"github\",\n                                          \"gitlab\",\n                                          \"bitbucket\"\n                                        ]\n                                      },\n                                      \"type\": \"array\"\n                                    },\n                                    {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"*\"\n                                      ]\n                                    }\n                                  ]\n                                },\n                                \"owners\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"repos\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"providers\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"totalConnectedProjects\": {\n                          \"type\": \"number\"\n                        },\n                        \"usageQuotaExceeded\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"status\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"available\",\n                            \"error\",\n                            \"suspended\",\n                            \"limits-exceeded-suspended\",\n                            \"limits-exceeded-suspended-store-count\",\n                            \"initializing\",\n                            \"onboarding\",\n                            \"uninstalled\"\n                          ]\n                        },\n                        \"ownership\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"owned\",\n                            \"linked\",\n                            \"sandbox\"\n                          ]\n                        },\n                        \"capabilities\": {\n                          \"properties\": {\n                            \"mcp\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"mcpReadonly\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"sso\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"billable\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"transferable\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"secretsSync\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"secretRotation\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"maxDelayHours\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"maxDelayHours\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false\n                                  ]\n                                }\n                              ]\n                            },\n                            \"projects\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"v0\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"metadata\": {\n                          \"additionalProperties\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              {\n                                \"items\": {\n                                  \"type\": \"number\"\n                                },\n                                \"type\": \"array\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"externalResourceId\": {\n                          \"type\": \"string\"\n                        },\n                        \"externalResourceStatus\": {\n                          \"nullable\": true,\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"error\",\n                            \"suspended\",\n                            \"onboarding\",\n                            \"uninstalled\",\n                            \"ready\",\n                            \"pending\",\n                            \"resumed\"\n                          ]\n                        },\n                        \"directPartnerConsoleUrl\": {\n                          \"type\": \"string\"\n                        },\n                        \"product\": {\n                          \"properties\": {\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"slug\": {\n                              \"type\": \"string\"\n                            },\n                            \"iconUrl\": {\n                              \"type\": \"string\"\n                            },\n                            \"capabilities\": {\n                              \"properties\": {\n                                \"mcp\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"mcpReadonly\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"sso\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"billable\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"transferable\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"secretsSync\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"secretRotation\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"properties\": {\n                                        \"maxDelayHours\": {\n                                          \"type\": \"number\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"maxDelayHours\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    {\n                                      \"type\": \"boolean\",\n                                      \"enum\": [\n                                        false\n                                      ]\n                                    }\n                                  ]\n                                },\n                                \"sandbox\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"linking\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"projects\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"v0\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"importResource\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"connectedImportResource\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"nativeImportResource\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"databaseUI\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"shortDescription\": {\n                              \"type\": \"string\"\n                            },\n                            \"metadataSchema\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"object\"\n                                  ]\n                                },\n                                \"properties\": {\n                                  \"additionalProperties\": {\n                                    \"oneOf\": [\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"string\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"input\"\n                                            ]\n                                          },\n                                          \"enum\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"number\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"input\"\n                                            ]\n                                          },\n                                          \"maximum\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"exclusiveMaximum\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minimum\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"exclusiveMinimum\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"boolean\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"toggle\"\n                                            ]\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"boolean\",\n                                            \"enum\": [\n                                              false,\n                                              true\n                                            ]\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"array\"\n                                            ]\n                                          },\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"number\"\n                                                ]\n                                              },\n                                              \"description\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"minimum\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"exclusiveMinimum\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"maximum\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"exclusiveMaximum\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"default\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"slider\"\n                                            ]\n                                          },\n                                          \"ui:steps\": {\n                                            \"items\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxItems\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minItems\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"default\": {\n                                            \"items\": {\n                                              \"type\": \"number\"\n                                            },\n                                            \"type\": \"array\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"items\",\n                                          \"type\",\n                                          \"ui:control\",\n                                          \"ui:steps\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"string\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"select\"\n                                            ]\n                                          },\n                                          \"ui:options\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"value\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"label\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"disabled\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"expr\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"expr\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    },\n                                                    {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"update\",\n                                                        \"create\"\n                                                      ]\n                                                    }\n                                                  ]\n                                                },\n                                                \"hidden\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"expr\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"expr\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    },\n                                                    {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"update\",\n                                                        \"create\"\n                                                      ]\n                                                    }\n                                                  ]\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"label\",\n                                                \"value\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"enum\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\",\n                                          \"ui:options\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"string\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"radio-button\"\n                                            ]\n                                          },\n                                          \"ui:options\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"value\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"label\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"disabled\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"expr\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"expr\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    },\n                                                    {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"update\",\n                                                        \"create\"\n                                                      ]\n                                                    }\n                                                  ]\n                                                },\n                                                \"hidden\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"expr\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"expr\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    },\n                                                    {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"update\",\n                                                        \"create\"\n                                                      ]\n                                                    }\n                                                  ]\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"label\",\n                                                \"value\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"enum\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\",\n                                          \"ui:options\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"array\"\n                                            ]\n                                          },\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"string\"\n                                                ]\n                                              },\n                                              \"description\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"minLength\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"maxLength\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"pattern\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"default\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"enum\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"multi-select\"\n                                            ]\n                                          },\n                                          \"ui:options\": {\n                                            \"items\": {\n                                              \"properties\": {\n                                                \"value\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"label\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"disabled\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"expr\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"expr\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    },\n                                                    {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"update\",\n                                                        \"create\"\n                                                      ]\n                                                    }\n                                                  ]\n                                                },\n                                                \"hidden\": {\n                                                  \"oneOf\": [\n                                                    {\n                                                      \"properties\": {\n                                                        \"expr\": {\n                                                          \"type\": \"string\"\n                                                        }\n                                                      },\n                                                      \"required\": [\n                                                        \"expr\"\n                                                      ],\n                                                      \"type\": \"object\"\n                                                    },\n                                                    {\n                                                      \"type\": \"boolean\",\n                                                      \"enum\": [\n                                                        false,\n                                                        true\n                                                      ]\n                                                    },\n                                                    {\n                                                      \"type\": \"string\",\n                                                      \"enum\": [\n                                                        \"update\",\n                                                        \"create\"\n                                                      ]\n                                                    }\n                                                  ]\n                                                }\n                                              },\n                                              \"required\": [\n                                                \"label\",\n                                                \"value\"\n                                              ],\n                                              \"type\": \"object\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxItems\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minItems\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"example\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"items\",\n                                          \"type\",\n                                          \"ui:control\",\n                                          \"ui:options\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"string\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"vercel-region\"\n                                            ]\n                                          },\n                                          \"ui:options\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"value\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"label\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"disabled\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"hidden\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"label\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"value\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"disabled\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"hidden\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"enum\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\",\n                                          \"ui:options\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"array\"\n                                            ]\n                                          },\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"string\"\n                                                ]\n                                              },\n                                              \"description\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"minLength\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"maxLength\": {\n                                                \"type\": \"number\"\n                                              },\n                                              \"pattern\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"default\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"enum\": {\n                                                \"items\": {\n                                                  \"type\": \"string\"\n                                                },\n                                                \"type\": \"array\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"multi-vercel-region\"\n                                            ]\n                                          },\n                                          \"ui:options\": {\n                                            \"items\": {\n                                              \"oneOf\": [\n                                                {\n                                                  \"properties\": {\n                                                    \"value\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"label\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"disabled\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"hidden\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"label\",\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                },\n                                                {\n                                                  \"type\": \"string\"\n                                                },\n                                                {\n                                                  \"properties\": {\n                                                    \"value\": {\n                                                      \"type\": \"string\"\n                                                    },\n                                                    \"disabled\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    },\n                                                    \"hidden\": {\n                                                      \"oneOf\": [\n                                                        {\n                                                          \"properties\": {\n                                                            \"expr\": {\n                                                              \"type\": \"string\"\n                                                            }\n                                                          },\n                                                          \"required\": [\n                                                            \"expr\"\n                                                          ],\n                                                          \"type\": \"object\"\n                                                        },\n                                                        {\n                                                          \"type\": \"boolean\",\n                                                          \"enum\": [\n                                                            false,\n                                                            true\n                                                          ]\n                                                        },\n                                                        {\n                                                          \"type\": \"string\",\n                                                          \"enum\": [\n                                                            \"update\",\n                                                            \"create\"\n                                                          ]\n                                                        }\n                                                      ]\n                                                    }\n                                                  },\n                                                  \"required\": [\n                                                    \"value\"\n                                                  ],\n                                                  \"type\": \"object\"\n                                                }\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxItems\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minItems\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"example\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"items\",\n                                          \"type\",\n                                          \"ui:control\",\n                                          \"ui:options\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"string\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"domain\"\n                                            ]\n                                          },\n                                          \"enum\": {\n                                            \"items\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"type\": \"array\"\n                                          },\n                                          \"maxLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"minLength\": {\n                                            \"type\": \"number\"\n                                          },\n                                          \"pattern\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"default\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\"\n                                        ],\n                                        \"type\": \"object\"\n                                      },\n                                      {\n                                        \"properties\": {\n                                          \"type\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"string\"\n                                            ]\n                                          },\n                                          \"ui:control\": {\n                                            \"type\": \"string\",\n                                            \"enum\": [\n                                              \"git-namespace\"\n                                            ]\n                                          },\n                                          \"description\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:label\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"ui:read-only\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:hidden\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:disabled\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              },\n                                              {\n                                                \"type\": \"boolean\",\n                                                \"enum\": [\n                                                  false,\n                                                  true\n                                                ]\n                                              },\n                                              {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"update\",\n                                                  \"create\"\n                                                ]\n                                              }\n                                            ]\n                                          },\n                                          \"ui:description\": {\n                                            \"oneOf\": [\n                                              {\n                                                \"type\": \"string\"\n                                              },\n                                              {\n                                                \"properties\": {\n                                                  \"expr\": {\n                                                    \"type\": \"string\"\n                                                  }\n                                                },\n                                                \"required\": [\n                                                  \"expr\"\n                                                ],\n                                                \"type\": \"object\"\n                                              }\n                                            ]\n                                          },\n                                          \"ui:formatted-value\": {\n                                            \"properties\": {\n                                              \"expr\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"expr\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"ui:placeholder\": {\n                                            \"type\": \"string\"\n                                          },\n                                          \"git:providers\": {\n                                            \"items\": {\n                                              \"type\": \"string\",\n                                              \"enum\": [\n                                                \"github\",\n                                                \"gitlab\",\n                                                \"bitbucket\"\n                                              ]\n                                            },\n                                            \"type\": \"array\"\n                                          }\n                                        },\n                                        \"required\": [\n                                          \"type\",\n                                          \"ui:control\"\n                                        ],\n                                        \"type\": \"object\"\n                                      }\n                                    ]\n                                  },\n                                  \"type\": \"object\"\n                                },\n                                \"required\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"properties\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"resourceLinks\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"href\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"title\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"href\",\n                                  \"title\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"tags\": {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"edge-config\",\n                                  \"redis\",\n                                  \"postgres\",\n                                  \"blob\",\n                                  \"experimentation\",\n                                  \"checks\",\n                                  \"storage\",\n                                  \"ai\",\n                                  \"observability\",\n                                  \"video\",\n                                  \"authentication\",\n                                  \"workflow\",\n                                  \"logDrain\",\n                                  \"traceDrain\",\n                                  \"messaging\",\n                                  \"other\",\n                                  \"mysql\",\n                                  \"kv\",\n                                  \"vector\",\n                                  \"libsql\",\n                                  \"sqlite\",\n                                  \"rds\",\n                                  \"drains\",\n                                  \"mcp\",\n                                  \"tag_agents\",\n                                  \"tag_ai\",\n                                  \"tag_analytics\",\n                                  \"tag_authentication\",\n                                  \"tag_cms\",\n                                  \"tag_code_repository\",\n                                  \"tag_code_review\",\n                                  \"tag_code_security\",\n                                  \"tag_code_testing\",\n                                  \"tag_commerce\",\n                                  \"tag_databases\",\n                                  \"tag_dev_tools\",\n                                  \"tag_experimentation\",\n                                  \"tag_flags\",\n                                  \"tag_logging\",\n                                  \"tag_messaging\",\n                                  \"tag_monitoring\",\n                                  \"tag_observability\",\n                                  \"tag_payments\",\n                                  \"tag_performance\",\n                                  \"tag_productivity\",\n                                  \"tag_searching\",\n                                  \"tag_security\",\n                                  \"tag_support_agent\",\n                                  \"tag_testing\",\n                                  \"tag_video\",\n                                  \"tag_web_automation\",\n                                  \"tag_workflow\",\n                                  \"tag_checks\",\n                                  \"tag_storage\",\n                                  \"tag_logDrain\",\n                                  \"tag_traceDrain\",\n                                  \"tag_other\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"projectConnectionScopes\": {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"read:deployment\",\n                                  \"read:domain\",\n                                  \"read:project\",\n                                  \"read-write:deployment\",\n                                  \"read-write:deployment-check\",\n                                  \"read-write:domain\",\n                                  \"read-write:global-project-env-vars\",\n                                  \"read-write:integration-deployment-action\",\n                                  \"read-write:log-drain\",\n                                  \"read-write:drains\",\n                                  \"read-write:project-env-vars\",\n                                  \"read-write:project-protection-bypass\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"showSSOLinkOnProjectConnection\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"disableResourceRenaming\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"resourceTitle\": {\n                              \"type\": \"string\",\n                              \"description\": \"Custom resource title to display during installation and configuration. If not provided, defaults to protocol-based defaults.\",\n                              \"example\": \"Instance\"\n                            },\n                            \"agentSkillUrl\": {\n                              \"type\": \"string\",\n                              \"description\": \"URL to a skill/guide for how AI agents should use this product. Providers can specify this to help agents understand how to interact with their integration.\"\n                            },\n                            \"repl\": {\n                              \"properties\": {\n                                \"enabled\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"supportsReadOnlyMode\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"welcomeMessage\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"enabled\",\n                                \"supportsReadOnlyMode\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"guides\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"framework\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"title\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"steps\": {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"title\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"content\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"actions\": {\n                                          \"items\": {\n                                            \"properties\": {\n                                              \"type\": {\n                                                \"type\": \"string\",\n                                                \"enum\": [\n                                                  \"connect_to_project\",\n                                                  \"configure_project_connections\",\n                                                  \"add_drain\"\n                                                ]\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"type\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          \"type\": \"array\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"content\",\n                                        \"title\"\n                                      ],\n                                      \"type\": \"object\"\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"framework\",\n                                  \"steps\",\n                                  \"title\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"integration\": {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"slug\": {\n                                  \"type\": \"string\"\n                                },\n                                \"supportsInstallationBillingPlans\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"icon\": {\n                                  \"type\": \"string\"\n                                },\n                                \"flags\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                }\n                              },\n                              \"required\": [\n                                \"icon\",\n                                \"id\",\n                                \"name\",\n                                \"slug\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"integrationConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"supportedProtocols\": {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"experimentation\",\n                                  \"checks\",\n                                  \"storage\",\n                                  \"ai\",\n                                  \"observability\",\n                                  \"video\",\n                                  \"authentication\",\n                                  \"workflow\",\n                                  \"logDrain\",\n                                  \"traceDrain\",\n                                  \"messaging\",\n                                  \"other\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"primaryProtocol\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"experimentation\",\n                                \"checks\",\n                                \"storage\",\n                                \"ai\",\n                                \"observability\",\n                                \"video\",\n                                \"authentication\",\n                                \"workflow\",\n                                \"logDrain\",\n                                \"traceDrain\",\n                                \"messaging\",\n                                \"other\"\n                              ]\n                            },\n                            \"logDrainStatus\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"disabled\",\n                                \"enabled\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"integration\",\n                            \"integrationConfigurationId\",\n                            \"supportedProtocols\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"protocolSettings\": {\n                          \"properties\": {\n                            \"experimentation\": {\n                              \"properties\": {\n                                \"edgeConfigSyncingEnabled\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"edgeConfigId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"edgeConfigTokenId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"notification\": {\n                          \"properties\": {\n                            \"title\": {\n                              \"type\": \"string\"\n                            },\n                            \"level\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"error\",\n                                \"info\",\n                                \"warn\"\n                              ]\n                            },\n                            \"message\": {\n                              \"type\": \"string\"\n                            },\n                            \"href\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"level\",\n                            \"title\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"secrets\": {\n                          \"items\": {\n                            \"properties\": {\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"length\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"length\",\n                              \"name\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"type\": \"array\"\n                        },\n                        \"billingPlan\": {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"prepayment\",\n                                \"subscription\"\n                              ]\n                            },\n                            \"description\": {\n                              \"type\": \"string\"\n                            },\n                            \"id\": {\n                              \"type\": \"string\"\n                            },\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"scope\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"installation\",\n                                \"resource\"\n                              ]\n                            },\n                            \"paymentMethodRequired\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"preauthorizationAmount\": {\n                              \"type\": \"number\"\n                            },\n                            \"initialCharge\": {\n                              \"type\": \"string\"\n                            },\n                            \"minimumAmount\": {\n                              \"type\": \"string\"\n                            },\n                            \"maximumAmount\": {\n                              \"type\": \"string\"\n                            },\n                            \"maximumAmountAutoPurchasePerPeriod\": {\n                              \"type\": \"string\"\n                            },\n                            \"cost\": {\n                              \"type\": \"string\"\n                            },\n                            \"details\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"label\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"label\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"highlightedDetails\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"label\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"label\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"quote\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"line\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"amount\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"amount\",\n                                  \"line\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"effectiveDate\": {\n                              \"type\": \"string\"\n                            },\n                            \"disabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"description\",\n                            \"id\",\n                            \"name\",\n                            \"paymentMethodRequired\",\n                            \"scope\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"secretRotationRequestedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"The timestamp when secret rotation was requested.\"\n                        },\n                        \"secretRotationRequestedReason\": {\n                          \"type\": \"string\",\n                          \"description\": \"The reason for the secret rotation request.\"\n                        },\n                        \"secretRotationRequestedBy\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the user/team who requested the secret rotation.\"\n                        },\n                        \"secretRotationCompletedAt\": {\n                          \"type\": \"number\",\n                          \"description\": \"The timestamp when secret rotation was completed.\"\n                        },\n                        \"parentId\": {\n                          \"type\": \"string\",\n                          \"description\": \"The ID of the parent resource. Used to establish a parent-child relationship between resources, such as sandbox resources linking to their owner account resource.\"\n                        },\n                        \"targets\": {\n                          \"items\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"preview\",\n                              \"development\"\n                            ],\n                            \"description\": \"The deployment targets that this resource is available for.\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"The deployment targets that this resource is available for.\"\n                        }\n                      },\n                      \"required\": [\n                        \"externalResourceId\",\n                        \"product\",\n                        \"projectsMetadata\",\n                        \"secrets\",\n                        \"status\",\n                        \"usageQuotaExceeded\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"store\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"name\",\n                  \"integrationConfigurationId\",\n                  \"integrationProductIdOrSlug\"\n                ],\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 128,\n                    \"description\": \"Human-readable name for the storage resource\",\n                    \"example\": \"my-dev-database\"\n                  },\n                  \"integrationConfigurationId\": {\n                    \"type\": \"string\",\n                    \"description\": \"ID of your integration configuration. Get this from GET /v1/integrations/configurations\",\n                    \"example\": \"icfg_cuwj0AdCdH3BwWT4LPijCC7t\",\n                    \"pattern\": \"^icfg_[a-zA-Z0-9]+$\"\n                  },\n                  \"integrationProductIdOrSlug\": {\n                    \"type\": \"string\",\n                    \"description\": \"ID or slug of the integration product. Get available products from GET /v1/integrations/configuration/{id}/products\",\n                    \"example\": \"iap_postgres_db\",\n                    \"oneOf\": [\n                      {\n                        \"pattern\": \"^iap_[a-zA-Z0-9_]+$\",\n                        \"description\": \"Product ID format\"\n                      },\n                      {\n                        \"pattern\": \"^[a-z0-9-]+$\",\n                        \"description\": \"Product slug format\"\n                      }\n                    ]\n                  },\n                  \"metadata\": {\n                    \"type\": \"object\",\n                    \"description\": \"Optional key-value pairs for resource metadata\",\n                    \"additionalProperties\": {\n                      \"oneOf\": [\n                        {\n                          \"type\": \"string\"\n                        },\n                        {\n                          \"type\": \"number\"\n                        },\n                        {\n                          \"type\": \"boolean\"\n                        },\n                        {\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        {\n                          \"type\": \"array\",\n                          \"items\": {\n                            \"type\": \"number\"\n                          }\n                        }\n                      ]\n                    },\n                    \"example\": {\n                      \"environment\": \"development\",\n                      \"project\": \"my-app\",\n                      \"tags\": [\n                        \"database\",\n                        \"postgres\"\n                      ]\n                    }\n                  },\n                  \"externalId\": {\n                    \"type\": \"string\",\n                    \"description\": \"Optional external identifier for tracking purposes\",\n                    \"example\": \"dev-db-001\"\n                  },\n                  \"protocolSettings\": {\n                    \"type\": \"object\",\n                    \"description\": \"Protocol-specific configuration settings\",\n                    \"additionalProperties\": true,\n                    \"example\": {\n                      \"experimentation\": {\n                        \"edgeConfigSyncingEnabled\": true\n                      }\n                    }\n                  },\n                  \"source\": {\n                    \"description\": \"Source of the store creation request\",\n                    \"example\": \"marketplace\",\n                    \"default\": \"marketplace\",\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"marketplace\",\n                      \"deploy-button\",\n                      \"external\",\n                      \"v0\",\n                      \"resource-claims\",\n                      \"cli\",\n                      \"oauth\",\n                      \"backoffice\"\n                    ]\n                  },\n                  \"billingPlanId\": {\n                    \"type\": \"string\",\n                    \"description\": \"ID of the billing plan for paid resources. Get available plans from GET /integrations/integration/{id}/products/{productId}/plans. If not provided, automatically discovers free billing plans.\",\n                    \"example\": \"bp_abc123def456\"\n                  },\n                  \"paymentMethodId\": {\n                    \"type\": \"string\",\n                    \"description\": \"Payment method ID for paid resources. Optional - uses default payment method if not provided.\",\n                    \"example\": \"pm_1AbcDefGhiJklMno\"\n                  },\n                  \"prepaymentAmountCents\": {\n                    \"type\": \"number\",\n                    \"minimum\": 50,\n                    \"description\": \"Amount in cents for prepayment billing plans. Required only for prepayment plans with variable amounts.\",\n                    \"example\": 5000\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v3/teams/{teamId}/members\": {\n      \"get\": {\n        \"description\": \"Get a paginated list of team members for the provided team.\",\n        \"operationId\": \"getTeamMembers\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List team members\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"members\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"avatar\": {\n                            \"type\": \"string\",\n                            \"description\": \"ID of the file for the Avatar of this member.\",\n                            \"example\": \"123a6c5209bc3778245d011443644c8d27dc2c50\"\n                          },\n                          \"confirmed\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Boolean that indicates if this member was confirmed by an owner.\",\n                            \"example\": true\n                          },\n                          \"email\": {\n                            \"type\": \"string\",\n                            \"description\": \"The email of this member.\",\n                            \"example\": \"jane.doe@example.com\"\n                          },\n                          \"github\": {\n                            \"properties\": {\n                              \"login\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"Information about the GitHub account for this user.\"\n                          },\n                          \"gitlab\": {\n                            \"properties\": {\n                              \"login\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"Information about the GitLab account of this user.\"\n                          },\n                          \"bitbucket\": {\n                            \"properties\": {\n                              \"login\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"Information about the Bitbucket account of this user.\"\n                          },\n                          \"role\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"OWNER\",\n                              \"MEMBER\",\n                              \"DEVELOPER\",\n                              \"SECURITY\",\n                              \"BILLING\",\n                              \"VIEWER\",\n                              \"VIEWER_FOR_PLUS\",\n                              \"CONTRIBUTOR\"\n                            ],\n                            \"description\": \"Role of this user in the team.\",\n                            \"example\": \"OWNER\"\n                          },\n                          \"uid\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of this user.\",\n                            \"example\": \"zTuNVUXEAvvnNN3IaqinkyMw\"\n                          },\n                          \"username\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique username of this user.\",\n                            \"example\": \"jane-doe\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"The name of this user.\",\n                            \"example\": \"Jane Doe\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp in milliseconds when this member was added.\",\n                            \"example\": 1588720733602\n                          },\n                          \"accessRequestedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp in milliseconds for when this team member was accepted by an owner.\",\n                            \"example\": 1588820733602\n                          },\n                          \"joinedFrom\": {\n                            \"properties\": {\n                              \"origin\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"teams\",\n                                  \"link\",\n                                  \"import\",\n                                  \"mail\",\n                                  \"github\",\n                                  \"gitlab\",\n                                  \"bitbucket\",\n                                  \"saml\",\n                                  \"dsync\",\n                                  \"feedback\",\n                                  \"organization-teams\",\n                                  \"nsnb-auto-approve\",\n                                  \"nsnb-hobby-upgrade\",\n                                  \"nsnb-request-access\",\n                                  \"nsnb-viewer-upgrade\",\n                                  \"nsnb-invite\",\n                                  \"nsnb-redeploy\"\n                                ]\n                              },\n                              \"commitId\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoId\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoPath\": {\n                                \"type\": \"string\"\n                              },\n                              \"gitUserId\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"number\"\n                                  }\n                                ]\n                              },\n                              \"gitUserLogin\": {\n                                \"type\": \"string\"\n                              },\n                              \"ssoUserId\": {\n                                \"type\": \"string\"\n                              },\n                              \"ssoConnectedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"idpUserId\": {\n                                \"type\": \"string\"\n                              },\n                              \"dsyncUserId\": {\n                                \"type\": \"string\"\n                              },\n                              \"dsyncConnectedAt\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"origin\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Map with information about the members origin if they joined by requesting access.\"\n                          },\n                          \"projects\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"role\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"ADMIN\",\n                                    \"PROJECT_DEVELOPER\",\n                                    \"PROJECT_VIEWER\",\n                                    \"PROJECT_GUEST\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"id\",\n                                \"name\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Array of project memberships\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Array of project memberships\"\n                          },\n                          \"isEnterpriseManaged\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Indicates whether the user is managed by an enterprise.\"\n                          }\n                        },\n                        \"required\": [\n                          \"confirmed\",\n                          \"createdAt\",\n                          \"email\",\n                          \"role\",\n                          \"uid\",\n                          \"username\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"emailInviteCodes\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"accessGroups\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"email\": {\n                            \"type\": \"string\"\n                          },\n                          \"role\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"OWNER\",\n                              \"MEMBER\",\n                              \"DEVELOPER\",\n                              \"SECURITY\",\n                              \"BILLING\",\n                              \"VIEWER\",\n                              \"VIEWER_FOR_PLUS\",\n                              \"CONTRIBUTOR\"\n                            ]\n                          },\n                          \"teamRoles\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"OWNER\",\n                                \"MEMBER\",\n                                \"DEVELOPER\",\n                                \"SECURITY\",\n                                \"BILLING\",\n                                \"VIEWER\",\n                                \"VIEWER_FOR_PLUS\",\n                                \"CONTRIBUTOR\"\n                              ]\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"teamPermissions\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"IntegrationManager\",\n                                \"CreateProject\",\n                                \"FullProductionDeployment\",\n                                \"UsageViewer\",\n                                \"EnvVariableManager\",\n                                \"EnvironmentManager\",\n                                \"V0Builder\",\n                                \"V0Chatter\",\n                                \"V0Viewer\"\n                              ]\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"isDSyncUser\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"expired\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              true\n                            ]\n                          },\n                          \"projects\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"ADMIN\",\n                                \"PROJECT_DEVELOPER\",\n                                \"PROJECT_VIEWER\",\n                                \"PROJECT_GUEST\"\n                              ]\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"entitlements\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          }\n                        },\n                        \"required\": [\n                          \"id\",\n                          \"isDSyncUser\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"properties\": {\n                        \"hasNext\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"count\": {\n                          \"type\": \"number\",\n                          \"description\": \"Amount of items in the current page.\",\n                          \"example\": 20\n                        },\n                        \"next\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp that must be used to request the next page.\",\n                          \"example\": 1540095775951\n                        },\n                        \"prev\": {\n                          \"nullable\": true,\n                          \"type\": \"number\",\n                          \"description\": \"Timestamp that must be used to request the previous page.\",\n                          \"example\": 1540095775951\n                        }\n                      },\n                      \"required\": [\n                        \"count\",\n                        \"hasNext\",\n                        \"next\",\n                        \"prev\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"members\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"limit\",\n            \"description\": \"Limit how many teams should be returned\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Limit how many teams should be returned\",\n              \"example\": 20,\n              \"minimum\": 1,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Timestamp in milliseconds to only include members added since then.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Timestamp in milliseconds to only include members added since then.\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Timestamp in milliseconds to only include members added until then.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Timestamp in milliseconds to only include members added until then.\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"search\",\n            \"description\": \"Search team members by their name, username, and email.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Search team members by their name, username, and email.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"role\",\n            \"description\": \"Only return members with the specified team role.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Only return members with the specified team role.\",\n              \"example\": \"OWNER\",\n              \"type\": \"string\",\n              \"enum\": [\n                \"OWNER\",\n                \"MEMBER\",\n                \"DEVELOPER\",\n                \"SECURITY\",\n                \"BILLING\",\n                \"VIEWER\",\n                \"VIEWER_FOR_PLUS\",\n                \"CONTRIBUTOR\"\n              ]\n            }\n          },\n          {\n            \"name\": \"excludeProject\",\n            \"description\": \"Exclude members who belong to the specified project.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Exclude members who belong to the specified project.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"eligibleMembersForProjectId\",\n            \"description\": \"Include team members who are eligible to be members of the specified project.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Include team members who are eligible to be members of the specified project.\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v2/teams/{teamId}/members\": {\n      \"post\": {\n        \"description\": \"Invite a user to join the team specified in the URL. The authenticated user needs to be an `OWNER` in order to successfully invoke this endpoint. The user to be invited must be specified by email.\",\n        \"operationId\": \"inviteUserToTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Invite a user\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/InvitedTeamMember\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nThe authenticated user must be a team owner to perform the action\"\n          },\n          \"503\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"email\"\n                  ],\n                  \"properties\": {\n                    \"email\": {\n                      \"type\": \"string\",\n                      \"format\": \"email\",\n                      \"description\": \"The email address of the user to invite\",\n                      \"example\": \"john@example.com\"\n                    },\n                    \"role\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"OWNER\",\n                        \"MEMBER\",\n                        \"DEVELOPER\",\n                        \"SECURITY\",\n                        \"BILLING\",\n                        \"VIEWER\",\n                        \"VIEWER_FOR_PLUS\",\n                        \"CONTRIBUTOR\"\n                      ],\n                      \"default\": \"VIEWER\",\n                      \"description\": \"The role of the user to invite\",\n                      \"example\": \"VIEWER\"\n                    },\n                    \"projects\": {\n                      \"type\": \"array\",\n                      \"items\": {\n                        \"type\": \"object\",\n                        \"additionalProperties\": false,\n                        \"required\": [\n                          \"role\",\n                          \"projectId\"\n                        ],\n                        \"properties\": {\n                          \"projectId\": {\n                            \"type\": \"string\",\n                            \"maxLength\": 64,\n                            \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n                            \"description\": \"The ID of the project.\"\n                          },\n                          \"role\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"ADMIN\",\n                              \"PROJECT_VIEWER\",\n                              \"PROJECT_DEVELOPER\",\n                              \"PROJECT_GUEST\"\n                            ],\n                            \"example\": \"ADMIN\",\n                            \"description\": \"Sets the project roles for the invited user\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/teams/{teamId}/request\": {\n      \"post\": {\n        \"description\": \"Request access to a team as a member. An owner has to approve the request. Only 10 users can request access to a team at the same time.\",\n        \"operationId\": \"requestAccessToTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Request access to a team\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successfuly requested access to the team.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamSlug\": {\n                      \"type\": \"string\"\n                    },\n                    \"teamName\": {\n                      \"type\": \"string\"\n                    },\n                    \"confirmed\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"joinedFrom\": {\n                      \"properties\": {\n                        \"origin\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"teams\",\n                            \"link\",\n                            \"import\",\n                            \"mail\",\n                            \"github\",\n                            \"gitlab\",\n                            \"bitbucket\",\n                            \"saml\",\n                            \"dsync\",\n                            \"feedback\",\n                            \"organization-teams\",\n                            \"nsnb-auto-approve\",\n                            \"nsnb-hobby-upgrade\",\n                            \"nsnb-request-access\",\n                            \"nsnb-viewer-upgrade\",\n                            \"nsnb-invite\",\n                            \"nsnb-redeploy\"\n                          ]\n                        },\n                        \"commitId\": {\n                          \"type\": \"string\"\n                        },\n                        \"repoId\": {\n                          \"type\": \"string\"\n                        },\n                        \"repoPath\": {\n                          \"type\": \"string\"\n                        },\n                        \"gitUserId\": {\n                          \"oneOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            }\n                          ]\n                        },\n                        \"gitUserLogin\": {\n                          \"type\": \"string\"\n                        },\n                        \"ssoUserId\": {\n                          \"type\": \"string\"\n                        },\n                        \"ssoConnectedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"idpUserId\": {\n                          \"type\": \"string\"\n                        },\n                        \"dsyncUserId\": {\n                          \"type\": \"string\"\n                        },\n                        \"dsyncConnectedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"origin\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"accessRequestedAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"github\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"login\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"gitlab\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"login\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"bitbucket\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"login\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"type\": \"object\"\n                    }\n                  },\n                  \"required\": [\n                    \"bitbucket\",\n                    \"github\",\n                    \"gitlab\",\n                    \"teamName\",\n                    \"teamSlug\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The team was not found.\"\n          },\n          \"429\": {\n            \"description\": \"\"\n          },\n          \"503\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"teamId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique team identifier\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"joinedFrom\"\n                ],\n                \"properties\": {\n                  \"joinedFrom\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"required\": [\n                      \"origin\"\n                    ],\n                    \"properties\": {\n                      \"origin\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"import\",\n                          \"teams\",\n                          \"github\",\n                          \"gitlab\",\n                          \"bitbucket\",\n                          \"feedback\",\n                          \"organization-teams\"\n                        ],\n                        \"description\": \"The origin of the request.\",\n                        \"example\": \"github\"\n                      },\n                      \"commitId\": {\n                        \"type\": \"string\",\n                        \"description\": \"The commit sha if the origin is a git provider.\",\n                        \"example\": \"f498d25d8bd654b578716203be73084b31130cd7\"\n                      },\n                      \"repoId\": {\n                        \"type\": \"string\",\n                        \"description\": \"The ID of the repository for the given Git provider.\",\n                        \"example\": \"67753070\"\n                      },\n                      \"repoPath\": {\n                        \"type\": \"string\",\n                        \"description\": \"The path to the repository for the given Git provider.\",\n                        \"example\": \"jane-doe/example\"\n                      },\n                      \"gitUserId\": {\n                        \"description\": \"The ID of the Git account of the user who requests access.\",\n                        \"example\": 103053343,\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"number\"\n                          }\n                        ]\n                      },\n                      \"gitUserLogin\": {\n                        \"type\": \"string\",\n                        \"description\": \"The login name for the Git account of the user who requests access.\",\n                        \"example\": \"jane-doe\"\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/teams/{teamId}/request/{userId}\": {\n      \"get\": {\n        \"description\": \"Check the status of a join request. It'll respond with a 404 if the request has been declined. If no `userId` path segment was provided, this endpoint will instead return the status of the authenticated user.\",\n        \"operationId\": \"getTeamAccessRequest\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get access request status\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successfully\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamSlug\": {\n                      \"type\": \"string\",\n                      \"description\": \"The slug of the team.\",\n                      \"example\": \"my-team\"\n                    },\n                    \"teamName\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the team.\",\n                      \"example\": \"My Team\"\n                    },\n                    \"confirmed\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"Current status of the membership. Will be `true` if confirmed, if pending it'll be `false`.\",\n                      \"example\": false\n                    },\n                    \"joinedFrom\": {\n                      \"properties\": {\n                        \"origin\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"teams\",\n                            \"link\",\n                            \"import\",\n                            \"mail\",\n                            \"github\",\n                            \"gitlab\",\n                            \"bitbucket\",\n                            \"saml\",\n                            \"dsync\",\n                            \"feedback\",\n                            \"organization-teams\",\n                            \"nsnb-auto-approve\",\n                            \"nsnb-hobby-upgrade\",\n                            \"nsnb-request-access\",\n                            \"nsnb-viewer-upgrade\",\n                            \"nsnb-invite\",\n                            \"nsnb-redeploy\"\n                          ]\n                        },\n                        \"commitId\": {\n                          \"type\": \"string\"\n                        },\n                        \"repoId\": {\n                          \"type\": \"string\"\n                        },\n                        \"repoPath\": {\n                          \"type\": \"string\"\n                        },\n                        \"gitUserId\": {\n                          \"oneOf\": [\n                            {\n                              \"type\": \"string\"\n                            },\n                            {\n                              \"type\": \"number\"\n                            }\n                          ]\n                        },\n                        \"gitUserLogin\": {\n                          \"type\": \"string\"\n                        },\n                        \"ssoUserId\": {\n                          \"type\": \"string\"\n                        },\n                        \"ssoConnectedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"idpUserId\": {\n                          \"type\": \"string\"\n                        },\n                        \"dsyncUserId\": {\n                          \"type\": \"string\"\n                        },\n                        \"dsyncConnectedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"origin\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A map that describes the origin from where the user joined.\"\n                    },\n                    \"accessRequestedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"Timestamp in milliseconds when the user requested access to the team.\",\n                      \"example\": 1588720733602\n                    },\n                    \"github\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"login\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Map of the connected GitHub account.\"\n                    },\n                    \"gitlab\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"login\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Map of the connected GitLab account.\"\n                    },\n                    \"bitbucket\": {\n                      \"nullable\": true,\n                      \"properties\": {\n                        \"login\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"Map of the connected Bitbucket account.\"\n                    }\n                  },\n                  \"required\": [\n                    \"accessRequestedAt\",\n                    \"bitbucket\",\n                    \"confirmed\",\n                    \"github\",\n                    \"gitlab\",\n                    \"joinedFrom\",\n                    \"teamName\",\n                    \"teamSlug\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\\nUser is already a confirmed member of the team and did not request access. Only visible when the authenticated user does have access to the team.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The provided user doesn't have a membership.\\nTeam was not found.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"userId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique user identifier\"\n            }\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique team identifier\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/teams/{teamId}/members/teams/join\": {\n      \"post\": {\n        \"description\": \"Join a team with a provided invite code or team ID.\",\n        \"operationId\": \"joinTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Join a team\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successfully joined a team.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teamId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the team the user joined.\",\n                      \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\",\n                      \"description\": \"The slug of the team the user joined.\",\n                      \"example\": \"my-team\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\",\n                      \"description\": \"The name of the team the user joined.\",\n                      \"example\": \"My Team\"\n                    },\n                    \"from\": {\n                      \"type\": \"string\",\n                      \"description\": \"The origin of how the user joined.\",\n                      \"example\": \"email\"\n                    }\n                  },\n                  \"required\": [\n                    \"from\",\n                    \"name\",\n                    \"slug\",\n                    \"teamId\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Successfully joined a team.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"teamId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique team identifier\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"inviteCode\": {\n                    \"type\": \"string\",\n                    \"description\": \"The invite code to join the team.\",\n                    \"example\": \"fisdh38aejkeivn34nslfore9vjtn4ls\"\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/teams/{teamId}/members/{uid}\": {\n      \"patch\": {\n        \"description\": \"Update the membership of a Team Member on the Team specified by `teamId`, such as changing the _role_ of the member, or confirming a request to join the Team for an unconfirmed member. The authenticated user must be an `OWNER` of the Team.\",\n        \"operationId\": \"updateTeamMember\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a Team Member\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successfully updated the membership.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the team.\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nCannot disconnect SSO from a Team member that does not have a SSO connection.\\nCannot confirm a member that is already confirmed.\\nCannot confirm a member that did not request access.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\\nTeam members can only be updated by an owner, or by the authenticated user if they are only disconnecting their SAML connection to the Team.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The provided user is not part of this team.\\nA user with the specified ID does not exist.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uid\",\n            \"description\": \"The ID of the member.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the member.\",\n              \"example\": \"ndfasllgPyCtREAqxxdyFKb\"\n            }\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique team identifier\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"confirmed\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      true\n                    ],\n                    \"description\": \"Accept a user who requested access to the team.\",\n                    \"example\": true\n                  },\n                  \"role\": {\n                    \"type\": \"string\",\n                    \"description\": \"The role in the team of the member.\",\n                    \"example\": \"VIEWER\",\n                    \"default\": \"MEMBER\"\n                  },\n                  \"projects\": {\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"additionalProperties\": false,\n                      \"required\": [\n                        \"role\",\n                        \"projectId\"\n                      ],\n                      \"properties\": {\n                        \"projectId\": {\n                          \"type\": \"string\",\n                          \"maxLength\": 256,\n                          \"example\": \"prj_ndlgr43fadlPyCtREAqxxdyFK\",\n                          \"description\": \"The ID of the project.\"\n                        },\n                        \"role\": {\n                          \"type\": \"string\",\n                          \"example\": \"ADMIN\",\n                          \"description\": \"The project role of the member that will be added. \\\\\\\"null\\\\\\\" will remove this project level role.\",\n                          \"nullable\": true,\n                          \"enum\": [\n                            \"ADMIN\",\n                            \"PROJECT_VIEWER\",\n                            \"PROJECT_DEVELOPER\",\n                            null\n                          ]\n                        }\n                      }\n                    }\n                  },\n                  \"joinedFrom\": {\n                    \"additionalProperties\": false,\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"ssoUserId\": {\n                        \"nullable\": true\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"delete\": {\n        \"description\": \"Remove a Team Member from the Team, or dismiss a user that requested access, or leave a team.\",\n        \"operationId\": \"removeTeamMember\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove a Team Member\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successfully removed a member of the team.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the team.\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nNot authorized to update the team.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"503\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"uid\",\n            \"description\": \"The user ID of the member.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The user ID of the member.\",\n              \"example\": \"ndlgr43fadlPyCtREAqxxdyFK\"\n            }\n          },\n          {\n            \"name\": \"newDefaultTeamId\",\n            \"description\": \"The ID of the team to set as the new default team for the Northstar user.\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The ID of the team to set as the new default team for the Northstar user.\",\n              \"example\": \"team_nllPyCtREAqxxdyFKbbMDlxd\"\n            }\n          },\n          {\n            \"name\": \"teamId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The unique team identifier\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/teams/{teamId}\": {\n      \"get\": {\n        \"description\": \"Get information for the Team specified by the `teamId` parameter.\",\n        \"operationId\": \"getTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a Team\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The requested team\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Team\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nNot authorized to access the team.\"\n          },\n          \"404\": {\n            \"description\": \"Team was not found.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"slug\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          }\n        ]\n      },\n      \"patch\": {\n        \"description\": \"Update the information of a Team specified by the `teamId` parameter. The request body should contain the information that will be updated on the Team.\",\n        \"operationId\": \"patchTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update a Team\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"$ref\": \"#/components/schemas/Team\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nNot authorized to update the team. Must be an OWNER.\"\n          },\n          \"428\": {\n            \"description\": \"Owner does not have protection add-on\\nAdvanced Deployment Protection is not available for the user plan\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"avatar\": {\n                    \"type\": \"string\",\n                    \"format\": \"regex\",\n                    \"description\": \"The hash value of an uploaded image.\"\n                  },\n                  \"description\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 140,\n                    \"example\": \"Our mission is to make cloud computing accessible to everyone\",\n                    \"description\": \"A short text that describes the team.\"\n                  },\n                  \"emailDomain\": {\n                    \"type\": \"string\",\n                    \"format\": \"regex\",\n                    \"example\": \"example.com\",\n                    \"nullable\": true\n                  },\n                  \"name\": {\n                    \"type\": \"string\",\n                    \"maxLength\": 256,\n                    \"example\": \"My Team\",\n                    \"description\": \"The name of the team.\"\n                  },\n                  \"previewDeploymentSuffix\": {\n                    \"type\": \"string\",\n                    \"format\": \"hostname\",\n                    \"example\": \"example.dev\",\n                    \"description\": \"Suffix that will be used for all preview deployments.\",\n                    \"nullable\": true\n                  },\n                  \"regenerateInviteCode\": {\n                    \"type\": \"boolean\",\n                    \"example\": true,\n                    \"description\": \"Create a new invite code and replace the current one.\"\n                  },\n                  \"saml\": {\n                    \"type\": \"object\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"enforced\": {\n                        \"type\": \"boolean\",\n                        \"example\": true,\n                        \"description\": \"Require that members of the team use SAML Single Sign-On.\"\n                      },\n                      \"roles\": {\n                        \"type\": \"object\",\n                        \"description\": \"Directory groups to role or access group mappings.\",\n                        \"additionalProperties\": {\n                          \"anyOf\": [\n                            {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"OWNER\",\n                                \"MEMBER\",\n                                \"DEVELOPER\",\n                                \"SECURITY\",\n                                \"BILLING\",\n                                \"VIEWER\",\n                                \"VIEWER_FOR_PLUS\",\n                                \"CONTRIBUTOR\"\n                              ]\n                            },\n                            {\n                              \"type\": \"object\",\n                              \"additionalProperties\": false,\n                              \"required\": [\n                                \"accessGroupId\"\n                              ],\n                              \"properties\": {\n                                \"accessGroupId\": {\n                                  \"type\": \"string\",\n                                  \"pattern\": \"^ag_[A-z0-9_ -]+$\"\n                                }\n                              }\n                            }\n                          ]\n                        }\n                      }\n                    }\n                  },\n                  \"slug\": {\n                    \"type\": \"string\",\n                    \"example\": \"my-team\",\n                    \"description\": \"A new slug for the team.\"\n                  },\n                  \"enablePreviewFeedback\": {\n                    \"type\": \"string\",\n                    \"example\": \"on\",\n                    \"description\": \"Enable preview toolbar: one of on, off or default.\"\n                  },\n                  \"enableProductionFeedback\": {\n                    \"type\": \"string\",\n                    \"example\": \"on\",\n                    \"description\": \"Enable production toolbar: one of on, off or default.\"\n                  },\n                  \"sensitiveEnvironmentVariablePolicy\": {\n                    \"type\": \"string\",\n                    \"example\": \"on\",\n                    \"description\": \"Sensitive environment variable policy: one of on, off or default.\"\n                  },\n                  \"remoteCaching\": {\n                    \"type\": \"object\",\n                    \"description\": \"Whether or not remote caching is enabled for the team\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"example\": true,\n                        \"description\": \"Enable or disable remote caching for the team.\"\n                      }\n                    }\n                  },\n                  \"hideIpAddresses\": {\n                    \"type\": \"boolean\",\n                    \"example\": false,\n                    \"description\": \"Display or hide IP addresses in Monitoring queries.\"\n                  },\n                  \"hideIpAddressesInLogDrains\": {\n                    \"type\": \"boolean\",\n                    \"example\": false,\n                    \"description\": \"Display or hide IP addresses in Log Drains.\"\n                  },\n                  \"defaultDeploymentProtection\": {\n                    \"type\": \"object\",\n                    \"description\": \"Default deployment protection settings for new projects.\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"passwordProtection\": {\n                        \"additionalProperties\": false,\n                        \"description\": \"Allows to protect project deployments with a password\",\n                        \"properties\": {\n                          \"deploymentType\": {\n                            \"description\": \"Specify if the password will apply to every Deployment Target or just Preview\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ],\n                            \"type\": \"string\"\n                          },\n                          \"password\": {\n                            \"description\": \"The password that will be used to protect Project Deployments\",\n                            \"maxLength\": 72,\n                            \"type\": \"string\",\n                            \"nullable\": true\n                          }\n                        },\n                        \"required\": [\n                          \"deploymentType\"\n                        ],\n                        \"type\": \"object\",\n                        \"nullable\": true\n                      },\n                      \"ssoProtection\": {\n                        \"additionalProperties\": false,\n                        \"description\": \"Ensures visitors to your Preview Deployments are logged into Vercel and have a minimum of Viewer access on your team\",\n                        \"properties\": {\n                          \"deploymentType\": {\n                            \"default\": \"preview\",\n                            \"description\": \"Specify if the Vercel Authentication (SSO Protection) will apply to every Deployment Target or just Preview\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ],\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"deploymentType\"\n                        ],\n                        \"type\": \"object\",\n                        \"nullable\": true\n                      }\n                    }\n                  },\n                  \"defaultExpirationSettings\": {\n                    \"properties\": {\n                      \"expiration\": {\n                        \"description\": \"The time period to keep non-production deployments for\",\n                        \"example\": \"1y\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"3y\",\n                          \"2y\",\n                          \"1y\",\n                          \"6m\",\n                          \"3m\",\n                          \"2m\",\n                          \"1m\",\n                          \"2w\",\n                          \"1w\",\n                          \"1d\",\n                          \"unlimited\"\n                        ]\n                      },\n                      \"expirationProduction\": {\n                        \"description\": \"The time period to keep production deployments for\",\n                        \"example\": \"1y\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"3y\",\n                          \"2y\",\n                          \"1y\",\n                          \"6m\",\n                          \"3m\",\n                          \"2m\",\n                          \"1m\",\n                          \"2w\",\n                          \"1w\",\n                          \"1d\",\n                          \"unlimited\"\n                        ]\n                      },\n                      \"expirationCanceled\": {\n                        \"description\": \"The time period to keep canceled deployments for\",\n                        \"example\": \"1y\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"1y\",\n                          \"6m\",\n                          \"3m\",\n                          \"2m\",\n                          \"1m\",\n                          \"2w\",\n                          \"1w\",\n                          \"1d\",\n                          \"unlimited\"\n                        ]\n                      },\n                      \"expirationErrored\": {\n                        \"description\": \"The time period to keep errored deployments for\",\n                        \"example\": \"1y\",\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"1y\",\n                          \"6m\",\n                          \"3m\",\n                          \"2m\",\n                          \"1m\",\n                          \"2w\",\n                          \"1w\",\n                          \"1d\",\n                          \"unlimited\"\n                        ]\n                      }\n                    },\n                    \"type\": \"object\",\n                    \"additionalProperties\": false\n                  },\n                  \"strictDeploymentProtectionSettings\": {\n                    \"type\": \"object\",\n                    \"description\": \"When enabled, deployment protection settings require stricter permissions (owner-only).\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"example\": true,\n                        \"description\": \"Enable or disable strict deployment protection settings.\"\n                      }\n                    },\n                    \"required\": [\n                      \"enabled\"\n                    ]\n                  },\n                  \"nsnbConfig\": {\n                    \"anyOf\": [\n                      {\n                        \"type\": \"object\",\n                        \"description\": \"NSNB configuration for the team.\",\n                        \"additionalProperties\": false,\n                        \"properties\": {\n                          \"preference\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"auto-approval\",\n                              \"manual-approval\",\n                              \"block\"\n                            ],\n                            \"description\": \"The NSNB preference for the team.\"\n                          }\n                        },\n                        \"required\": [\n                          \"preference\"\n                        ]\n                      },\n                      {\n                        \"type\": \"string\"\n                      }\n                    ]\n                  },\n                  \"resourceConfig\": {\n                    \"type\": \"object\",\n                    \"description\": \"Resource configuration for the team.\",\n                    \"additionalProperties\": false,\n                    \"properties\": {\n                      \"buildMachine\": {\n                        \"type\": \"object\",\n                        \"description\": \"Build machine configuration.\",\n                        \"additionalProperties\": false,\n                        \"properties\": {\n                          \"default\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"enhanced\",\n                              \"turbo\",\n                              \"standard\",\n                              \"elastic\"\n                            ],\n                            \"example\": \"standard\",\n                            \"description\": \"Default build machine type for new builds: standard, enhanced, turbo, or elastic.\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v2/teams\": {\n      \"get\": {\n        \"description\": \"Get a paginated list of all the Teams the authenticated User is a member of.\",\n        \"operationId\": \"getTeams\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List all teams\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"A paginated list of teams.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"teams\": {\n                      \"items\": {\n                        \"oneOf\": [\n                          {\n                            \"$ref\": \"#/components/schemas/Team\"\n                          },\n                          {\n                            \"$ref\": \"#/components/schemas/TeamLimited\"\n                          }\n                        ]\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"$ref\": \"#/components/schemas/Pagination\"\n                    }\n                  },\n                  \"required\": [\n                    \"pagination\",\n                    \"teams\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"A paginated list of teams.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of Teams which may be returned.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Maximum number of Teams which may be returned.\",\n              \"example\": 20,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Timestamp (in milliseconds) to only include Teams created since then.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Timestamp (in milliseconds) to only include Teams created since then.\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Timestamp (in milliseconds) to only include Teams created until then.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Timestamp (in milliseconds) to only include Teams created until then.\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/teams\": {\n      \"post\": {\n        \"description\": \"Create a new Team under your account. You need to send a POST request with the desired Team slug, and optionally the Team name.\",\n        \"operationId\": \"createTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create a Team\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The team was created successfully\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"Id of the created team\",\n                      \"example\": \"team_nLlpyC6RE1qxqglFKbrMxlud\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\",\n                    \"slug\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The team was created successfully\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nThe slug is already in use\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"slug\"\n                ],\n                \"properties\": {\n                  \"slug\": {\n                    \"example\": \"a-random-team\",\n                    \"description\": \"The desired slug for the Team\",\n                    \"type\": \"string\",\n                    \"maxLength\": 48\n                  },\n                  \"name\": {\n                    \"example\": \"A Random Team\",\n                    \"description\": \"The desired name for the Team. It will be generated from the provided slug if nothing is provided\",\n                    \"type\": \"string\",\n                    \"maxLength\": 256\n                  },\n                  \"attribution\": {\n                    \"type\": \"object\",\n                    \"description\": \"Attribution information for the session or current page\",\n                    \"properties\": {\n                      \"sessionReferrer\": {\n                        \"type\": \"string\",\n                        \"description\": \"Session referrer\"\n                      },\n                      \"landingPage\": {\n                        \"type\": \"string\",\n                        \"description\": \"Session landing page\"\n                      },\n                      \"pageBeforeConversionPage\": {\n                        \"type\": \"string\",\n                        \"description\": \"Referrer to the signup page\"\n                      },\n                      \"utm\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"utmSource\": {\n                            \"type\": \"string\",\n                            \"description\": \"UTM source\"\n                          },\n                          \"utmMedium\": {\n                            \"type\": \"string\",\n                            \"description\": \"UTM medium\"\n                          },\n                          \"utmCampaign\": {\n                            \"type\": \"string\",\n                            \"description\": \"UTM campaign\"\n                          },\n                          \"utmTerm\": {\n                            \"type\": \"string\",\n                            \"description\": \"UTM term\"\n                          }\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/teams/{teamId}/dsync-roles\": {\n      \"post\": {\n        \"description\": \"Update the Directory Sync role mappings for a Team. This endpoint allows updating the mapping between directory groups and team roles or access groups.\",\n        \"operationId\": \"postTeamDsyncRoles\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update Team Directory Sync Role Mappings\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"ok\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"ok\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"roles\"\n                ],\n                \"properties\": {\n                  \"roles\": {\n                    \"type\": \"object\",\n                    \"description\": \"Directory groups to role or access group mappings.\",\n                    \"additionalProperties\": {\n                      \"anyOf\": [\n                        {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"OWNER\",\n                            \"MEMBER\",\n                            \"DEVELOPER\",\n                            \"SECURITY\",\n                            \"BILLING\",\n                            \"VIEWER\",\n                            \"VIEWER_FOR_PLUS\",\n                            \"CONTRIBUTOR\"\n                          ]\n                        },\n                        {\n                          \"type\": \"object\",\n                          \"additionalProperties\": false,\n                          \"required\": [\n                            \"accessGroupId\"\n                          ],\n                          \"properties\": {\n                            \"accessGroupId\": {\n                              \"type\": \"string\",\n                              \"pattern\": \"^ag_[A-z0-9_ -]+$\"\n                            }\n                          }\n                        }\n                      ]\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v1/teams/{teamId}\": {\n      \"delete\": {\n        \"description\": \"Delete a team under your account. You need to send a `DELETE` request with the desired team `id`. An optional array of reasons for deletion may also be sent.\",\n        \"operationId\": \"deleteTeam\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a Team\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The Team was successfully deleted\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"The ID of the deleted Team\",\n                      \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                    },\n                    \"newDefaultTeamIdError\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ],\n                      \"description\": \"Signifies whether the default team update has failed, when newDefaultTeamId is provided in request query.\",\n                      \"example\": true\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The Team was successfully deleted\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nThe authenticated user can't access the team\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"newDefaultTeamId\",\n            \"description\": \"Id of the team to be set as the new default team\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"Id of the team to be set as the new default team\",\n              \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            },\n            \"required\": true\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"reasons\": {\n                    \"type\": \"array\",\n                    \"description\": \"Optional array of objects that describe the reason why the team is being deleted.\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"description\": \"An object describing the reason why the team is being deleted.\",\n                      \"required\": [\n                        \"slug\",\n                        \"description\"\n                      ],\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"slug\": {\n                          \"type\": \"string\",\n                          \"description\": \"Idenitifier slug of the reason why the team is being deleted.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"Description of the reason why the team is being deleted.\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/teams/{teamId}/invites/{inviteId}\": {\n      \"delete\": {\n        \"description\": \"Delete an active Team invite code.\",\n        \"operationId\": \"deleteTeamInviteCode\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a Team invite code\",\n        \"tags\": [\n          \"teams\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successfully deleted Team invite code.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"ID of the team.\"\n                    }\n                  },\n                  \"required\": [\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nInvite managed by directory sync\\nNot authorized to access this team.\"\n          },\n          \"404\": {\n            \"description\": \"Team invite code not found.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"inviteId\",\n            \"description\": \"The Team invite code ID.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The Team invite code ID.\",\n              \"example\": \"2wn2hudbr4chb1ecywo9dvzo7g9sscs6mzcz8htdde0txyom4l\"\n            }\n          },\n          {\n            \"name\": \"teamId\",\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The Team identifier to perform the request on behalf of.\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/files\": {\n      \"post\": {\n        \"description\": \"Before you create a deployment you need to upload the required files for that deployment. To do it, you need to first upload each file to this endpoint. Once that's completed, you can create a new deployment with the uploaded files. The file content must be placed inside the body of the request. In the case of a successful response you'll receive a status code 200 with an empty body.\",\n        \"operationId\": \"uploadFile\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Upload Deployment Files\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"File already uploaded\\nFile successfully uploaded\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"urls\": {\n                          \"items\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": \"array\",\n                          \"description\": \"Array of URLs where the file was updated\",\n                          \"example\": [\n                            \"example-upload.aws.com\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"urls\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"type\": \"object\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the headers is invalid\\nDigest is not valid\\nFile size is not valid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"in\": \"header\",\n            \"description\": \"The file size in bytes\",\n            \"schema\": {\n              \"description\": \"The file size in bytes\",\n              \"type\": \"number\"\n            },\n            \"name\": \"Content-Length\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"The file SHA1 used to check the integrity\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The file SHA1 used to check the integrity\",\n              \"maxLength\": 40\n            },\n            \"name\": \"x-vercel-digest\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"The file SHA1 used to check the integrity\",\n            \"schema\": {\n              \"deprecated\": true,\n              \"type\": \"string\",\n              \"description\": \"The file SHA1 used to check the integrity\",\n              \"maxLength\": 40\n            },\n            \"name\": \"x-now-digest\"\n          },\n          {\n            \"in\": \"header\",\n            \"description\": \"The file size as an alternative to `Content-Length`\",\n            \"schema\": {\n              \"type\": \"number\",\n              \"deprecated\": true,\n              \"description\": \"The file size as an alternative to `Content-Length`\"\n            },\n            \"name\": \"x-now-size\"\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/octet-stream\": {\n              \"schema\": {\n                \"type\": \"string\",\n                \"format\": \"binary\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v5/user/tokens\": {\n      \"get\": {\n        \"description\": \"Retrieve a list of the current User's authentication tokens.\",\n        \"operationId\": \"listAuthTokens\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List Auth Tokens\",\n        \"tags\": [\n          \"authentication\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"tokens\": {\n                      \"items\": {\n                        \"$ref\": \"#/components/schemas/AuthToken\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"$ref\": \"#/components/schemas/Pagination\"\n                    }\n                  },\n                  \"required\": [\n                    \"pagination\",\n                    \"tokens\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": []\n      }\n    },\n    \"/v3/user/tokens\": {\n      \"post\": {\n        \"description\": \"Creates and returns a new authentication token for the currently authenticated User. The `bearerToken` property is only provided once, in the response body, so be sure to save it on the client for use with API requests.\",\n        \"operationId\": \"createAuthToken\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Create an Auth Token\",\n        \"tags\": [\n          \"authentication\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"token\": {\n                      \"$ref\": \"#/components/schemas/AuthToken\"\n                    },\n                    \"bearerToken\": {\n                      \"type\": \"string\",\n                      \"description\": \"The authentication token's actual value. This token is only provided in this response, and can never be retrieved again in the future. Be sure to save it somewhere safe!\",\n                      \"example\": \"uRKJSTt0L4RaSkiMj41QTkxM\"\n                    }\n                  },\n                  \"required\": [\n                    \"bearerToken\",\n                    \"token\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Successful response.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"name\"\n                ],\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"expiresAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The ID of the project to scope this token to\"\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v5/user/tokens/{tokenId}\": {\n      \"get\": {\n        \"description\": \"Retrieve metadata about an authentication token belonging to the currently authenticated User.\",\n        \"operationId\": \"getAuthToken\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Auth Token Metadata\",\n        \"tags\": [\n          \"authentication\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"token\": {\n                      \"$ref\": \"#/components/schemas/AuthToken\"\n                    }\n                  },\n                  \"required\": [\n                    \"token\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Successful response.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"Token not found with the requested `tokenId`.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"tokenId\",\n            \"description\": \"The identifier of the token to retrieve. The special value \\\\\\\"current\\\\\\\" may be supplied, which returns the metadata for the token that the current HTTP request is authenticated with.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The identifier of the token to retrieve. The special value \\\\\\\"current\\\\\\\" may be supplied, which returns the metadata for the token that the current HTTP request is authenticated with.\",\n              \"example\": \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v3/user/tokens/{tokenId}\": {\n      \"delete\": {\n        \"description\": \"Invalidate an authentication token, such that it will no longer be valid for future HTTP requests.\",\n        \"operationId\": \"deleteAuthToken\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an authentication token\",\n        \"tags\": [\n          \"authentication\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Authentication token successfully deleted.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"tokenId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the token that was deleted.\",\n                      \"example\": \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\"\n                    }\n                  },\n                  \"required\": [\n                    \"tokenId\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Authentication token successfully deleted.\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"Token not found with the requested `tokenId`.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"tokenId\",\n            \"description\": \"The identifier of the token to invalidate. The special value \\\\\\\"current\\\\\\\" may be supplied, which invalidates the token that the HTTP request was authenticated with.\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The identifier of the token to invalidate. The special value \\\\\\\"current\\\\\\\" may be supplied, which invalidates the token that the HTTP request was authenticated with.\",\n              \"example\": \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/user\": {\n      \"get\": {\n        \"description\": \"Retrieves information related to the currently authenticated User.\",\n        \"operationId\": \"getAuthUser\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get the User\",\n        \"tags\": [\n          \"user\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Successful response.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"user\": {\n                      \"oneOf\": [\n                        {\n                          \"$ref\": \"#/components/schemas/AuthUser\"\n                        },\n                        {\n                          \"$ref\": \"#/components/schemas/AuthUserLimited\"\n                        }\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"user\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Successful response.\"\n                }\n              }\n            }\n          },\n          \"302\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [],\n        \"x-speakeasy-test\": false\n      }\n    },\n    \"/v1/user\": {\n      \"delete\": {\n        \"description\": \"Initiates the deletion process for the currently authenticated User, by sending a deletion confirmation email. The email contains a link that the user needs to visit in order to proceed with the deletion process.\",\n        \"operationId\": \"requestDelete\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete User Account\",\n        \"tags\": [\n          \"user\"\n        ],\n        \"responses\": {\n          \"202\": {\n            \"description\": \"Response indicating that the User deletion process has been initiated, and a confirmation email has been sent.\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"Unique identifier of the User who has initiated deletion.\"\n                    },\n                    \"email\": {\n                      \"type\": \"string\",\n                      \"description\": \"Email address of the User who has initiated deletion.\"\n                    },\n                    \"message\": {\n                      \"type\": \"string\",\n                      \"description\": \"User deletion progress status.\",\n                      \"example\": \"Verification email sent\"\n                    }\n                  },\n                  \"required\": [\n                    \"email\",\n                    \"id\",\n                    \"message\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"\"\n          },\n          \"402\": {\n            \"description\": \"\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"reasons\": {\n                    \"type\": \"array\",\n                    \"description\": \"Optional array of objects that describe the reason why the User account is being deleted.\",\n                    \"items\": {\n                      \"type\": \"object\",\n                      \"description\": \"An object describing the reason why the User account is being deleted.\",\n                      \"required\": [\n                        \"slug\",\n                        \"description\"\n                      ],\n                      \"additionalProperties\": false,\n                      \"properties\": {\n                        \"slug\": {\n                          \"type\": \"string\",\n                          \"description\": \"Idenitifier slug of the reason why the User account is being deleted.\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\",\n                          \"description\": \"Description of the reason why the User account is being deleted.\"\n                        }\n                      }\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v1/webhooks\": {\n      \"post\": {\n        \"description\": \"Creates a webhook\",\n        \"operationId\": \"createWebhook\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Creates a webhook\",\n        \"tags\": [\n          \"webhooks\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"secret\": {\n                      \"type\": \"string\",\n                      \"description\": \"The webhook secret used to sign the payload\"\n                    },\n                    \"events\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"budget.reached\",\n                          \"domain.created\",\n                          \"domain.dns.records.changed\",\n                          \"domain.transfer-in.started\",\n                          \"domain.transfer-in.completed\",\n                          \"domain.transfer-in.failed\",\n                          \"domain.certificate.add\",\n                          \"domain.certificate.add.failed\",\n                          \"domain.certificate.renew\",\n                          \"domain.certificate.renew.failed\",\n                          \"domain.certificate.deleted\",\n                          \"domain.renewal\",\n                          \"domain.renewal.failed\",\n                          \"domain.auto-renew.changed\",\n                          \"deployment.created\",\n                          \"deployment.cleanup\",\n                          \"deployment.error\",\n                          \"deployment.canceled\",\n                          \"deployment.succeeded\",\n                          \"deployment.ready\",\n                          \"deployment.check-rerequested\",\n                          \"deployment.promoted\",\n                          \"deployment.rollback\",\n                          \"deployment.integration.action.start\",\n                          \"deployment.integration.action.cancel\",\n                          \"deployment.integration.action.cleanup\",\n                          \"deployment.checkrun.start\",\n                          \"deployment.checkrun.cancel\",\n                          \"edge-config.created\",\n                          \"edge-config.deleted\",\n                          \"edge-config.items.updated\",\n                          \"firewall.attack\",\n                          \"firewall.system-rule-anomaly\",\n                          \"firewall.custom-rule-anomaly\",\n                          \"alerts.triggered\",\n                          \"integration-configuration.permission-upgraded\",\n                          \"integration-configuration.removed\",\n                          \"integration-configuration.scope-change-confirmed\",\n                          \"integration-configuration.transferred\",\n                          \"integration-resource.project-connected\",\n                          \"integration-resource.project-disconnected\",\n                          \"project.created\",\n                          \"project.removed\",\n                          \"project.renamed\",\n                          \"project.env-variable.created\",\n                          \"project.env-variable.updated\",\n                          \"project.env-variable.deleted\",\n                          \"project.domain.created\",\n                          \"project.domain.updated\",\n                          \"project.domain.deleted\",\n                          \"project.domain.verified\",\n                          \"project.domain.unverified\",\n                          \"project.domain.moved\",\n                          \"project.rolling-release.started\",\n                          \"project.rolling-release.aborted\",\n                          \"project.rolling-release.completed\",\n                          \"project.rolling-release.approved\",\n                          \"deployment.checks.failed\",\n                          \"deployment.checks.succeeded\",\n                          \"deployment-checks-completed\",\n                          \"deployment-ready\",\n                          \"deployment-prepared\",\n                          \"deployment-error\",\n                          \"deployment-check-rerequested\",\n                          \"deployment-canceled\",\n                          \"project-created\",\n                          \"project-removed\",\n                          \"domain-created\",\n                          \"deployment\",\n                          \"integration-configuration-permission-updated\",\n                          \"integration-configuration-removed\",\n                          \"integration-configuration-scope-change-confirmed\",\n                          \"marketplace.member.changed\",\n                          \"marketplace.invoice.created\",\n                          \"marketplace.invoice.paid\",\n                          \"marketplace.invoice.notpaid\",\n                          \"marketplace.invoice.overdue\",\n                          \"marketplace.invoice.refunded\",\n                          \"ai-gateway.balance-depleted\",\n                          \"ai-gateway.auto-reload.limit-reached\",\n                          \"observability.anomaly\",\n                          \"observability.anomaly-error\",\n                          \"observability.usage-anomaly\",\n                          \"observability.error-anomaly\",\n                          \"botid.anomaly\",\n                          \"flag.created\",\n                          \"flag.updated\",\n                          \"flag.deleted\",\n                          \"flag.segment.created\",\n                          \"flag.segment.updated\",\n                          \"flag.segment.deleted\",\n                          \"test-webhook\",\n                          \"message.created\",\n                          \"message.updated\",\n                          \"message.deleted\",\n                          \"thread.resolved\",\n                          \"thread.unresolved\",\n                          \"message.reaction-added\",\n                          \"message.reaction-removed\",\n                          \"message.mentioned\",\n                          \"comment.created\",\n                          \"comment.updated\",\n                          \"comment.deleted\",\n                          \"comment.resolved\",\n                          \"comment.unresolved\",\n                          \"comment.reaction-added\",\n                          \"comment.reaction-removed\",\n                          \"comment.mentioned\"\n                        ],\n                        \"example\": \"deployment.created\",\n                        \"description\": \"The webhooks events\",\n                        \"x-speakeasy-enums\": {\n                          \"budget.reached\": \"BudgetReached\",\n                          \"domain.created\": \"DomainCreated\",\n                          \"domain.dns.records.changed\": \"DomainDnsRecordsChanged\",\n                          \"domain.transfer-in.started\": \"DomainTransferInStarted\",\n                          \"domain.transfer-in.completed\": \"DomainTransferInCompleted\",\n                          \"domain.transfer-in.failed\": \"DomainTransferInFailed\",\n                          \"domain.certificate.add\": \"DomainCertificateAdd\",\n                          \"domain.certificate.add.failed\": \"DomainCertificateAddFailed\",\n                          \"domain.certificate.renew\": \"DomainCertificateRenew\",\n                          \"domain.certificate.renew.failed\": \"DomainCertificateRenewFailed\",\n                          \"domain.certificate.deleted\": \"DomainCertificateDeleted\",\n                          \"domain.renewal\": \"DomainRenewal\",\n                          \"domain.renewal.failed\": \"DomainRenewalFailed\",\n                          \"domain.auto-renew.changed\": \"DomainAutoRenewChanged\",\n                          \"deployment.created\": \"DeploymentCreated\",\n                          \"deployment.cleanup\": \"DeploymentCleanup\",\n                          \"deployment.error\": \"DeploymentError\",\n                          \"deployment.canceled\": \"DeploymentCanceled\",\n                          \"deployment.succeeded\": \"DeploymentSucceeded\",\n                          \"deployment.ready\": \"DeploymentReady\",\n                          \"deployment.check-rerequested\": \"DeploymentCheckRerequested\",\n                          \"deployment.promoted\": \"DeploymentPromoted\",\n                          \"deployment.integration.action.start\": \"DeploymentIntegrationActionStart\",\n                          \"deployment.integration.action.cancel\": \"DeploymentIntegrationActionCancel\",\n                          \"deployment.integration.action.cleanup\": \"DeploymentIntegrationActionCleanup\",\n                          \"deployment.checkrun.start\": \"DeploymentCheckrunStart\",\n                          \"deployment.checkrun.cancel\": \"DeploymentCheckrunCancel\",\n                          \"edge-config.created\": \"EdgeConfigCreated\",\n                          \"edge-config.deleted\": \"EdgeConfigDeleted\",\n                          \"edge-config.items.updated\": \"EdgeConfigItemsUpdated\",\n                          \"firewall.attack\": \"FirewallAttack\",\n                          \"integration-configuration.permission-upgraded\": \"IntegrationConfigurationPermissionUpgraded\",\n                          \"integration-configuration.removed\": \"IntegrationConfigurationRemoved\",\n                          \"integration-configuration.scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmed\",\n                          \"integration-resource.project-connected\": \"IntegrationResourceProjectConnected\",\n                          \"integration-resource.project-disconnected\": \"IntegrationResourceProjectDisconnected\",\n                          \"project.created\": \"ProjectCreated\",\n                          \"project.removed\": \"ProjectRemoved\",\n                          \"project.domain.created\": \"ProjectDomainCreated\",\n                          \"project.domain.updated\": \"ProjectDomainUpdated\",\n                          \"project.domain.deleted\": \"ProjectDomainDeleted\",\n                          \"project.domain.verified\": \"ProjectDomainVerified\",\n                          \"project.domain.unverified\": \"ProjectDomainUnverified\",\n                          \"project.domain.moved\": \"ProjectDomainMoved\",\n                          \"project.rolling-release.started\": \"ProjectRollingReleaseStarted\",\n                          \"project.rolling-release.aborted\": \"ProjectRollingReleaseAborted\",\n                          \"project.rolling-release.completed\": \"ProjectRollingReleaseCompleted\",\n                          \"project.rolling-release.approved\": \"ProjectRollingReleaseApproved\",\n                          \"deployment.checks.failed\": \"DeploymentChecksFailed\",\n                          \"deployment.checks.succeeded\": \"DeploymentChecksSucceeded\",\n                          \"deployment-checks-completed\": \"DeploymentChecksCompleted\",\n                          \"deployment-ready\": \"DeploymentReadyHyphen\",\n                          \"deployment-prepared\": \"DeploymentPreparedHyphen\",\n                          \"deployment-error\": \"DeploymentErrorHyphen\",\n                          \"deployment-check-rerequested\": \"DeploymentCheckRerequestedHyphen\",\n                          \"deployment-canceled\": \"DeploymentCanceledHyphen\",\n                          \"project-created\": \"ProjectCreatedHyphen\",\n                          \"project-removed\": \"ProjectRemovedHyphen\",\n                          \"domain-created\": \"DomainCreatedHyphen\",\n                          \"deployment\": \"Deployment\",\n                          \"integration-configuration-permission-updated\": \"IntegrationConfigurationPermissionUpdatedHyphen\",\n                          \"integration-configuration-removed\": \"IntegrationConfigurationRemovedHyphen\",\n                          \"integration-configuration-scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmedHyphen\",\n                          \"marketplace.invoice.created\": \"MarketplaceInvoiceCreated\",\n                          \"marketplace.invoice.paid\": \"MarketplaceInvoicePaid\",\n                          \"marketplace.invoice.notpaid\": \"MarketplaceInvoiceNotpaid\",\n                          \"marketplace.invoice.refunded\": \"MarketplaceInvoiceRefunded\",\n                          \"observability.anomaly\": \"ObservabilityAnomaly\",\n                          \"observability.anomaly-error\": \"ObservabilityAnomalyError\",\n                          \"test-webhook\": \"TestWebhook\"\n                        }\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The webhooks events\",\n                      \"example\": \"deployment.created\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"The webhook id\",\n                      \"example\": \"account_hook_GflD6EYyo7F4ViYS\"\n                    },\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"description\": \"A string with the URL of the webhook\",\n                      \"example\": \"https://my-webhook.com\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique ID of the team the webhook belongs to\",\n                      \"example\": \"ZspSRT4ljIEEmMHgoDwKWDei\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the webhook was created in in milliseconds\",\n                      \"example\": 1567024758130\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the webhook was updated in in milliseconds\",\n                      \"example\": 1567024758130\n                    },\n                    \"projectIds\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The ID of the projects the webhook is associated with\",\n                      \"example\": [\n                        \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"events\",\n                    \"id\",\n                    \"ownerId\",\n                    \"secret\",\n                    \"updatedAt\",\n                    \"url\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"additionalProperties\": false,\n                \"required\": [\n                  \"url\",\n                  \"events\"\n                ],\n                \"properties\": {\n                  \"url\": {\n                    \"format\": \"uri\",\n                    \"pattern\": \"^https?://\",\n                    \"type\": \"string\"\n                  },\n                  \"events\": {\n                    \"minItems\": 1,\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"budget.reached\",\n                        \"domain.created\",\n                        \"domain.dns.records.changed\",\n                        \"domain.transfer-in.started\",\n                        \"domain.transfer-in.completed\",\n                        \"domain.transfer-in.failed\",\n                        \"domain.certificate.add\",\n                        \"domain.certificate.add.failed\",\n                        \"domain.certificate.renew\",\n                        \"domain.certificate.renew.failed\",\n                        \"domain.certificate.deleted\",\n                        \"domain.renewal\",\n                        \"domain.renewal.failed\",\n                        \"domain.auto-renew.changed\",\n                        \"deployment.created\",\n                        \"deployment.cleanup\",\n                        \"deployment.error\",\n                        \"deployment.canceled\",\n                        \"deployment.succeeded\",\n                        \"deployment.ready\",\n                        \"deployment.check-rerequested\",\n                        \"deployment.promoted\",\n                        \"deployment.rollback\",\n                        \"deployment.integration.action.start\",\n                        \"deployment.integration.action.cancel\",\n                        \"deployment.integration.action.cleanup\",\n                        \"deployment.checkrun.start\",\n                        \"deployment.checkrun.cancel\",\n                        \"edge-config.created\",\n                        \"edge-config.deleted\",\n                        \"edge-config.items.updated\",\n                        \"firewall.attack\",\n                        \"firewall.system-rule-anomaly\",\n                        \"firewall.custom-rule-anomaly\",\n                        \"alerts.triggered\",\n                        \"integration-configuration.permission-upgraded\",\n                        \"integration-configuration.removed\",\n                        \"integration-configuration.scope-change-confirmed\",\n                        \"integration-configuration.transferred\",\n                        \"integration-resource.project-connected\",\n                        \"integration-resource.project-disconnected\",\n                        \"project.created\",\n                        \"project.removed\",\n                        \"project.renamed\",\n                        \"project.env-variable.created\",\n                        \"project.env-variable.updated\",\n                        \"project.env-variable.deleted\",\n                        \"project.domain.created\",\n                        \"project.domain.updated\",\n                        \"project.domain.deleted\",\n                        \"project.domain.verified\",\n                        \"project.domain.unverified\",\n                        \"project.domain.moved\",\n                        \"project.rolling-release.started\",\n                        \"project.rolling-release.aborted\",\n                        \"project.rolling-release.completed\",\n                        \"project.rolling-release.approved\",\n                        \"deployment.checks.failed\",\n                        \"deployment.checks.succeeded\",\n                        \"deployment-checks-completed\",\n                        \"deployment-ready\",\n                        \"deployment-prepared\",\n                        \"deployment-error\",\n                        \"deployment-check-rerequested\",\n                        \"deployment-canceled\",\n                        \"project-created\",\n                        \"project-removed\",\n                        \"domain-created\",\n                        \"deployment\",\n                        \"integration-configuration-permission-updated\",\n                        \"integration-configuration-removed\",\n                        \"integration-configuration-scope-change-confirmed\",\n                        \"marketplace.member.changed\",\n                        \"marketplace.invoice.created\",\n                        \"marketplace.invoice.paid\",\n                        \"marketplace.invoice.notpaid\",\n                        \"marketplace.invoice.overdue\",\n                        \"marketplace.invoice.refunded\",\n                        \"ai-gateway.balance-depleted\",\n                        \"ai-gateway.auto-reload.limit-reached\",\n                        \"observability.anomaly\",\n                        \"observability.anomaly-error\",\n                        \"observability.usage-anomaly\",\n                        \"observability.error-anomaly\",\n                        \"botid.anomaly\",\n                        \"flag.created\",\n                        \"flag.updated\",\n                        \"flag.deleted\",\n                        \"flag.segment.created\",\n                        \"flag.segment.updated\",\n                        \"flag.segment.deleted\",\n                        \"test-webhook\",\n                        \"message.created\",\n                        \"message.updated\",\n                        \"message.deleted\",\n                        \"thread.resolved\",\n                        \"thread.unresolved\",\n                        \"message.reaction-added\",\n                        \"message.reaction-removed\",\n                        \"message.mentioned\",\n                        \"comment.created\",\n                        \"comment.updated\",\n                        \"comment.deleted\",\n                        \"comment.resolved\",\n                        \"comment.unresolved\",\n                        \"comment.reaction-added\",\n                        \"comment.reaction-removed\",\n                        \"comment.mentioned\"\n                      ],\n                      \"x-speakeasy-enums\": {\n                        \"budget.reached\": \"BudgetReached\",\n                        \"domain.created\": \"DomainCreated\",\n                        \"domain.dns.records.changed\": \"DomainDnsRecordsChanged\",\n                        \"domain.transfer-in.started\": \"DomainTransferInStarted\",\n                        \"domain.transfer-in.completed\": \"DomainTransferInCompleted\",\n                        \"domain.transfer-in.failed\": \"DomainTransferInFailed\",\n                        \"domain.certificate.add\": \"DomainCertificateAdd\",\n                        \"domain.certificate.add.failed\": \"DomainCertificateAddFailed\",\n                        \"domain.certificate.renew\": \"DomainCertificateRenew\",\n                        \"domain.certificate.renew.failed\": \"DomainCertificateRenewFailed\",\n                        \"domain.certificate.deleted\": \"DomainCertificateDeleted\",\n                        \"domain.renewal\": \"DomainRenewal\",\n                        \"domain.renewal.failed\": \"DomainRenewalFailed\",\n                        \"domain.auto-renew.changed\": \"DomainAutoRenewChanged\",\n                        \"deployment.created\": \"DeploymentCreated\",\n                        \"deployment.cleanup\": \"DeploymentCleanup\",\n                        \"deployment.error\": \"DeploymentError\",\n                        \"deployment.canceled\": \"DeploymentCanceled\",\n                        \"deployment.succeeded\": \"DeploymentSucceeded\",\n                        \"deployment.ready\": \"DeploymentReady\",\n                        \"deployment.check-rerequested\": \"DeploymentCheckRerequested\",\n                        \"deployment.promoted\": \"DeploymentPromoted\",\n                        \"deployment.integration.action.start\": \"DeploymentIntegrationActionStart\",\n                        \"deployment.integration.action.cancel\": \"DeploymentIntegrationActionCancel\",\n                        \"deployment.integration.action.cleanup\": \"DeploymentIntegrationActionCleanup\",\n                        \"deployment.checkrun.start\": \"DeploymentCheckrunStart\",\n                        \"deployment.checkrun.cancel\": \"DeploymentCheckrunCancel\",\n                        \"edge-config.created\": \"EdgeConfigCreated\",\n                        \"edge-config.deleted\": \"EdgeConfigDeleted\",\n                        \"edge-config.items.updated\": \"EdgeConfigItemsUpdated\",\n                        \"firewall.attack\": \"FirewallAttack\",\n                        \"integration-configuration.permission-upgraded\": \"IntegrationConfigurationPermissionUpgraded\",\n                        \"integration-configuration.removed\": \"IntegrationConfigurationRemoved\",\n                        \"integration-configuration.scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmed\",\n                        \"integration-resource.project-connected\": \"IntegrationResourceProjectConnected\",\n                        \"integration-resource.project-disconnected\": \"IntegrationResourceProjectDisconnected\",\n                        \"project.created\": \"ProjectCreated\",\n                        \"project.removed\": \"ProjectRemoved\",\n                        \"project.domain.created\": \"ProjectDomainCreated\",\n                        \"project.domain.updated\": \"ProjectDomainUpdated\",\n                        \"project.domain.deleted\": \"ProjectDomainDeleted\",\n                        \"project.domain.verified\": \"ProjectDomainVerified\",\n                        \"project.domain.unverified\": \"ProjectDomainUnverified\",\n                        \"project.domain.moved\": \"ProjectDomainMoved\",\n                        \"project.rolling-release.started\": \"ProjectRollingReleaseStarted\",\n                        \"project.rolling-release.aborted\": \"ProjectRollingReleaseAborted\",\n                        \"project.rolling-release.completed\": \"ProjectRollingReleaseCompleted\",\n                        \"project.rolling-release.approved\": \"ProjectRollingReleaseApproved\",\n                        \"deployment.checks.failed\": \"DeploymentChecksFailed\",\n                        \"deployment.checks.succeeded\": \"DeploymentChecksSucceeded\",\n                        \"deployment-checks-completed\": \"DeploymentChecksCompleted\",\n                        \"deployment-ready\": \"DeploymentReadyHyphen\",\n                        \"deployment-prepared\": \"DeploymentPreparedHyphen\",\n                        \"deployment-error\": \"DeploymentErrorHyphen\",\n                        \"deployment-check-rerequested\": \"DeploymentCheckRerequestedHyphen\",\n                        \"deployment-canceled\": \"DeploymentCanceledHyphen\",\n                        \"project-created\": \"ProjectCreatedHyphen\",\n                        \"project-removed\": \"ProjectRemovedHyphen\",\n                        \"domain-created\": \"DomainCreatedHyphen\",\n                        \"deployment\": \"Deployment\",\n                        \"integration-configuration-permission-updated\": \"IntegrationConfigurationPermissionUpdatedHyphen\",\n                        \"integration-configuration-removed\": \"IntegrationConfigurationRemovedHyphen\",\n                        \"integration-configuration-scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmedHyphen\",\n                        \"marketplace.invoice.created\": \"MarketplaceInvoiceCreated\",\n                        \"marketplace.invoice.paid\": \"MarketplaceInvoicePaid\",\n                        \"marketplace.invoice.notpaid\": \"MarketplaceInvoiceNotpaid\",\n                        \"marketplace.invoice.refunded\": \"MarketplaceInvoiceRefunded\",\n                        \"observability.anomaly\": \"ObservabilityAnomaly\",\n                        \"observability.anomaly-error\": \"ObservabilityAnomalyError\",\n                        \"test-webhook\": \"TestWebhook\"\n                      }\n                    }\n                  },\n                  \"projectIds\": {\n                    \"minItems\": 1,\n                    \"maxItems\": 50,\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"pattern\": \"^[a-zA-z0-9_]+$\",\n                      \"type\": \"string\"\n                    }\n                  }\n                }\n              }\n            }\n          },\n          \"required\": true\n        }\n      },\n      \"get\": {\n        \"description\": \"Get a list of webhooks\",\n        \"operationId\": \"getWebhooks\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a list of webhooks\",\n        \"tags\": [\n          \"webhooks\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"oneOf\": [\n                    {\n                      \"items\": {\n                        \"properties\": {\n                          \"projectsMetadata\": {\n                            \"nullable\": true,\n                            \"items\": {\n                              \"properties\": {\n                                \"id\": {\n                                  \"type\": \"string\"\n                                },\n                                \"name\": {\n                                  \"type\": \"string\"\n                                },\n                                \"framework\": {\n                                  \"nullable\": true,\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blitzjs\",\n                                    \"nextjs\",\n                                    \"gatsby\",\n                                    \"remix\",\n                                    \"react-router\",\n                                    \"astro\",\n                                    \"hexo\",\n                                    \"eleventy\",\n                                    \"docusaurus-2\",\n                                    \"docusaurus\",\n                                    \"preact\",\n                                    \"solidstart-1\",\n                                    \"solidstart\",\n                                    \"dojo\",\n                                    \"ember\",\n                                    \"vue\",\n                                    \"scully\",\n                                    \"ionic-angular\",\n                                    \"angular\",\n                                    \"polymer\",\n                                    \"svelte\",\n                                    \"sveltekit\",\n                                    \"sveltekit-1\",\n                                    \"ionic-react\",\n                                    \"create-react-app\",\n                                    \"gridsome\",\n                                    \"umijs\",\n                                    \"sapper\",\n                                    \"saber\",\n                                    \"stencil\",\n                                    \"nuxtjs\",\n                                    \"redwoodjs\",\n                                    \"hugo\",\n                                    \"jekyll\",\n                                    \"brunch\",\n                                    \"middleman\",\n                                    \"zola\",\n                                    \"hydrogen\",\n                                    \"vite\",\n                                    \"tanstack-start\",\n                                    \"vitepress\",\n                                    \"vuepress\",\n                                    \"parcel\",\n                                    \"fastapi\",\n                                    \"flask\",\n                                    \"fasthtml\",\n                                    \"django\",\n                                    \"sanity-v3\",\n                                    \"sanity\",\n                                    \"storybook\",\n                                    \"nitro\",\n                                    \"hono\",\n                                    \"express\",\n                                    \"h3\",\n                                    \"koa\",\n                                    \"nestjs\",\n                                    \"elysia\",\n                                    \"fastify\",\n                                    \"xmcp\",\n                                    \"python\",\n                                    \"ruby\",\n                                    \"rust\",\n                                    \"node\",\n                                    \"go\",\n                                    \"services\"\n                                  ]\n                                },\n                                \"latestDeployment\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"id\",\n                                \"name\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"events\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"budget.reached\",\n                                \"domain.created\",\n                                \"domain.dns.records.changed\",\n                                \"domain.transfer-in.started\",\n                                \"domain.transfer-in.completed\",\n                                \"domain.transfer-in.failed\",\n                                \"domain.certificate.add\",\n                                \"domain.certificate.add.failed\",\n                                \"domain.certificate.renew\",\n                                \"domain.certificate.renew.failed\",\n                                \"domain.certificate.deleted\",\n                                \"domain.renewal\",\n                                \"domain.renewal.failed\",\n                                \"domain.auto-renew.changed\",\n                                \"deployment.created\",\n                                \"deployment.cleanup\",\n                                \"deployment.error\",\n                                \"deployment.canceled\",\n                                \"deployment.succeeded\",\n                                \"deployment.ready\",\n                                \"deployment.check-rerequested\",\n                                \"deployment.promoted\",\n                                \"deployment.rollback\",\n                                \"deployment.integration.action.start\",\n                                \"deployment.integration.action.cancel\",\n                                \"deployment.integration.action.cleanup\",\n                                \"deployment.checkrun.start\",\n                                \"deployment.checkrun.cancel\",\n                                \"edge-config.created\",\n                                \"edge-config.deleted\",\n                                \"edge-config.items.updated\",\n                                \"firewall.attack\",\n                                \"firewall.system-rule-anomaly\",\n                                \"firewall.custom-rule-anomaly\",\n                                \"alerts.triggered\",\n                                \"integration-configuration.permission-upgraded\",\n                                \"integration-configuration.removed\",\n                                \"integration-configuration.scope-change-confirmed\",\n                                \"integration-configuration.transferred\",\n                                \"integration-resource.project-connected\",\n                                \"integration-resource.project-disconnected\",\n                                \"project.created\",\n                                \"project.removed\",\n                                \"project.renamed\",\n                                \"project.env-variable.created\",\n                                \"project.env-variable.updated\",\n                                \"project.env-variable.deleted\",\n                                \"project.domain.created\",\n                                \"project.domain.updated\",\n                                \"project.domain.deleted\",\n                                \"project.domain.verified\",\n                                \"project.domain.unverified\",\n                                \"project.domain.moved\",\n                                \"project.rolling-release.started\",\n                                \"project.rolling-release.aborted\",\n                                \"project.rolling-release.completed\",\n                                \"project.rolling-release.approved\",\n                                \"deployment.checks.failed\",\n                                \"deployment.checks.succeeded\",\n                                \"deployment-checks-completed\",\n                                \"deployment-ready\",\n                                \"deployment-prepared\",\n                                \"deployment-error\",\n                                \"deployment-check-rerequested\",\n                                \"deployment-canceled\",\n                                \"project-created\",\n                                \"project-removed\",\n                                \"domain-created\",\n                                \"deployment\",\n                                \"integration-configuration-permission-updated\",\n                                \"integration-configuration-removed\",\n                                \"integration-configuration-scope-change-confirmed\",\n                                \"marketplace.member.changed\",\n                                \"marketplace.invoice.created\",\n                                \"marketplace.invoice.paid\",\n                                \"marketplace.invoice.notpaid\",\n                                \"marketplace.invoice.overdue\",\n                                \"marketplace.invoice.refunded\",\n                                \"ai-gateway.balance-depleted\",\n                                \"ai-gateway.auto-reload.limit-reached\",\n                                \"observability.anomaly\",\n                                \"observability.anomaly-error\",\n                                \"observability.usage-anomaly\",\n                                \"observability.error-anomaly\",\n                                \"botid.anomaly\",\n                                \"flag.created\",\n                                \"flag.updated\",\n                                \"flag.deleted\",\n                                \"flag.segment.created\",\n                                \"flag.segment.updated\",\n                                \"flag.segment.deleted\",\n                                \"test-webhook\",\n                                \"message.created\",\n                                \"message.updated\",\n                                \"message.deleted\",\n                                \"thread.resolved\",\n                                \"thread.unresolved\",\n                                \"message.reaction-added\",\n                                \"message.reaction-removed\",\n                                \"message.mentioned\",\n                                \"comment.created\",\n                                \"comment.updated\",\n                                \"comment.deleted\",\n                                \"comment.resolved\",\n                                \"comment.unresolved\",\n                                \"comment.reaction-added\",\n                                \"comment.reaction-removed\",\n                                \"comment.mentioned\"\n                              ],\n                              \"example\": \"deployment.created\",\n                              \"description\": \"The webhooks events\",\n                              \"x-speakeasy-enums\": {\n                                \"budget.reached\": \"BudgetReached\",\n                                \"domain.created\": \"DomainCreated\",\n                                \"domain.dns.records.changed\": \"DomainDnsRecordsChanged\",\n                                \"domain.transfer-in.started\": \"DomainTransferInStarted\",\n                                \"domain.transfer-in.completed\": \"DomainTransferInCompleted\",\n                                \"domain.transfer-in.failed\": \"DomainTransferInFailed\",\n                                \"domain.certificate.add\": \"DomainCertificateAdd\",\n                                \"domain.certificate.add.failed\": \"DomainCertificateAddFailed\",\n                                \"domain.certificate.renew\": \"DomainCertificateRenew\",\n                                \"domain.certificate.renew.failed\": \"DomainCertificateRenewFailed\",\n                                \"domain.certificate.deleted\": \"DomainCertificateDeleted\",\n                                \"domain.renewal\": \"DomainRenewal\",\n                                \"domain.renewal.failed\": \"DomainRenewalFailed\",\n                                \"domain.auto-renew.changed\": \"DomainAutoRenewChanged\",\n                                \"deployment.created\": \"DeploymentCreated\",\n                                \"deployment.cleanup\": \"DeploymentCleanup\",\n                                \"deployment.error\": \"DeploymentError\",\n                                \"deployment.canceled\": \"DeploymentCanceled\",\n                                \"deployment.succeeded\": \"DeploymentSucceeded\",\n                                \"deployment.ready\": \"DeploymentReady\",\n                                \"deployment.check-rerequested\": \"DeploymentCheckRerequested\",\n                                \"deployment.promoted\": \"DeploymentPromoted\",\n                                \"deployment.integration.action.start\": \"DeploymentIntegrationActionStart\",\n                                \"deployment.integration.action.cancel\": \"DeploymentIntegrationActionCancel\",\n                                \"deployment.integration.action.cleanup\": \"DeploymentIntegrationActionCleanup\",\n                                \"deployment.checkrun.start\": \"DeploymentCheckrunStart\",\n                                \"deployment.checkrun.cancel\": \"DeploymentCheckrunCancel\",\n                                \"edge-config.created\": \"EdgeConfigCreated\",\n                                \"edge-config.deleted\": \"EdgeConfigDeleted\",\n                                \"edge-config.items.updated\": \"EdgeConfigItemsUpdated\",\n                                \"firewall.attack\": \"FirewallAttack\",\n                                \"integration-configuration.permission-upgraded\": \"IntegrationConfigurationPermissionUpgraded\",\n                                \"integration-configuration.removed\": \"IntegrationConfigurationRemoved\",\n                                \"integration-configuration.scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmed\",\n                                \"integration-resource.project-connected\": \"IntegrationResourceProjectConnected\",\n                                \"integration-resource.project-disconnected\": \"IntegrationResourceProjectDisconnected\",\n                                \"project.created\": \"ProjectCreated\",\n                                \"project.removed\": \"ProjectRemoved\",\n                                \"project.domain.created\": \"ProjectDomainCreated\",\n                                \"project.domain.updated\": \"ProjectDomainUpdated\",\n                                \"project.domain.deleted\": \"ProjectDomainDeleted\",\n                                \"project.domain.verified\": \"ProjectDomainVerified\",\n                                \"project.domain.unverified\": \"ProjectDomainUnverified\",\n                                \"project.domain.moved\": \"ProjectDomainMoved\",\n                                \"project.rolling-release.started\": \"ProjectRollingReleaseStarted\",\n                                \"project.rolling-release.aborted\": \"ProjectRollingReleaseAborted\",\n                                \"project.rolling-release.completed\": \"ProjectRollingReleaseCompleted\",\n                                \"project.rolling-release.approved\": \"ProjectRollingReleaseApproved\",\n                                \"deployment.checks.failed\": \"DeploymentChecksFailed\",\n                                \"deployment.checks.succeeded\": \"DeploymentChecksSucceeded\",\n                                \"deployment-checks-completed\": \"DeploymentChecksCompleted\",\n                                \"deployment-ready\": \"DeploymentReadyHyphen\",\n                                \"deployment-prepared\": \"DeploymentPreparedHyphen\",\n                                \"deployment-error\": \"DeploymentErrorHyphen\",\n                                \"deployment-check-rerequested\": \"DeploymentCheckRerequestedHyphen\",\n                                \"deployment-canceled\": \"DeploymentCanceledHyphen\",\n                                \"project-created\": \"ProjectCreatedHyphen\",\n                                \"project-removed\": \"ProjectRemovedHyphen\",\n                                \"domain-created\": \"DomainCreatedHyphen\",\n                                \"deployment\": \"Deployment\",\n                                \"integration-configuration-permission-updated\": \"IntegrationConfigurationPermissionUpdatedHyphen\",\n                                \"integration-configuration-removed\": \"IntegrationConfigurationRemovedHyphen\",\n                                \"integration-configuration-scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmedHyphen\",\n                                \"marketplace.invoice.created\": \"MarketplaceInvoiceCreated\",\n                                \"marketplace.invoice.paid\": \"MarketplaceInvoicePaid\",\n                                \"marketplace.invoice.notpaid\": \"MarketplaceInvoiceNotpaid\",\n                                \"marketplace.invoice.refunded\": \"MarketplaceInvoiceRefunded\",\n                                \"observability.anomaly\": \"ObservabilityAnomaly\",\n                                \"observability.anomaly-error\": \"ObservabilityAnomalyError\",\n                                \"test-webhook\": \"TestWebhook\"\n                              }\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The webhooks events\",\n                            \"example\": \"deployment.created\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The webhook id\",\n                            \"example\": \"account_hook_GflD6EYyo7F4ViYS\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"description\": \"A string with the URL of the webhook\",\n                            \"example\": \"https://my-webhook.com\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique ID of the team the webhook belongs to\",\n                            \"example\": \"ZspSRT4ljIEEmMHgoDwKWDei\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A number containing the date when the webhook was created in in milliseconds\",\n                            \"example\": 1567024758130\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A number containing the date when the webhook was updated in in milliseconds\",\n                            \"example\": 1567024758130\n                          },\n                          \"projectIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The ID of the projects the webhook is associated with\",\n                            \"example\": [\n                              \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"events\",\n                          \"id\",\n                          \"ownerId\",\n                          \"projectsMetadata\",\n                          \"updatedAt\",\n                          \"url\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    {\n                      \"items\": {\n                        \"properties\": {\n                          \"events\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"budget.reached\",\n                                \"domain.created\",\n                                \"domain.dns.records.changed\",\n                                \"domain.transfer-in.started\",\n                                \"domain.transfer-in.completed\",\n                                \"domain.transfer-in.failed\",\n                                \"domain.certificate.add\",\n                                \"domain.certificate.add.failed\",\n                                \"domain.certificate.renew\",\n                                \"domain.certificate.renew.failed\",\n                                \"domain.certificate.deleted\",\n                                \"domain.renewal\",\n                                \"domain.renewal.failed\",\n                                \"domain.auto-renew.changed\",\n                                \"deployment.created\",\n                                \"deployment.cleanup\",\n                                \"deployment.error\",\n                                \"deployment.canceled\",\n                                \"deployment.succeeded\",\n                                \"deployment.ready\",\n                                \"deployment.check-rerequested\",\n                                \"deployment.promoted\",\n                                \"deployment.rollback\",\n                                \"deployment.integration.action.start\",\n                                \"deployment.integration.action.cancel\",\n                                \"deployment.integration.action.cleanup\",\n                                \"deployment.checkrun.start\",\n                                \"deployment.checkrun.cancel\",\n                                \"edge-config.created\",\n                                \"edge-config.deleted\",\n                                \"edge-config.items.updated\",\n                                \"firewall.attack\",\n                                \"firewall.system-rule-anomaly\",\n                                \"firewall.custom-rule-anomaly\",\n                                \"alerts.triggered\",\n                                \"integration-configuration.permission-upgraded\",\n                                \"integration-configuration.removed\",\n                                \"integration-configuration.scope-change-confirmed\",\n                                \"integration-configuration.transferred\",\n                                \"integration-resource.project-connected\",\n                                \"integration-resource.project-disconnected\",\n                                \"project.created\",\n                                \"project.removed\",\n                                \"project.renamed\",\n                                \"project.env-variable.created\",\n                                \"project.env-variable.updated\",\n                                \"project.env-variable.deleted\",\n                                \"project.domain.created\",\n                                \"project.domain.updated\",\n                                \"project.domain.deleted\",\n                                \"project.domain.verified\",\n                                \"project.domain.unverified\",\n                                \"project.domain.moved\",\n                                \"project.rolling-release.started\",\n                                \"project.rolling-release.aborted\",\n                                \"project.rolling-release.completed\",\n                                \"project.rolling-release.approved\",\n                                \"deployment.checks.failed\",\n                                \"deployment.checks.succeeded\",\n                                \"deployment-checks-completed\",\n                                \"deployment-ready\",\n                                \"deployment-prepared\",\n                                \"deployment-error\",\n                                \"deployment-check-rerequested\",\n                                \"deployment-canceled\",\n                                \"project-created\",\n                                \"project-removed\",\n                                \"domain-created\",\n                                \"deployment\",\n                                \"integration-configuration-permission-updated\",\n                                \"integration-configuration-removed\",\n                                \"integration-configuration-scope-change-confirmed\",\n                                \"marketplace.member.changed\",\n                                \"marketplace.invoice.created\",\n                                \"marketplace.invoice.paid\",\n                                \"marketplace.invoice.notpaid\",\n                                \"marketplace.invoice.overdue\",\n                                \"marketplace.invoice.refunded\",\n                                \"ai-gateway.balance-depleted\",\n                                \"ai-gateway.auto-reload.limit-reached\",\n                                \"observability.anomaly\",\n                                \"observability.anomaly-error\",\n                                \"observability.usage-anomaly\",\n                                \"observability.error-anomaly\",\n                                \"botid.anomaly\",\n                                \"flag.created\",\n                                \"flag.updated\",\n                                \"flag.deleted\",\n                                \"flag.segment.created\",\n                                \"flag.segment.updated\",\n                                \"flag.segment.deleted\",\n                                \"test-webhook\",\n                                \"message.created\",\n                                \"message.updated\",\n                                \"message.deleted\",\n                                \"thread.resolved\",\n                                \"thread.unresolved\",\n                                \"message.reaction-added\",\n                                \"message.reaction-removed\",\n                                \"message.mentioned\",\n                                \"comment.created\",\n                                \"comment.updated\",\n                                \"comment.deleted\",\n                                \"comment.resolved\",\n                                \"comment.unresolved\",\n                                \"comment.reaction-added\",\n                                \"comment.reaction-removed\",\n                                \"comment.mentioned\"\n                              ],\n                              \"example\": \"deployment.created\",\n                              \"description\": \"The webhooks events\",\n                              \"x-speakeasy-enums\": {\n                                \"budget.reached\": \"BudgetReached\",\n                                \"domain.created\": \"DomainCreated\",\n                                \"domain.dns.records.changed\": \"DomainDnsRecordsChanged\",\n                                \"domain.transfer-in.started\": \"DomainTransferInStarted\",\n                                \"domain.transfer-in.completed\": \"DomainTransferInCompleted\",\n                                \"domain.transfer-in.failed\": \"DomainTransferInFailed\",\n                                \"domain.certificate.add\": \"DomainCertificateAdd\",\n                                \"domain.certificate.add.failed\": \"DomainCertificateAddFailed\",\n                                \"domain.certificate.renew\": \"DomainCertificateRenew\",\n                                \"domain.certificate.renew.failed\": \"DomainCertificateRenewFailed\",\n                                \"domain.certificate.deleted\": \"DomainCertificateDeleted\",\n                                \"domain.renewal\": \"DomainRenewal\",\n                                \"domain.renewal.failed\": \"DomainRenewalFailed\",\n                                \"domain.auto-renew.changed\": \"DomainAutoRenewChanged\",\n                                \"deployment.created\": \"DeploymentCreated\",\n                                \"deployment.cleanup\": \"DeploymentCleanup\",\n                                \"deployment.error\": \"DeploymentError\",\n                                \"deployment.canceled\": \"DeploymentCanceled\",\n                                \"deployment.succeeded\": \"DeploymentSucceeded\",\n                                \"deployment.ready\": \"DeploymentReady\",\n                                \"deployment.check-rerequested\": \"DeploymentCheckRerequested\",\n                                \"deployment.promoted\": \"DeploymentPromoted\",\n                                \"deployment.integration.action.start\": \"DeploymentIntegrationActionStart\",\n                                \"deployment.integration.action.cancel\": \"DeploymentIntegrationActionCancel\",\n                                \"deployment.integration.action.cleanup\": \"DeploymentIntegrationActionCleanup\",\n                                \"deployment.checkrun.start\": \"DeploymentCheckrunStart\",\n                                \"deployment.checkrun.cancel\": \"DeploymentCheckrunCancel\",\n                                \"edge-config.created\": \"EdgeConfigCreated\",\n                                \"edge-config.deleted\": \"EdgeConfigDeleted\",\n                                \"edge-config.items.updated\": \"EdgeConfigItemsUpdated\",\n                                \"firewall.attack\": \"FirewallAttack\",\n                                \"integration-configuration.permission-upgraded\": \"IntegrationConfigurationPermissionUpgraded\",\n                                \"integration-configuration.removed\": \"IntegrationConfigurationRemoved\",\n                                \"integration-configuration.scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmed\",\n                                \"integration-resource.project-connected\": \"IntegrationResourceProjectConnected\",\n                                \"integration-resource.project-disconnected\": \"IntegrationResourceProjectDisconnected\",\n                                \"project.created\": \"ProjectCreated\",\n                                \"project.removed\": \"ProjectRemoved\",\n                                \"project.domain.created\": \"ProjectDomainCreated\",\n                                \"project.domain.updated\": \"ProjectDomainUpdated\",\n                                \"project.domain.deleted\": \"ProjectDomainDeleted\",\n                                \"project.domain.verified\": \"ProjectDomainVerified\",\n                                \"project.domain.unverified\": \"ProjectDomainUnverified\",\n                                \"project.domain.moved\": \"ProjectDomainMoved\",\n                                \"project.rolling-release.started\": \"ProjectRollingReleaseStarted\",\n                                \"project.rolling-release.aborted\": \"ProjectRollingReleaseAborted\",\n                                \"project.rolling-release.completed\": \"ProjectRollingReleaseCompleted\",\n                                \"project.rolling-release.approved\": \"ProjectRollingReleaseApproved\",\n                                \"deployment.checks.failed\": \"DeploymentChecksFailed\",\n                                \"deployment.checks.succeeded\": \"DeploymentChecksSucceeded\",\n                                \"deployment-checks-completed\": \"DeploymentChecksCompleted\",\n                                \"deployment-ready\": \"DeploymentReadyHyphen\",\n                                \"deployment-prepared\": \"DeploymentPreparedHyphen\",\n                                \"deployment-error\": \"DeploymentErrorHyphen\",\n                                \"deployment-check-rerequested\": \"DeploymentCheckRerequestedHyphen\",\n                                \"deployment-canceled\": \"DeploymentCanceledHyphen\",\n                                \"project-created\": \"ProjectCreatedHyphen\",\n                                \"project-removed\": \"ProjectRemovedHyphen\",\n                                \"domain-created\": \"DomainCreatedHyphen\",\n                                \"deployment\": \"Deployment\",\n                                \"integration-configuration-permission-updated\": \"IntegrationConfigurationPermissionUpdatedHyphen\",\n                                \"integration-configuration-removed\": \"IntegrationConfigurationRemovedHyphen\",\n                                \"integration-configuration-scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmedHyphen\",\n                                \"marketplace.invoice.created\": \"MarketplaceInvoiceCreated\",\n                                \"marketplace.invoice.paid\": \"MarketplaceInvoicePaid\",\n                                \"marketplace.invoice.notpaid\": \"MarketplaceInvoiceNotpaid\",\n                                \"marketplace.invoice.refunded\": \"MarketplaceInvoiceRefunded\",\n                                \"observability.anomaly\": \"ObservabilityAnomaly\",\n                                \"observability.anomaly-error\": \"ObservabilityAnomalyError\",\n                                \"test-webhook\": \"TestWebhook\"\n                              }\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The webhooks events\",\n                            \"example\": \"deployment.created\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"The webhook id\",\n                            \"example\": \"account_hook_GflD6EYyo7F4ViYS\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"description\": \"A string with the URL of the webhook\",\n                            \"example\": \"https://my-webhook.com\"\n                          },\n                          \"ownerId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique ID of the team the webhook belongs to\",\n                            \"example\": \"ZspSRT4ljIEEmMHgoDwKWDei\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A number containing the date when the webhook was created in in milliseconds\",\n                            \"example\": 1567024758130\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"A number containing the date when the webhook was updated in in milliseconds\",\n                            \"example\": 1567024758130\n                          },\n                          \"projectIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"The ID of the projects the webhook is associated with\",\n                            \"example\": [\n                              \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"events\",\n                          \"id\",\n                          \"ownerId\",\n                          \"updatedAt\",\n                          \"url\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  ]\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"projectId\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"pattern\": \"^[a-zA-z0-9_]+$\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v1/webhooks/{id}\": {\n      \"get\": {\n        \"description\": \"Get a webhook\",\n        \"operationId\": \"getWebhook\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get a webhook\",\n        \"tags\": [\n          \"webhooks\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"events\": {\n                      \"items\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"budget.reached\",\n                          \"domain.created\",\n                          \"domain.dns.records.changed\",\n                          \"domain.transfer-in.started\",\n                          \"domain.transfer-in.completed\",\n                          \"domain.transfer-in.failed\",\n                          \"domain.certificate.add\",\n                          \"domain.certificate.add.failed\",\n                          \"domain.certificate.renew\",\n                          \"domain.certificate.renew.failed\",\n                          \"domain.certificate.deleted\",\n                          \"domain.renewal\",\n                          \"domain.renewal.failed\",\n                          \"domain.auto-renew.changed\",\n                          \"deployment.created\",\n                          \"deployment.cleanup\",\n                          \"deployment.error\",\n                          \"deployment.canceled\",\n                          \"deployment.succeeded\",\n                          \"deployment.ready\",\n                          \"deployment.check-rerequested\",\n                          \"deployment.promoted\",\n                          \"deployment.rollback\",\n                          \"deployment.integration.action.start\",\n                          \"deployment.integration.action.cancel\",\n                          \"deployment.integration.action.cleanup\",\n                          \"deployment.checkrun.start\",\n                          \"deployment.checkrun.cancel\",\n                          \"edge-config.created\",\n                          \"edge-config.deleted\",\n                          \"edge-config.items.updated\",\n                          \"firewall.attack\",\n                          \"firewall.system-rule-anomaly\",\n                          \"firewall.custom-rule-anomaly\",\n                          \"alerts.triggered\",\n                          \"integration-configuration.permission-upgraded\",\n                          \"integration-configuration.removed\",\n                          \"integration-configuration.scope-change-confirmed\",\n                          \"integration-configuration.transferred\",\n                          \"integration-resource.project-connected\",\n                          \"integration-resource.project-disconnected\",\n                          \"project.created\",\n                          \"project.removed\",\n                          \"project.renamed\",\n                          \"project.env-variable.created\",\n                          \"project.env-variable.updated\",\n                          \"project.env-variable.deleted\",\n                          \"project.domain.created\",\n                          \"project.domain.updated\",\n                          \"project.domain.deleted\",\n                          \"project.domain.verified\",\n                          \"project.domain.unverified\",\n                          \"project.domain.moved\",\n                          \"project.rolling-release.started\",\n                          \"project.rolling-release.aborted\",\n                          \"project.rolling-release.completed\",\n                          \"project.rolling-release.approved\",\n                          \"deployment.checks.failed\",\n                          \"deployment.checks.succeeded\",\n                          \"deployment-checks-completed\",\n                          \"deployment-ready\",\n                          \"deployment-prepared\",\n                          \"deployment-error\",\n                          \"deployment-check-rerequested\",\n                          \"deployment-canceled\",\n                          \"project-created\",\n                          \"project-removed\",\n                          \"domain-created\",\n                          \"deployment\",\n                          \"integration-configuration-permission-updated\",\n                          \"integration-configuration-removed\",\n                          \"integration-configuration-scope-change-confirmed\",\n                          \"marketplace.member.changed\",\n                          \"marketplace.invoice.created\",\n                          \"marketplace.invoice.paid\",\n                          \"marketplace.invoice.notpaid\",\n                          \"marketplace.invoice.overdue\",\n                          \"marketplace.invoice.refunded\",\n                          \"ai-gateway.balance-depleted\",\n                          \"ai-gateway.auto-reload.limit-reached\",\n                          \"observability.anomaly\",\n                          \"observability.anomaly-error\",\n                          \"observability.usage-anomaly\",\n                          \"observability.error-anomaly\",\n                          \"botid.anomaly\",\n                          \"flag.created\",\n                          \"flag.updated\",\n                          \"flag.deleted\",\n                          \"flag.segment.created\",\n                          \"flag.segment.updated\",\n                          \"flag.segment.deleted\",\n                          \"test-webhook\",\n                          \"message.created\",\n                          \"message.updated\",\n                          \"message.deleted\",\n                          \"thread.resolved\",\n                          \"thread.unresolved\",\n                          \"message.reaction-added\",\n                          \"message.reaction-removed\",\n                          \"message.mentioned\",\n                          \"comment.created\",\n                          \"comment.updated\",\n                          \"comment.deleted\",\n                          \"comment.resolved\",\n                          \"comment.unresolved\",\n                          \"comment.reaction-added\",\n                          \"comment.reaction-removed\",\n                          \"comment.mentioned\"\n                        ],\n                        \"example\": \"deployment.created\",\n                        \"description\": \"The webhooks events\",\n                        \"x-speakeasy-enums\": {\n                          \"budget.reached\": \"BudgetReached\",\n                          \"domain.created\": \"DomainCreated\",\n                          \"domain.dns.records.changed\": \"DomainDnsRecordsChanged\",\n                          \"domain.transfer-in.started\": \"DomainTransferInStarted\",\n                          \"domain.transfer-in.completed\": \"DomainTransferInCompleted\",\n                          \"domain.transfer-in.failed\": \"DomainTransferInFailed\",\n                          \"domain.certificate.add\": \"DomainCertificateAdd\",\n                          \"domain.certificate.add.failed\": \"DomainCertificateAddFailed\",\n                          \"domain.certificate.renew\": \"DomainCertificateRenew\",\n                          \"domain.certificate.renew.failed\": \"DomainCertificateRenewFailed\",\n                          \"domain.certificate.deleted\": \"DomainCertificateDeleted\",\n                          \"domain.renewal\": \"DomainRenewal\",\n                          \"domain.renewal.failed\": \"DomainRenewalFailed\",\n                          \"domain.auto-renew.changed\": \"DomainAutoRenewChanged\",\n                          \"deployment.created\": \"DeploymentCreated\",\n                          \"deployment.cleanup\": \"DeploymentCleanup\",\n                          \"deployment.error\": \"DeploymentError\",\n                          \"deployment.canceled\": \"DeploymentCanceled\",\n                          \"deployment.succeeded\": \"DeploymentSucceeded\",\n                          \"deployment.ready\": \"DeploymentReady\",\n                          \"deployment.check-rerequested\": \"DeploymentCheckRerequested\",\n                          \"deployment.promoted\": \"DeploymentPromoted\",\n                          \"deployment.integration.action.start\": \"DeploymentIntegrationActionStart\",\n                          \"deployment.integration.action.cancel\": \"DeploymentIntegrationActionCancel\",\n                          \"deployment.integration.action.cleanup\": \"DeploymentIntegrationActionCleanup\",\n                          \"deployment.checkrun.start\": \"DeploymentCheckrunStart\",\n                          \"deployment.checkrun.cancel\": \"DeploymentCheckrunCancel\",\n                          \"edge-config.created\": \"EdgeConfigCreated\",\n                          \"edge-config.deleted\": \"EdgeConfigDeleted\",\n                          \"edge-config.items.updated\": \"EdgeConfigItemsUpdated\",\n                          \"firewall.attack\": \"FirewallAttack\",\n                          \"integration-configuration.permission-upgraded\": \"IntegrationConfigurationPermissionUpgraded\",\n                          \"integration-configuration.removed\": \"IntegrationConfigurationRemoved\",\n                          \"integration-configuration.scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmed\",\n                          \"integration-resource.project-connected\": \"IntegrationResourceProjectConnected\",\n                          \"integration-resource.project-disconnected\": \"IntegrationResourceProjectDisconnected\",\n                          \"project.created\": \"ProjectCreated\",\n                          \"project.removed\": \"ProjectRemoved\",\n                          \"project.domain.created\": \"ProjectDomainCreated\",\n                          \"project.domain.updated\": \"ProjectDomainUpdated\",\n                          \"project.domain.deleted\": \"ProjectDomainDeleted\",\n                          \"project.domain.verified\": \"ProjectDomainVerified\",\n                          \"project.domain.unverified\": \"ProjectDomainUnverified\",\n                          \"project.domain.moved\": \"ProjectDomainMoved\",\n                          \"project.rolling-release.started\": \"ProjectRollingReleaseStarted\",\n                          \"project.rolling-release.aborted\": \"ProjectRollingReleaseAborted\",\n                          \"project.rolling-release.completed\": \"ProjectRollingReleaseCompleted\",\n                          \"project.rolling-release.approved\": \"ProjectRollingReleaseApproved\",\n                          \"deployment.checks.failed\": \"DeploymentChecksFailed\",\n                          \"deployment.checks.succeeded\": \"DeploymentChecksSucceeded\",\n                          \"deployment-checks-completed\": \"DeploymentChecksCompleted\",\n                          \"deployment-ready\": \"DeploymentReadyHyphen\",\n                          \"deployment-prepared\": \"DeploymentPreparedHyphen\",\n                          \"deployment-error\": \"DeploymentErrorHyphen\",\n                          \"deployment-check-rerequested\": \"DeploymentCheckRerequestedHyphen\",\n                          \"deployment-canceled\": \"DeploymentCanceledHyphen\",\n                          \"project-created\": \"ProjectCreatedHyphen\",\n                          \"project-removed\": \"ProjectRemovedHyphen\",\n                          \"domain-created\": \"DomainCreatedHyphen\",\n                          \"deployment\": \"Deployment\",\n                          \"integration-configuration-permission-updated\": \"IntegrationConfigurationPermissionUpdatedHyphen\",\n                          \"integration-configuration-removed\": \"IntegrationConfigurationRemovedHyphen\",\n                          \"integration-configuration-scope-change-confirmed\": \"IntegrationConfigurationScopeChangeConfirmedHyphen\",\n                          \"marketplace.invoice.created\": \"MarketplaceInvoiceCreated\",\n                          \"marketplace.invoice.paid\": \"MarketplaceInvoicePaid\",\n                          \"marketplace.invoice.notpaid\": \"MarketplaceInvoiceNotpaid\",\n                          \"marketplace.invoice.refunded\": \"MarketplaceInvoiceRefunded\",\n                          \"observability.anomaly\": \"ObservabilityAnomaly\",\n                          \"observability.anomaly-error\": \"ObservabilityAnomalyError\",\n                          \"test-webhook\": \"TestWebhook\"\n                        }\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The webhooks events\",\n                      \"example\": \"deployment.created\"\n                    },\n                    \"id\": {\n                      \"type\": \"string\",\n                      \"description\": \"The webhook id\",\n                      \"example\": \"account_hook_GflD6EYyo7F4ViYS\"\n                    },\n                    \"url\": {\n                      \"type\": \"string\",\n                      \"description\": \"A string with the URL of the webhook\",\n                      \"example\": \"https://my-webhook.com\"\n                    },\n                    \"ownerId\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique ID of the team the webhook belongs to\",\n                      \"example\": \"ZspSRT4ljIEEmMHgoDwKWDei\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the webhook was created in in milliseconds\",\n                      \"example\": 1567024758130\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"A number containing the date when the webhook was updated in in milliseconds\",\n                      \"example\": 1567024758130\n                    },\n                    \"projectIds\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"The ID of the projects the webhook is associated with\",\n                      \"example\": [\n                        \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"events\",\n                    \"id\",\n                    \"ownerId\",\n                    \"updatedAt\",\n                    \"url\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Deletes a webhook\",\n        \"operationId\": \"deleteWebhook\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Deletes a webhook\",\n        \"tags\": [\n          \"webhooks\"\n        ],\n        \"responses\": {\n          \"204\": {\n            \"description\": \"\"\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/deployments/{id}/aliases\": {\n      \"get\": {\n        \"description\": \"Retrieves all Aliases for the Deployment with the given ID. The authenticated user or team must own the deployment.\",\n        \"operationId\": \"listDeploymentAliases\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List Deployment Aliases\",\n        \"tags\": [\n          \"aliases\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The list of aliases assigned to the deployment\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"aliases\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"uid\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the alias\",\n                            \"example\": \"2WjyKQmM8ZnGcJsPWMrHRHrE\"\n                          },\n                          \"alias\": {\n                            \"type\": \"string\",\n                            \"description\": \"The alias name, it could be a `.vercel.app` subdomain or a custom domain\",\n                            \"example\": \"my-alias.vercel.app\"\n                          },\n                          \"created\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"description\": \"The date when the alias was created\",\n                            \"example\": \"2017-04-26T23:00:34.232Z\"\n                          },\n                          \"redirect\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"Target destination domain for redirect when the alias is a redirect\"\n                          },\n                          \"protectionBypass\": {\n                            \"additionalProperties\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"shareable-link\"\n                                      ]\n                                    },\n                                    \"expires\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"access\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"requested\",\n                                        \"granted\"\n                                      ]\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"user\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"access\",\n                                    \"createdAt\",\n                                    \"lastUpdatedAt\",\n                                    \"lastUpdatedBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"alias-protection-override\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"email_invite\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"lastUpdatedAt\",\n                                    \"lastUpdatedBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                }\n                              ]\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"The protection bypass for the alias\"\n                          }\n                        },\n                        \"required\": [\n                          \"alias\",\n                          \"created\",\n                          \"uid\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"A list of the aliases assigned to the deployment\"\n                      },\n                      \"type\": \"array\",\n                      \"description\": \"A list of the aliases assigned to the deployment\"\n                    }\n                  },\n                  \"required\": [\n                    \"aliases\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The deployment was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The ID of the deployment the aliases should be listed for\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa\",\n              \"description\": \"The ID of the deployment the aliases should be listed for\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"post\": {\n        \"description\": \"Creates a new alias for the deployment with the given deployment ID. The authenticated user or team must own this deployment. If the desired alias is already assigned to another deployment, then it will be removed from the old deployment and assigned to the new one.\",\n        \"operationId\": \"assignAlias\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Assign an Alias\",\n        \"tags\": [\n          \"aliases\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The alias was successfully assigned to the deployment\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"uid\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the alias\",\n                      \"example\": \"2WjyKQmM8ZnGcJsPWMrHRHrE\"\n                    },\n                    \"alias\": {\n                      \"type\": \"string\",\n                      \"description\": \"The assigned alias name\",\n                      \"example\": \"my-alias.vercel.app\"\n                    },\n                    \"created\": {\n                      \"type\": \"string\",\n                      \"format\": \"date-time\",\n                      \"description\": \"The date when the alias was created\",\n                      \"example\": \"2017-04-26T23:00:34.232Z\"\n                    },\n                    \"oldDeploymentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the previously aliased deployment, only received when the alias was used before\",\n                      \"example\": \"dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa\"\n                    }\n                  },\n                  \"required\": [\n                    \"alias\",\n                    \"created\",\n                    \"uid\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\\nThe cert for the provided alias is not ready\\nThe deployment is not READY and can not be aliased\\nThe supplied alias is invalid\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\\nIf no .vercel.app alias exists then we fail (nothing to mirror)\"\n          },\n          \"404\": {\n            \"description\": \"The domain used for the alias was not found\\nThe deployment was not found\"\n          },\n          \"409\": {\n            \"description\": \"The provided alias is already assigned to the given deployment\\nThe domain is not allowed to be used\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The ID of the deployment the aliases should be listed for\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The ID of the deployment the aliases should be listed for\",\n              \"example\": \"dpl_FjvFJncQHQcZMznrUm9EoB8sFuPa\",\n              \"oneOf\": [\n                {\n                  \"type\": \"string\"\n                }\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"properties\": {\n                  \"alias\": {\n                    \"description\": \"The alias we want to assign to the deployment defined in the URL\",\n                    \"example\": \"my-alias.vercel.app\",\n                    \"type\": \"string\"\n                  },\n                  \"redirect\": {\n                    \"description\": \"The redirect property will take precedence over the deployment id from the URL and consists of a hostname (like test.com) to which the alias should redirect using status code 307\",\n                    \"example\": null,\n                    \"type\": \"string\",\n                    \"nullable\": true\n                  }\n                },\n                \"type\": \"object\"\n              }\n            }\n          },\n          \"required\": true\n        }\n      }\n    },\n    \"/v4/aliases\": {\n      \"get\": {\n        \"description\": \"Retrieves a list of aliases for the authenticated User or Team. When `domain` is provided, only aliases for that domain will be returned. When `projectId` is provided, it will only return the given project aliases.\",\n        \"operationId\": \"listAliases\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List aliases\",\n        \"tags\": [\n          \"aliases\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The paginated list of aliases\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"aliases\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"alias\": {\n                            \"type\": \"string\",\n                            \"description\": \"The alias name, it could be a `.vercel.app` subdomain or a custom domain\",\n                            \"example\": \"my-alias.vercel.app\"\n                          },\n                          \"created\": {\n                            \"type\": \"string\",\n                            \"format\": \"date-time\",\n                            \"description\": \"The date when the alias was created\",\n                            \"example\": \"2017-04-26T23:00:34.232Z\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"The date when the alias was created in milliseconds since the UNIX epoch\",\n                            \"example\": 1540095775941\n                          },\n                          \"creator\": {\n                            \"properties\": {\n                              \"uid\": {\n                                \"type\": \"string\",\n                                \"description\": \"ID of the user who created the alias\",\n                                \"example\": \"96SnxkFiMyVKsK3pnoHfx3Hz\"\n                              },\n                              \"email\": {\n                                \"type\": \"string\",\n                                \"description\": \"Email of the user who created the alias\",\n                                \"example\": \"john-doe@gmail.com\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\",\n                                \"description\": \"Username of the user who created the alias\",\n                                \"example\": \"john-doe\"\n                              }\n                            },\n                            \"required\": [\n                              \"email\",\n                              \"uid\",\n                              \"username\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Information of the user who created the alias\"\n                          },\n                          \"deletedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"The date when the alias was deleted in milliseconds since the UNIX epoch\",\n                            \"example\": 1540095775941,\n                            \"nullable\": true\n                          },\n                          \"deployment\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\",\n                                \"description\": \"The deployment unique identifier\",\n                                \"example\": \"dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx\"\n                              },\n                              \"url\": {\n                                \"type\": \"string\",\n                                \"description\": \"The deployment unique URL\",\n                                \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                              },\n                              \"meta\": {\n                                \"type\": \"string\",\n                                \"description\": \"The deployment metadata\",\n                                \"example\": {}\n                              }\n                            },\n                            \"required\": [\n                              \"id\",\n                              \"url\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A map with the deployment ID, URL and metadata\"\n                          },\n                          \"deploymentId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The deployment ID\",\n                            \"example\": \"dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx\"\n                          },\n                          \"projectId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the project\",\n                            \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                          },\n                          \"redirect\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"Target destination domain for redirect when the alias is a redirect\"\n                          },\n                          \"redirectStatusCode\": {\n                            \"nullable\": true,\n                            \"type\": \"number\",\n                            \"enum\": [\n                              301,\n                              302,\n                              307,\n                              308\n                            ],\n                            \"description\": \"Status code to be used on redirect\"\n                          },\n                          \"uid\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the alias\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"The date when the alias was updated in milliseconds since the UNIX epoch\",\n                            \"example\": 1540095775941\n                          },\n                          \"protectionBypass\": {\n                            \"additionalProperties\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"shareable-link\"\n                                      ]\n                                    },\n                                    \"expires\": {\n                                      \"type\": \"number\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"access\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"requested\",\n                                        \"granted\"\n                                      ]\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"user\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"access\",\n                                    \"createdAt\",\n                                    \"lastUpdatedAt\",\n                                    \"lastUpdatedBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"createdBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"alias-protection-override\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"createdBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"createdAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedAt\": {\n                                      \"type\": \"number\"\n                                    },\n                                    \"lastUpdatedBy\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"scope\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"email_invite\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"createdAt\",\n                                    \"lastUpdatedAt\",\n                                    \"lastUpdatedBy\",\n                                    \"scope\"\n                                  ],\n                                  \"type\": \"object\",\n                                  \"description\": \"The protection bypass for the alias\"\n                                }\n                              ]\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"The protection bypass for the alias\"\n                          },\n                          \"microfrontends\": {\n                            \"properties\": {\n                              \"defaultApp\": {\n                                \"properties\": {\n                                  \"projectId\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"projectId\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"applications\": {\n                                \"oneOf\": [\n                                  {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"fallbackHost\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"This is always set. In production it is used as a pointer to each apps production deployment. For pre-production, it's used as the fallback if there is no deployment for the branch.\"\n                                        },\n                                        \"projectId\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The project ID of the microfrontends application.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"fallbackHost\",\n                                        \"projectId\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"A list of the deployment routing information for each project.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"A list of the deployment routing information for each project.\"\n                                  },\n                                  {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"fallbackHost\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"This is always set. For branch aliases, it's used as the fallback if there is no deployment for the branch.\"\n                                        },\n                                        \"branchAlias\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Could point to a branch without a deployment if the project was never deployed. The proxy will fallback to the fallbackHost if there is no deployment.\"\n                                        },\n                                        \"projectId\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The project ID of the microfrontends application.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"branchAlias\",\n                                        \"fallbackHost\",\n                                        \"projectId\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"A list of the deployment routing information for each project.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"A list of the deployment routing information for each project.\"\n                                  },\n                                  {\n                                    \"items\": {\n                                      \"properties\": {\n                                        \"deploymentId\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"This is the deployment for the same commit, it could be a cancelled deployment. The proxy will fallback to the branchDeploymentId and then the fallbackDeploymentId.\"\n                                        },\n                                        \"branchDeploymentId\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"This is the latest non-cancelled deployment of the branch alias at the time the commit alias was created. It is possible there is no deployment for the branch, or this was set before the deployment was canceled, in which case this will point to a cancelled deployment, in either case the proxy will fallback to the fallbackDeploymentId.\"\n                                        },\n                                        \"fallbackDeploymentId\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"This is the deployment of the fallback host at the time the commit alias was created. It is possible for this to be a deleted deployment, in which case the proxy will show that the deployment is deleted. It will not use the fallbackHost, as a future deployment on the fallback host could be invalid for this deployment, and it could lead to confusion / incorrect behavior for the commit alias.\"\n                                        },\n                                        \"fallbackHost\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"Temporary for backwards compatibility. Can remove when metadata change is released\"\n                                        },\n                                        \"branchAlias\": {\n                                          \"type\": \"string\"\n                                        },\n                                        \"projectId\": {\n                                          \"type\": \"string\",\n                                          \"description\": \"The project ID of the microfrontends application.\"\n                                        }\n                                      },\n                                      \"required\": [\n                                        \"projectId\"\n                                      ],\n                                      \"type\": \"object\",\n                                      \"description\": \"A list of the deployment routing information for each project.\"\n                                    },\n                                    \"type\": \"array\",\n                                    \"description\": \"A list of the deployment routing information for each project.\"\n                                  }\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"applications\",\n                              \"defaultApp\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The microfrontends for the alias including the routing configuration\"\n                          }\n                        },\n                        \"required\": [\n                          \"alias\",\n                          \"created\",\n                          \"deploymentId\",\n                          \"projectId\",\n                          \"uid\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    },\n                    \"pagination\": {\n                      \"$ref\": \"#/components/schemas/Pagination\"\n                    }\n                  },\n                  \"required\": [\n                    \"aliases\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"domain\",\n            \"description\": \"Get only aliases of the given domain name\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get only aliases of the given domain name\",\n              \"example\": \"my-test-domain.com\",\n              \"maxItems\": 20,\n              \"oneOf\": [\n                {\n                  \"type\": \"array\",\n                  \"items\": {\n                    \"type\": \"string\"\n                  }\n                },\n                {\n                  \"type\": \"string\"\n                }\n              ]\n            }\n          },\n          {\n            \"name\": \"from\",\n            \"description\": \"Get only aliases created after the provided timestamp\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"deprecated\": true,\n              \"description\": \"Get only aliases created after the provided timestamp\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of aliases to list from a request\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Maximum number of aliases to list from a request\",\n              \"example\": 10,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"description\": \"Filter aliases from the given `projectId`\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter aliases from the given `projectId`\",\n              \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get aliases created after this JavaScript timestamp\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get aliases created after this JavaScript timestamp\",\n              \"example\": 1540095775941,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get aliases created before this JavaScript timestamp\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get aliases created before this JavaScript timestamp\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"rollbackDeploymentId\",\n            \"description\": \"Get aliases that would be rolled back for the given deployment\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get aliases that would be rolled back for the given deployment\",\n              \"example\": \"dpl_XXX\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v4/aliases/{idOrAlias}\": {\n      \"get\": {\n        \"description\": \"Retrieves an Alias for the given host name or alias ID.\",\n        \"operationId\": \"getAlias\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get an Alias\",\n        \"tags\": [\n          \"aliases\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The alias information\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"alias\": {\n                      \"type\": \"string\",\n                      \"description\": \"The alias name, it could be a `.vercel.app` subdomain or a custom domain\",\n                      \"example\": \"my-alias.vercel.app\"\n                    },\n                    \"created\": {\n                      \"type\": \"string\",\n                      \"format\": \"date-time\",\n                      \"description\": \"The date when the alias was created\",\n                      \"example\": \"2017-04-26T23:00:34.232Z\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"The date when the alias was created in milliseconds since the UNIX epoch\",\n                      \"example\": 1540095775941,\n                      \"nullable\": true\n                    },\n                    \"creator\": {\n                      \"properties\": {\n                        \"uid\": {\n                          \"type\": \"string\",\n                          \"description\": \"ID of the user who created the alias\",\n                          \"example\": \"96SnxkFiMyVKsK3pnoHfx3Hz\"\n                        },\n                        \"email\": {\n                          \"type\": \"string\",\n                          \"description\": \"Email of the user who created the alias\",\n                          \"example\": \"john-doe@gmail.com\"\n                        },\n                        \"username\": {\n                          \"type\": \"string\",\n                          \"description\": \"Username of the user who created the alias\",\n                          \"example\": \"john-doe\"\n                        }\n                      },\n                      \"required\": [\n                        \"email\",\n                        \"uid\",\n                        \"username\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"Information of the user who created the alias\"\n                    },\n                    \"deletedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"The date when the alias was deleted in milliseconds since the UNIX epoch\",\n                      \"example\": 1540095775941,\n                      \"nullable\": true\n                    },\n                    \"deployment\": {\n                      \"properties\": {\n                        \"id\": {\n                          \"type\": \"string\",\n                          \"description\": \"The deployment unique identifier\",\n                          \"example\": \"dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx\"\n                        },\n                        \"url\": {\n                          \"type\": \"string\",\n                          \"description\": \"The deployment unique URL\",\n                          \"example\": \"my-instant-deployment-3ij3cxz9qr.now.sh\"\n                        },\n                        \"meta\": {\n                          \"type\": \"string\",\n                          \"description\": \"The deployment metadata\",\n                          \"example\": {}\n                        }\n                      },\n                      \"required\": [\n                        \"id\",\n                        \"url\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"A map with the deployment ID, URL and metadata\"\n                    },\n                    \"deploymentId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The deployment ID\",\n                      \"example\": \"dpl_5m8CQaRBm3FnWRW1od3wKTpaECPx\"\n                    },\n                    \"projectId\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the project\",\n                      \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\"\n                    },\n                    \"redirect\": {\n                      \"nullable\": true,\n                      \"type\": \"string\",\n                      \"description\": \"Target destination domain for redirect when the alias is a redirect\"\n                    },\n                    \"redirectStatusCode\": {\n                      \"nullable\": true,\n                      \"type\": \"number\",\n                      \"enum\": [\n                        301,\n                        302,\n                        307,\n                        308\n                      ],\n                      \"description\": \"Status code to be used on redirect\"\n                    },\n                    \"uid\": {\n                      \"type\": \"string\",\n                      \"description\": \"The unique identifier of the alias\"\n                    },\n                    \"updatedAt\": {\n                      \"type\": \"number\",\n                      \"description\": \"The date when the alias was updated in milliseconds since the UNIX epoch\",\n                      \"example\": 1540095775941,\n                      \"nullable\": true\n                    },\n                    \"protectionBypass\": {\n                      \"additionalProperties\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"shareable-link\"\n                                ]\n                              },\n                              \"expires\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The protection bypass for the alias\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"lastUpdatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"lastUpdatedBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"access\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"requested\",\n                                  \"granted\"\n                                ]\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"user\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"access\",\n                              \"createdAt\",\n                              \"lastUpdatedAt\",\n                              \"lastUpdatedBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The protection bypass for the alias\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"createdBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"alias-protection-override\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"createdBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The protection bypass for the alias\"\n                          },\n                          {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"lastUpdatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"lastUpdatedBy\": {\n                                \"type\": \"string\"\n                              },\n                              \"scope\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"email_invite\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"lastUpdatedAt\",\n                              \"lastUpdatedBy\",\n                              \"scope\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The protection bypass for the alias\"\n                          }\n                        ]\n                      },\n                      \"type\": \"object\",\n                      \"description\": \"The protection bypass for the alias\"\n                    },\n                    \"microfrontends\": {\n                      \"properties\": {\n                        \"defaultApp\": {\n                          \"properties\": {\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"applications\": {\n                          \"oneOf\": [\n                            {\n                              \"items\": {\n                                \"properties\": {\n                                  \"fallbackHost\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"This is always set. In production it is used as a pointer to each apps production deployment. For pre-production, it's used as the fallback if there is no deployment for the branch.\"\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project ID of the microfrontends application.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"fallbackHost\",\n                                  \"projectId\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"A list of the deployment routing information for each project.\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"A list of the deployment routing information for each project.\"\n                            },\n                            {\n                              \"items\": {\n                                \"properties\": {\n                                  \"fallbackHost\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"This is always set. For branch aliases, it's used as the fallback if there is no deployment for the branch.\"\n                                  },\n                                  \"branchAlias\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Could point to a branch without a deployment if the project was never deployed. The proxy will fallback to the fallbackHost if there is no deployment.\"\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project ID of the microfrontends application.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"branchAlias\",\n                                  \"fallbackHost\",\n                                  \"projectId\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"A list of the deployment routing information for each project.\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"A list of the deployment routing information for each project.\"\n                            },\n                            {\n                              \"items\": {\n                                \"properties\": {\n                                  \"deploymentId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"This is the deployment for the same commit, it could be a cancelled deployment. The proxy will fallback to the branchDeploymentId and then the fallbackDeploymentId.\"\n                                  },\n                                  \"branchDeploymentId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"This is the latest non-cancelled deployment of the branch alias at the time the commit alias was created. It is possible there is no deployment for the branch, or this was set before the deployment was canceled, in which case this will point to a cancelled deployment, in either case the proxy will fallback to the fallbackDeploymentId.\"\n                                  },\n                                  \"fallbackDeploymentId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"This is the deployment of the fallback host at the time the commit alias was created. It is possible for this to be a deleted deployment, in which case the proxy will show that the deployment is deleted. It will not use the fallbackHost, as a future deployment on the fallback host could be invalid for this deployment, and it could lead to confusion / incorrect behavior for the commit alias.\"\n                                  },\n                                  \"fallbackHost\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Temporary for backwards compatibility. Can remove when metadata change is released\"\n                                  },\n                                  \"branchAlias\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"projectId\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The project ID of the microfrontends application.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"projectId\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"A list of the deployment routing information for each project.\"\n                              },\n                              \"type\": \"array\",\n                              \"description\": \"A list of the deployment routing information for each project.\"\n                            }\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"applications\",\n                        \"defaultApp\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"The microfrontends for the alias including the routing configuration\"\n                    }\n                  },\n                  \"required\": [\n                    \"alias\",\n                    \"created\",\n                    \"deploymentId\",\n                    \"projectId\",\n                    \"uid\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The alias was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"from\",\n            \"description\": \"Get the alias only if it was created after the provided timestamp\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"deprecated\": true,\n              \"description\": \"Get the alias only if it was created after the provided timestamp\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"idOrAlias\",\n            \"description\": \"The alias or alias ID to be retrieved\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The alias or alias ID to be retrieved\",\n              \"example\": \"example.vercel.app\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"description\": \"Get the alias only if it is assigned to the provided project ID\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get the alias only if it is assigned to the provided project ID\",\n              \"example\": \"prj_12HKQaOmR5t5Uy6vdcQsNIiZgHGB\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get the alias only if it was created after this JavaScript timestamp\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get the alias only if it was created after this JavaScript timestamp\",\n              \"example\": 1540095775941,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get the alias only if it was created before this JavaScript timestamp\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Get the alias only if it was created before this JavaScript timestamp\",\n              \"example\": 1540095775951,\n              \"type\": \"number\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v2/aliases/{aliasId}\": {\n      \"delete\": {\n        \"description\": \"Delete an Alias with the specified ID.\",\n        \"operationId\": \"deleteAlias\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete an Alias\",\n        \"tags\": [\n          \"aliases\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The alias was successfully removed\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"status\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"SUCCESS\"\n                      ]\n                    }\n                  },\n                  \"required\": [\n                    \"status\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The alias was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"aliasId\",\n            \"description\": \"The ID or alias that will be removed\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"example\": \"2WjyKQmM8ZnGcJsPWMrHRHrE\",\n              \"description\": \"The ID or alias that will be removed\",\n              \"oneOf\": [\n                {\n                  \"type\": \"string\"\n                }\n              ]\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/aliases/{id}/protection-bypass\": {\n      \"patch\": {\n        \"description\": \"Update the protection bypass for the alias or deployment URL (used for user access \\u0026 comment access for deployments). Used as shareable links and user scoped access for Vercel Authentication and also to allow external (logged in) people to comment on previews for Preview Comments (next-live-mode).\",\n        \"operationId\": \"patchUrlProtectionBypass\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Update the protection bypass for a URL\",\n        \"tags\": [\n          \"aliases\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"additionalProperties\": true,\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\\nOne of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"409\": {\n            \"description\": \"\"\n          },\n          \"428\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The alias or deployment ID\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\",\n              \"description\": \"The alias or deployment ID\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"oneOf\": [\n                  {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"ttl\": {\n                        \"description\": \"Optional time the shareable link is valid for in seconds. If not provided, the shareable link will never expire.\",\n                        \"type\": \"number\",\n                        \"maximum\": 63072000\n                      },\n                      \"revoke\": {\n                        \"description\": \"Optional instructions for revoking and regenerating a shareable link\",\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"secret\": {\n                            \"description\": \"Sharebale link to revoked\",\n                            \"type\": \"string\"\n                          },\n                          \"regenerate\": {\n                            \"description\": \"Whether or not a new shareable link should be created after the provided secret is revoked\",\n                            \"type\": \"boolean\"\n                          }\n                        },\n                        \"required\": [\n                          \"secret\",\n                          \"regenerate\"\n                        ]\n                      }\n                    },\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"scope\": {\n                        \"description\": \"Instructions for creating a user scoped protection bypass\",\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"userId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Specified user id for the scoped bypass.\"\n                          },\n                          \"email\": {\n                            \"type\": \"string\",\n                            \"format\": \"email\",\n                            \"description\": \"Specified email for the scoped bypass.\"\n                          },\n                          \"access\": {\n                            \"enum\": [\n                              \"denied\",\n                              \"granted\"\n                            ],\n                            \"description\": \"Invitation status for the user scoped bypass.\"\n                          }\n                        },\n                        \"allOf\": [\n                          {\n                            \"anyOf\": [\n                              {\n                                \"required\": [\n                                  \"userId\"\n                                ]\n                              },\n                              {\n                                \"required\": [\n                                  \"email\"\n                                ]\n                              }\n                            ]\n                          },\n                          {\n                            \"required\": [\n                              \"access\"\n                            ]\n                          }\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"scope\"\n                    ],\n                    \"additionalProperties\": false\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"properties\": {\n                      \"override\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"scope\": {\n                            \"enum\": [\n                              \"alias-protection-override\"\n                            ]\n                          },\n                          \"action\": {\n                            \"enum\": [\n                              \"create\",\n                              \"revoke\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"scope\",\n                          \"action\"\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"override\"\n                    ],\n                    \"additionalProperties\": false\n                  }\n                ]\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v8/certs/{id}\": {\n      \"get\": {\n        \"description\": \"Get cert by id\",\n        \"operationId\": \"getCertById\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get cert by id\",\n        \"tags\": [\n          \"certs\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"expiresAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"autoRenew\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"cns\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"autoRenew\",\n                    \"cns\",\n                    \"createdAt\",\n                    \"expiresAt\",\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The cert id\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The cert id\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      },\n      \"delete\": {\n        \"description\": \"Remove cert\",\n        \"operationId\": \"removeCert\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Remove cert\",\n        \"tags\": [\n          \"certs\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The cert id to remove\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The cert id to remove\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v8/certs\": {\n      \"post\": {\n        \"description\": \"Issue a new cert\",\n        \"operationId\": \"issueCert\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Issue a new cert\",\n        \"tags\": [\n          \"certs\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"expiresAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"autoRenew\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"cns\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"autoRenew\",\n                    \"cns\",\n                    \"createdAt\",\n                    \"expiresAt\",\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"The account was soft-blocked for an unhandled reason.\\nThe account is missing a payment so payment method must be updated\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"449\": {\n            \"description\": \"\"\n          },\n          \"500\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"cns\": {\n                    \"description\": \"The common names the cert should be issued for\",\n                    \"type\": \"array\",\n                    \"items\": {\n                      \"type\": \"string\"\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      },\n      \"put\": {\n        \"description\": \"Upload a cert\",\n        \"operationId\": \"uploadCert\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Upload a cert\",\n        \"tags\": [\n          \"certs\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"expiresAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"autoRenew\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"cns\": {\n                      \"items\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"autoRenew\",\n                    \"cns\",\n                    \"createdAt\",\n                    \"expiresAt\",\n                    \"id\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request body is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"402\": {\n            \"description\": \"This feature is only available for Enterprise customers.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"requestBody\": {\n          \"content\": {\n            \"application/json\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"required\": [\n                  \"ca\",\n                  \"key\",\n                  \"cert\"\n                ],\n                \"additionalProperties\": false,\n                \"properties\": {\n                  \"ca\": {\n                    \"type\": \"string\",\n                    \"description\": \"The certificate authority\"\n                  },\n                  \"key\": {\n                    \"type\": \"string\",\n                    \"description\": \"The certificate key\"\n                  },\n                  \"cert\": {\n                    \"type\": \"string\",\n                    \"description\": \"The certificate\"\n                  },\n                  \"skipValidation\": {\n                    \"type\": \"boolean\",\n                    \"description\": \"Skip validation of the certificate\"\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/v6/deployments/{id}/files\": {\n      \"get\": {\n        \"description\": \"Allows to retrieve the file structure of the source code of a deployment by supplying the deployment unique identifier. If the deployment was created with the Vercel CLI or the API directly with the `files` key, it will have a file tree that can be retrievable.\",\n        \"operationId\": \"listDeploymentFiles\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List Deployment Files\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Retrieved the file tree successfully\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"items\": {\n                    \"$ref\": \"#/components/schemas/FileTree\"\n                  },\n                  \"type\": \"array\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"File tree not found\\nDeployment not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique deployment identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique deployment identifier\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v8/deployments/{id}/files/{fileId}\": {\n      \"get\": {\n        \"description\": \"Allows to retrieve the content of a file by supplying the file identifier and the deployment unique identifier. The response body will contain a JSON response containing the contents of the file encoded as base64.\",\n        \"operationId\": \"getDeploymentFileContents\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Get Deployment File Contents\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"File not found\\nDeployment not found\"\n          },\n          \"410\": {\n            \"description\": \"Invalid API version.\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The unique deployment identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique deployment identifier\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"fileId\",\n            \"description\": \"The unique file identifier\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The unique file identifier\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"description\": \"Path to the file to fetch (only for Git deployments)\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"Path to the file to fetch (only for Git deployments)\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    },\n    \"/v6/deployments\": {\n      \"get\": {\n        \"description\": \"List deployments under the authenticated user or team. If a deployment hasn't finished uploading (is incomplete), the `url` property will have a value of `null`.\",\n        \"operationId\": \"getDeployments\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"List deployments\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"pagination\": {\n                      \"$ref\": \"#/components/schemas/Pagination\"\n                    },\n                    \"deployments\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"uid\": {\n                            \"type\": \"string\",\n                            \"description\": \"The unique identifier of the deployment.\",\n                            \"example\": \"dpl_2euZBFqxYdDMDG1jTrHFnNZ2eUVa\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"description\": \"The name of the deployment.\",\n                            \"example\": \"docs\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The project ID of the deployment\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\",\n                            \"description\": \"The URL of the deployment.\",\n                            \"example\": \"docs-9jaeg38me.vercel.app\"\n                          },\n                          \"created\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when the deployment got created.\",\n                            \"example\": 1609492210000\n                          },\n                          \"defaultRoute\": {\n                            \"type\": \"string\",\n                            \"description\": \"The default route that should be used for screenshots and links if configured with microfrontends.\",\n                            \"example\": \"/docs\"\n                          },\n                          \"deleted\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when the deployment got deleted.\",\n                            \"example\": 1609492210000\n                          },\n                          \"undeleted\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when the deployment was undeleted.\",\n                            \"example\": 1609492210000\n                          },\n                          \"softDeletedByRetention\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Optional flag to indicate if the deployment was soft deleted by retention policy.\",\n                            \"example\": true\n                          },\n                          \"source\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"api-trigger-git-deploy\",\n                              \"cli\",\n                              \"clone/repo\",\n                              \"git\",\n                              \"import\",\n                              \"import/repo\",\n                              \"redeploy\",\n                              \"v0-web\"\n                            ],\n                            \"description\": \"The source of the deployment.\",\n                            \"example\": \"cli\"\n                          },\n                          \"state\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"BUILDING\",\n                              \"ERROR\",\n                              \"INITIALIZING\",\n                              \"QUEUED\",\n                              \"READY\",\n                              \"CANCELED\",\n                              \"DELETED\"\n                            ],\n                            \"description\": \"In which state is the deployment.\",\n                            \"example\": \"READY\"\n                          },\n                          \"readyState\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"BUILDING\",\n                              \"ERROR\",\n                              \"INITIALIZING\",\n                              \"QUEUED\",\n                              \"READY\",\n                              \"CANCELED\",\n                              \"DELETED\"\n                            ],\n                            \"description\": \"In which state is the deployment.\",\n                            \"example\": \"READY\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"LAMBDAS\"\n                            ],\n                            \"description\": \"The type of the deployment.\",\n                            \"example\": \"LAMBDAS\"\n                          },\n                          \"creator\": {\n                            \"properties\": {\n                              \"uid\": {\n                                \"type\": \"string\",\n                                \"description\": \"The unique identifier of the user.\",\n                                \"example\": \"eLrCnEgbKhsHyfbiNR7E8496\"\n                              },\n                              \"email\": {\n                                \"type\": \"string\",\n                                \"description\": \"The email address of the user.\",\n                                \"example\": \"example@example.com\"\n                              },\n                              \"username\": {\n                                \"type\": \"string\",\n                                \"description\": \"The username of the user.\",\n                                \"example\": \"johndoe\"\n                              },\n                              \"githubLogin\": {\n                                \"type\": \"string\",\n                                \"description\": \"The GitHub login of the user.\",\n                                \"example\": \"johndoe\"\n                              },\n                              \"gitlabLogin\": {\n                                \"type\": \"string\",\n                                \"description\": \"The GitLab login of the user.\",\n                                \"example\": \"johndoe\"\n                              }\n                            },\n                            \"required\": [\n                              \"uid\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Metadata information of the user who created the deployment.\"\n                          },\n                          \"meta\": {\n                            \"additionalProperties\": {\n                              \"type\": \"string\",\n                              \"description\": \"Metadata information from the Git provider.\"\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"Metadata information from the Git provider.\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"production\",\n                              \"staging\"\n                            ],\n                            \"description\": \"On which environment has the deployment been deployed to.\",\n                            \"example\": \"production\"\n                          },\n                          \"aliasError\": {\n                            \"nullable\": true,\n                            \"properties\": {\n                              \"code\": {\n                                \"type\": \"string\"\n                              },\n                              \"message\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"code\",\n                              \"message\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"An error object in case aliasing of the deployment failed.\"\n                          },\n                          \"aliasAssigned\": {\n                            \"nullable\": true,\n                            \"oneOf\": [\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when the deployment got created.\",\n                            \"example\": 1609492210000\n                          },\n                          \"buildingAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when the deployment started building at.\",\n                            \"example\": 1609492210000\n                          },\n                          \"ready\": {\n                            \"type\": \"number\",\n                            \"description\": \"Timestamp of when the deployment got ready.\",\n                            \"example\": 1609492210000\n                          },\n                          \"readySubstate\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"STAGED\",\n                              \"ROLLING\",\n                              \"PROMOTED\"\n                            ],\n                            \"description\": \"Substate of deployment when readyState is 'READY' Tracks whether or not deployment has seen production traffic: - STAGED: never seen production traffic - ROLLING: in the process of gradually transitioning production traffic - PROMOTED: has seen production traffic\"\n                          },\n                          \"checksState\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"registered\",\n                              \"running\",\n                              \"completed\"\n                            ],\n                            \"description\": \"State of all registered checks\"\n                          },\n                          \"checksConclusion\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"succeeded\",\n                              \"failed\",\n                              \"skipped\",\n                              \"canceled\"\n                            ],\n                            \"description\": \"Conclusion for checks\"\n                          },\n                          \"checks\": {\n                            \"properties\": {\n                              \"deployment-alias\": {\n                                \"properties\": {\n                                  \"state\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"succeeded\",\n                                      \"failed\",\n                                      \"pending\"\n                                    ]\n                                  },\n                                  \"startedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"completedAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"startedAt\",\n                                  \"state\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Detailed information about v2 deployment checks. Includes information about blocked workflows in the deployment lifecycle.\"\n                              }\n                            },\n                            \"required\": [\n                              \"deployment-alias\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Detailed information about v2 deployment checks. Includes information about blocked workflows in the deployment lifecycle.\"\n                          },\n                          \"inspectorUrl\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"Vercel URL to inspect the deployment.\",\n                            \"example\": \"https://vercel.com/acme/nextjs/J1hXN00qjUeoYfpEEf7dnDtpSiVq\"\n                          },\n                          \"errorCode\": {\n                            \"type\": \"string\",\n                            \"description\": \"Error code when the deployment is in an error state.\",\n                            \"example\": \"BUILD_FAILED\"\n                          },\n                          \"errorMessage\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"description\": \"Error message when the deployment is in an canceled or error state.\",\n                            \"example\": \"The Deployment has been canceled because this project was not affected\"\n                          },\n                          \"oomReport\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"out-of-memory\"\n                            ],\n                            \"description\": \"Indicates if the deployment encountered an out-of-memory error.\",\n                            \"example\": \"out-of-memory\"\n                          },\n                          \"isRollbackCandidate\": {\n                            \"nullable\": true,\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Deployment can be used for instant rollback\"\n                          },\n                          \"prebuilt\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"projectSettings\": {\n                            \"properties\": {\n                              \"framework\": {\n                                \"nullable\": true,\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"blitzjs\",\n                                  \"nextjs\",\n                                  \"gatsby\",\n                                  \"remix\",\n                                  \"react-router\",\n                                  \"astro\",\n                                  \"hexo\",\n                                  \"eleventy\",\n                                  \"docusaurus-2\",\n                                  \"docusaurus\",\n                                  \"preact\",\n                                  \"solidstart-1\",\n                                  \"solidstart\",\n                                  \"dojo\",\n                                  \"ember\",\n                                  \"vue\",\n                                  \"scully\",\n                                  \"ionic-angular\",\n                                  \"angular\",\n                                  \"polymer\",\n                                  \"svelte\",\n                                  \"sveltekit\",\n                                  \"sveltekit-1\",\n                                  \"ionic-react\",\n                                  \"create-react-app\",\n                                  \"gridsome\",\n                                  \"umijs\",\n                                  \"sapper\",\n                                  \"saber\",\n                                  \"stencil\",\n                                  \"nuxtjs\",\n                                  \"redwoodjs\",\n                                  \"hugo\",\n                                  \"jekyll\",\n                                  \"brunch\",\n                                  \"middleman\",\n                                  \"zola\",\n                                  \"hydrogen\",\n                                  \"vite\",\n                                  \"tanstack-start\",\n                                  \"vitepress\",\n                                  \"vuepress\",\n                                  \"parcel\",\n                                  \"fastapi\",\n                                  \"flask\",\n                                  \"fasthtml\",\n                                  \"django\",\n                                  \"sanity-v3\",\n                                  \"sanity\",\n                                  \"storybook\",\n                                  \"nitro\",\n                                  \"hono\",\n                                  \"express\",\n                                  \"h3\",\n                                  \"koa\",\n                                  \"nestjs\",\n                                  \"elysia\",\n                                  \"fastify\",\n                                  \"xmcp\",\n                                  \"python\",\n                                  \"ruby\",\n                                  \"rust\",\n                                  \"node\",\n                                  \"go\",\n                                  \"services\"\n                                ]\n                              },\n                              \"gitForkProtection\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"customerSupportCodeVisibility\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"gitLFS\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"devCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"installCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"buildCommand\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"nodeVersion\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"24.x\",\n                                  \"22.x\",\n                                  \"20.x\",\n                                  \"18.x\",\n                                  \"16.x\",\n                                  \"14.x\",\n                                  \"12.x\",\n                                  \"10.x\",\n                                  \"8.10.x\"\n                                ]\n                              },\n                              \"outputDirectory\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"publicSource\": {\n                                \"nullable\": true,\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"rootDirectory\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"sourceFilesOutsideRootDirectory\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"commandForIgnoringBuildStep\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"speedInsights\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"hasData\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  },\n                                  \"paidAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"webAnalytics\": {\n                                \"properties\": {\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"disabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"canceledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"enabledAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"hasData\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"skipGitConnectDuringLink\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"gitComments\": {\n                                \"properties\": {\n                                  \"onPullRequest\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should comment on PRs\"\n                                  },\n                                  \"onCommit\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the Vercel bot should comment on commits\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"onCommit\",\n                                  \"onPullRequest\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Since June '23\"\n                              }\n                            },\n                            \"type\": \"object\",\n                            \"description\": \"The project settings which was used for this deployment\"\n                          },\n                          \"connectBuildsEnabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"The flag saying if Secure Compute network is used for builds\"\n                          },\n                          \"connectConfigurationId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of Secure Compute network used for this deployment\"\n                          },\n                          \"passiveConnectConfigurationId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of Secure Compute network used for this deployment's passive functions\"\n                          },\n                          \"expiration\": {\n                            \"type\": \"number\",\n                            \"description\": \"The expiration configured by the project retention policy\"\n                          },\n                          \"proposedExpiration\": {\n                            \"type\": \"number\",\n                            \"description\": \"The expiration proposed to replace the existing expiration\"\n                          },\n                          \"platform\": {\n                            \"properties\": {\n                              \"source\": {\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Display name of the platform.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"name\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"The external platform that created the deployment (e.g. its display name).\"\n                              },\n                              \"origin\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"url\",\n                                      \"id\"\n                                    ],\n                                    \"description\": \"Whether the value is an opaque identifier or a URL.\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"The identifier or URL pointing to the originating entity.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"type\",\n                                  \"value\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"Reference back to the entity on the platform that initiated the deployment.\"\n                              },\n                              \"creator\": {\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"Display name of the platform user.\"\n                                  },\n                                  \"avatar\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"URL of the platform user's avatar image.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"name\"\n                                ],\n                                \"type\": \"object\",\n                                \"description\": \"The user on the external platform who triggered the deployment.\"\n                              },\n                              \"meta\": {\n                                \"additionalProperties\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"object\",\n                                \"description\": \"Arbitrary key-value metadata provided by the platform.\"\n                              }\n                            },\n                            \"required\": [\n                              \"creator\",\n                              \"origin\",\n                              \"source\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Metadata about the source platform that triggered the deployment.\"\n                          },\n                          \"customEnvironment\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"slug\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"The custom environment used for this deployment, if any\"\n                          },\n                          \"seatBlock\": {\n                            \"properties\": {\n                              \"blockCode\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"TEAM_ACCESS_REQUIRED\",\n                                  \"COMMIT_AUTHOR_REQUIRED\"\n                                ],\n                                \"description\": \"The NSNB decision code for the seat block. TODO: We should consolidate block types.\"\n                              },\n                              \"userId\": {\n                                \"type\": \"string\",\n                                \"description\": \"The blocked vercel user ID.\"\n                              },\n                              \"isVerified\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Determines if the user was verified during the block. In the git integration case, the commit sender was the author.\"\n                              },\n                              \"gitUserId\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"number\"\n                                  }\n                                ]\n                              },\n                              \"gitProvider\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"github\",\n                                  \"gitlab\",\n                                  \"bitbucket\"\n                                ],\n                                \"description\": \"The git provider type associated with gitUserId.\"\n                              }\n                            },\n                            \"required\": [\n                              \"blockCode\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"NSNB Blocked metadata\"\n                          }\n                        },\n                        \"required\": [\n                          \"created\",\n                          \"creator\",\n                          \"inspectorUrl\",\n                          \"name\",\n                          \"projectId\",\n                          \"type\",\n                          \"uid\",\n                          \"url\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"deployments\",\n                    \"pagination\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"\"\n          },\n          \"422\": {\n            \"description\": \"\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"app\",\n            \"description\": \"Name of the deployment.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Name of the deployment.\",\n              \"type\": \"string\",\n              \"example\": \"docs\"\n            }\n          },\n          {\n            \"name\": \"from\",\n            \"description\": \"Gets the deployment created after this Date timestamp. (default: current time)\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Gets the deployment created after this Date timestamp. (default: current time)\",\n              \"type\": \"number\",\n              \"example\": 1612948664566,\n              \"deprecated\": true\n            }\n          },\n          {\n            \"name\": \"limit\",\n            \"description\": \"Maximum number of deployments to list from a request.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Maximum number of deployments to list from a request.\",\n              \"type\": \"number\",\n              \"example\": 10\n            }\n          },\n          {\n            \"name\": \"projectId\",\n            \"description\": \"Filter deployments from the given ID or name.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments from the given ID or name.\",\n              \"type\": \"string\",\n              \"example\": \"QmXGTs7mvAMMC7WW5ebrM33qKG32QK3h4vmQMjmY\"\n            }\n          },\n          {\n            \"name\": \"projectIds\",\n            \"description\": \"Filter deployments from the given project IDs. Cannot be used when projectId is specified.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments from the given project IDs. Cannot be used when projectId is specified.\",\n              \"type\": \"array\",\n              \"items\": {\n                \"type\": \"string\"\n              },\n              \"example\": [\n                \"prj_123\",\n                \"prj_456\"\n              ],\n              \"minItems\": 1,\n              \"maxItems\": 20\n            }\n          },\n          {\n            \"name\": \"target\",\n            \"description\": \"Filter deployments based on the environment.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments based on the environment.\",\n              \"type\": \"string\",\n              \"example\": \"production\"\n            }\n          },\n          {\n            \"name\": \"to\",\n            \"description\": \"Gets the deployment created before this Date timestamp. (default: current time)\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Gets the deployment created before this Date timestamp. (default: current time)\",\n              \"type\": \"number\",\n              \"example\": 1612948664566,\n              \"deprecated\": true\n            }\n          },\n          {\n            \"name\": \"users\",\n            \"description\": \"Filter out deployments based on users who have created the deployment.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter out deployments based on users who have created the deployment.\",\n              \"type\": \"string\",\n              \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf,K4amb7K9dAt5R2vBJWF32bmY\"\n            }\n          },\n          {\n            \"name\": \"since\",\n            \"description\": \"Get Deployments created after this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get Deployments created after this JavaScript timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1540095775941\n            }\n          },\n          {\n            \"name\": \"until\",\n            \"description\": \"Get Deployments created before this JavaScript timestamp.\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Get Deployments created before this JavaScript timestamp.\",\n              \"type\": \"number\",\n              \"example\": 1540095775951\n            }\n          },\n          {\n            \"name\": \"state\",\n            \"description\": \"Filter deployments based on their state (`BUILDING`, `ERROR`, `INITIALIZING`, `QUEUED`, `READY`, `CANCELED`)\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments based on their state (`BUILDING`, `ERROR`, `INITIALIZING`, `QUEUED`, `READY`, `CANCELED`)\",\n              \"type\": \"string\",\n              \"example\": \"BUILDING,READY\"\n            }\n          },\n          {\n            \"name\": \"rollbackCandidate\",\n            \"description\": \"Filter deployments based on their rollback candidacy\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments based on their rollback candidacy\",\n              \"type\": \"boolean\"\n            }\n          },\n          {\n            \"name\": \"branch\",\n            \"description\": \"Filter deployments based on the branch name\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments based on the branch name\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"sha\",\n            \"description\": \"Filter deployments based on the SHA\",\n            \"in\": \"query\",\n            \"schema\": {\n              \"description\": \"Filter deployments based on the SHA\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ],\n        \"x-speakeasy-usage-example\": {\n          \"title\": \"List deployments\",\n          \"description\": \"List deployments under the authenticated user or team.\",\n          \"position\": 1\n        }\n      }\n    },\n    \"/v13/deployments/{id}\": {\n      \"delete\": {\n        \"description\": \"This API allows you to delete a deployment, either by supplying its `id` in the URL or the `url` of the deployment as a query parameter. You can obtain the ID, for example, by listing all deployments.\",\n        \"operationId\": \"deleteDeployment\",\n        \"security\": [\n          {\n            \"bearerToken\": []\n          }\n        ],\n        \"summary\": \"Delete a Deployment\",\n        \"tags\": [\n          \"deployments\"\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"The deployment was successfully deleted\",\n            \"content\": {\n              \"application/json\": {\n                \"schema\": {\n                  \"properties\": {\n                    \"uid\": {\n                      \"type\": \"string\",\n                      \"description\": \"The removed deployment ID.\",\n                      \"example\": \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\"\n                    },\n                    \"state\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"DELETED\"\n                      ],\n                      \"description\": \"A constant with the final state of the deployment.\"\n                    }\n                  },\n                  \"required\": [\n                    \"state\",\n                    \"uid\"\n                  ],\n                  \"type\": \"object\"\n                }\n              }\n            }\n          },\n          \"400\": {\n            \"description\": \"One of the provided values in the request query is invalid.\"\n          },\n          \"401\": {\n            \"description\": \"The request is not authorized.\"\n          },\n          \"403\": {\n            \"description\": \"You do not have permission to access this resource.\"\n          },\n          \"404\": {\n            \"description\": \"The deployment was not found\"\n          }\n        },\n        \"parameters\": [\n          {\n            \"name\": \"id\",\n            \"description\": \"The ID of the deployment to be deleted\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"schema\": {\n              \"description\": \"The ID of the deployment to be deleted\",\n              \"example\": \"dpl_5WJWYSyB7BpgTj3EuwF37WMRBXBtPQ2iTMJHJBJyRfd\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"url\",\n            \"description\": \"A Deployment or Alias URL. In case it is passed, the ID will be ignored\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"schema\": {\n              \"description\": \"A Deployment or Alias URL. In case it is passed, the ID will be ignored\",\n              \"example\": \"https://files-orcin-xi.vercel.app/\",\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"description\": \"The Team identifier to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"teamId\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"team_1a2b3c4d5e6f7g8h9i0j1k2l\"\n            }\n          },\n          {\n            \"description\": \"The Team slug to perform the request on behalf of.\",\n            \"in\": \"query\",\n            \"name\": \"slug\",\n            \"schema\": {\n              \"type\": \"string\",\n              \"example\": \"my-team-url-slug\"\n            }\n          }\n        ]\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {\n      \"Network\": {\n        \"properties\": {\n          \"awsAccountId\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the AWS Account in which the network exists.\"\n          },\n          \"awsAvailabilityZoneIds\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"The IDs of the AWS Availability Zones in which the network exists, if specified during creation.\"\n          },\n          \"awsRegion\": {\n            \"type\": \"string\",\n            \"description\": \"The AWS Region in which the network exists.\"\n          },\n          \"cidr\": {\n            \"type\": \"string\",\n            \"description\": \"The CIDR range of the Network.\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"The date at which the Network was created, represented as a UNIX timestamp since EPOCH.\"\n          },\n          \"egressIpAddresses\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\"\n          },\n          \"hostedZones\": {\n            \"properties\": {\n              \"count\": {\n                \"type\": \"number\",\n                \"description\": \"The number of AWS Route53 Hosted Zones associated with the Network.\"\n              }\n            },\n            \"required\": [\n              \"count\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"Metadata about any AWS Route53 Hosted Zones associated with the Network.\"\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the Network.\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the network.\"\n          },\n          \"peeringConnections\": {\n            \"properties\": {\n              \"count\": {\n                \"type\": \"number\",\n                \"description\": \"The number of AWS Route53 Hosted Zones associated with the Network.\"\n              }\n            },\n            \"required\": [\n              \"count\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"Metadata about any AWS Route53 Hosted Zones associated with the Network.\"\n          },\n          \"projects\": {\n            \"properties\": {\n              \"count\": {\n                \"type\": \"number\"\n              },\n              \"ids\": {\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"array\"\n              }\n            },\n            \"required\": [\n              \"count\",\n              \"ids\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"Metadata about any projects associated with the Network.\"\n          },\n          \"region\": {\n            \"type\": \"string\",\n            \"description\": \"The Vercel region in which the Network exists.\"\n          },\n          \"status\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"create_in_progress\",\n              \"delete_in_progress\",\n              \"error\",\n              \"ready\"\n            ],\n            \"description\": \"The status of the Network.\"\n          },\n          \"teamId\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the Team that owns the Network.\"\n          },\n          \"vpcId\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the VPC which hosts the network.\"\n          }\n        },\n        \"required\": [\n          \"awsAccountId\",\n          \"awsRegion\",\n          \"cidr\",\n          \"createdAt\",\n          \"id\",\n          \"name\",\n          \"status\",\n          \"teamId\"\n        ],\n        \"type\": \"object\"\n      },\n      \"FlagJSONValue\": {\n        \"nullable\": true,\n        \"oneOf\": [\n          {\n            \"type\": \"string\"\n          },\n          {\n            \"type\": \"number\"\n          },\n          {\n            \"items\": {\n              \"$ref\": \"#/components/schemas/FlagJSONValue\"\n            },\n            \"type\": \"array\",\n            \"description\": \"TODO: The following types will eventually be exported by a more relevant package.\"\n          },\n          {\n            \"additionalProperties\": {\n              \"$ref\": \"#/components/schemas/FlagJSONValue\"\n            },\n            \"type\": \"object\"\n          },\n          {\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ]\n          }\n        ]\n      },\n      \"Pagination\": {\n        \"properties\": {\n          \"count\": {\n            \"type\": \"number\",\n            \"description\": \"Amount of items in the current page.\",\n            \"example\": 20\n          },\n          \"next\": {\n            \"nullable\": true,\n            \"type\": \"number\",\n            \"description\": \"Timestamp that must be used to request the next page.\",\n            \"example\": 1540095775951\n          },\n          \"prev\": {\n            \"nullable\": true,\n            \"type\": \"number\",\n            \"description\": \"Timestamp that must be used to request the previous page.\",\n            \"example\": 1540095775951\n          }\n        },\n        \"required\": [\n          \"count\",\n          \"next\",\n          \"prev\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"This object contains information related to the pagination of the current request, including the necessary parameters to get the next or previous page of data.\"\n      },\n      \"HttpApiDecodeError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"issues\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"issues\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/components/schemas/Issue\"\n            }\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The request did not match the expected schema\"\n      },\n      \"Issue\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"path\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"path\": {\n            \"type\": \"array\",\n            \"items\": {\n              \"$ref\": \"#/components/schemas/PropertyKey\"\n            },\n            \"description\": \"The path to the property where the issue occurred\"\n          },\n          \"message\": {\n            \"type\": \"string\",\n            \"description\": \"A descriptive message explaining the issue\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"Represents an error encountered while parsing a value to match the schema\"\n      },\n      \"PropertyKey\": {\n        \"anyOf\": [\n          {\n            \"type\": \"string\"\n          },\n          {\n            \"type\": \"number\"\n          },\n          {\n            \"type\": \"object\",\n            \"required\": [\n              \"_tag\",\n              \"key\"\n            ],\n            \"properties\": {\n              \"_tag\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"symbol\"\n                ]\n              },\n              \"key\": {\n                \"type\": \"string\"\n              }\n            },\n            \"additionalProperties\": false,\n            \"description\": \"an object to be decoded into a globally shared symbol\"\n          }\n        ]\n      },\n      \"TooManyRequests\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\",\n          \"retryAfter\",\n          \"limit\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              429\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"too_many_requests\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          },\n          \"retryAfter\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"value\",\n              \"str\"\n            ],\n            \"properties\": {\n              \"value\": {\n                \"type\": \"number\"\n              },\n              \"str\": {\n                \"type\": \"string\"\n              }\n            },\n            \"additionalProperties\": false\n          },\n          \"limit\": {\n            \"type\": \"object\",\n            \"required\": [\n              \"total\",\n              \"remaining\",\n              \"reset\"\n            ],\n            \"properties\": {\n              \"total\": {\n                \"type\": \"number\"\n              },\n              \"remaining\": {\n                \"type\": \"number\"\n              },\n              \"reset\": {\n                \"type\": \"number\"\n              }\n            },\n            \"additionalProperties\": false\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"Unauthorized\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              401\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"unauthorized\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"NotAuthorizedForScope\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              403\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"not_authorized_for_scope\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"InternalServerError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              500\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"internal_server_error\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"TldNotSupported\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"tld_not_supported\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The TLD is not currently supported.\"\n      },\n      \"DomainName\": {\n        \"type\": \"string\",\n        \"description\": \"A valid domain name\"\n      },\n      \"NotFound\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              404\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"not_found\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"DomainTooShort\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_too_short\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain name (excluding the TLD) is too short.\"\n      },\n      \"BadRequest\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"bad_request\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"DomainNotRegistered\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_not_registered\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain is not registered with Vercel.\"\n      },\n      \"Forbidden\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              403\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"forbidden\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false\n      },\n      \"DomainNotFound\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              404\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_not_found\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain was not found in our system.\"\n      },\n      \"DomainCannotBeTransferedOutUntil\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              409\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_cannot_be_transfered_out_until\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain cannot be transfered out until the specified date.\"\n      },\n      \"NonEmptyTrimmedString\": {\n        \"type\": \"string\",\n        \"description\": \"a non empty string\",\n        \"title\": \"nonEmptyString\",\n        \"pattern\": \"^\\\\S[\\\\s\\\\S]*\\\\S$|^\\\\S$|^$\",\n        \"minLength\": 1\n      },\n      \"EmailAddress\": {\n        \"type\": \"string\",\n        \"description\": \"A valid RFC 5322 email address\",\n        \"title\": \"nonEmptyString\",\n        \"minLength\": 1\n      },\n      \"E164PhoneNumber\": {\n        \"type\": \"string\",\n        \"description\": \"A valid E.164 phone number\",\n        \"title\": \"nonEmptyString\",\n        \"minLength\": 1,\n        \"pattern\": \"^(?=(?:\\\\D*\\\\d){8,15}$)\\\\+[1-9]\\\\d{0,2}\\\\.?\\\\d+$\"\n      },\n      \"CountryCode\": {\n        \"type\": \"string\",\n        \"description\": \"A valid ISO 3166-1 alpha-2 country code\"\n      },\n      \"OrderId\": {\n        \"type\": \"string\",\n        \"description\": \"A valid order ID\"\n      },\n      \"LanguageCodeRequired\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"language_code_required\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"A language code is required for punycode domains.\"\n      },\n      \"DomainNotAvailable\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_not_available\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain is not available.\"\n      },\n      \"ExpectedPriceMismatch\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"expected_price_mismatch\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The expected price passed does not match the actual price.\"\n      },\n      \"AdditionalContactInfoRequired\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"additional_contact_info_required\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"Additional contact information is required for the TLD.\"\n      },\n      \"InvalidAdditionalContactInfo\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"invalid_additional_contact_info\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"Additional contact information provided for the TLD is invalid.\"\n      },\n      \"OrderTooExpensive\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"order_too_expensive\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The total price of the order is too high.\"\n      },\n      \"DuplicateDomains\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"duplicate_domains\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"Duplicate domains were provided.\"\n      },\n      \"TooManyDomains\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"too_many_domains\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The number of domains in the order is too high.\"\n      },\n      \"DNSSECEnabled\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"dnssec_enabled\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The operation cannot be completed because DNSSEC is enabled for the domain.\"\n      },\n      \"DomainAlreadyOwned\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_already_owned\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain is already owned by another team or user.\"\n      },\n      \"DomainNotRenewable\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_not_renewable\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain is not renewable.\"\n      },\n      \"DomainAlreadyRenewing\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"status\",\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"status\": {\n            \"type\": \"number\",\n            \"enum\": [\n              400\n            ]\n          },\n          \"code\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"domain_already_renewing\"\n            ]\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        },\n        \"additionalProperties\": false,\n        \"description\": \"The domain is already renewing.\"\n      },\n      \"Nameserver\": {\n        \"type\": \"string\",\n        \"description\": \"A valid nameserver\"\n      },\n      \"RegistrantField\": {\n        \"anyOf\": [\n          {\n            \"type\": \"object\",\n            \"required\": [\n              \"description\",\n              \"required\",\n              \"type\"\n            ],\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\"\n              },\n              \"required\": {\n                \"type\": \"boolean\"\n              },\n              \"label\": {\n                \"type\": \"string\"\n              },\n              \"validation\": {\n                \"type\": \"string\"\n              },\n              \"required_when\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"value_in\"\n                    ],\n                    \"properties\": {\n                      \"value_in\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                ]\n              },\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"string\"\n                ]\n              },\n              \"options\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"value\",\n                    \"label\"\n                  ],\n                  \"properties\": {\n                    \"value\": {\n                      \"type\": \"string\"\n                    },\n                    \"label\": {\n                      \"type\": \"string\"\n                    },\n                    \"fields\": {\n                      \"type\": \"object\",\n                      \"properties\": {}\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              },\n              \"fields\": {\n                \"type\": \"object\",\n                \"properties\": {}\n              }\n            },\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"required\": [\n              \"description\",\n              \"required\",\n              \"type\",\n              \"options\"\n            ],\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\"\n              },\n              \"required\": {\n                \"type\": \"boolean\"\n              },\n              \"label\": {\n                \"type\": \"string\"\n              },\n              \"validation\": {\n                \"type\": \"string\"\n              },\n              \"required_when\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"value_in\"\n                    ],\n                    \"properties\": {\n                      \"value_in\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                ]\n              },\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"enum\"\n                ]\n              },\n              \"options\": {\n                \"type\": \"array\",\n                \"items\": {\n                  \"type\": \"object\",\n                  \"required\": [\n                    \"value\",\n                    \"label\"\n                  ],\n                  \"properties\": {\n                    \"value\": {\n                      \"type\": \"string\"\n                    },\n                    \"label\": {\n                      \"type\": \"string\"\n                    },\n                    \"fields\": {\n                      \"type\": \"object\",\n                      \"properties\": {}\n                    }\n                  },\n                  \"additionalProperties\": false\n                }\n              },\n              \"fields\": {\n                \"type\": \"object\",\n                \"properties\": {}\n              }\n            },\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"required\": [\n              \"description\",\n              \"required\",\n              \"type\"\n            ],\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\"\n              },\n              \"required\": {\n                \"type\": \"boolean\"\n              },\n              \"label\": {\n                \"type\": \"string\"\n              },\n              \"validation\": {\n                \"type\": \"string\"\n              },\n              \"required_when\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"value_in\"\n                    ],\n                    \"properties\": {\n                      \"value_in\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                ]\n              },\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"acknowledgement\"\n                ]\n              },\n              \"value\": {\n                \"type\": \"string\"\n              }\n            },\n            \"additionalProperties\": false\n          },\n          {\n            \"type\": \"object\",\n            \"required\": [\n              \"description\",\n              \"required\",\n              \"type\"\n            ],\n            \"properties\": {\n              \"description\": {\n                \"type\": \"string\"\n              },\n              \"required\": {\n                \"type\": \"boolean\"\n              },\n              \"label\": {\n                \"type\": \"string\"\n              },\n              \"validation\": {\n                \"type\": \"string\"\n              },\n              \"required_when\": {\n                \"anyOf\": [\n                  {\n                    \"type\": \"string\"\n                  },\n                  {\n                    \"type\": \"object\",\n                    \"required\": [\n                      \"value_in\"\n                    ],\n                    \"properties\": {\n                      \"value_in\": {\n                        \"type\": \"array\",\n                        \"items\": {\n                          \"type\": \"string\"\n                        }\n                      }\n                    },\n                    \"additionalProperties\": false\n                  }\n                ]\n              },\n              \"type\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"notice\"\n                ]\n              }\n            },\n            \"additionalProperties\": false\n          }\n        ],\n        \"description\": \"Schema definition for registrant fields.\"\n      },\n      \"EdgeConfigItemValue\": {\n        \"nullable\": true,\n        \"oneOf\": [\n          {\n            \"type\": \"string\"\n          },\n          {\n            \"type\": \"number\"\n          },\n          {\n            \"additionalProperties\": {\n              \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n            },\n            \"type\": \"object\"\n          },\n          {\n            \"items\": {\n              \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n            },\n            \"type\": \"array\"\n          },\n          {\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ]\n          }\n        ]\n      },\n      \"EdgeConfigItem\": {\n        \"properties\": {\n          \"key\": {\n            \"type\": \"string\"\n          },\n          \"value\": {\n            \"$ref\": \"#/components/schemas/EdgeConfigItemValue\"\n          },\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"edgeConfigId\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\"\n          },\n          \"updatedAt\": {\n            \"type\": \"number\"\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"edgeConfigId\",\n          \"key\",\n          \"updatedAt\",\n          \"value\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"The EdgeConfig.\"\n      },\n      \"EdgeConfigToken\": {\n        \"properties\": {\n          \"token\": {\n            \"type\": \"string\"\n          },\n          \"label\": {\n            \"type\": \"string\"\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"This is not the token itself, but rather an id to identify the token by\"\n          },\n          \"edgeConfigId\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\"\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"edgeConfigId\",\n          \"id\",\n          \"label\",\n          \"token\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"The EdgeConfig.\"\n      },\n      \"UserEvent\": {\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the Event.\",\n            \"example\": \"uev_bfmMjiMnXfnPbT97dGdpJbCN\"\n          },\n          \"text\": {\n            \"type\": \"string\",\n            \"description\": \"The human-readable text of the Event.\",\n            \"example\": \"You logged in via GitHub\"\n          },\n          \"entities\": {\n            \"items\": {\n              \"properties\": {\n                \"type\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"app\",\n                    \"author\",\n                    \"bitbucket_login\",\n                    \"bold\",\n                    \"deployment_host\",\n                    \"dns_record\",\n                    \"git_link\",\n                    \"github_login\",\n                    \"gitlab_login\",\n                    \"hook_name\",\n                    \"integration\",\n                    \"edge-config\",\n                    \"flag\",\n                    \"flags-segment\",\n                    \"flags-settings\",\n                    \"link\",\n                    \"project_name\",\n                    \"scaling_rules\",\n                    \"env_var_name\",\n                    \"target\",\n                    \"store\",\n                    \"system\"\n                  ],\n                  \"example\": \"author\",\n                  \"description\": \"The type of entity.\"\n                },\n                \"start\": {\n                  \"type\": \"number\",\n                  \"description\": \"The index of where the entity begins within the `text` (inclusive).\",\n                  \"example\": 0\n                },\n                \"end\": {\n                  \"type\": \"number\",\n                  \"description\": \"The index of where the entity ends within the `text` (non-inclusive).\",\n                  \"example\": 3\n                }\n              },\n              \"required\": [\n                \"end\",\n                \"start\",\n                \"type\"\n              ],\n              \"type\": \"object\",\n              \"description\": \"A list of \\\"entities\\\" within the event `text`. Useful for enhancing the displayed text with additional styling and links.\"\n            },\n            \"type\": \"array\",\n            \"description\": \"A list of \\\"entities\\\" within the event `text`. Useful for enhancing the displayed text with additional styling and links.\"\n          },\n          \"type\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"team\",\n              \"avatar\",\n              \"alias\",\n              \"plan\",\n              \"flag\",\n              \"deployment\",\n              \"access-group-created\",\n              \"access-group-deleted\",\n              \"access-group-project-updated\",\n              \"access-group-updated\",\n              \"access-group-user-added\",\n              \"access-group-user-removed\",\n              \"password-protection-disabled\",\n              \"password-protection-enabled\",\n              \"alias-chown\",\n              \"alias-delete\",\n              \"alias-invite-created\",\n              \"alias-invite-joined\",\n              \"alias-invite-revoked\",\n              \"alias-protection-bypass-created\",\n              \"alias-protection-bypass-exception\",\n              \"alias-protection-bypass-regenerated\",\n              \"alias-protection-bypass-revoked\",\n              \"alias-system\",\n              \"alias-user-scoped-access-denied\",\n              \"alias-user-scoped-access-granted\",\n              \"alias-user-scoped-access-requested\",\n              \"alias-user-scoped-access-revoked\",\n              \"oauth-app-connection-created\",\n              \"oauth-app-connection-removed\",\n              \"oauth-app-connection-updated\",\n              \"oauth-app-created\",\n              \"oauth-app-deleted\",\n              \"vercel-app-installation-request-dismissed\",\n              \"vercel-app-installation-requested\",\n              \"vercel-app-installation-updated\",\n              \"vercel-app-installed\",\n              \"oauth-app-secret-deleted\",\n              \"oauth-app-secret-generated\",\n              \"oauth-app-token-created\",\n              \"vercel-app-tokens-revoked\",\n              \"vercel-app-uninstalled\",\n              \"oauth-app-updated\",\n              \"attack-mode-disabled\",\n              \"attack-mode-enabled\",\n              \"auto-expose-system-envs\",\n              \"invoice-refunded\",\n              \"invoice-modified\",\n              \"payment-method-added\",\n              \"payment-method-default-updated\",\n              \"payment-method-removed\",\n              \"subscription-created\",\n              \"subscription-updated\",\n              \"subscription-product-added\",\n              \"subscription-product-removed\",\n              \"bulk-redirects-settings-updated\",\n              \"bulk-redirects-version-promoted\",\n              \"bulk-redirects-version-restored\",\n              \"cert\",\n              \"cert-system-create\",\n              \"cert-autorenew\",\n              \"cert-chown\",\n              \"cert-clone\",\n              \"cert-delete\",\n              \"cert-renew\",\n              \"cert-replace\",\n              \"connect-configuration-created\",\n              \"connect-configuration-deleted\",\n              \"connect-configuration-link-updated\",\n              \"connect-configuration-linked\",\n              \"connect-configuration-unlinked\",\n              \"connect-configuration-updated\",\n              \"connect-github\",\n              \"disconnect-github\",\n              \"connect-github-limited\",\n              \"disconnect-github-limited\",\n              \"connect-github-custom-host\",\n              \"disconnect-github-custom-host\",\n              \"connect-gitlab\",\n              \"connect-gitlab-app\",\n              \"disconnect-gitlab-app\",\n              \"connect-bitbucket\",\n              \"connect-bitbucket-app\",\n              \"disconnect-bitbucket-app\",\n              \"custom-suffix-clear\",\n              \"custom-suffix-disable\",\n              \"preview-deployment-suffix-disabled\",\n              \"custom-suffix-enable\",\n              \"preview-deployment-suffix-enabled\",\n              \"custom-suffix-pending\",\n              \"custom-suffix-ready\",\n              \"deploy-hook-created\",\n              \"deploy-hook-deleted\",\n              \"deploy-hook-deduped\",\n              \"deploy-hook-processed\",\n              \"deployment-check-created\",\n              \"deployment-check-updated\",\n              \"deployment-check-deleted\",\n              \"authorize-git-deployment\",\n              \"deployment-chown\",\n              \"deployment-creation-blocked\",\n              \"deployment-delete\",\n              \"disabled-integration-installation-removed\",\n              \"dns-add\",\n              \"dns-delete\",\n              \"dns-update\",\n              \"domain\",\n              \"domain-buy\",\n              \"domain-cdn\",\n              \"domain-chown\",\n              \"domain-delegated\",\n              \"domain-delete\",\n              \"domain-service-type-updated\",\n              \"domain-custom-ns-change\",\n              \"dns-zonefile-import\",\n              \"domain-zone-change\",\n              \"domain-move-in\",\n              \"domain-move-out\",\n              \"domain-move-out-request-sent\",\n              \"domain-renew-change\",\n              \"domain-transfer-in\",\n              \"domain-transfer-in-canceled\",\n              \"domain-transfer-in-completed\",\n              \"drain-created\",\n              \"drain-deleted\",\n              \"drain-disabled\",\n              \"drain-enabled\",\n              \"drain-updated\",\n              \"edge-cache-dangerously-delete-by-src-images\",\n              \"edge-cache-dangerously-delete-by-tags\",\n              \"edge-cache-invalidate-by-src-images\",\n              \"edge-cache-invalidate-by-tags\",\n              \"edge-cache-purge-all\",\n              \"edge-cache-rollback-purge\",\n              \"edge-config-created\",\n              \"edge-config-deleted\",\n              \"edge-config-items-updated\",\n              \"edge-config-schema-deleted\",\n              \"edge-config-schema-updated\",\n              \"edge-config-transfer-in\",\n              \"edge-config-transfer-out\",\n              \"edge-config-token-created\",\n              \"edge-config-token-deleted\",\n              \"edge-config-updated\",\n              \"email\",\n              \"email-notification-rule-removed\",\n              \"email-notification-rule-updated\",\n              \"env-variable-add\",\n              \"env-variable-delete\",\n              \"env-variable-edit\",\n              \"env-variable-read\",\n              \"env-variable-read:cli:dev\",\n              \"env-variable-read:cli:env:add\",\n              \"env-variable-read:cli:env:ls\",\n              \"env-variable-read:cli:env:pull\",\n              \"env-variable-read:cli:env:rm\",\n              \"env-variable-read:cli:pull\",\n              \"env-variable-read:unknown-source\",\n              \"env-variable-read:v0:env:pull\",\n              \"shared-env-variable-create\",\n              \"shared-env-variable-delete\",\n              \"shared-env-variable-read\",\n              \"shared-env-variable-update\",\n              \"firewall-bypass-created\",\n              \"firewall-bypass-deleted\",\n              \"firewall-config-promoted\",\n              \"firewall-managed-rulegroup-updated\",\n              \"firewall-managed-ruleset-updated\",\n              \"flags-segment\",\n              \"flags-settings\",\n              \"flags-explorer-subscription\",\n              \"flags-sdk-key\",\n              \"instant-rollback-created\",\n              \"integration-configuration-owner-changed\",\n              \"integration-configuration-scope-change-confirmed\",\n              \"integration-configurations-disabled\",\n              \"integration-installation-billing-plan-updated\",\n              \"integration-installation-completed\",\n              \"integration-installation-permission-updated\",\n              \"integration-installation-removed\",\n              \"integration-scope-changed\",\n              \"log-drain-created\",\n              \"log-drain-deleted\",\n              \"log-drain-disabled\",\n              \"log-drain-enabled\",\n              \"login\",\n              \"manual-deployment-promotion-created\",\n              \"microfrontend-group-added\",\n              \"microfrontend-group-deleted\",\n              \"microfrontend-group-updated\",\n              \"microfrontend-project-added-to-group\",\n              \"microfrontend-project-removed-from-group\",\n              \"microfrontend-project-updated\",\n              \"monitoring-disabled\",\n              \"monitoring-enabled\",\n              \"observability-disabled\",\n              \"observability-enabled\",\n              \"observability-plus-project-disabled\",\n              \"observability-plus-project-enabled\",\n              \"owner-blocked\",\n              \"owner-unblocked\",\n              \"owner-soft-blocked\",\n              \"owner-soft-unblocked\",\n              \"passkey-created\",\n              \"passkey-deleted\",\n              \"passkey-updated\",\n              \"preview-deployment-suffix-update\",\n              \"production-branch-updated\",\n              \"project-directory-listing\",\n              \"project-analytics-disabled\",\n              \"project-speed-insights-disabled\",\n              \"project-analytics-enabled\",\n              \"project-speed-insights-enabled\",\n              \"project-automation-bypass\",\n              \"project-affected-projects-deployments-updated\",\n              \"project-build-command-updated\",\n              \"project-framework-updated\",\n              \"project-install-command-updated\",\n              \"project-node-version-updated\",\n              \"project-output-directory-updated\",\n              \"project-prioritize-production-builds-updated\",\n              \"project-root-directory-updated\",\n              \"project-source-files-outside-root-directory-updated\",\n              \"project-build-machine-updated\",\n              \"project-client-cert-delete\",\n              \"project-client-cert-upload\",\n              \"project-connect-configurations\",\n              \"project-created\",\n              \"project-cron-jobs-toggled\",\n              \"project-delete\",\n              \"project-domain-unverified\",\n              \"project-domain-verified\",\n              \"project-elastic-concurrency-updated\",\n              \"project-auto-assign-custom-production-domains-updated\",\n              \"project-preview-environment-branch-tracking-updated\",\n              \"project-custom-environment-updated\",\n              \"project-custom-environment-created\",\n              \"project-custom-environment-deleted\",\n              \"project-functions-fluid-disabled\",\n              \"project-functions-fluid-enabled\",\n              \"project-function-max-duration\",\n              \"project-function-cpu-memory\",\n              \"project-function-regions\",\n              \"project-function-failover\",\n              \"project-preview-deployment-suffix\",\n              \"project-name\",\n              \"project-git-repository-connected\",\n              \"project-git-repository-disconnected\",\n              \"project-git-pr-comments-toggled\",\n              \"project-git-commit-comments-toggled\",\n              \"project-git-repository-dispatch-events-toggled\",\n              \"project-git-create-deployments-toggled\",\n              \"project-git-require-verified-commits-toggled\",\n              \"project-git-lfs-toggled\",\n              \"project-ignored-build-step-updated\",\n              \"project-add-alias\",\n              \"project-add-redirect\",\n              \"project-domain-deleted\",\n              \"project-domain-moved\",\n              \"project-domain-updated\",\n              \"project-member-removed-batch\",\n              \"project-alias-configured-change\",\n              \"project-member-added\",\n              \"project-member-invited\",\n              \"project-member-removed\",\n              \"project-member-updated\",\n              \"project-move-in-success\",\n              \"project-move-out-failed\",\n              \"project-move-out-started\",\n              \"project-move-out-success\",\n              \"project-oidc-token-created\",\n              \"project-options-allowlist\",\n              \"project-password-protection\",\n              \"project-paused\",\n              \"project-program-enrollment-changed\",\n              \"project-rolling-release-enabled\",\n              \"project-rolling-release-disabled\",\n              \"project-rolling-release-configured\",\n              \"project-rolling-release-started\",\n              \"project-rolling-release-completed\",\n              \"project-rolling-release-aborted\",\n              \"project-rolling-release-approved\",\n              \"project-rolling-release-timer\",\n              \"project-routes-version-promoted\",\n              \"project-routes-version-restored\",\n              \"project-oidc-issuer-mode-updated\",\n              \"project-customer-success-code-visibility-updated\",\n              \"project-git-fork-protection-updated\",\n              \"project-protected-sourcemaps-updated\",\n              \"project-build-logs-and-source-protection-updated\",\n              \"project-deployment-retention-updated\",\n              \"project-skew-protection-threshold-updated\",\n              \"project-skew-protection-max-age-updated\",\n              \"project-skew-protection-allowed-domains-updated\",\n              \"project-sso-protection\",\n              \"project-static-ips-updated\",\n              \"project-trusted-ips\",\n              \"project-unpaused\",\n              \"project-web-analytics-disabled\",\n              \"project-web-analytics-enabled\",\n              \"protected-git-scope-added\",\n              \"protected-git-scope-removed\",\n              \"runtime-cache-purge-all\",\n              \"scale\",\n              \"scale-auto\",\n              \"secondary-email-added\",\n              \"secondary-email-removed\",\n              \"secondary-email-verified\",\n              \"secret-add\",\n              \"secret-delete\",\n              \"secret-rename\",\n              \"security-plus-updated\",\n              \"set-bio\",\n              \"set-name\",\n              \"set-profiles\",\n              \"set-scale\",\n              \"signup\",\n              \"signup-via-bitbucket\",\n              \"signup-via-github\",\n              \"signup-via-gitlab\",\n              \"speed-insights-settings-updated\",\n              \"spend-created\",\n              \"spend-deleted\",\n              \"spend-updated\",\n              \"storage-accept-tos\",\n              \"storage-create\",\n              \"storage-reset-credentials\",\n              \"storage-update\",\n              \"storage-connect-project\",\n              \"storage-disconnect-project\",\n              \"storage-update-project-connection\",\n              \"storage-delete\",\n              \"storage-accessed-data-browser\",\n              \"storage-view-secret\",\n              \"storage-inactive-store-deleted\",\n              \"storage-resource-repl-command\",\n              \"storage-disconnect-projects\",\n              \"storage-access-token-set\",\n              \"ai-code-review\",\n              \"ai-alert-investigation\",\n              \"vercel-agent-team-trial-credits-applied\",\n              \"team-avatar-update\",\n              \"team-delete\",\n              \"strict-deployment-protection-settings\",\n              \"team-domain-verification-deleted\",\n              \"vercel-toolbar\",\n              \"team-email-domain-update\",\n              \"team-invite-bulk-delete\",\n              \"team-member-add\",\n              \"team-member-confirm-request\",\n              \"team-member-decline-request\",\n              \"team-member-delete\",\n              \"team-member-entitlement-added\",\n              \"team-member-entitlement-canceled\",\n              \"team-member-entitlement-reactivated\",\n              \"team-member-entitlement-removed\",\n              \"team-member-join\",\n              \"team-member-leave\",\n              \"team-member-request-access\",\n              \"team-member-role-update\",\n              \"team-mfa-enforcement-updated\",\n              \"concurrent-builds-update\",\n              \"team-ended-trial\",\n              \"team-paid-invoice\",\n              \"team-invite-code-reset\",\n              \"team-name-update\",\n              \"team-program-enrollment-changed\",\n              \"team-remote-caching-update\",\n              \"enforce-sensitive-environment-variables\",\n              \"show-ip-addresses\",\n              \"team-saml-enforced\",\n              \"team-saml-roles\",\n              \"team-ip-blocking-rules-created\",\n              \"team-ip-blocking-rules-removed\",\n              \"audit-log-export-requested\",\n              \"audit-log-export-downloaded\",\n              \"team-slug-update\",\n              \"unlink-login-connection\",\n              \"user-mfa-removed\",\n              \"user-delete\",\n              \"user-mfa-challenge-verified\",\n              \"user-mfa-configuration-updated\",\n              \"user-mfa-recovery-codes-regenerated\",\n              \"user-mfa-totp-verification-started\",\n              \"user-mfa-totp-verified\",\n              \"user-primary-email-updated\",\n              \"username\",\n              \"alert-rule-created\",\n              \"alert-rule-updated\",\n              \"alert-rule-deleted\",\n              \"vpc-peering-connection-accepted\",\n              \"vpc-peering-connection-deleted\",\n              \"vpc-peering-connection-rejected\",\n              \"vpc-peering-connection-updated\",\n              \"web-analytics-tier-updated\",\n              \"webhook-created\",\n              \"webhook-deleted\",\n              \"webhook-updated\",\n              \"v0-chat-created\",\n              \"v0-chat-message-sent\",\n              \"workflow-deployment-key-accessed\"\n            ],\n            \"description\": \"The type of the event.\",\n            \"example\": \"login\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"Timestamp (in milliseconds) of when the event was generated.\",\n            \"example\": 1632859321020\n          },\n          \"user\": {\n            \"properties\": {\n              \"slug\": {\n                \"type\": \"string\"\n              },\n              \"avatar\": {\n                \"type\": \"string\"\n              },\n              \"email\": {\n                \"type\": \"string\"\n              },\n              \"username\": {\n                \"type\": \"string\"\n              },\n              \"uid\": {\n                \"type\": \"string\"\n              }\n            },\n            \"required\": [\n              \"avatar\",\n              \"email\",\n              \"uid\",\n              \"username\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"Metadata for {@link userId}.\"\n          },\n          \"principal\": {\n            \"oneOf\": [\n              {\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"user\"\n                    ]\n                  },\n                  \"avatar\": {\n                    \"type\": \"string\"\n                  },\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"slug\": {\n                    \"type\": \"string\"\n                  },\n                  \"uid\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"avatar\",\n                  \"email\",\n                  \"uid\",\n                  \"username\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"Metadata for {@link principalId}.\"\n              },\n              {\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"app\"\n                    ]\n                  },\n                  \"clientId\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"clientId\",\n                  \"name\",\n                  \"type\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"Metadata for {@link principalId}.\"\n              }\n            ]\n          },\n          \"via\": {\n            \"items\": {\n              \"oneOf\": [\n                {\n                  \"properties\": {\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"user\"\n                      ]\n                    },\n                    \"avatar\": {\n                      \"type\": \"string\"\n                    },\n                    \"email\": {\n                      \"type\": \"string\"\n                    },\n                    \"slug\": {\n                      \"type\": \"string\"\n                    },\n                    \"uid\": {\n                      \"type\": \"string\"\n                    },\n                    \"username\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"avatar\",\n                    \"email\",\n                    \"uid\",\n                    \"username\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Metadata for {@link viaIds}.\"\n                },\n                {\n                  \"properties\": {\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"app\"\n                      ]\n                    },\n                    \"clientId\": {\n                      \"type\": \"string\"\n                    },\n                    \"name\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"clientId\",\n                    \"name\",\n                    \"type\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"Metadata for {@link viaIds}.\"\n                }\n              ]\n            },\n            \"type\": \"array\",\n            \"description\": \"Metadata for {@link viaIds}.\"\n          },\n          \"userId\": {\n            \"type\": \"string\",\n            \"description\": \"When the principal who generated the event is a user, this is their ID; otherwise, it is empty.\",\n            \"example\": \"zTuNVUXEAvvnNN3IaqinkyMw\"\n          },\n          \"principalId\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the principal who generated the event. The principal is typically a user, but it could also be an app, an integration, etc. The principal may have delegated its authority to an acting party, and so {@link viaIds} should be checked as well.\"\n          },\n          \"viaIds\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"If the principal delegated its authority (for example, a user delegating to an app), then this array contains the ID of the current actor. For example, if `principalId` is \\\"user123\\\" and `viaIds` is `[\\\"app456\\\"]`, we can say the event was triggered by - \\\"app456 on behalf of user123\\\", or - \\\"user123 via app4556\\\". Both are equivalent. Arbitrarily long chains of delegation can be represented. For example, if `principalId` is \\\"user123\\\" and `viaIds` is `[\\\"service1\\\", \\\"service2\\\"]`, we can say the event was triggered by \\\"user123 via service1 via service2\\\".\"\n          },\n          \"payload\": {\n            \"oneOf\": [\n              {\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"deleted\",\n                      \"created\",\n                      \"updated\",\n                      \"archived\",\n                      \"unarchived\"\n                    ]\n                  },\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"slug\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"action\",\n                  \"id\",\n                  \"projectId\",\n                  \"slug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"deleted\",\n                      \"added\",\n                      \"rotated\"\n                    ]\n                  },\n                  \"label\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"environment\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"action\",\n                  \"environment\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"read\"\n                    ]\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"environment\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"action\",\n                  \"environment\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"accessGroup\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"teamRoles\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"teamPermissions\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"entitlements\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"accessGroup\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"author\": {\n                    \"type\": \"string\"\n                  },\n                  \"accessGroup\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"accessGroup\",\n                  \"author\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"accessGroup\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next_role\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"ADMIN\",\n                      \"PROJECT_DEVELOPER\",\n                      \"PROJECT_VIEWER\",\n                      \"PROJECT_GUEST\"\n                    ]\n                  },\n                  \"previous_role\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"ADMIN\",\n                      \"PROJECT_DEVELOPER\",\n                      \"PROJECT_VIEWER\",\n                      \"PROJECT_GUEST\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"accessGroup\",\n                  \"project\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"accessGroup\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"previousName\": {\n                    \"type\": \"string\"\n                  },\n                  \"teamRoles\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"previousTeamRoles\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"teamPermissions\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"previousTeamPermissions\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"entitlementsAdded\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"entitlementsRemoved\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"accessGroup\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"accessGroup\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"user\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"directoryType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"accessGroup\",\n                  \"user\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"price\": {\n                    \"type\": \"number\"\n                  },\n                  \"currency\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"deployment\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"url\": {\n                        \"type\": \"string\"\n                      },\n                      \"meta\": {\n                        \"additionalProperties\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"meta\",\n                      \"name\",\n                      \"url\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"ruleCount\": {\n                    \"type\": \"number\"\n                  },\n                  \"deploymentUrl\": {\n                    \"type\": \"string\"\n                  },\n                  \"aliasId\": {\n                    \"type\": \"string\"\n                  },\n                  \"deploymentId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"oldDeploymentId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"redirect\": {\n                    \"type\": \"string\"\n                  },\n                  \"redirectStatusCode\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  },\n                  \"target\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"system\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"aliasUpdatedAt\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"oldTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"newTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"alias\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"aliasId\": {\n                    \"type\": \"string\"\n                  },\n                  \"deploymentId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"alias\",\n                  \"aliasId\",\n                  \"deploymentId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"email\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"aliasId\": {\n                    \"type\": \"string\"\n                  },\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"created\",\n                      \"removed\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"action\",\n                  \"alias\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"deploymentUrl\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"alias\",\n                  \"deploymentUrl\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"userId\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"alias\": {\n                    \"type\": \"string\"\n                  },\n                  \"aliasId\": {\n                    \"type\": \"string\"\n                  },\n                  \"userId\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\"\n                  },\n                  \"scopes\": {\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"openid\",\n                        \"email\",\n                        \"profile\",\n                        \"offline_access\"\n                      ]\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"permissions\": {\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"*\",\n                        \"read:user\",\n                        \"read:domain\",\n                        \"read-write:domain\",\n                        \"read:team\",\n                        \"read:billing\",\n                        \"read-write:billing\",\n                        \"read-write:ai-gateway-api-key\",\n                        \"use:ai-gateway\",\n                        \"read-write:project-env-vars\",\n                        \"read-write:drains\",\n                        \"read-write:edge-config\",\n                        \"read:monitoring\",\n                        \"read:access-group\",\n                        \"read:integration-configuration\",\n                        \"read-write:integration-configuration\",\n                        \"read-write:integration-resource\",\n                        \"read-write:blob\",\n                        \"read:event\",\n                        \"read:project\",\n                        \"read-write:project\",\n                        \"read:deployment\",\n                        \"read-write:deployment\",\n                        \"read-write:edge-cache\",\n                        \"read-write:project-protection-bypass\",\n                        \"read:project-env-vars-non-production\",\n                        \"read-write:project-env-vars-non-production\",\n                        \"read:project-env-vars-production\",\n                        \"read-write:project-env-vars-production\",\n                        \"read-write:project-flags-non-production\",\n                        \"read-write:project-flags-production\"\n                      ]\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"appName\",\n                  \"scopes\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"appName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\"\n                  },\n                  \"nextScopes\": {\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"openid\",\n                        \"email\",\n                        \"profile\",\n                        \"offline_access\"\n                      ]\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"nextPermissions\": {\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"*\",\n                        \"read:user\",\n                        \"read:domain\",\n                        \"read-write:domain\",\n                        \"read:team\",\n                        \"read:billing\",\n                        \"read-write:billing\",\n                        \"read-write:ai-gateway-api-key\",\n                        \"use:ai-gateway\",\n                        \"read-write:project-env-vars\",\n                        \"read-write:drains\",\n                        \"read-write:edge-config\",\n                        \"read:monitoring\",\n                        \"read:access-group\",\n                        \"read:integration-configuration\",\n                        \"read-write:integration-configuration\",\n                        \"read-write:integration-resource\",\n                        \"read-write:blob\",\n                        \"read:event\",\n                        \"read:project\",\n                        \"read-write:project\",\n                        \"read:deployment\",\n                        \"read-write:deployment\",\n                        \"read-write:edge-cache\",\n                        \"read-write:project-protection-bypass\",\n                        \"read:project-env-vars-non-production\",\n                        \"read-write:project-env-vars-non-production\",\n                        \"read:project-env-vars-production\",\n                        \"read-write:project-env-vars-production\",\n                        \"read-write:project-flags-non-production\",\n                        \"read-write:project-flags-production\"\n                      ]\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"appName\",\n                  \"nextScopes\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\"\n                  },\n                  \"installationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"before\": {\n                    \"properties\": {\n                      \"resources\": {\n                        \"properties\": {\n                          \"projectIds\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"list\"\n                                ]\n                              },\n                              \"required\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ]\n                              },\n                              \"items\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"string\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"items\",\n                              \"required\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"projectIds\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"permissions\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"read:domain\",\n                            \"read-write:domain\",\n                            \"read:team\",\n                            \"read:billing\",\n                            \"read-write:billing\",\n                            \"read-write:ai-gateway-api-key\",\n                            \"use:ai-gateway\",\n                            \"read-write:project-env-vars\",\n                            \"read-write:drains\",\n                            \"read-write:edge-config\",\n                            \"read:monitoring\",\n                            \"read:access-group\",\n                            \"read:integration-configuration\",\n                            \"read-write:integration-configuration\",\n                            \"read-write:integration-resource\",\n                            \"read-write:blob\",\n                            \"read:event\",\n                            \"read:project\",\n                            \"read-write:project\",\n                            \"read:deployment\",\n                            \"read-write:deployment\",\n                            \"read-write:edge-cache\",\n                            \"read-write:project-protection-bypass\",\n                            \"read:project-env-vars-non-production\",\n                            \"read-write:project-env-vars-non-production\",\n                            \"read:project-env-vars-production\",\n                            \"read-write:project-env-vars-production\",\n                            \"read-write:project-flags-non-production\",\n                            \"read-write:project-flags-production\"\n                          ]\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"after\": {\n                    \"properties\": {\n                      \"resources\": {\n                        \"properties\": {\n                          \"projectIds\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"list\"\n                                ]\n                              },\n                              \"required\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ]\n                              },\n                              \"items\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"string\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            },\n                            \"required\": [\n                              \"items\",\n                              \"required\",\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"projectIds\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"permissions\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"read:domain\",\n                            \"read-write:domain\",\n                            \"read:team\",\n                            \"read:billing\",\n                            \"read-write:billing\",\n                            \"read-write:ai-gateway-api-key\",\n                            \"use:ai-gateway\",\n                            \"read-write:project-env-vars\",\n                            \"read-write:drains\",\n                            \"read-write:edge-config\",\n                            \"read:monitoring\",\n                            \"read:access-group\",\n                            \"read:integration-configuration\",\n                            \"read-write:integration-configuration\",\n                            \"read-write:integration-resource\",\n                            \"read-write:blob\",\n                            \"read:event\",\n                            \"read:project\",\n                            \"read-write:project\",\n                            \"read:deployment\",\n                            \"read-write:deployment\",\n                            \"read-write:edge-cache\",\n                            \"read-write:project-protection-bypass\",\n                            \"read:project-env-vars-non-production\",\n                            \"read-write:project-env-vars-non-production\",\n                            \"read:project-env-vars-production\",\n                            \"read-write:project-env-vars-production\",\n                            \"read-write:project-flags-non-production\",\n                            \"read-write:project-flags-production\"\n                          ]\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"appName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\"\n                  },\n                  \"resources\": {\n                    \"properties\": {\n                      \"projectIds\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"list\"\n                            ]\n                          },\n                          \"required\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              true\n                            ]\n                          },\n                          \"items\": {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"string\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"type\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"items\",\n                          \"required\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"projectIds\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"permissions\": {\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"read:domain\",\n                        \"read-write:domain\",\n                        \"read:team\",\n                        \"read:billing\",\n                        \"read-write:billing\",\n                        \"read-write:ai-gateway-api-key\",\n                        \"use:ai-gateway\",\n                        \"read-write:project-env-vars\",\n                        \"read-write:drains\",\n                        \"read-write:edge-config\",\n                        \"read:monitoring\",\n                        \"read:access-group\",\n                        \"read:integration-configuration\",\n                        \"read-write:integration-configuration\",\n                        \"read-write:integration-resource\",\n                        \"read-write:blob\",\n                        \"read:event\",\n                        \"read:project\",\n                        \"read-write:project\",\n                        \"read:deployment\",\n                        \"read-write:deployment\",\n                        \"read-write:edge-cache\",\n                        \"read-write:project-protection-bypass\",\n                        \"read:project-env-vars-non-production\",\n                        \"read-write:project-env-vars-non-production\",\n                        \"read:project-env-vars-production\",\n                        \"read-write:project-env-vars-production\",\n                        \"read-write:project-flags-non-production\",\n                        \"read-write:project-flags-production\"\n                      ]\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"appName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\"\n                  },\n                  \"secretLastFourChars\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"appName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"appName\": {\n                    \"type\": \"string\",\n                    \"description\": \"The App's name at the moment this even was published (it may have changed since then).\"\n                  },\n                  \"appId\": {\n                    \"type\": \"string\",\n                    \"description\": \"The App's ID. Note that not all historical events have this field.\"\n                  },\n                  \"app\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The App's ID.\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"The App's name at the moment this even was published (it may have changed since then).\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\",\n                    \"description\": \"Note that not all historical events have this field.\"\n                  },\n                  \"issuedBefore\": {\n                    \"type\": \"number\",\n                    \"description\": \"UNIX timestamp in seconds. Tokens issued before this timestamp will be revoked. Note that not all historical events have this field.\"\n                  }\n                },\n                \"required\": [\n                  \"appName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"prevAttackModeEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"prevAttackModeActiveUntil\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  },\n                  \"attackModeEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"attackModeActiveUntil\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"attackModeEnabled\",\n                  \"projectId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"autoExposeSystemEnvs\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"autoExposeSystemEnvs\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"avatar\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"invoiceId\": {\n                    \"type\": \"string\"\n                  },\n                  \"amount\": {\n                    \"type\": \"number\"\n                  },\n                  \"refundReason\": {\n                    \"type\": \"string\"\n                  },\n                  \"lineItemCount\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"amount\",\n                  \"invoiceId\",\n                  \"lineItemCount\",\n                  \"refundReason\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"invoiceId\": {\n                    \"type\": \"string\"\n                  },\n                  \"newInvoiceId\": {\n                    \"type\": \"string\"\n                  },\n                  \"settlementMethod\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"refunded-paid\",\n                      \"credited-paid\"\n                    ]\n                  },\n                  \"amount\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"amount\",\n                  \"invoiceId\",\n                  \"newInvoiceId\",\n                  \"settlementMethod\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"paymentMethodId\": {\n                    \"type\": \"string\"\n                  },\n                  \"brand\": {\n                    \"type\": \"string\"\n                  },\n                  \"last4\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"paymentMethodId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"subscriptionId\": {\n                    \"type\": \"string\"\n                  },\n                  \"planSlug\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\",\n                \"required\": [\n                  \"planSlug\"\n                ]\n              },\n              {\n                \"properties\": {\n                  \"subscriptionId\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"cancel_plan\"\n                    ]\n                  },\n                  \"data\": {\n                    \"properties\": {\n                      \"planSlug\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"v0_teams\",\n                          \"v0_business\"\n                        ]\n                      },\n                      \"reason\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"non-payment\"\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"planSlug\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\",\n                \"required\": [\n                  \"action\",\n                  \"data\"\n                ]\n              },\n              {\n                \"properties\": {\n                  \"subscriptionId\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"resume_plan\"\n                    ]\n                  },\n                  \"data\": {\n                    \"properties\": {\n                      \"planSlug\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"v0_teams\",\n                          \"v0_business\"\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"planSlug\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\",\n                \"required\": [\n                  \"action\",\n                  \"data\"\n                ]\n              },\n              {\n                \"properties\": {\n                  \"subscriptionId\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"mutate\"\n                    ]\n                  },\n                  \"data\": {\n                    \"additionalProperties\": true,\n                    \"type\": \"object\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\",\n                \"required\": [\n                  \"action\",\n                  \"data\"\n                ]\n              },\n              {\n                \"properties\": {\n                  \"subscriptionId\": {\n                    \"type\": \"string\"\n                  },\n                  \"productAliases\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\",\n                \"required\": [\n                  \"productAliases\"\n                ]\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"bulkRedirectsLimit\": {\n                    \"type\": \"number\"\n                  },\n                  \"prevBulkRedirectsLimit\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"bulkRedirectsLimit\",\n                  \"prevBulkRedirectsLimit\",\n                  \"project\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"versionId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"project\",\n                  \"versionId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"cn\": {\n                    \"type\": \"string\"\n                  },\n                  \"cns\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"custom\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"id\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"custom\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"cns\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"custom\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"cns\",\n                  \"custom\",\n                  \"id\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"cn\": {\n                    \"type\": \"string\"\n                  },\n                  \"cns\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"id\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"oldTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"newTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"id\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"src\": {\n                    \"type\": \"string\"\n                  },\n                  \"dst\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"dst\",\n                  \"src\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"cn\": {\n                    \"type\": \"string\"\n                  },\n                  \"cns\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"id\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"cn\": {\n                    \"type\": \"string\"\n                  },\n                  \"cns\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"configuration\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"buildsEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"project\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"buildsEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"passive\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"project\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"project\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"newName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"newName\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"githubLogin\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"githubLogin\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"githubLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"host\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"githubLogin\",\n                  \"host\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"gitlabLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabEmail\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabName\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccount\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccountType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"gitlabEmail\",\n                  \"gitlabLogin\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"gitlabLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabUserId\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"gitlabLogin\",\n                  \"gitlabUserId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"bitbucketEmail\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"bitbucketEmail\",\n                  \"bitbucketLogin\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"bitbucketLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketAccountId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"bitbucketAccountId\",\n                  \"bitbucketLogin\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"reason\": {\n                    \"type\": \"string\"\n                  },\n                  \"suffix\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"suffix\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"status\": {\n                    \"type\": \"string\"\n                  },\n                  \"suffix\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"status\",\n                  \"suffix\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"suffix\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"suffix\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"hookName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ref\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"hookName\",\n                  \"projectId\",\n                  \"projectName\",\n                  \"ref\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"job\": {\n                    \"properties\": {\n                      \"deployHook\": {\n                        \"properties\": {\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"id\",\n                          \"name\",\n                          \"ref\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"state\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"deployHook\",\n                      \"state\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"job\",\n                  \"project\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"checkId\": {\n                    \"type\": \"string\"\n                  },\n                  \"checkName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"checkId\",\n                  \"checkName\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"alias\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"target\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"deployment\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"url\": {\n                        \"type\": \"string\"\n                      },\n                      \"meta\": {\n                        \"additionalProperties\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"meta\",\n                      \"name\",\n                      \"url\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"url\": {\n                    \"type\": \"string\"\n                  },\n                  \"forced\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"deploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"plan\": {\n                    \"type\": \"string\"\n                  },\n                  \"project\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"regions\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"type\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"url\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"job\": {\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"bitbucket-push\"\n                            ]\n                          },\n                          \"authorized\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"authorizedBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"jobProjectIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project.\"\n                          },\n                          \"jobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                          },\n                          \"skippedJobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                          },\n                          \"gitHashtagVercel\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR\",\n                                \"#VERCEL_BUILD_PRIO_1\",\n                                \"#VERCEL_BUILD_PRIO_2\",\n                                \"#VERCEL_BUILD_PRIO_3\",\n                                \"#VERCEL_BUILD_PRIO_4\",\n                                \"#VERCEL_BUILD_PRIO_5\",\n                                \"#VERCEL_BUILD_PRIO_6\",\n                                \"#VERCEL_BUILD_PRIO_7\",\n                                \"#VERCEL_BUILD_PRIO_8\",\n                                \"#VERCEL_BUILD_PRIO_9\",\n                                \"#VERCEL_BUILD_PRIO_10\",\n                                \"#VERCEL_SKIP\",\n                                \"#VERCEL_V0_MESSAGE\"\n                              ],\n                              \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                          },\n                          \"connectedProjectCount\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow.\"\n                          },\n                          \"prIdOrZero\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater.\"\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json.\"\n                          },\n                          \"isManualGitDeploy\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment\"\n                          },\n                          \"commitVerification\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"verified\",\n                              \"unverified\",\n                              \"unknown\"\n                            ],\n                            \"description\": \"Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported\"\n                          },\n                          \"nsnbSideEffect\": {\n                            \"properties\": {\n                              \"action\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"auto-approved-member\",\n                                  \"auto-approved-pending-invite\"\n                                ]\n                              },\n                              \"gitUserLogin\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"gitUserLogin\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy.\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"deployHook\": {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"id\",\n                              \"name\",\n                              \"ref\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"forceNew\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"owner\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoUuid\": {\n                                \"type\": \"string\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              },\n                              \"slug\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"owner\",\n                              \"ref\",\n                              \"repoUuid\",\n                              \"sha\",\n                              \"slug\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"owner\": {\n                            \"type\": \"string\"\n                          },\n                          \"prId\": {\n                            \"type\": \"number\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\"\n                          },\n                          \"repoPushedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          },\n                          \"repoUuid\": {\n                            \"type\": \"string\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\"\n                          },\n                          \"silent\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"slug\": {\n                            \"type\": \"string\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"workspaceUuid\": {\n                            \"type\": \"string\"\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"bitbucket\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"name\",\n                          \"owner\",\n                          \"provider\",\n                          \"ref\",\n                          \"repoUuid\",\n                          \"sha\",\n                          \"slug\",\n                          \"type\",\n                          \"workspaceUuid\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"owner\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoUuid\": {\n                                \"type\": \"string\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              },\n                              \"slug\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"owner\",\n                              \"ref\",\n                              \"repoUuid\",\n                              \"sha\",\n                              \"slug\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"name\": {\n                            \"type\": \"string\"\n                          },\n                          \"owner\": {\n                            \"type\": \"string\"\n                          },\n                          \"prId\": {\n                            \"type\": \"number\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\"\n                          },\n                          \"repoUuid\": {\n                            \"type\": \"string\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\"\n                          },\n                          \"slug\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"bitbucket-now-comment\"\n                            ]\n                          },\n                          \"workspaceUuid\": {\n                            \"type\": \"string\"\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"bitbucket\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"name\",\n                          \"owner\",\n                          \"prId\",\n                          \"provider\",\n                          \"ref\",\n                          \"repoUuid\",\n                          \"sha\",\n                          \"slug\",\n                          \"type\",\n                          \"workspaceUuid\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Represents the payload for a Bitbucket comment job This interface defines the structure of data needed when creating a job to handle comments on Bitbucket pull requests or commits.\"\n                      },\n                      {\n                        \"properties\": {\n                          \"prId\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"pr\"\n                            ]\n                          },\n                          \"authorized\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"authorizedBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"jobProjectIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project.\"\n                          },\n                          \"jobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                          },\n                          \"skippedJobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                          },\n                          \"gitHashtagVercel\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR\",\n                                \"#VERCEL_BUILD_PRIO_1\",\n                                \"#VERCEL_BUILD_PRIO_2\",\n                                \"#VERCEL_BUILD_PRIO_3\",\n                                \"#VERCEL_BUILD_PRIO_4\",\n                                \"#VERCEL_BUILD_PRIO_5\",\n                                \"#VERCEL_BUILD_PRIO_6\",\n                                \"#VERCEL_BUILD_PRIO_7\",\n                                \"#VERCEL_BUILD_PRIO_8\",\n                                \"#VERCEL_BUILD_PRIO_9\",\n                                \"#VERCEL_BUILD_PRIO_10\",\n                                \"#VERCEL_SKIP\",\n                                \"#VERCEL_V0_MESSAGE\"\n                              ],\n                              \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                          },\n                          \"connectedProjectCount\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow.\"\n                          },\n                          \"prIdOrZero\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater.\"\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json.\"\n                          },\n                          \"isManualGitDeploy\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment\"\n                          },\n                          \"commitVerification\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"verified\",\n                              \"unverified\",\n                              \"unknown\"\n                            ],\n                            \"description\": \"Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported\"\n                          },\n                          \"nsnbSideEffect\": {\n                            \"properties\": {\n                              \"action\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"auto-approved-member\",\n                                  \"auto-approved-pending-invite\"\n                                ]\n                              },\n                              \"gitUserLogin\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"gitUserLogin\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy.\"\n                          },\n                          \"committerGitUserId\": {\n                            \"type\": \"number\",\n                            \"description\": \"Remote account id of the committer details (github id etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed.\"\n                          },\n                          \"committerGitUserType\": {\n                            \"type\": \"string\",\n                            \"description\": \"Remote account type of the committer details (github type etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed.\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"forceNew\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"deployHook\": {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"id\",\n                              \"name\",\n                              \"ref\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"beforeSha\": {\n                            \"type\": \"string\"\n                          },\n                          \"defaultBranch\": {\n                            \"type\": \"string\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"githubDeploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"org\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"repo\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoId\": {\n                                \"type\": \"number\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"org\",\n                              \"ref\",\n                              \"repo\",\n                              \"repoId\",\n                              \"sha\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Information about the head commit/branch for a GitHub repository\"\n                          },\n                          \"installationId\": {\n                            \"type\": \"number\"\n                          },\n                          \"isPrivate\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"org\": {\n                            \"type\": \"string\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"repo\": {\n                            \"type\": \"string\"\n                          },\n                          \"repoId\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"github\",\n                              \"github-limited\",\n                              \"github-custom-host\"\n                            ]\n                          },\n                          \"customHost\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"installationId\",\n                          \"isPrivate\",\n                          \"org\",\n                          \"prId\",\n                          \"provider\",\n                          \"repo\",\n                          \"repoId\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"repoPushedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          },\n                          \"commitInfo\": {\n                            \"properties\": {\n                              \"total\": {\n                                \"type\": \"number\"\n                              },\n                              \"earliestSha\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"total\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"forced\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"push\"\n                            ]\n                          },\n                          \"authorized\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"authorizedBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"jobProjectIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project.\"\n                          },\n                          \"jobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                          },\n                          \"skippedJobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                          },\n                          \"gitHashtagVercel\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR\",\n                                \"#VERCEL_BUILD_PRIO_1\",\n                                \"#VERCEL_BUILD_PRIO_2\",\n                                \"#VERCEL_BUILD_PRIO_3\",\n                                \"#VERCEL_BUILD_PRIO_4\",\n                                \"#VERCEL_BUILD_PRIO_5\",\n                                \"#VERCEL_BUILD_PRIO_6\",\n                                \"#VERCEL_BUILD_PRIO_7\",\n                                \"#VERCEL_BUILD_PRIO_8\",\n                                \"#VERCEL_BUILD_PRIO_9\",\n                                \"#VERCEL_BUILD_PRIO_10\",\n                                \"#VERCEL_SKIP\",\n                                \"#VERCEL_V0_MESSAGE\"\n                              ],\n                              \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                          },\n                          \"connectedProjectCount\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow.\"\n                          },\n                          \"prIdOrZero\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater.\"\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json.\"\n                          },\n                          \"isManualGitDeploy\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment\"\n                          },\n                          \"commitVerification\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"verified\",\n                              \"unverified\",\n                              \"unknown\"\n                            ],\n                            \"description\": \"Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported\"\n                          },\n                          \"nsnbSideEffect\": {\n                            \"properties\": {\n                              \"action\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"auto-approved-member\",\n                                  \"auto-approved-pending-invite\"\n                                ]\n                              },\n                              \"gitUserLogin\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"gitUserLogin\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy.\"\n                          },\n                          \"committerGitUserId\": {\n                            \"type\": \"number\",\n                            \"description\": \"Remote account id of the committer details (github id etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed.\"\n                          },\n                          \"committerGitUserType\": {\n                            \"type\": \"string\",\n                            \"description\": \"Remote account type of the committer details (github type etc, not vercel). Note that the committer name/email are user input verbatim and not verified. Github does appear to resolve the given email to the username so we can trust that. If the username matches that of the sender, which is verified info, then we can use the account id and account type. See api-incoming, where we determine and set this property Note that even with that, the account may still have been spoofed.\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"forceNew\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"deployHook\": {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"id\",\n                              \"name\",\n                              \"ref\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"beforeSha\": {\n                            \"type\": \"string\"\n                          },\n                          \"defaultBranch\": {\n                            \"type\": \"string\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"githubDeploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"org\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"repo\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoId\": {\n                                \"type\": \"number\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"org\",\n                              \"ref\",\n                              \"repo\",\n                              \"repoId\",\n                              \"sha\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Information about the head commit/branch for a GitHub repository\"\n                          },\n                          \"installationId\": {\n                            \"type\": \"number\"\n                          },\n                          \"isPrivate\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"org\": {\n                            \"type\": \"string\"\n                          },\n                          \"prId\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"repo\": {\n                            \"type\": \"string\"\n                          },\n                          \"repoId\": {\n                            \"type\": \"number\"\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"github\",\n                              \"github-limited\",\n                              \"github-custom-host\"\n                            ]\n                          },\n                          \"customHost\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"installationId\",\n                          \"isPrivate\",\n                          \"org\",\n                          \"prId\",\n                          \"provider\",\n                          \"repo\",\n                          \"repoId\",\n                          \"repoPushedAt\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"org\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"repo\": {\n                                \"type\": \"string\"\n                              },\n                              \"repoId\": {\n                                \"type\": \"number\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"org\",\n                              \"ref\",\n                              \"repo\",\n                              \"repoId\",\n                              \"sha\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Information about the head commit/branch for a GitHub repository\"\n                          },\n                          \"beforeSha\": {\n                            \"type\": \"string\"\n                          },\n                          \"installationId\": {\n                            \"type\": \"number\"\n                          },\n                          \"isPrivate\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"org\": {\n                            \"type\": \"string\"\n                          },\n                          \"prId\": {\n                            \"type\": \"number\"\n                          },\n                          \"projectId\": {\n                            \"nullable\": true\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true\n                          },\n                          \"repo\": {\n                            \"type\": \"string\"\n                          },\n                          \"repoId\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"now-comment\"\n                            ]\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"github\",\n                              \"github-limited\",\n                              \"github-custom-host\"\n                            ]\n                          },\n                          \"customHost\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"installationId\",\n                          \"isPrivate\",\n                          \"org\",\n                          \"prId\",\n                          \"projectId\",\n                          \"provider\",\n                          \"repo\",\n                          \"repoId\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gitlab-push\"\n                            ]\n                          },\n                          \"authorized\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"authorizedBy\": {\n                            \"type\": \"string\"\n                          },\n                          \"jobProjectIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 All project ids associated to this job. Think monorepo. This job will be for one of these project.\"\n                          },\n                          \"jobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since December 2022 Pairs of projects and owner ids to build for this build request.\"\n                          },\n                          \"skippedJobPairs\": {\n                            \"items\": {\n                              \"items\": {\n                                \"oneOf\": [\n                                  {\n                                    \"type\": \"string\"\n                                  },\n                                  {\n                                    \"type\": \"string\"\n                                  }\n                                ]\n                              },\n                              \"maxItems\": 2,\n                              \"minItems\": 2,\n                              \"type\": \"array\",\n                              \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since June 2024 Pairs of projects and owner ids to immediately finish (without building) because we want to create them in a skipped state.\"\n                          },\n                          \"gitHashtagVercel\": {\n                            \"items\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"#VERCEL_SDDJ_BEFORE_BUILD_JOB_QUEUED_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_GET_REPO_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_ERROR\",\n                                \"#VERCEL_SDDJ_AFTER_VERIFY_FORCE_CANCEL\",\n                                \"#VERCEL_SDDJ_FORCE_GIT_FORK_ERROR\",\n                                \"#VERCEL_BUILD_PRIO_1\",\n                                \"#VERCEL_BUILD_PRIO_2\",\n                                \"#VERCEL_BUILD_PRIO_3\",\n                                \"#VERCEL_BUILD_PRIO_4\",\n                                \"#VERCEL_BUILD_PRIO_5\",\n                                \"#VERCEL_BUILD_PRIO_6\",\n                                \"#VERCEL_BUILD_PRIO_7\",\n                                \"#VERCEL_BUILD_PRIO_8\",\n                                \"#VERCEL_BUILD_PRIO_9\",\n                                \"#VERCEL_BUILD_PRIO_10\",\n                                \"#VERCEL_SKIP\",\n                                \"#VERCEL_V0_MESSAGE\"\n                              ],\n                              \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since February 2022 All the hashtag-vercel tags found in the commit message triggering the deploy. For example, #VERCEL_DO_SOMETHING\"\n                          },\n                          \"connectedProjectCount\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 Cached count of how many projects are connected to the repo. Saves a few Cosmos queries down the road in the main flow.\"\n                          },\n                          \"prIdOrZero\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since April 2023 If set then it is a cached result of asking the remote for the PR ID the commit that triggered this Job. Or zero if it was not a PR. This prevents a few git round trips by the git updater.\"\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since June 2023 Determines if comments should be posted to the git host. Replaces `github.silent` in the vercel.json.\"\n                          },\n                          \"isManualGitDeploy\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Since 28 Feb 2024 If set to true, identifies that the git job was created for a manual git deployment\"\n                          },\n                          \"commitVerification\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"verified\",\n                              \"unverified\",\n                              \"unknown\"\n                            ],\n                            \"description\": \"Since 6 Nov 2025 The verification status of the commit. - 'verified' if the commit is verified - 'unverified' if the commit is not verified - 'unknown' if the commit verification status is unknown or not supported\"\n                          },\n                          \"nsnbSideEffect\": {\n                            \"properties\": {\n                              \"action\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"auto-approved-member\",\n                                  \"auto-approved-pending-invite\"\n                                ]\n                              },\n                              \"gitUserLogin\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"action\",\n                              \"gitUserLogin\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"Since March 2026 Records a successful NSNB auto-add result so later GitHub PR comments can deterministically explain why this SHA was allowed to deploy.\"\n                          },\n                          \"commit\": {\n                            \"properties\": {\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"authorAvatar\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"authorEmail\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"authorId\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"authorLogin\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"authorName\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"deployHook\": {\n                            \"properties\": {\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"type\": \"string\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"id\",\n                              \"name\",\n                              \"ref\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"deploymentId\": {\n                            \"type\": \"string\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"forceNew\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"project\": {\n                                \"properties\": {\n                                  \"defaultBranch\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"namespace\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"path\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"project\",\n                              \"ref\",\n                              \"sha\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"GitLab\"\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"prId\": {\n                            \"type\": \"number\"\n                          },\n                          \"project\": {\n                            \"properties\": {\n                              \"defaultBranch\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"namespace\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"path\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"url\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\"\n                          },\n                          \"repoPushedAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\"\n                          },\n                          \"silent\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"target\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"url\": {\n                            \"type\": \"string\"\n                          },\n                          \"withCache\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gitlab\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"project\",\n                          \"provider\",\n                          \"ref\",\n                          \"sha\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"properties\": {\n                          \"createdAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"eventful\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"headInfo\": {\n                            \"properties\": {\n                              \"project\": {\n                                \"properties\": {\n                                  \"defaultBranch\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"id\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"name\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"namespace\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"path\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  },\n                                  \"url\": {\n                                    \"nullable\": true,\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"id\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"ref\": {\n                                \"type\": \"string\"\n                              },\n                              \"sha\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"project\",\n                              \"ref\",\n                              \"sha\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"GitLab\"\n                          },\n                          \"linkedProjectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"prId\": {\n                            \"type\": \"number\"\n                          },\n                          \"project\": {\n                            \"properties\": {\n                              \"defaultBranch\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"id\": {\n                                \"type\": \"string\"\n                              },\n                              \"name\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"namespace\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"path\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              },\n                              \"url\": {\n                                \"nullable\": true,\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"id\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"projectId\": {\n                            \"type\": \"string\"\n                          },\n                          \"customEnvId\": {\n                            \"nullable\": true,\n                            \"type\": \"string\"\n                          },\n                          \"ref\": {\n                            \"type\": \"string\"\n                          },\n                          \"sha\": {\n                            \"type\": \"string\"\n                          },\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gitlab-now-comment\"\n                            ]\n                          },\n                          \"gitComments\": {\n                            \"properties\": {\n                              \"onPullRequest\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"onCommit\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"onCommit\",\n                              \"onPullRequest\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"provider\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"gitlab\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"headInfo\",\n                          \"prId\",\n                          \"project\",\n                          \"provider\",\n                          \"ref\",\n                          \"sha\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"job\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"url\": {\n                    \"type\": \"string\"\n                  },\n                  \"oldTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"newTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"url\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"sha\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitUserPlatform\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitCommitterName\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"gitCommitterName\",\n                  \"gitUserPlatform\",\n                  \"projectName\",\n                  \"sha\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"deployment\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"meta\": {\n                        \"additionalProperties\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"url\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"meta\",\n                      \"name\",\n                      \"url\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"deploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"url\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"deployment\",\n                  \"deploymentId\",\n                  \"url\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"integrationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"configurationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectIds\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"configurationId\",\n                  \"integrationId\",\n                  \"integrationName\",\n                  \"integrationSlug\",\n                  \"ownerId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"value\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"type\": {\n                    \"type\": \"string\"\n                  },\n                  \"mxPriority\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"id\",\n                  \"name\",\n                  \"type\",\n                  \"value\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"value\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"type\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"id\",\n                  \"name\",\n                  \"type\",\n                  \"value\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"price\": {\n                    \"type\": \"number\"\n                  },\n                  \"currency\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"price\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"cdnEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"cdnEnabled\",\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"oldTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"newTeam\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"userId\": {\n                    \"type\": \"string\"\n                  },\n                  \"teamId\": {\n                    \"type\": \"string\"\n                  },\n                  \"ownerName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"ownerName\",\n                  \"teamId\",\n                  \"userId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"domainId\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domainId\",\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previousServiceType\": {\n                    \"type\": \"string\"\n                  },\n                  \"serviceType\": {\n                    \"type\": \"string\"\n                  },\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"nameservers\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"name\",\n                  \"nameservers\",\n                  \"previousServiceType\",\n                  \"serviceType\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"customNameservers\": {\n                    \"nullable\": true,\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"prevCustomNameservers\": {\n                    \"nullable\": true,\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"customNameservers\",\n                  \"domain\",\n                  \"prevCustomNameservers\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"domain\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domain\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"zone\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"zone\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"fromId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"fromName\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"fromId\",\n                  \"fromName\",\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"destinationName\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"destinationId\",\n                  \"destinationName\",\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"destinationId\",\n                  \"destinationName\",\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"renew\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domain\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"price\": {\n                    \"type\": \"number\"\n                  },\n                  \"currency\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"drainUrl\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"drainUrl\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"srcImages\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"srcImages\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"tags\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"target\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"tags\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"edgeConfigId\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigDigest\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"edgeConfigDigest\",\n                  \"edgeConfigId\",\n                  \"edgeConfigSlug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"edgeConfigId\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigSchema\": {\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"edgeConfigId\",\n                  \"edgeConfigSlug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"edgeConfigId\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigDigest\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"edgeConfigId\",\n                  \"edgeConfigSlug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"edgeConfig\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"slug\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"fromAccount\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"user\",\n                          \"team\"\n                        ]\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"type\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"toAccount\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"user\",\n                          \"team\"\n                        ]\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"type\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"edgeConfig\",\n                  \"fromAccount\",\n                  \"toAccount\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"edgeConfigId\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigTokenId\": {\n                    \"type\": \"string\"\n                  },\n                  \"label\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"edgeConfigId\",\n                  \"edgeConfigSlug\",\n                  \"edgeConfigTokenId\",\n                  \"label\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"edgeConfigId\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigTokenIds\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\",\n                    \"description\": \"ids of deleted tokens\"\n                  }\n                },\n                \"required\": [\n                  \"edgeConfigId\",\n                  \"edgeConfigSlug\",\n                  \"edgeConfigTokenIds\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"email\",\n                  \"name\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previousRule\": {\n                    \"properties\": {\n                      \"email\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"email\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"previousRule\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previousRule\": {\n                    \"properties\": {\n                      \"email\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"email\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"nextRule\": {\n                    \"properties\": {\n                      \"email\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"email\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"key\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"target\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      },\n                      {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    ]\n                  },\n                  \"customEnvironmentSlugs\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitBranch\": {\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"edgeConfigTokenId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"created\": {\n                    \"type\": \"string\",\n                    \"format\": \"date-time\",\n                    \"description\": \"The date when the Shared Env Var was created.\",\n                    \"example\": \"2021-02-10T13:11:49.180Z\"\n                  },\n                  \"key\": {\n                    \"type\": \"string\",\n                    \"description\": \"The name of the Shared Env Var.\",\n                    \"example\": \"my-api-key\"\n                  },\n                  \"ownerId\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                    \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                  },\n                  \"id\": {\n                    \"type\": \"string\",\n                    \"description\": \"The unique identifier of the Shared Env Var.\",\n                    \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                  },\n                  \"createdBy\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                    \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                  },\n                  \"deletedBy\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                    \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                  },\n                  \"updatedBy\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                    \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                  },\n                  \"createdAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                    \"example\": 1609492210000\n                  },\n                  \"deletedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                    \"example\": 1609492210000\n                  },\n                  \"updatedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                    \"example\": 1609492210000\n                  },\n                  \"value\": {\n                    \"type\": \"string\",\n                    \"description\": \"The value of the Shared Env Var.\"\n                  },\n                  \"projectId\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\",\n                    \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                    \"example\": [\n                      \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                      \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                    ]\n                  },\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"system\",\n                      \"encrypted\",\n                      \"plain\",\n                      \"sensitive\"\n                    ],\n                    \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                    \"example\": \"encrypted\"\n                  },\n                  \"target\": {\n                    \"items\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"production\",\n                        \"preview\",\n                        \"development\"\n                      ],\n                      \"example\": \"production\",\n                      \"description\": \"environments this env variable targets\"\n                    },\n                    \"type\": \"array\",\n                    \"description\": \"environments this env variable targets\",\n                    \"example\": \"production\"\n                  },\n                  \"applyToAllCustomEnvironments\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ],\n                    \"description\": \"whether or not this env varible applies to custom environments\"\n                  },\n                  \"decrypted\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ],\n                    \"description\": \"whether or not this env variable is decrypted\"\n                  },\n                  \"comment\": {\n                    \"type\": \"string\",\n                    \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                  },\n                  \"lastEditedByDisplayName\": {\n                    \"type\": \"string\",\n                    \"description\": \"The last editor full name or username.\"\n                  },\n                  \"projectNames\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"oldEnvVar\": {\n                    \"properties\": {\n                      \"created\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"The date when the Shared Env Var was created.\",\n                        \"example\": \"2021-02-10T13:11:49.180Z\"\n                      },\n                      \"key\": {\n                        \"type\": \"string\",\n                        \"description\": \"The name of the Shared Env Var.\",\n                        \"example\": \"my-api-key\"\n                      },\n                      \"ownerId\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                        \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the Shared Env Var.\",\n                        \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                      },\n                      \"createdBy\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                        \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                      },\n                      \"deletedBy\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                        \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                      },\n                      \"updatedBy\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                        \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                        \"example\": 1609492210000\n                      },\n                      \"deletedAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                        \"example\": 1609492210000\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                        \"example\": 1609492210000\n                      },\n                      \"value\": {\n                        \"type\": \"string\",\n                        \"description\": \"The value of the Shared Env Var.\"\n                      },\n                      \"projectId\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                        \"example\": [\n                          \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                          \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                        ]\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"system\",\n                          \"encrypted\",\n                          \"plain\",\n                          \"sensitive\"\n                        ],\n                        \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                        \"example\": \"encrypted\"\n                      },\n                      \"target\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\",\n                            \"development\"\n                          ],\n                          \"example\": \"production\",\n                          \"description\": \"environments this env variable targets\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"environments this env variable targets\",\n                        \"example\": \"production\"\n                      },\n                      \"applyToAllCustomEnvironments\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"whether or not this env varible applies to custom environments\"\n                      },\n                      \"decrypted\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"whether or not this env variable is decrypted\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                      },\n                      \"lastEditedByDisplayName\": {\n                        \"type\": \"string\",\n                        \"description\": \"The last editor full name or username.\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"newEnvVar\": {\n                    \"properties\": {\n                      \"created\": {\n                        \"type\": \"string\",\n                        \"format\": \"date-time\",\n                        \"description\": \"The date when the Shared Env Var was created.\",\n                        \"example\": \"2021-02-10T13:11:49.180Z\"\n                      },\n                      \"key\": {\n                        \"type\": \"string\",\n                        \"description\": \"The name of the Shared Env Var.\",\n                        \"example\": \"my-api-key\"\n                      },\n                      \"ownerId\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the owner (team) the Shared Env Var was created for.\",\n                        \"example\": \"team_LLHUOMOoDlqOp8wPE4kFo9pE\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the Shared Env Var.\",\n                        \"example\": \"env_XCG7t7AIHuO2SBA8667zNUiM\"\n                      },\n                      \"createdBy\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the user who created the Shared Env Var.\",\n                        \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                      },\n                      \"deletedBy\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the user who deleted the Shared Env Var.\",\n                        \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                      },\n                      \"updatedBy\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"description\": \"The unique identifier of the user who last updated the Shared Env Var.\",\n                        \"example\": \"2qDDuGFTWXBLDNnqZfWPDp1A\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Timestamp for when the Shared Env Var was created.\",\n                        \"example\": 1609492210000\n                      },\n                      \"deletedAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Timestamp for when the Shared Env Var was (soft) deleted.\",\n                        \"example\": 1609492210000\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Timestamp for when the Shared Env Var was last updated.\",\n                        \"example\": 1609492210000\n                      },\n                      \"value\": {\n                        \"type\": \"string\",\n                        \"description\": \"The value of the Shared Env Var.\"\n                      },\n                      \"projectId\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"The unique identifiers of the projects which the Shared Env Var is linked to.\",\n                        \"example\": [\n                          \"prj_2WjyKQmM8ZnGcJsPWMrHRHrE\",\n                          \"prj_2WjyKQmM8ZnGcJsPWMrasEFg\"\n                        ]\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"system\",\n                          \"encrypted\",\n                          \"plain\",\n                          \"sensitive\"\n                        ],\n                        \"description\": \"The type of this cosmos doc instance, if blank, assume secret.\",\n                        \"example\": \"encrypted\"\n                      },\n                      \"target\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\",\n                            \"development\"\n                          ],\n                          \"example\": \"production\",\n                          \"description\": \"environments this env variable targets\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"environments this env variable targets\",\n                        \"example\": \"production\"\n                      },\n                      \"applyToAllCustomEnvironments\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"whether or not this env varible applies to custom environments\"\n                      },\n                      \"decrypted\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"whether or not this env variable is decrypted\"\n                      },\n                      \"comment\": {\n                        \"type\": \"string\",\n                        \"description\": \"A user provided comment that describes what this Shared Env Var is for.\"\n                      },\n                      \"lastEditedByDisplayName\": {\n                        \"type\": \"string\",\n                        \"description\": \"The last editor full name or username.\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"updateDiff\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"key\": {\n                        \"type\": \"string\"\n                      },\n                      \"newKey\": {\n                        \"type\": \"string\"\n                      },\n                      \"oldTarget\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\",\n                            \"development\"\n                          ]\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"newTarget\": {\n                        \"items\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"production\",\n                            \"preview\",\n                            \"development\"\n                          ]\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"oldType\": {\n                        \"type\": \"string\"\n                      },\n                      \"newType\": {\n                        \"type\": \"string\"\n                      },\n                      \"oldProjects\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"projectName\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"newProjects\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"projectName\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"changedValue\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"changedValue\",\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"scope\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  },\n                  \"expiresAt\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"scope\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"scope\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"scope\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"restore\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"configVersion\": {\n                    \"type\": \"number\"\n                  },\n                  \"configChangeCount\": {\n                    \"type\": \"number\"\n                  },\n                  \"configChanges\": {\n                    \"items\": {\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"configChangeCount\",\n                  \"configChanges\",\n                  \"configVersion\",\n                  \"projectId\",\n                  \"restore\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"rulesetName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ruleGroups\": {\n                    \"additionalProperties\": {\n                      \"properties\": {\n                        \"active\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"action\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"log\",\n                            \"challenge\",\n                            \"deny\"\n                          ]\n                        }\n                      },\n                      \"required\": [\n                        \"active\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"ruleGroups\",\n                  \"rulesetName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"rulesetName\": {\n                    \"type\": \"string\"\n                  },\n                  \"active\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"log\",\n                      \"challenge\",\n                      \"deny\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"active\",\n                  \"projectId\",\n                  \"rulesetName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enable\",\n                      \"disable\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"action\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"fromDeploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"toDeploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"reason\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"fromDeploymentId\",\n                  \"projectId\",\n                  \"projectName\",\n                  \"toDeploymentId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"userId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"configurationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newOwner\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"abuse\": {\n                        \"properties\": {\n                          \"blockHistory\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"blocked\",\n                                    \"hard-blocked\",\n                                    \"soft-blocked\",\n                                    \"unblocked\"\n                                  ]\n                                },\n                                \"createdAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"caseId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\"\n                                },\n                                \"actor\": {\n                                  \"type\": \"string\"\n                                },\n                                \"statusCode\": {\n                                  \"type\": \"number\"\n                                },\n                                \"comment\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ineligibleForAppeal\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"createdAt\",\n                                \"reason\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"Since June 2023\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since June 2023\"\n                          },\n                          \"gitAuthHistory\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Since March 2022. Helps abuse checks by tracking git auths. Format: `\\u003cplatform\\u003e:\\u003cdetail\\u003e:\\u003cvalue\\u003e`\"\n                          },\n                          \"history\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"scanner\": {\n                                  \"type\": \"string\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\"\n                                },\n                                \"by\": {\n                                  \"type\": \"string\"\n                                },\n                                \"byId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"at\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"at\",\n                                \"by\",\n                                \"byId\",\n                                \"reason\",\n                                \"scanner\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"(scanner history). Since November 2021. First element is newest.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"(scanner history). Since November 2021. First element is newest.\"\n                          },\n                          \"gitLineageBlocks\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since September 2023. How often did this owner trigger an actual git lineage deploy block?\"\n                          },\n                          \"gitLineageBlocksDry\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since September 2023. How often did this owner trigger a git lineage deploy block dry run?\"\n                          },\n                          \"scanner\": {\n                            \"type\": \"string\",\n                            \"description\": \"Since November 2021. Guides the abuse scanner in build container.\"\n                          },\n                          \"scheduledUnblockAt\": {\n                            \"type\": \"string\",\n                            \"description\": \"Since December 2025. UTC timestamp string of when an auto-unblock is scheduled. Format: \\\"Wed, 03 Dec 2025 20:32:13 GMT\\\"\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Since November 2021\"\n                          },\n                          \"creationUserAgent\": {\n                            \"type\": \"string\"\n                          },\n                          \"creationIp\": {\n                            \"type\": \"string\"\n                          },\n                          \"removedPhoneNumbers\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"updatedAt\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"acceptanceState\": {\n                        \"type\": \"string\"\n                      },\n                      \"acceptedAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"avatar\": {\n                        \"type\": \"string\"\n                      },\n                      \"billing\": {\n                        \"type\": \"object\",\n                        \"properties\": {\n                          \"plan\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"pro\",\n                              \"enterprise\",\n                              \"hobby\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"plan\"\n                        ]\n                      },\n                      \"blocked\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"blockReason\": {\n                        \"type\": \"string\"\n                      },\n                      \"created\": {\n                        \"type\": \"number\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"credentials\": {\n                        \"items\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"gitlab\",\n                                    \"bitbucket\",\n                                    \"google\",\n                                    \"apple\",\n                                    \"chatgpt\",\n                                    \"github-oauth\",\n                                    \"github-oauth-limited\"\n                                  ]\n                                },\n                                \"id\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"id\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"github-oauth-custom-host\"\n                                  ]\n                                },\n                                \"host\": {\n                                  \"type\": \"string\"\n                                },\n                                \"id\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"host\",\n                                \"id\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"customerId\": {\n                        \"nullable\": true,\n                        \"type\": \"string\"\n                      },\n                      \"orbCustomerId\": {\n                        \"nullable\": true,\n                        \"type\": \"string\"\n                      },\n                      \"dataCache\": {\n                        \"properties\": {\n                          \"excessBillingEnabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"deletedAt\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"deploymentSecret\": {\n                        \"type\": \"string\"\n                      },\n                      \"dismissedTeams\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"dismissedToasts\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"name\": {\n                              \"type\": \"string\"\n                            },\n                            \"dismissals\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"scopeId\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"createdAt\": {\n                                    \"type\": \"number\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"createdAt\",\n                                  \"scopeId\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            }\n                          },\n                          \"required\": [\n                            \"dismissals\",\n                            \"name\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"favoriteProjectsAndSpaces\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"teamId\": {\n                              \"type\": \"string\"\n                            },\n                            \"projectId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"projectId\",\n                            \"teamId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"email\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"importFlowGitNamespace\": {\n                        \"nullable\": true,\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"number\"\n                          }\n                        ]\n                      },\n                      \"importFlowGitNamespaceId\": {\n                        \"nullable\": true,\n                        \"oneOf\": [\n                          {\n                            \"type\": \"string\"\n                          },\n                          {\n                            \"type\": \"number\"\n                          }\n                        ]\n                      },\n                      \"importFlowGitProvider\": {\n                        \"nullable\": true,\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"github\",\n                          \"github-limited\",\n                          \"github-custom-host\",\n                          \"gitlab\",\n                          \"bitbucket\"\n                        ]\n                      },\n                      \"preferredScopesAndGitNamespaces\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"scopeId\": {\n                              \"type\": \"string\"\n                            },\n                            \"gitNamespaceId\": {\n                              \"nullable\": true,\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"gitNamespaceId\",\n                            \"scopeId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"isDomainReseller\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"isZeitPub\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"maxActiveSlots\": {\n                        \"type\": \"number\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"phoneNumber\": {\n                        \"type\": \"string\"\n                      },\n                      \"platformVersion\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"preventAutoBlocking\": {\n                        \"oneOf\": [\n                          {\n                            \"type\": \"number\"\n                          },\n                          {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        ]\n                      },\n                      \"projectDomainsLimit\": {\n                        \"type\": \"number\",\n                        \"description\": \"Overrides our DEFAULT project domains limit per account or per project.\"\n                      },\n                      \"remoteCaching\": {\n                        \"properties\": {\n                          \"enabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          }\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"Represents configuration for remote caching\"\n                      },\n                      \"removedAliasesAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedBillingSubscriptionAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedConfigurationsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedDeploymentsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedDomiansAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedEventsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedProjectsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedSecretsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedSharedEnvVarsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"removedEdgeConfigsAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"resourceConfig\": {\n                        \"properties\": {\n                          \"nodeType\": {\n                            \"type\": \"string\"\n                          },\n                          \"concurrentBuilds\": {\n                            \"type\": \"number\"\n                          },\n                          \"elasticConcurrencyEnabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"buildEntitlements\": {\n                            \"properties\": {\n                              \"enhancedBuilds\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"buildQueue\": {\n                            \"properties\": {\n                              \"configuration\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"SKIP_NAMESPACE_QUEUE\",\n                                  \"WAIT_FOR_NAMESPACE_QUEUE\"\n                                ]\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"awsAccountType\": {\n                            \"type\": \"string\"\n                          },\n                          \"awsAccountIds\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"cfZoneName\": {\n                            \"type\": \"string\"\n                          },\n                          \"imageOptimizationType\": {\n                            \"type\": \"string\"\n                          },\n                          \"edgeConfigs\": {\n                            \"type\": \"number\"\n                          },\n                          \"edgeConfigSize\": {\n                            \"type\": \"number\"\n                          },\n                          \"edgeFunctionMaxSizeBytes\": {\n                            \"type\": \"number\"\n                          },\n                          \"edgeFunctionExecutionTimeoutMs\": {\n                            \"type\": \"number\"\n                          },\n                          \"serverlessFunctionMaxMemorySize\": {\n                            \"type\": \"number\"\n                          },\n                          \"kvDatabases\": {\n                            \"type\": \"number\"\n                          },\n                          \"postgresDatabases\": {\n                            \"type\": \"number\"\n                          },\n                          \"blobStores\": {\n                            \"type\": \"number\"\n                          },\n                          \"integrationStores\": {\n                            \"type\": \"number\"\n                          },\n                          \"cronJobsPerProject\": {\n                            \"type\": \"number\"\n                          },\n                          \"microfrontendGroupsPerTeam\": {\n                            \"type\": \"number\"\n                          },\n                          \"microfrontendProjectsPerGroup\": {\n                            \"type\": \"number\"\n                          },\n                          \"flagsExplorerOverridesThreshold\": {\n                            \"type\": \"number\"\n                          },\n                          \"flagsExplorerUnlimitedOverrides\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"customEnvironmentsPerProject\": {\n                            \"type\": \"number\"\n                          },\n                          \"buildMachine\": {\n                            \"properties\": {\n                              \"default\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"enhanced\",\n                                  \"turbo\",\n                                  \"standard\",\n                                  \"elastic\"\n                                ]\n                              },\n                              \"purchaseType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"enhanced\",\n                                  \"turbo\",\n                                  \"standard\"\n                                ]\n                              },\n                              \"defaultPurchaseType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"enhanced\",\n                                  \"turbo\",\n                                  \"standard\"\n                                ]\n                              },\n                              \"cores\": {\n                                \"type\": \"number\"\n                              },\n                              \"memory\": {\n                                \"type\": \"number\"\n                              },\n                              \"machineSelectionType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"fixed\",\n                                  \"elastic\"\n                                ]\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"security\": {\n                            \"properties\": {\n                              \"customRules\": {\n                                \"type\": \"number\"\n                              },\n                              \"ipBlocks\": {\n                                \"type\": \"number\"\n                              },\n                              \"ipBypass\": {\n                                \"type\": \"number\"\n                              },\n                              \"rateLimit\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"bulkRedirectsFreeLimitOverride\": {\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"resourceLimits\": {\n                        \"additionalProperties\": {\n                          \"properties\": {\n                            \"max\": {\n                              \"type\": \"number\"\n                            },\n                            \"duration\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"duration\",\n                            \"max\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"User | Team resource limits\"\n                      },\n                      \"activeDashboardViews\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"scopeId\": {\n                              \"type\": \"string\"\n                            },\n                            \"viewPreference\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"list\",\n                                \"cards\"\n                              ]\n                            },\n                            \"favoritesViewPreference\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"open\",\n                                \"closed\"\n                              ]\n                            },\n                            \"recentsViewPreference\": {\n                              \"nullable\": true,\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"open\",\n                                \"closed\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"scopeId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"secondaryEmails\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"email\": {\n                              \"type\": \"string\"\n                            },\n                            \"verified\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"email\",\n                            \"verified\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"emailDomains\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"emailNotifications\": {\n                        \"properties\": {\n                          \"rules\": {\n                            \"additionalProperties\": {\n                              \"properties\": {\n                                \"email\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"email\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"siftScore\": {\n                        \"type\": \"number\"\n                      },\n                      \"siftScores\": {\n                        \"additionalProperties\": {\n                          \"properties\": {\n                            \"score\": {\n                              \"type\": \"number\"\n                            },\n                            \"reasons\": {\n                              \"items\": {\n                                \"properties\": {\n                                  \"name\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"value\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"name\",\n                                  \"value\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"type\": \"array\"\n                            }\n                          },\n                          \"required\": [\n                            \"reasons\",\n                            \"score\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"siftRoute\": {\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"string\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"name\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"sfdcId\": {\n                        \"type\": \"string\"\n                      },\n                      \"softBlock\": {\n                        \"nullable\": true,\n                        \"properties\": {\n                          \"blockedAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"reason\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"SUBSCRIPTION_CANCELED\",\n                              \"SUBSCRIPTION_EXPIRED\",\n                              \"UNPAID_INVOICE\",\n                              \"ENTERPRISE_TRIAL_ENDED\",\n                              \"FAIR_USE_LIMITS_EXCEEDED\",\n                              \"BLOCKED_FOR_PLATFORM_ABUSE\"\n                            ]\n                          },\n                          \"blockedDueToOverageType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"analyticsUsage\",\n                              \"artifacts\",\n                              \"bandwidth\",\n                              \"blobTotalAdvancedRequests\",\n                              \"blobTotalAvgSizeInBytes\",\n                              \"blobTotalGetResponseObjectSizeInBytes\",\n                              \"blobTotalSimpleRequests\",\n                              \"connectDataTransfer\",\n                              \"dataCacheRead\",\n                              \"dataCacheWrite\",\n                              \"edgeConfigRead\",\n                              \"edgeConfigWrite\",\n                              \"edgeFunctionExecutionUnits\",\n                              \"edgeMiddlewareInvocations\",\n                              \"edgeRequestAdditionalCpuDuration\",\n                              \"edgeRequest\",\n                              \"elasticConcurrencyBuildSlots\",\n                              \"fastDataTransfer\",\n                              \"fastOriginTransfer\",\n                              \"fluidCpuDuration\",\n                              \"fluidDuration\",\n                              \"functionDuration\",\n                              \"functionInvocation\",\n                              \"imageOptimizationCacheRead\",\n                              \"imageOptimizationCacheWrite\",\n                              \"imageOptimizationTransformation\",\n                              \"logDrainsVolume\",\n                              \"monitoringMetric\",\n                              \"blobDataTransfer\",\n                              \"observabilityEvent\",\n                              \"onDemandConcurrencyMinutes\",\n                              \"runtimeCacheRead\",\n                              \"runtimeCacheWrite\",\n                              \"serverlessFunctionExecution\",\n                              \"sourceImages\",\n                              \"wafOwaspExcessBytes\",\n                              \"wafOwaspRequests\",\n                              \"wafRateLimitRequest\",\n                              \"webAnalyticsEvent\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"blockedAt\",\n                          \"reason\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"stagingPrefix\": {\n                        \"type\": \"string\"\n                      },\n                      \"sysToken\": {\n                        \"type\": \"string\"\n                      },\n                      \"teams\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"teamId\": {\n                              \"type\": \"string\"\n                            },\n                            \"created\": {\n                              \"type\": \"number\"\n                            },\n                            \"role\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"OWNER\",\n                                \"MEMBER\",\n                                \"DEVELOPER\",\n                                \"SECURITY\",\n                                \"BILLING\",\n                                \"VIEWER\",\n                                \"VIEWER_FOR_PLUS\",\n                                \"CONTRIBUTOR\"\n                              ]\n                            },\n                            \"confirmed\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                true\n                              ]\n                            },\n                            \"confirmedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"accessRequestedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"teamRoles\": {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"OWNER\",\n                                  \"MEMBER\",\n                                  \"DEVELOPER\",\n                                  \"SECURITY\",\n                                  \"BILLING\",\n                                  \"VIEWER\",\n                                  \"VIEWER_FOR_PLUS\",\n                                  \"CONTRIBUTOR\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"teamPermissions\": {\n                              \"items\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"IntegrationManager\",\n                                  \"CreateProject\",\n                                  \"FullProductionDeployment\",\n                                  \"UsageViewer\",\n                                  \"EnvVariableManager\",\n                                  \"EnvironmentManager\",\n                                  \"V0Builder\",\n                                  \"V0Chatter\",\n                                  \"V0Viewer\"\n                                ]\n                              },\n                              \"type\": \"array\"\n                            },\n                            \"joinedFrom\": {\n                              \"properties\": {\n                                \"origin\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"link\",\n                                    \"import\",\n                                    \"teams\",\n                                    \"saml\",\n                                    \"github\",\n                                    \"gitlab\",\n                                    \"bitbucket\",\n                                    \"mail\",\n                                    \"dsync\",\n                                    \"feedback\",\n                                    \"organization-teams\",\n                                    \"nsnb-auto-approve\",\n                                    \"nsnb-hobby-upgrade\",\n                                    \"nsnb-request-access\",\n                                    \"nsnb-viewer-upgrade\",\n                                    \"nsnb-invite\",\n                                    \"nsnb-redeploy\"\n                                  ]\n                                },\n                                \"commitId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"repoPath\": {\n                                  \"type\": \"string\"\n                                },\n                                \"gitUserId\": {\n                                  \"oneOf\": [\n                                    {\n                                      \"type\": \"string\"\n                                    },\n                                    {\n                                      \"type\": \"number\"\n                                    }\n                                  ]\n                                },\n                                \"gitUserLogin\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ssoUserId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"ssoConnectedAt\": {\n                                  \"type\": \"number\"\n                                },\n                                \"idpUserId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dsyncUserId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"dsyncConnectedAt\": {\n                                  \"type\": \"number\"\n                                }\n                              },\n                              \"required\": [\n                                \"origin\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          },\n                          \"required\": [\n                            \"confirmed\",\n                            \"confirmedAt\",\n                            \"created\",\n                            \"createdAt\",\n                            \"role\",\n                            \"teamId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"A helper that allows to describe a relationship attribute. It receives the shape of a relationship plus the foreignKey name to make it mandatory in the resulting type.\"\n                      },\n                      \"trialTeamIds\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"Introduced 2022-04-12 An array of teamIds (for trial teams created after 2022-04-01), created by the user in question. Used in determining whether the team has a trial available in utils/api-teams/user-has-trial-available.ts.\"\n                      },\n                      \"maxTrials\": {\n                        \"type\": \"number\",\n                        \"description\": \"Introduced 2022-04-19 Number of maximum trials to allocate to a user. When undefined, defaults to MAX_TRIALS in utils/api-teams/user-has-trial-available.ts. This is set to trialTeamIds + 1 by services/api-backoffice/src/handlers/add-additional-trial.ts.\"\n                      },\n                      \"trialTeamId\": {\n                        \"type\": \"string\",\n                        \"description\": \"Deprecated on 2022-04-12 in favor of trialTeamIds and using utils/api-teams/user-has-trial-available.ts.\"\n                      },\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"user\"\n                        ]\n                      },\n                      \"usageAlerts\": {\n                        \"nullable\": true,\n                        \"properties\": {\n                          \"warningAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          },\n                          \"blockingAt\": {\n                            \"nullable\": true,\n                            \"type\": \"number\"\n                          }\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"Contains the timestamps when a user was notified about their usage\"\n                      },\n                      \"overageUsageAlerts\": {\n                        \"properties\": {\n                          \"analyticsUsage\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"artifacts\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"bandwidth\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"blobTotalAdvancedRequests\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"blobTotalAvgSizeInBytes\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"blobTotalGetResponseObjectSizeInBytes\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"blobTotalSimpleRequests\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"connectDataTransfer\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"dataCacheRead\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"dataCacheWrite\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"edgeConfigRead\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"edgeConfigWrite\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"edgeFunctionExecutionUnits\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"edgeMiddlewareInvocations\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"edgeRequestAdditionalCpuDuration\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"edgeRequest\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"elasticConcurrencyBuildSlots\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"fastDataTransfer\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"fastOriginTransfer\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"fluidCpuDuration\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"fluidDuration\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"functionDuration\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"functionInvocation\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"imageOptimizationCacheRead\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"imageOptimizationCacheWrite\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"imageOptimizationTransformation\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"logDrainsVolume\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"monitoringMetric\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"blobDataTransfer\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"observabilityEvent\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"onDemandConcurrencyMinutes\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"runtimeCacheRead\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"runtimeCacheWrite\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"serverlessFunctionExecution\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"sourceImages\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"wafOwaspExcessBytes\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"wafOwaspRequests\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"wafRateLimitRequest\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"webAnalyticsEvent\": {\n                            \"properties\": {\n                              \"currentThreshold\": {\n                                \"type\": \"number\"\n                              },\n                              \"warningAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              },\n                              \"blockedAt\": {\n                                \"nullable\": true,\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"currentThreshold\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"type\": \"object\"\n                      },\n                      \"overageMetadata\": {\n                        \"properties\": {\n                          \"firstTimeOnDemandNotificationSentAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Tracks if the first time on-demand overage email has been sent.\"\n                          },\n                          \"dailyOverageSummaryEmailSentAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Tracks the last time we sent a daily summary email.\"\n                          },\n                          \"weeklyOverageSummaryEmailSentAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Tracks the last time we sent a weekly summary email.\"\n                          },\n                          \"overageSummaryExpiresAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Tracks when the overage summary email will stop auto-sending. We currently lock the user into email for a month after the last on-demand usage.\"\n                          },\n                          \"increasedOnDemandEmailSentAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Tracks the last time we sent a increased on-demand email.\"\n                          },\n                          \"increasedOnDemandEmailAttemptedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Tracks the last time we attempted to send an increased on-demand email. This check is to limit the number of attempts per day.\"\n                          }\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"Contains the timestamps for usage summary emails.\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"enablePreviewFeedback\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"default\",\n                          \"on\",\n                          \"off\",\n                          \"on-force\",\n                          \"off-force\",\n                          \"default-force\"\n                        ],\n                        \"description\": \"Whether the Vercel Toolbar is enabled for preview deployments.\"\n                      },\n                      \"featureBlocks\": {\n                        \"properties\": {\n                          \"webAnalytics\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              },\n                              \"graceEmailSentAt\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"monitoring\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              },\n                              \"blockType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"soft\",\n                                  \"hard\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"blockType\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\",\n                            \"description\": \"A soft block indicates a temporary pause in data collection (ex limit exceeded for the current cycle) A hard block indicates a stoppage in data collection that requires manual intervention (ex upgrading a pro trial)\"\n                          },\n                          \"observabilityPlus\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              },\n                              \"blockType\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"soft\",\n                                  \"hard\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"blockType\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"dataCache\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"imageOptimizationTransformation\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"sourceImages\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"blob\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedFrom\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedUntil\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"limits_exceeded\"\n                                    ]\n                                  },\n                                  \"overageReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"analyticsUsage\",\n                                      \"artifacts\",\n                                      \"bandwidth\",\n                                      \"blobTotalAdvancedRequests\",\n                                      \"blobTotalAvgSizeInBytes\",\n                                      \"blobTotalGetResponseObjectSizeInBytes\",\n                                      \"blobTotalSimpleRequests\",\n                                      \"connectDataTransfer\",\n                                      \"dataCacheRead\",\n                                      \"dataCacheWrite\",\n                                      \"edgeConfigRead\",\n                                      \"edgeConfigWrite\",\n                                      \"edgeFunctionExecutionUnits\",\n                                      \"edgeMiddlewareInvocations\",\n                                      \"edgeRequestAdditionalCpuDuration\",\n                                      \"edgeRequest\",\n                                      \"elasticConcurrencyBuildSlots\",\n                                      \"fastDataTransfer\",\n                                      \"fastOriginTransfer\",\n                                      \"fluidCpuDuration\",\n                                      \"fluidDuration\",\n                                      \"functionDuration\",\n                                      \"functionInvocation\",\n                                      \"imageOptimizationCacheRead\",\n                                      \"imageOptimizationCacheWrite\",\n                                      \"imageOptimizationTransformation\",\n                                      \"logDrainsVolume\",\n                                      \"monitoringMetric\",\n                                      \"blobDataTransfer\",\n                                      \"observabilityEvent\",\n                                      \"onDemandConcurrencyMinutes\",\n                                      \"runtimeCacheRead\",\n                                      \"runtimeCacheWrite\",\n                                      \"serverlessFunctionExecution\",\n                                      \"sourceImages\",\n                                      \"wafOwaspExcessBytes\",\n                                      \"wafOwaspRequests\",\n                                      \"wafRateLimitRequest\",\n                                      \"webAnalyticsEvent\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"blockReason\",\n                                  \"overageReason\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedFrom\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedUntil\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"admin_override\",\n                                      \"hard_blocked\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"blockReason\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"postgres\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedFrom\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedUntil\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"limits_exceeded\"\n                                    ]\n                                  },\n                                  \"overageReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"analyticsUsage\",\n                                      \"artifacts\",\n                                      \"bandwidth\",\n                                      \"blobTotalAdvancedRequests\",\n                                      \"blobTotalAvgSizeInBytes\",\n                                      \"blobTotalGetResponseObjectSizeInBytes\",\n                                      \"blobTotalSimpleRequests\",\n                                      \"connectDataTransfer\",\n                                      \"dataCacheRead\",\n                                      \"dataCacheWrite\",\n                                      \"edgeConfigRead\",\n                                      \"edgeConfigWrite\",\n                                      \"edgeFunctionExecutionUnits\",\n                                      \"edgeMiddlewareInvocations\",\n                                      \"edgeRequestAdditionalCpuDuration\",\n                                      \"edgeRequest\",\n                                      \"elasticConcurrencyBuildSlots\",\n                                      \"fastDataTransfer\",\n                                      \"fastOriginTransfer\",\n                                      \"fluidCpuDuration\",\n                                      \"fluidDuration\",\n                                      \"functionDuration\",\n                                      \"functionInvocation\",\n                                      \"imageOptimizationCacheRead\",\n                                      \"imageOptimizationCacheWrite\",\n                                      \"imageOptimizationTransformation\",\n                                      \"logDrainsVolume\",\n                                      \"monitoringMetric\",\n                                      \"blobDataTransfer\",\n                                      \"observabilityEvent\",\n                                      \"onDemandConcurrencyMinutes\",\n                                      \"runtimeCacheRead\",\n                                      \"runtimeCacheWrite\",\n                                      \"serverlessFunctionExecution\",\n                                      \"sourceImages\",\n                                      \"wafOwaspExcessBytes\",\n                                      \"wafOwaspRequests\",\n                                      \"wafRateLimitRequest\",\n                                      \"webAnalyticsEvent\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"blockReason\",\n                                  \"overageReason\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedFrom\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedUntil\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"admin_override\",\n                                      \"hard_blocked\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"blockReason\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"redis\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedFrom\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedUntil\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"limits_exceeded\"\n                                    ]\n                                  },\n                                  \"overageReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"analyticsUsage\",\n                                      \"artifacts\",\n                                      \"bandwidth\",\n                                      \"blobTotalAdvancedRequests\",\n                                      \"blobTotalAvgSizeInBytes\",\n                                      \"blobTotalGetResponseObjectSizeInBytes\",\n                                      \"blobTotalSimpleRequests\",\n                                      \"connectDataTransfer\",\n                                      \"dataCacheRead\",\n                                      \"dataCacheWrite\",\n                                      \"edgeConfigRead\",\n                                      \"edgeConfigWrite\",\n                                      \"edgeFunctionExecutionUnits\",\n                                      \"edgeMiddlewareInvocations\",\n                                      \"edgeRequestAdditionalCpuDuration\",\n                                      \"edgeRequest\",\n                                      \"elasticConcurrencyBuildSlots\",\n                                      \"fastDataTransfer\",\n                                      \"fastOriginTransfer\",\n                                      \"fluidCpuDuration\",\n                                      \"fluidDuration\",\n                                      \"functionDuration\",\n                                      \"functionInvocation\",\n                                      \"imageOptimizationCacheRead\",\n                                      \"imageOptimizationCacheWrite\",\n                                      \"imageOptimizationTransformation\",\n                                      \"logDrainsVolume\",\n                                      \"monitoringMetric\",\n                                      \"blobDataTransfer\",\n                                      \"observabilityEvent\",\n                                      \"onDemandConcurrencyMinutes\",\n                                      \"runtimeCacheRead\",\n                                      \"runtimeCacheWrite\",\n                                      \"serverlessFunctionExecution\",\n                                      \"sourceImages\",\n                                      \"wafOwaspExcessBytes\",\n                                      \"wafOwaspRequests\",\n                                      \"wafRateLimitRequest\",\n                                      \"webAnalyticsEvent\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"blockReason\",\n                                  \"overageReason\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedFrom\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockedUntil\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"blockReason\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"admin_override\",\n                                      \"hard_blocked\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"blockReason\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"microfrontendsRequest\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"workflowStorage\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"workflowStep\": {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedFrom\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockedUntil\": {\n                                \"type\": \"number\"\n                              },\n                              \"blockReason\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"admin_override\",\n                                  \"limits_exceeded\",\n                                  \"hard_blocked\"\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"blockReason\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"type\": \"object\",\n                        \"description\": \"Information about which features are blocked for a user. Blocks can be either soft (the user can still access the feature, but with a warning, e.g. prompting an upgrade) or hard (the user cannot access the feature at all).\"\n                      },\n                      \"defaultTeamId\": {\n                        \"type\": \"string\"\n                      },\n                      \"version\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"northstar\"\n                        ]\n                      },\n                      \"northstarMigration\": {\n                        \"properties\": {\n                          \"teamId\": {\n                            \"type\": \"string\",\n                            \"description\": \"The ID of the team we created for this user.\"\n                          },\n                          \"projects\": {\n                            \"type\": \"number\",\n                            \"description\": \"The number of projects migrated for this user.\"\n                          },\n                          \"stores\": {\n                            \"type\": \"number\",\n                            \"description\": \"The number of stores migrated for this user.\"\n                          },\n                          \"integrationConfigurations\": {\n                            \"type\": \"number\",\n                            \"description\": \"The number of integration configurations migrated for this user.\"\n                          },\n                          \"integrationClients\": {\n                            \"type\": \"number\",\n                            \"description\": \"The number of integration clients migrated for this user.\"\n                          },\n                          \"startTime\": {\n                            \"type\": \"number\",\n                            \"description\": \"The migration start time timestamp for this user.\"\n                          },\n                          \"endTime\": {\n                            \"type\": \"number\",\n                            \"description\": \"The migration end time timestamp for this user.\"\n                          }\n                        },\n                        \"required\": [\n                          \"endTime\",\n                          \"integrationClients\",\n                          \"integrationConfigurations\",\n                          \"projects\",\n                          \"startTime\",\n                          \"stores\",\n                          \"teamId\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"An archive of information about the Northstar migration, derived from the old (deprecated) property, `northstarMigrationEvents`.\"\n                      },\n                      \"opportunityId\": {\n                        \"type\": \"string\",\n                        \"description\": \"The salesforce opportunity ID that this user is linked to. This is used to automatically associate a team of the user's choosing with the opportunity.\"\n                      },\n                      \"mfaConfiguration\": {\n                        \"properties\": {\n                          \"enabled\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ]\n                          },\n                          \"enabledAt\": {\n                            \"type\": \"number\"\n                          },\n                          \"recoveryCodes\": {\n                            \"items\": {\n                              \"type\": \"string\"\n                            },\n                            \"type\": \"array\"\n                          },\n                          \"totp\": {\n                            \"properties\": {\n                              \"secret\": {\n                                \"type\": \"string\"\n                              },\n                              \"createdAt\": {\n                                \"type\": \"number\"\n                              }\n                            },\n                            \"required\": [\n                              \"createdAt\",\n                              \"secret\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          \"history\": {\n                            \"items\": {\n                              \"properties\": {\n                                \"action\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"enabled\",\n                                    \"disabled\"\n                                  ],\n                                  \"description\": \"The action that occurred\"\n                                },\n                                \"timestamp\": {\n                                  \"nullable\": true,\n                                  \"type\": \"number\",\n                                  \"description\": \"Unix timestamp (milliseconds) when the change occurred. May be null for events that occurred before history tracking was implemented.\"\n                                },\n                                \"method\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"totp\",\n                                    \"passkey\",\n                                    \"unknown\",\n                                    \"user_disabled\",\n                                    \"admin_removal\"\n                                  ],\n                                  \"description\": \"Method used for the state change - 'totp': User set up TOTP authenticator - 'passkey': User registered a passkey - 'user_disabled': User disabled their own MFA - 'admin_removal': Admin removed MFA via backoffice - 'unknown': Method unknown (for pre-tracking events)\"\n                                },\n                                \"actorId\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"ID of the actor who made the change - For user actions: the user's own ID - For admin actions: the admin's user ID\"\n                                },\n                                \"actorType\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"user\",\n                                    \"admin\"\n                                  ],\n                                  \"description\": \"Type of actor\"\n                                },\n                                \"reason\": {\n                                  \"type\": \"string\",\n                                  \"description\": \"Optional: Additional context or reason e.g., \\\"Account recovery request - ticket #12345\\\"\"\n                                }\n                              },\n                              \"required\": [\n                                \"action\",\n                                \"actorId\",\n                                \"actorType\",\n                                \"method\",\n                                \"timestamp\"\n                              ],\n                              \"type\": \"object\",\n                              \"description\": \"History of MFA state changes (enabled/disabled events). Most recent events first.\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"History of MFA state changes (enabled/disabled events). Most recent events first.\"\n                          }\n                        },\n                        \"required\": [\n                          \"enabled\",\n                          \"recoveryCodes\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"MFA configuration. When enabled, the user will be required to provide a second factor of authentication when logging in.\"\n                      },\n                      \"isEnterpriseManaged\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Indicates that the underlying user entity is a managed user for the enterprise it's associated with The intention is that this field is only set to true for users that are provisioned by the enterprise which means that the domain associated with the user's email is the same domain associated with the team Allowing us to query information about the user's team at login time through the domain verification service\"\n                      }\n                    },\n                    \"required\": [\n                      \"billing\",\n                      \"blocked\",\n                      \"createdAt\",\n                      \"deploymentSecret\",\n                      \"email\",\n                      \"id\",\n                      \"platformVersion\",\n                      \"stagingPrefix\",\n                      \"sysToken\",\n                      \"type\",\n                      \"updatedAt\",\n                      \"username\",\n                      \"version\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"configurationId\",\n                  \"integrationId\",\n                  \"integrationSlug\",\n                  \"newOwner\",\n                  \"userId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"integrationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"configurationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectIds\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"confirmedScopes\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"configurationId\",\n                  \"confirmedScopes\",\n                  \"integrationId\",\n                  \"integrationName\",\n                  \"integrationSlug\",\n                  \"ownerId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"configurations\": {\n                    \"items\": {\n                      \"properties\": {\n                        \"integrationId\": {\n                          \"type\": \"string\"\n                        },\n                        \"configurationId\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationSlug\": {\n                          \"type\": \"string\"\n                        },\n                        \"integrationName\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"configurationId\",\n                        \"integrationId\",\n                        \"integrationSlug\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"configurations\",\n                  \"ownerId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"integrationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"configurationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"billingPlanId\": {\n                    \"type\": \"string\"\n                  },\n                  \"billingPlanName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"billingPlanId\",\n                  \"configurationId\",\n                  \"integrationId\",\n                  \"integrationName\",\n                  \"integrationSlug\",\n                  \"ownerId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"integrationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"configurationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectIds\": {\n                    \"oneOf\": [\n                      {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"all\"\n                        ]\n                      }\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"configurationId\",\n                  \"integrationId\",\n                  \"integrationName\",\n                  \"integrationSlug\",\n                  \"ownerId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"integrationId\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"integrationId\",\n                  \"integrationName\",\n                  \"integrationSlug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"logDrainUrl\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"logDrainUrl\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"logDrainUrl\": {\n                    \"type\": \"string\"\n                  },\n                  \"integrationName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"logDrainUrl\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"userAgent\": {\n                    \"type\": \"string\"\n                  },\n                  \"geolocation\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"city\": {\n                        \"properties\": {\n                          \"names\": {\n                            \"properties\": {\n                              \"en\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"en\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"names\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"country\": {\n                        \"properties\": {\n                          \"names\": {\n                            \"properties\": {\n                              \"en\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"en\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"names\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"most_specific_subdivision\": {\n                        \"properties\": {\n                          \"names\": {\n                            \"properties\": {\n                              \"en\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"en\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"names\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"regionName\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"country\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"env\": {\n                    \"type\": \"string\"\n                  },\n                  \"os\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoType\": {\n                    \"type\": \"string\"\n                  },\n                  \"factors\": {\n                    \"oneOf\": [\n                      {\n                        \"items\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"origin\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"email\",\n                                    \"saml\",\n                                    \"github\",\n                                    \"gitlab\",\n                                    \"bitbucket\",\n                                    \"google\",\n                                    \"apple\",\n                                    \"chatgpt\",\n                                    \"webauthn\",\n                                    \"otp\",\n                                    \"invite\",\n                                    \"otp-link\",\n                                    \"magic-link\"\n                                  ]\n                                },\n                                \"username\": {\n                                  \"type\": \"string\"\n                                },\n                                \"teamId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"legacy\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"ssoType\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"origin\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"maxItems\": 1,\n                        \"minItems\": 1,\n                        \"type\": \"array\"\n                      },\n                      {\n                        \"items\": {\n                          \"oneOf\": [\n                            {\n                              \"properties\": {\n                                \"origin\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"email\",\n                                    \"saml\",\n                                    \"github\",\n                                    \"gitlab\",\n                                    \"bitbucket\",\n                                    \"google\",\n                                    \"apple\",\n                                    \"chatgpt\",\n                                    \"webauthn\",\n                                    \"otp\",\n                                    \"invite\",\n                                    \"otp-link\",\n                                    \"magic-link\"\n                                  ]\n                                },\n                                \"username\": {\n                                  \"type\": \"string\"\n                                },\n                                \"teamId\": {\n                                  \"type\": \"string\"\n                                },\n                                \"legacy\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                },\n                                \"ssoType\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"origin\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            {\n                              \"properties\": {\n                                \"origin\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"totp\",\n                                    \"webauthn\",\n                                    \"recovery-code\"\n                                  ]\n                                }\n                              },\n                              \"required\": [\n                                \"origin\"\n                              ],\n                              \"type\": \"object\"\n                            }\n                          ]\n                        },\n                        \"maxItems\": 2,\n                        \"minItems\": 2,\n                        \"type\": \"array\"\n                      }\n                    ]\n                  },\n                  \"viaOTP\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaGithub\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaGitlab\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaBitbucket\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaGoogle\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaApple\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaSamlSso\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaPasskey\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"toDeploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"toDeploymentId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"slug\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"name\",\n                  \"slug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"slug\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"fallbackEnvironment\": {\n                    \"type\": \"string\"\n                  },\n                  \"prev\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      },\n                      \"fallbackEnvironment\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"fallbackEnvironment\",\n                      \"name\",\n                      \"slug\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"prev\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"group\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\",\n                      \"slug\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"group\",\n                  \"project\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"microfrontends\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"isDefaultApp\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ]\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\",\n                                \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                              },\n                              \"groupIds\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"minItems\": 1,\n                                \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ],\n                                \"description\": \"Whether microfrontends are enabled for this project.\"\n                              },\n                              \"defaultRoute\": {\n                                \"type\": \"string\",\n                                \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                              },\n                              \"freeProjectForLegacyLimits\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                              }\n                            },\n                            \"required\": [\n                              \"enabled\",\n                              \"groupIds\",\n                              \"isDefaultApp\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"isDefaultApp\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false\n                                ]\n                              },\n                              \"routeObservabilityToThisProject\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether observability data should be routed to this microfrontend project or a root project.\"\n                              },\n                              \"doNotRouteWithMicrofrontendsRouting\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.\"\n                              },\n                              \"updatedAt\": {\n                                \"type\": \"number\",\n                                \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                              },\n                              \"groupIds\": {\n                                \"type\": \"array\",\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"minItems\": 1,\n                                \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  true\n                                ],\n                                \"description\": \"Whether microfrontends are enabled for this project.\"\n                              },\n                              \"defaultRoute\": {\n                                \"type\": \"string\",\n                                \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                              },\n                              \"freeProjectForLegacyLimits\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ],\n                                \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                              }\n                            },\n                            \"required\": [\n                              \"enabled\",\n                              \"groupIds\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"updatedAt\": {\n                                \"type\": \"number\"\n                              },\n                              \"groupIds\": {\n                                \"type\": \"array\",\n                                \"items\": {},\n                                \"minItems\": 0,\n                                \"maxItems\": 0\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false\n                                ]\n                              },\n                              \"freeProjectForLegacyLimits\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"required\": [\n                              \"enabled\",\n                              \"groupIds\",\n                              \"updatedAt\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"prev\": {\n                    \"properties\": {\n                      \"project\": {\n                        \"properties\": {\n                          \"microfrontends\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"isDefaultApp\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ]\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                                  },\n                                  \"groupIds\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"minItems\": 1,\n                                    \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                                  },\n                                  \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ],\n                                    \"description\": \"Whether microfrontends are enabled for this project.\"\n                                  },\n                                  \"defaultRoute\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                                  },\n                                  \"freeProjectForLegacyLimits\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"enabled\",\n                                  \"groupIds\",\n                                  \"isDefaultApp\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"isDefaultApp\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false\n                                    ]\n                                  },\n                                  \"routeObservabilityToThisProject\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether observability data should be routed to this microfrontend project or a root project.\"\n                                  },\n                                  \"doNotRouteWithMicrofrontendsRouting\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether to add microfrontends routing to aliases. This means domains in this project will route as a microfrontend.\"\n                                  },\n                                  \"updatedAt\": {\n                                    \"type\": \"number\",\n                                    \"description\": \"Timestamp when the microfrontends settings were last updated.\"\n                                  },\n                                  \"groupIds\": {\n                                    \"type\": \"array\",\n                                    \"items\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"minItems\": 1,\n                                    \"description\": \"The group IDs of microfrontends that this project belongs to. Each microfrontend project must belong to a microfrontends group that is the set of microfrontends that are used together.\"\n                                  },\n                                  \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      true\n                                    ],\n                                    \"description\": \"Whether microfrontends are enabled for this project.\"\n                                  },\n                                  \"defaultRoute\": {\n                                    \"type\": \"string\",\n                                    \"description\": \"A path that is used to take screenshots and as the default path in preview links when a domain for this microfrontend is shown in the UI. Includes the leading slash, e.g. `/docs`\"\n                                  },\n                                  \"freeProjectForLegacyLimits\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ],\n                                    \"description\": \"Whether the project was part of the legacy limits for hobby and pro-trial before billing was added. This field is only set when the team is upgraded to a paid plan and we are backfilling the subscription status. We cap the subscription to 2 projects and set this field for the 3rd project. When this field is set, the project is not charged for and we do not call any billing APIs for this project.\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"enabled\",\n                                  \"groupIds\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"updatedAt\": {\n                                    \"type\": \"number\"\n                                  },\n                                  \"groupIds\": {\n                                    \"type\": \"array\",\n                                    \"items\": {},\n                                    \"minItems\": 0,\n                                    \"maxItems\": 0\n                                  },\n                                  \"enabled\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false\n                                    ]\n                                  },\n                                  \"freeProjectForLegacyLimits\": {\n                                    \"type\": \"boolean\",\n                                    \"enum\": [\n                                      false,\n                                      true\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"enabled\",\n                                  \"groupIds\",\n                                  \"updatedAt\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          }\n                        },\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"project\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"group\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"slug\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\",\n                      \"slug\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"group\",\n                  \"prev\",\n                  \"project\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  },\n                  \"cause\": {\n                    \"type\": \"string\"\n                  },\n                  \"blockReason\": {\n                    \"type\": \"string\"\n                  },\n                  \"siftRoute\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"cause\",\n                  \"ownerId\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  },\n                  \"cause\": {\n                    \"type\": \"string\"\n                  },\n                  \"reason\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"cause\",\n                  \"ownerId\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  },\n                  \"cause\": {\n                    \"type\": \"string\"\n                  },\n                  \"blockReason\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"cause\",\n                  \"ownerId\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  },\n                  \"source\": {\n                    \"type\": \"string\"\n                  },\n                  \"cause\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"cause\",\n                  \"ownerId\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"oldName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"newName\",\n                  \"oldName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"plan\": {\n                    \"type\": \"string\"\n                  },\n                  \"removedUsers\": {\n                    \"additionalProperties\": {\n                      \"properties\": {\n                        \"role\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"OWNER\",\n                            \"MEMBER\",\n                            \"DEVELOPER\",\n                            \"SECURITY\",\n                            \"BILLING\",\n                            \"VIEWER\",\n                            \"VIEWER_FOR_PLUS\",\n                            \"CONTRIBUTOR\"\n                          ]\n                        },\n                        \"confirmed\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"confirmedAt\": {\n                          \"type\": \"number\"\n                        },\n                        \"joinedFrom\": {\n                          \"properties\": {\n                            \"origin\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"link\",\n                                \"import\",\n                                \"teams\",\n                                \"saml\",\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\",\n                                \"mail\",\n                                \"dsync\",\n                                \"feedback\",\n                                \"organization-teams\",\n                                \"nsnb-auto-approve\",\n                                \"nsnb-hobby-upgrade\",\n                                \"nsnb-request-access\",\n                                \"nsnb-viewer-upgrade\",\n                                \"nsnb-invite\",\n                                \"nsnb-redeploy\"\n                              ]\n                            },\n                            \"commitId\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoId\": {\n                              \"type\": \"string\"\n                            },\n                            \"repoPath\": {\n                              \"type\": \"string\"\n                            },\n                            \"gitUserId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                }\n                              ]\n                            },\n                            \"gitUserLogin\": {\n                              \"type\": \"string\"\n                            },\n                            \"ssoUserId\": {\n                              \"type\": \"string\"\n                            },\n                            \"ssoConnectedAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"idpUserId\": {\n                              \"type\": \"string\"\n                            },\n                            \"dsyncUserId\": {\n                              \"type\": \"string\"\n                            },\n                            \"dsyncConnectedAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"origin\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      },\n                      \"required\": [\n                        \"confirmed\",\n                        \"role\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"prevPlan\": {\n                    \"type\": \"string\"\n                  },\n                  \"priorPlan\": {\n                    \"type\": \"string\"\n                  },\n                  \"isDowngrade\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"userAgent\": {\n                    \"type\": \"string\"\n                  },\n                  \"isReactivate\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"isTrialUpgrade\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"automated\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ],\n                    \"description\": \"Whether the plan change was system-initiated rather than human-initiated.\"\n                  },\n                  \"reason\": {\n                    \"type\": \"string\",\n                    \"description\": \"Why the plan changed. For downgrades, this is a {@link DowngradeReason} from `@api/pubsub-types` (e.g. `user_downgrade`, `trial_expired`).\"\n                  },\n                  \"timestamp\": {\n                    \"type\": \"number\"\n                  },\n                  \"removedMemberCount\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"plan\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"price\": {\n                    \"type\": \"number\"\n                  },\n                  \"currency\": {\n                    \"type\": \"string\"\n                  },\n                  \"enabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previewDeploymentSuffix\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"previousPreviewDeploymentSuffix\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"branch\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"branch\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"directoryListing\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"directoryListing\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectAnalytics\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"canceledAt\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"disabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"enabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"paidAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"sampleRatePercent\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"spendLimitInDollars\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"disabledAt\",\n                      \"enabledAt\",\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"prevProjectAnalytics\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"canceledAt\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"disabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"enabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"paidAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"sampleRatePercent\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"spendLimitInDollars\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"disabledAt\",\n                      \"enabledAt\",\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"prevProjectAnalytics\",\n                  \"projectAnalytics\",\n                  \"projectId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectAnalytics\": {\n                    \"additionalProperties\": true,\n                    \"type\": \"object\"\n                  },\n                  \"prevProjectAnalytics\": {\n                    \"nullable\": true,\n                    \"additionalProperties\": true,\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enabled\",\n                      \"disabled\",\n                      \"regenerated\",\n                      \"updated\"\n                    ]\n                  },\n                  \"isEnvVar\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"note\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"action\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"enableAffectedProjectsDeployments\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enableAffectedProjectsDeployments\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"productionDeploymentsFastLane\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"productionDeploymentsFastLane\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"sourceFilesOutsideRootDirectory\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"sourceFilesOutsideRootDirectory\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previousBuildMachineType\": {\n                    \"type\": \"string\"\n                  },\n                  \"nextBuildMachineType\": {\n                    \"type\": \"string\"\n                  },\n                  \"previousBuildMachineSelection\": {\n                    \"type\": \"string\"\n                  },\n                  \"nextBuildMachineSelection\": {\n                    \"type\": \"string\"\n                  },\n                  \"isSystemInitiated\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"nextBuildMachineSelection\",\n                  \"nextBuildMachineType\",\n                  \"previousBuildMachineSelection\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"certId\": {\n                    \"type\": \"string\"\n                  },\n                  \"origin\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"target\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"updated\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"oldConnectConfigurations\": {\n                        \"nullable\": true,\n                        \"items\": {\n                          \"properties\": {\n                            \"envId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\"\n                                  ]\n                                }\n                              ]\n                            },\n                            \"connectConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"dc\": {\n                              \"type\": \"string\"\n                            },\n                            \"passive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"buildsEnabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"aws\": {\n                              \"properties\": {\n                                \"subnetIds\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"securityGroupId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"subnetIds\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"buildsEnabled\",\n                            \"connectConfigurationId\",\n                            \"createdAt\",\n                            \"envId\",\n                            \"passive\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"newConnectConfigurations\": {\n                        \"nullable\": true,\n                        \"items\": {\n                          \"properties\": {\n                            \"envId\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"production\",\n                                    \"preview\"\n                                  ]\n                                }\n                              ]\n                            },\n                            \"connectConfigurationId\": {\n                              \"type\": \"string\"\n                            },\n                            \"dc\": {\n                              \"type\": \"string\"\n                            },\n                            \"passive\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"buildsEnabled\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"aws\": {\n                              \"properties\": {\n                                \"subnetIds\": {\n                                  \"items\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"type\": \"array\"\n                                },\n                                \"securityGroupId\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"subnetIds\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"createdAt\": {\n                              \"type\": \"number\"\n                            },\n                            \"updatedAt\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"buildsEnabled\",\n                            \"connectConfigurationId\",\n                            \"createdAt\",\n                            \"envId\",\n                            \"passive\",\n                            \"updatedAt\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"newConnectConfigurations\",\n                      \"oldConnectConfigurations\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"project\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"action\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enabled\",\n                      \"disabled\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"action\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"ownerId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"elasticConcurrencyEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"oldElasticConcurrencyEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"buildQueueConfiguration\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SKIP_NAMESPACE_QUEUE\",\n                      \"WAIT_FOR_NAMESPACE_QUEUE\"\n                    ]\n                  },\n                  \"oldBuildQueueConfiguration\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SKIP_NAMESPACE_QUEUE\",\n                      \"WAIT_FOR_NAMESPACE_QUEUE\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"elasticConcurrencyEnabled\",\n                  \"oldElasticConcurrencyEnabled\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"autoAssignCustomDomains\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"autoAssignCustomDomains\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previewDeploymentsEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"previewDeploymentsEnabled\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"customEnvironmentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"customEnvironmentSlug\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"branchMatcher\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"endsWith\",\n                              \"startsWith\",\n                              \"equals\"\n                            ],\n                            \"description\": \"The type of matching to perform\"\n                          },\n                          \"pattern\": {\n                            \"type\": \"string\",\n                            \"description\": \"The pattern to match against branch names\"\n                          }\n                        },\n                        \"required\": [\n                          \"pattern\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"branchMatcher\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"endsWith\",\n                              \"startsWith\",\n                              \"equals\"\n                            ],\n                            \"description\": \"The type of matching to perform\"\n                          },\n                          \"pattern\": {\n                            \"type\": \"string\",\n                            \"description\": \"The pattern to match against branch names\"\n                          }\n                        },\n                        \"required\": [\n                          \"pattern\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"customEnvironmentId\",\n                  \"customEnvironmentSlug\",\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"customEnvironmentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"customEnvironmentSlug\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"customEnvironmentId\",\n                  \"customEnvironmentSlug\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"functionDefaultTimeout\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"functionDefaultTimeout\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"functionDefaultTimeout\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"functionDefaultTimeout\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"functionDefaultMemoryType\": {\n                        \"nullable\": true,\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"functionDefaultMemoryType\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"functionDefaultMemoryType\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"functionDefaultMemoryType\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"functionDefaultRegions\": {\n                        \"nullable\": true,\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"functionDefaultRegions\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"functionDefaultRegions\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"functionDefaultRegions\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"functionZeroConfigFailover\": {\n                        \"nullable\": true,\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"functionZeroConfigFailover\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"functionZeroConfigFailover\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"functionZeroConfigFailover\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previewDeploymentSuffix\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"previewDeploymentSuffix\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newProjectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"newProjectName\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"gitProvider\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"github\",\n                          \"github-limited\",\n                          \"github-custom-host\",\n                          \"gitlab\",\n                          \"bitbucket\"\n                        ]\n                      },\n                      \"gitRepoId\": {\n                        \"type\": \"string\"\n                      },\n                      \"gitRepositoryName\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"gitProvider\",\n                      \"gitRepoId\",\n                      \"gitRepositoryName\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"gitProvider\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"github\",\n                          \"github-limited\",\n                          \"github-custom-host\",\n                          \"gitlab\",\n                          \"bitbucket\"\n                        ]\n                      },\n                      \"gitRepoId\": {\n                        \"type\": \"string\"\n                      },\n                      \"gitRepositoryName\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"gitProvider\",\n                      \"gitRepoId\",\n                      \"gitRepositoryName\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitProvider\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"github\",\n                      \"github-limited\",\n                      \"github-custom-host\",\n                      \"gitlab\",\n                      \"bitbucket\"\n                    ]\n                  },\n                  \"gitRepoId\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitRepositoryName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"gitProvider\",\n                  \"gitRepoId\",\n                  \"gitRepositoryName\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"onPullRequest\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"onPullRequest\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"onCommit\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"onCommit\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"disableRepositoryDispatchEvents\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"disableRepositoryDispatchEvents\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"createDeployments\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enabled\",\n                      \"disabled\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"createDeployments\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"requireVerifiedCommits\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"requireVerifiedCommits\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitLFS\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"gitLFS\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"commandForIgnoringBuildStep\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"commandForIgnoringBuildStep\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"target\": {\n                    \"type\": \"string\"\n                  },\n                  \"redirect\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"redirectStatusCode\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  },\n                  \"gitBranch\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"configuredBy\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"gitBranch\",\n                  \"projectId\",\n                  \"projectName\",\n                  \"redirect\",\n                  \"redirectStatusCode\",\n                  \"target\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"target\": {\n                    \"type\": \"string\"\n                  },\n                  \"redirect\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"redirectStatusCode\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"projectId\",\n                  \"projectName\",\n                  \"target\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"oldProjectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"oldProjectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newProjectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"newProjectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"newProjectId\",\n                  \"newProjectName\",\n                  \"oldProjectId\",\n                  \"oldProjectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"redirect\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"redirectStatusCode\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projects\": {\n                    \"items\": {\n                      \"properties\": {\n                        \"projectId\": {\n                          \"type\": \"string\"\n                        },\n                        \"role\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"ADMIN\",\n                            \"PROJECT_DEVELOPER\",\n                            \"PROJECT_VIEWER\",\n                            \"PROJECT_GUEST\"\n                          ]\n                        },\n                        \"membershipCreatedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"membershipCreatedAt\",\n                        \"projectId\",\n                        \"role\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"uid\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projects\",\n                  \"uid\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"target\": {\n                    \"type\": \"string\"\n                  },\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"configuredBy\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"prevConfiguredBy\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"projectId\",\n                  \"projectName\",\n                  \"target\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"projectMembership\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"role\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ADMIN\",\n                          \"PROJECT_DEVELOPER\",\n                          \"PROJECT_VIEWER\",\n                          \"PROJECT_GUEST\"\n                        ]\n                      },\n                      \"uid\": {\n                        \"type\": \"string\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"createdAt\",\n                      \"role\",\n                      \"uid\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"project\",\n                  \"projectMembership\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"role\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ADMIN\",\n                          \"PROJECT_DEVELOPER\",\n                          \"PROJECT_VIEWER\",\n                          \"PROJECT_GUEST\"\n                        ]\n                      },\n                      \"invitedUserName\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"invitedUserId\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"invitedUserName\",\n                      \"name\",\n                      \"role\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"project\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"removedMembership\": {\n                    \"properties\": {\n                      \"role\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ADMIN\",\n                          \"PROJECT_DEVELOPER\",\n                          \"PROJECT_VIEWER\",\n                          \"PROJECT_GUEST\"\n                        ]\n                      },\n                      \"uid\": {\n                        \"type\": \"string\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"createdAt\",\n                      \"role\",\n                      \"uid\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"project\",\n                  \"removedMembership\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"project\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"projectMembership\": {\n                    \"properties\": {\n                      \"role\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ADMIN\",\n                          \"PROJECT_DEVELOPER\",\n                          \"PROJECT_VIEWER\",\n                          \"PROJECT_GUEST\"\n                        ]\n                      },\n                      \"uid\": {\n                        \"type\": \"string\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      },\n                      \"previousRole\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"ADMIN\",\n                          \"PROJECT_DEVELOPER\",\n                          \"PROJECT_VIEWER\",\n                          \"PROJECT_GUEST\"\n                        ]\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"project\",\n                  \"projectMembership\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previousProjectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newProjectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"originAccountName\": {\n                    \"type\": \"string\"\n                  },\n                  \"transferId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"newProjectName\",\n                  \"originAccountName\",\n                  \"previousProjectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationAccountName\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"transferId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"destinationAccountName\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"originAccountName\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationAccountName\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationAccountId\": {\n                    \"type\": \"string\"\n                  },\n                  \"transferId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"destinationAccountId\",\n                  \"destinationAccountName\",\n                  \"originAccountName\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previousProjectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newProjectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"destinationAccountName\": {\n                    \"type\": \"string\"\n                  },\n                  \"transferId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"destinationAccountName\",\n                  \"newProjectName\",\n                  \"previousProjectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"source\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"source\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"optionsAllowlist\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"paths\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"value\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"paths\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"oldOptionsAllowlist\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"paths\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"value\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"paths\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"passwordProtection\": {\n                    \"nullable\": true,\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"deploymentType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"deploymentType\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ]\n                      }\n                    ]\n                  },\n                  \"oldPasswordProtection\": {\n                    \"nullable\": true,\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"deploymentType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"deploymentType\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ]\n                      }\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"oldPasswordProtection\",\n                  \"passwordProtection\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"reasonCode\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"BUDGET_REACHED\",\n                      \"PUBLIC_API\",\n                      \"BACKOFFICE\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"projectId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"consent\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"granted\",\n                      \"refused\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"consent\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"targetDeploymentId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"targetDeploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"newTargetPercentage\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"issuerMode\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"team\",\n                          \"global\"\n                        ]\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"issuerMode\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"team\",\n                          \"global\"\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"issuerMode\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"customerSupportCodeVisibility\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"customerSupportCodeVisibility\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitForkProtection\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"gitForkProtection\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"protectedSourcemaps\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"protectedSourcemaps\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"publicSource\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\",\n                  \"publicSource\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"expiration\": {\n                        \"type\": \"string\"\n                      },\n                      \"expirationProduction\": {\n                        \"type\": \"string\"\n                      },\n                      \"expirationCanceled\": {\n                        \"type\": \"string\"\n                      },\n                      \"expirationErrored\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"expiration\": {\n                        \"type\": \"string\"\n                      },\n                      \"expirationProduction\": {\n                        \"type\": \"string\"\n                      },\n                      \"expirationCanceled\": {\n                        \"type\": \"string\"\n                      },\n                      \"expirationErrored\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"skewProtectionBoundaryAt\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"skewProtectionBoundaryAt\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"skewProtectionBoundaryAt\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"skewProtectionMaxAge\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"skewProtectionMaxAge\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"skewProtectionMaxAge\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"skewProtectionAllowedDomains\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"skewProtectionAllowedDomains\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"skewProtectionAllowedDomains\": {\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoProtection\": {\n                    \"nullable\": true,\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"deploymentType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ]\n                          },\n                          \"cve55182MigrationAppliedFrom\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"deploymentType\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ]\n                      }\n                    ]\n                  },\n                  \"oldSsoProtection\": {\n                    \"nullable\": true,\n                    \"oneOf\": [\n                      {\n                        \"properties\": {\n                          \"deploymentType\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ]\n                          },\n                          \"cve55182MigrationAppliedFrom\": {\n                            \"nullable\": true,\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"all\",\n                              \"preview\",\n                              \"prod_deployment_urls_and_all_previews\",\n                              \"all_except_custom_domains\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"deploymentType\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"all\",\n                          \"preview\",\n                          \"prod_deployment_urls_and_all_previews\",\n                          \"all_except_custom_domains\"\n                        ]\n                      }\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"oldSsoProtection\",\n                  \"ssoProtection\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"project\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"staticIps\": {\n                            \"properties\": {\n                              \"builds\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"regions\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"enabled\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"staticIps\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"project\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"project\": {\n                        \"properties\": {\n                          \"id\": {\n                            \"type\": \"string\"\n                          },\n                          \"staticIps\": {\n                            \"properties\": {\n                              \"builds\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"enabled\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              },\n                              \"regions\": {\n                                \"items\": {\n                                  \"type\": \"string\"\n                                },\n                                \"type\": \"array\"\n                              }\n                            },\n                            \"required\": [\n                              \"enabled\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"staticIps\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"project\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"trustedIps\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"production\",\n                      \"all\",\n                      \"preview\",\n                      \"prod_deployment_urls_and_all_previews\",\n                      \"all_except_custom_domains\"\n                    ]\n                  },\n                  \"oldTrustedIps\": {\n                    \"nullable\": true,\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"production\",\n                      \"all\",\n                      \"preview\",\n                      \"prod_deployment_urls_and_all_previews\",\n                      \"all_except_custom_domains\"\n                    ]\n                  },\n                  \"addedAddresses\": {\n                    \"nullable\": true,\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"removedAddresses\": {\n                    \"nullable\": true,\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"reasonCode\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"PUBLIC_API\",\n                      \"BACKOFFICE\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"projectId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectWebAnalytics\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"disabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"canceledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"enabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"hasData\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"prevProjectWebAnalytics\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"disabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"canceledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"enabledAt\": {\n                        \"type\": \"number\"\n                      },\n                      \"hasData\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"gitProvider\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitProviderGroupDescriptor\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitScope\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"gitProvider\",\n                  \"gitProviderGroupDescriptor\",\n                  \"gitScope\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"instances\": {\n                    \"type\": \"number\"\n                  },\n                  \"url\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"instances\",\n                  \"url\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"verified\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"email\",\n                  \"verified\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"email\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"uid\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      },\n                      {\n                        \"properties\": {\n                          \"name\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"name\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"name\",\n                  \"uid\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"oldName\": {\n                    \"type\": \"string\"\n                  },\n                  \"newName\": {\n                    \"type\": \"string\"\n                  },\n                  \"uid\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"newName\",\n                  \"oldName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"enabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"updatedAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"firstEnabledAt\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"enabled\",\n                  \"updatedAt\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"bio\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"bio\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"scalingRules\": {\n                    \"additionalProperties\": {\n                      \"properties\": {\n                        \"min\": {\n                          \"type\": \"number\"\n                        },\n                        \"max\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"max\",\n                        \"min\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"min\": {\n                    \"type\": \"number\"\n                  },\n                  \"max\": {\n                    \"type\": \"number\"\n                  },\n                  \"url\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"max\",\n                  \"min\",\n                  \"scalingRules\",\n                  \"url\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"userAgent\": {\n                    \"type\": \"string\"\n                  },\n                  \"geolocation\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"city\": {\n                        \"properties\": {\n                          \"names\": {\n                            \"properties\": {\n                              \"en\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"en\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"names\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"country\": {\n                        \"properties\": {\n                          \"names\": {\n                            \"properties\": {\n                              \"en\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"en\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"names\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"most_specific_subdivision\": {\n                        \"properties\": {\n                          \"names\": {\n                            \"properties\": {\n                              \"en\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"en\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        },\n                        \"required\": [\n                          \"names\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"regionName\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"country\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"env\": {\n                    \"type\": \"string\"\n                  },\n                  \"os\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoType\": {\n                    \"type\": \"string\"\n                  },\n                  \"factors\": {\n                    \"items\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"origin\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"email\",\n                                \"saml\",\n                                \"github\",\n                                \"gitlab\",\n                                \"bitbucket\",\n                                \"google\",\n                                \"apple\",\n                                \"chatgpt\",\n                                \"otp\"\n                              ]\n                            },\n                            \"username\": {\n                              \"type\": \"string\"\n                            },\n                            \"teamId\": {\n                              \"type\": \"string\"\n                            },\n                            \"legacy\": {\n                              \"type\": \"boolean\",\n                              \"enum\": [\n                                false,\n                                true\n                              ]\n                            },\n                            \"ssoType\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"origin\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"maxItems\": 1,\n                    \"minItems\": 1,\n                    \"type\": \"array\"\n                  },\n                  \"viaOTP\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaGithub\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaGitlab\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaBitbucket\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaGoogle\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaApple\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaSamlSso\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"viaPasskey\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketEmail\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketName\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccount\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccountType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"bitbucketEmail\",\n                  \"bitbucketLogin\",\n                  \"bitbucketName\",\n                  \"email\",\n                  \"zeitAccount\",\n                  \"zeitAccountType\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"githubLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccount\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccountType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"email\",\n                  \"githubLogin\",\n                  \"zeitAccount\",\n                  \"zeitAccountType\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabEmail\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabName\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccount\": {\n                    \"type\": \"string\"\n                  },\n                  \"zeitAccountType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"email\",\n                  \"gitlabEmail\",\n                  \"gitlabLogin\",\n                  \"gitlabName\",\n                  \"zeitAccount\",\n                  \"zeitAccountType\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"analyticsId\": {\n                    \"type\": \"string\"\n                  },\n                  \"sampleRatePercent\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  },\n                  \"spendLimitInDollars\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  },\n                  \"previous\": {\n                    \"properties\": {\n                      \"sampleRatePercent\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      },\n                      \"spendLimitInDollars\": {\n                        \"nullable\": true,\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"sampleRatePercent\",\n                      \"spendLimitInDollars\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"previous\",\n                  \"sampleRatePercent\",\n                  \"spendLimitInDollars\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"budget\": {\n                    \"properties\": {\n                      \"budgetItem\": {\n                        \"properties\": {\n                          \"type\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"fixed\"\n                            ],\n                            \"description\": \"The budget type\"\n                          },\n                          \"fixedBudget\": {\n                            \"type\": \"number\",\n                            \"description\": \"Budget amount (USD / dollars)\"\n                          },\n                          \"previousSpend\": {\n                            \"items\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Array of the last 3 months of spend data\"\n                          },\n                          \"notifiedAt\": {\n                            \"items\": {\n                              \"type\": \"number\"\n                            },\n                            \"type\": \"array\",\n                            \"description\": \"Array of 50, 75, 100 to keep track of notifications sent out\"\n                          },\n                          \"webhookId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Webhook id that corresponds to a webhook in Cosmos webhook collection\"\n                          },\n                          \"webhookNotified\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Keep track if the webhook has been called for the month\"\n                          },\n                          \"createdAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Date time when budget is created\"\n                          },\n                          \"updatedAt\": {\n                            \"type\": \"number\",\n                            \"description\": \"Date time when budget is updated last\"\n                          },\n                          \"isActive\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Is the budget currently active for a customer\"\n                          },\n                          \"pauseProjects\": {\n                            \"type\": \"boolean\",\n                            \"enum\": [\n                              false,\n                              true\n                            ],\n                            \"description\": \"Should all projects be paused if budget is exceeded\"\n                          },\n                          \"pricingPlan\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"plus\",\n                              \"legacy\",\n                              \"unbundled\"\n                            ],\n                            \"description\": \"The acive pricing plan the team is billed with\"\n                          },\n                          \"teamId\": {\n                            \"type\": \"string\",\n                            \"description\": \"Partition key\"\n                          },\n                          \"id\": {\n                            \"type\": \"string\",\n                            \"description\": \"Sort key that needs to be unique per teamId\"\n                          }\n                        },\n                        \"required\": [\n                          \"createdAt\",\n                          \"fixedBudget\",\n                          \"id\",\n                          \"isActive\",\n                          \"notifiedAt\",\n                          \"previousSpend\",\n                          \"teamId\",\n                          \"type\"\n                        ],\n                        \"type\": \"object\",\n                        \"description\": \"Represents a budget for tracking and notifying teams on their spending.\"\n                      }\n                    },\n                    \"required\": [\n                      \"budgetItem\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"budget\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"budget\": {\n                    \"properties\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"fixed\"\n                        ],\n                        \"description\": \"The budget type\"\n                      },\n                      \"fixedBudget\": {\n                        \"type\": \"number\",\n                        \"description\": \"Budget amount (USD / dollars)\"\n                      },\n                      \"previousSpend\": {\n                        \"items\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"Array of the last 3 months of spend data\"\n                      },\n                      \"notifiedAt\": {\n                        \"items\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"Array of 50, 75, 100 to keep track of notifications sent out\"\n                      },\n                      \"webhookId\": {\n                        \"type\": \"string\",\n                        \"description\": \"Webhook id that corresponds to a webhook in Cosmos webhook collection\"\n                      },\n                      \"webhookNotified\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Keep track if the webhook has been called for the month\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Date time when budget is created\"\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Date time when budget is updated last\"\n                      },\n                      \"isActive\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Is the budget currently active for a customer\"\n                      },\n                      \"pauseProjects\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Should all projects be paused if budget is exceeded\"\n                      },\n                      \"pricingPlan\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"plus\",\n                          \"legacy\",\n                          \"unbundled\"\n                        ],\n                        \"description\": \"The acive pricing plan the team is billed with\"\n                      },\n                      \"teamId\": {\n                        \"type\": \"string\",\n                        \"description\": \"Partition key\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"description\": \"Sort key that needs to be unique per teamId\"\n                      }\n                    },\n                    \"required\": [\n                      \"createdAt\",\n                      \"fixedBudget\",\n                      \"id\",\n                      \"isActive\",\n                      \"notifiedAt\",\n                      \"previousSpend\",\n                      \"teamId\",\n                      \"type\"\n                    ],\n                    \"type\": \"object\",\n                    \"description\": \"Represents a budget for tracking and notifying teams on their spending.\"\n                  }\n                },\n                \"required\": [\n                  \"budget\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"budget\": {\n                    \"properties\": {\n                      \"type\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"fixed\"\n                        ],\n                        \"description\": \"The budget type\"\n                      },\n                      \"fixedBudget\": {\n                        \"type\": \"number\",\n                        \"description\": \"Budget amount (USD / dollars)\"\n                      },\n                      \"previousSpend\": {\n                        \"items\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"Array of the last 3 months of spend data\"\n                      },\n                      \"notifiedAt\": {\n                        \"items\": {\n                          \"type\": \"number\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"Array of 50, 75, 100 to keep track of notifications sent out\"\n                      },\n                      \"webhookId\": {\n                        \"type\": \"string\",\n                        \"description\": \"Webhook id that corresponds to a webhook in Cosmos webhook collection\"\n                      },\n                      \"webhookNotified\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Keep track if the webhook has been called for the month\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Date time when budget is created\"\n                      },\n                      \"updatedAt\": {\n                        \"type\": \"number\",\n                        \"description\": \"Date time when budget is updated last\"\n                      },\n                      \"isActive\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Is the budget currently active for a customer\"\n                      },\n                      \"pauseProjects\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Should all projects be paused if budget is exceeded\"\n                      },\n                      \"pricingPlan\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"plus\",\n                          \"legacy\",\n                          \"unbundled\"\n                        ],\n                        \"description\": \"The acive pricing plan the team is billed with\"\n                      },\n                      \"teamId\": {\n                        \"type\": \"string\",\n                        \"description\": \"Partition key\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\",\n                        \"description\": \"Sort key that needs to be unique per teamId\"\n                      }\n                    },\n                    \"required\": [\n                      \"createdAt\",\n                      \"fixedBudget\",\n                      \"id\",\n                      \"isActive\",\n                      \"notifiedAt\",\n                      \"previousSpend\",\n                      \"teamId\",\n                      \"type\"\n                    ],\n                    \"type\": \"object\",\n                    \"description\": \"Represents a budget for tracking and notifying teams on their spending.\"\n                  },\n                  \"webhookUrl\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"budget\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"webhookUrl\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"storeType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"redis\",\n                      \"postgres\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"storeType\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  },\n                  \"computeUnitsMax\": {\n                    \"type\": \"number\"\n                  },\n                  \"computeUnitsMin\": {\n                    \"type\": \"number\"\n                  },\n                  \"suspendTimeoutSeconds\": {\n                    \"type\": \"number\"\n                  },\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"integration\",\n                      \"redis\",\n                      \"postgres\",\n                      \"edge-config\",\n                      \"blob\"\n                    ]\n                  },\n                  \"access\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"public\",\n                      \"private\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"type\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"store\": {\n                    \"properties\": {\n                      \"name\": {\n                        \"type\": \"string\"\n                      },\n                      \"id\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"ownerId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"store\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"slug\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"slug\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previous\": {\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Whether automatic code reviews are enabled\"\n                      },\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"public\",\n                          \"private\",\n                          \"all\",\n                          \"selected_repos\"\n                        ],\n                        \"description\": \"Which repository visibilities get automatic reviews\"\n                      },\n                      \"includeDrafts\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Whether to include draft pull requests in automatic reviews\"\n                      },\n                      \"selectedRepos\": {\n                        \"nullable\": true,\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"GitHub repos to scope automatic reviews to. Format: \\\"owner/repo\\\" (lowercase). Only used when scope='selected_repos'.\"\n                      }\n                    },\n                    \"required\": [\n                      \"enabled\",\n                      \"includeDrafts\",\n                      \"scope\"\n                    ],\n                    \"type\": \"object\",\n                    \"description\": \"Automatic code review settings\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Whether automatic code reviews are enabled\"\n                      },\n                      \"scope\": {\n                        \"type\": \"string\",\n                        \"enum\": [\n                          \"public\",\n                          \"private\",\n                          \"all\",\n                          \"selected_repos\"\n                        ],\n                        \"description\": \"Which repository visibilities get automatic reviews\"\n                      },\n                      \"includeDrafts\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ],\n                        \"description\": \"Whether to include draft pull requests in automatic reviews\"\n                      },\n                      \"selectedRepos\": {\n                        \"nullable\": true,\n                        \"items\": {\n                          \"type\": \"string\"\n                        },\n                        \"type\": \"array\",\n                        \"description\": \"GitHub repos to scope automatic reviews to. Format: \\\"owner/repo\\\" (lowercase). Only used when scope='selected_repos'.\"\n                      }\n                    },\n                    \"required\": [\n                      \"enabled\",\n                      \"includeDrafts\",\n                      \"scope\"\n                    ],\n                    \"type\": \"object\",\n                    \"description\": \"Automatic code review settings\"\n                  }\n                },\n                \"required\": [\n                  \"next\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"enabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enabled\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"trialCreditsIssuedAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"expiresAt\": {\n                    \"type\": \"string\"\n                  },\n                  \"amount\": {\n                    \"type\": \"string\"\n                  },\n                  \"currency\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"amount\",\n                  \"currency\",\n                  \"expiresAt\",\n                  \"trialCreditsIssuedAt\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"slug\": {\n                    \"type\": \"string\"\n                  },\n                  \"teamId\": {\n                    \"type\": \"string\"\n                  },\n                  \"by\": {\n                    \"type\": \"string\"\n                  },\n                  \"byUid\": {\n                    \"type\": \"string\"\n                  },\n                  \"reasons\": {\n                    \"items\": {\n                      \"properties\": {\n                        \"slug\": {\n                          \"type\": \"string\"\n                        },\n                        \"description\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"description\",\n                        \"slug\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"removedUsers\": {\n                    \"additionalProperties\": {\n                      \"properties\": {\n                        \"role\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"OWNER\",\n                            \"MEMBER\",\n                            \"DEVELOPER\",\n                            \"SECURITY\",\n                            \"BILLING\",\n                            \"VIEWER\",\n                            \"VIEWER_FOR_PLUS\",\n                            \"CONTRIBUTOR\"\n                          ]\n                        },\n                        \"confirmed\": {\n                          \"type\": \"boolean\",\n                          \"enum\": [\n                            false,\n                            true\n                          ]\n                        },\n                        \"confirmedAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"confirmed\",\n                        \"role\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"removedMemberCount\": {\n                    \"type\": \"number\"\n                  },\n                  \"timestamp\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"by\",\n                  \"slug\",\n                  \"teamId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectName\": {\n                    \"type\": \"string\"\n                  },\n                  \"enabled\": {\n                    \"nullable\": true,\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"environment\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"production\",\n                      \"preview\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enabled\",\n                  \"environment\",\n                  \"projectId\",\n                  \"projectName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"environment\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"production\",\n                      \"preview\"\n                    ]\n                  },\n                  \"enabled\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"default\",\n                      \"on\",\n                      \"off\",\n                      \"on-force\",\n                      \"off-force\",\n                      \"default-force\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enabled\",\n                  \"environment\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"emailDomain\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"deletedCount\": {\n                    \"type\": \"number\"\n                  },\n                  \"inviteIds\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"deletedCount\",\n                  \"inviteIds\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"directoryType\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoType\": {\n                    \"type\": \"string\"\n                  },\n                  \"invitedUser\": {\n                    \"properties\": {\n                      \"username\": {\n                        \"type\": \"string\"\n                      },\n                      \"email\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"email\",\n                      \"username\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"invitedEmail\": {\n                    \"type\": \"string\"\n                  },\n                  \"invitationRole\": {\n                    \"type\": \"string\"\n                  },\n                  \"entitlements\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"invitedUid\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"teamName\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitUsername\": {\n                    \"type\": \"string\"\n                  },\n                  \"githubUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"gitlabUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"updatedUid\": {\n                    \"type\": \"string\"\n                  },\n                  \"teamId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"teamName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"teamName\": {\n                    \"type\": \"string\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"githubUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"gitlabUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"teamName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"deletedUser\": {\n                    \"properties\": {\n                      \"username\": {\n                        \"type\": \"string\"\n                      },\n                      \"email\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"email\",\n                      \"username\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"deletedUid\": {\n                    \"type\": \"string\"\n                  },\n                  \"githubUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"gitlabUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketUsername\": {\n                    \"nullable\": true,\n                    \"type\": \"string\"\n                  },\n                  \"directoryType\": {\n                    \"type\": \"string\"\n                  },\n                  \"role\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"OWNER\",\n                      \"MEMBER\",\n                      \"DEVELOPER\",\n                      \"SECURITY\",\n                      \"BILLING\",\n                      \"VIEWER\",\n                      \"VIEWER_FOR_PLUS\",\n                      \"CONTRIBUTOR\"\n                    ]\n                  },\n                  \"reason\": {\n                    \"type\": \"string\",\n                    \"description\": \"Why the member was removed. When removed due to a plan downgrade, this is a {@link DowngradeReason} from `@api/pubsub-types` (e.g. `trial_expired`, `user_downgrade`).\"\n                  },\n                  \"previousPlan\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"pro\",\n                      \"enterprise\",\n                      \"hobby\"\n                    ]\n                  },\n                  \"newPlan\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"pro\",\n                      \"enterprise\",\n                      \"hobby\"\n                    ]\n                  },\n                  \"automated\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ],\n                    \"description\": \"Whether the removal was system-initiated rather than human-initiated.\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"entitlement\": {\n                    \"type\": \"string\"\n                  },\n                  \"user\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"username\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"entitlement\",\n                  \"user\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"entitlement\": {\n                    \"type\": \"string\"\n                  },\n                  \"user\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"username\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"username\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"previousCanceledAt\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"entitlement\",\n                  \"user\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"role\": {\n                    \"type\": \"string\"\n                  },\n                  \"uid\": {\n                    \"type\": \"string\"\n                  },\n                  \"origin\": {\n                    \"type\": \"string\"\n                  },\n                  \"teamRoles\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"teamPermissions\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"entitlements\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"uid\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"requestedTeamName\": {\n                    \"type\": \"string\"\n                  },\n                  \"requestedUserName\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitUsername\": {\n                    \"type\": \"string\"\n                  },\n                  \"githubUsername\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitlabUsername\": {\n                    \"type\": \"string\"\n                  },\n                  \"bitbucketUsername\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"requestedTeamName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"directoryType\": {\n                    \"type\": \"string\"\n                  },\n                  \"updatedUser\": {\n                    \"properties\": {\n                      \"username\": {\n                        \"type\": \"string\"\n                      },\n                      \"email\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"email\",\n                      \"username\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"role\": {\n                    \"type\": \"string\"\n                  },\n                  \"previousRole\": {\n                    \"type\": \"string\"\n                  },\n                  \"updatedUid\": {\n                    \"type\": \"string\"\n                  },\n                  \"origin\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"previousRole\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"enforced\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enforced\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previousConcurrentBuilds\": {\n                    \"type\": \"number\"\n                  },\n                  \"nextConcurrentBuilds\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"nextConcurrentBuilds\",\n                  \"previousConcurrentBuilds\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"plan\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"pro\",\n                      \"enterprise\",\n                      \"hobby\"\n                    ]\n                  },\n                  \"trial\": {\n                    \"nullable\": true,\n                    \"properties\": {\n                      \"start\": {\n                        \"type\": \"number\"\n                      },\n                      \"end\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"end\",\n                      \"start\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"plan\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"invoiceId\": {\n                    \"type\": \"string\"\n                  },\n                  \"convertedFromTrial\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"plan\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"pro\",\n                      \"enterprise\",\n                      \"hobby\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"convertedFromTrial\",\n                  \"invoiceId\",\n                  \"plan\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"inviteCode\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"consent\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"granted\",\n                      \"refused\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"consent\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"remoteCaching\": {\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"type\": \"object\",\n                    \"description\": \"Represents configuration for remote caching\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"enabled\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"default\",\n                      \"on\",\n                      \"off\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enabled\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"enabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"scope\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"dashboard\",\n                      \"log-drains\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enabled\",\n                  \"scope\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previous\": {\n                    \"additionalProperties\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"accessGroupId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"accessGroupId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"OWNER\",\n                            \"MEMBER\",\n                            \"DEVELOPER\",\n                            \"SECURITY\",\n                            \"BILLING\",\n                            \"VIEWER\",\n                            \"VIEWER_FOR_PLUS\",\n                            \"CONTRIBUTOR\"\n                          ]\n                        }\n                      ]\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"additionalProperties\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"accessGroupId\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"accessGroupId\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"OWNER\",\n                            \"MEMBER\",\n                            \"DEVELOPER\",\n                            \"SECURITY\",\n                            \"BILLING\",\n                            \"VIEWER\",\n                            \"VIEWER_FOR_PLUS\",\n                            \"CONTRIBUTOR\"\n                          ]\n                        }\n                      ]\n                    },\n                    \"type\": \"object\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"domain\": {\n                    \"type\": \"string\"\n                  },\n                  \"ips\": {\n                    \"items\": {\n                      \"type\": \"string\"\n                    },\n                    \"type\": \"array\"\n                  }\n                },\n                \"required\": [\n                  \"domain\",\n                  \"ips\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"exportId\": {\n                    \"type\": \"string\"\n                  },\n                  \"from\": {\n                    \"type\": \"number\"\n                  },\n                  \"to\": {\n                    \"type\": \"number\"\n                  },\n                  \"format\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"exportId\",\n                  \"format\",\n                  \"from\",\n                  \"to\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"fileId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"fileId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"slug\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"provider\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"github\",\n                      \"github-limited\",\n                      \"github-custom-host\",\n                      \"gitlab\",\n                      \"bitbucket\",\n                      \"google\",\n                      \"apple\",\n                      \"chatgpt\"\n                    ]\n                  },\n                  \"login\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"login\",\n                  \"provider\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"totp\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"recoveryCodes\": {\n                    \"type\": \"number\"\n                  },\n                  \"actorId\": {\n                    \"type\": \"string\"\n                  },\n                  \"actorType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"user\",\n                      \"admin\"\n                    ]\n                  },\n                  \"reason\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"recoveryCodes\",\n                  \"totp\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"deletedAt\": {\n                    \"nullable\": true,\n                    \"type\": \"number\"\n                  },\n                  \"username\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"username\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"previous\": {\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"totpVerified\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"enabled\",\n                      \"totpVerified\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"next\": {\n                    \"properties\": {\n                      \"enabled\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      },\n                      \"totpVerified\": {\n                        \"type\": \"boolean\",\n                        \"enum\": [\n                          false,\n                          true\n                        ]\n                      }\n                    },\n                    \"required\": [\n                      \"enabled\",\n                      \"totpVerified\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"next\",\n                  \"previous\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"mfaEnabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"mfaEnabled\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"enabled\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  },\n                  \"totpVerified\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"enabled\",\n                  \"totpVerified\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"email\": {\n                    \"type\": \"string\"\n                  },\n                  \"prevEmail\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"email\",\n                  \"prevEmail\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"username\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"username\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"ruleName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"ruleName\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"peering\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"accountId\": {\n                        \"type\": \"string\"\n                      },\n                      \"region\": {\n                        \"type\": \"string\"\n                      },\n                      \"vpcId\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"accountId\",\n                      \"id\",\n                      \"region\",\n                      \"vpcId\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"peering\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"peering\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"peering\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"team\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"configuration\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"peering\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\"\n                      }\n                    },\n                    \"required\": [\n                      \"id\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"newName\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"configuration\",\n                  \"peering\",\n                  \"team\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"tier\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"pro\",\n                      \"plus\"\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"tier\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"url\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"url\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"chatId\": {\n                    \"type\": \"string\"\n                  },\n                  \"chatTitle\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"chatId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"chatId\": {\n                    \"type\": \"string\"\n                  },\n                  \"chatTitle\": {\n                    \"type\": \"string\"\n                  },\n                  \"messageId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"chatId\",\n                  \"messageId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"deploymentId\": {\n                    \"type\": \"string\"\n                  },\n                  \"projectId\": {\n                    \"type\": \"string\"\n                  },\n                  \"runId\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"deploymentId\",\n                  \"projectId\",\n                  \"runId\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              },\n              {\n                \"properties\": {\n                  \"grantType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"authorization_code\",\n                      \"urn:ietf:params:oauth:grant-type:device_code\"\n                    ]\n                  },\n                  \"appName\": {\n                    \"type\": \"string\",\n                    \"description\": \"the app's name at the time the event was published (it could have changed since then)\"\n                  },\n                  \"atTTL\": {\n                    \"type\": \"number\",\n                    \"description\": \"access_token TTL\"\n                  },\n                  \"rtTTL\": {\n                    \"type\": \"number\",\n                    \"description\": \"refresh_token TTL\"\n                  },\n                  \"scope\": {\n                    \"type\": \"string\"\n                  },\n                  \"authMethod\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"email\",\n                      \"saml\",\n                      \"app\",\n                      \"github\",\n                      \"gitlab\",\n                      \"bitbucket\",\n                      \"google\",\n                      \"apple\",\n                      \"chatgpt\",\n                      \"github-webhook\",\n                      \"manual\",\n                      \"passkey\",\n                      \"otp\",\n                      \"sms\",\n                      \"invite\",\n                      \"emu\"\n                    ]\n                  },\n                  \"app\": {\n                    \"properties\": {\n                      \"clientId\": {\n                        \"type\": \"string\"\n                      },\n                      \"name\": {\n                        \"type\": \"string\",\n                        \"description\": \"the app's name at the time the event was published (it could have changed since then)\"\n                      },\n                      \"clientAuthenticationUsed\": {\n                        \"properties\": {\n                          \"method\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"client_secret_basic\",\n                              \"client_secret_post\",\n                              \"client_secret_jwt\",\n                              \"private_key_jwt\",\n                              \"oidc_token\",\n                              \"none\"\n                            ]\n                          },\n                          \"secretId\": {\n                            \"type\": \"string\"\n                          }\n                        },\n                        \"required\": [\n                          \"method\"\n                        ],\n                        \"type\": \"object\"\n                      }\n                    },\n                    \"required\": [\n                      \"clientAuthenticationUsed\",\n                      \"clientId\",\n                      \"name\"\n                    ],\n                    \"type\": \"object\",\n                    \"description\": \"optional since entries prior to 2025-10-13 do not contain app information\"\n                  },\n                  \"includesRefreshToken\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ],\n                    \"description\": \"optional since entries prior to 2025-10-13 do not contain this field\"\n                  },\n                  \"publicId\": {\n                    \"type\": \"string\",\n                    \"description\": \"optional since entries prior to 2025-10-13 do not contain this field\"\n                  },\n                  \"sessionId\": {\n                    \"type\": \"string\",\n                    \"description\": \"optional since entries prior to 2025-10-13 do not contain this field\"\n                  }\n                },\n                \"required\": [\n                  \"appName\",\n                  \"atTTL\",\n                  \"authMethod\",\n                  \"grantType\",\n                  \"scope\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"The payload of the event, if requested.\"\n              }\n            ]\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"entities\",\n          \"id\",\n          \"principalId\",\n          \"text\",\n          \"userId\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"Array of events generated by the User.\"\n      },\n      \"Flag\": {\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"variants\": {\n            \"items\": {\n              \"properties\": {\n                \"description\": {\n                  \"type\": \"string\"\n                },\n                \"label\": {\n                  \"type\": \"string\"\n                },\n                \"value\": {\n                  \"oneOf\": [\n                    {\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"type\": \"number\"\n                    },\n                    {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    }\n                  ]\n                },\n                \"id\": {\n                  \"type\": \"string\"\n                }\n              },\n              \"required\": [\n                \"id\",\n                \"value\"\n              ],\n              \"type\": \"object\"\n            },\n            \"type\": \"array\"\n          },\n          \"id\": {\n            \"type\": \"string\"\n          },\n          \"environments\": {\n            \"additionalProperties\": {\n              \"properties\": {\n                \"reuse\": {\n                  \"properties\": {\n                    \"active\": {\n                      \"type\": \"boolean\",\n                      \"enum\": [\n                        false,\n                        true\n                      ]\n                    },\n                    \"environment\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"active\",\n                    \"environment\"\n                  ],\n                  \"type\": \"object\"\n                },\n                \"targets\": {\n                  \"additionalProperties\": {\n                    \"additionalProperties\": {\n                      \"additionalProperties\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"note\": {\n                              \"type\": \"string\"\n                            },\n                            \"value\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"value\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      },\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"object\"\n                  },\n                  \"type\": \"object\"\n                },\n                \"revision\": {\n                  \"type\": \"number\"\n                },\n                \"pausedOutcome\": {\n                  \"properties\": {\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"variant\"\n                      ]\n                    },\n                    \"variantId\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"type\",\n                    \"variantId\"\n                  ],\n                  \"type\": \"object\"\n                },\n                \"fallthrough\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"variant\"\n                          ]\n                        },\n                        \"variantId\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"type\",\n                        \"variantId\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    {\n                      \"properties\": {\n                        \"type\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"split\"\n                          ]\n                        },\n                        \"base\": {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"entity\"\n                              ]\n                            },\n                            \"kind\": {\n                              \"type\": \"string\"\n                            },\n                            \"attribute\": {\n                              \"type\": \"string\"\n                            }\n                          },\n                          \"required\": [\n                            \"attribute\",\n                            \"kind\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"weights\": {\n                          \"additionalProperties\": {\n                            \"type\": \"number\"\n                          },\n                          \"type\": \"object\"\n                        },\n                        \"defaultVariantId\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"base\",\n                        \"defaultVariantId\",\n                        \"type\",\n                        \"weights\"\n                      ],\n                      \"type\": \"object\"\n                    }\n                  ]\n                },\n                \"active\": {\n                  \"type\": \"boolean\",\n                  \"enum\": [\n                    false,\n                    true\n                  ]\n                },\n                \"rules\": {\n                  \"items\": {\n                    \"properties\": {\n                      \"id\": {\n                        \"type\": \"string\"\n                      },\n                      \"outcome\": {\n                        \"oneOf\": [\n                          {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"variant\"\n                                ]\n                              },\n                              \"variantId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"type\",\n                              \"variantId\"\n                            ],\n                            \"type\": \"object\"\n                          },\n                          {\n                            \"properties\": {\n                              \"type\": {\n                                \"type\": \"string\",\n                                \"enum\": [\n                                  \"split\"\n                                ]\n                              },\n                              \"base\": {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"entity\"\n                                    ]\n                                  },\n                                  \"kind\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"attribute\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"attribute\",\n                                  \"kind\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              \"weights\": {\n                                \"additionalProperties\": {\n                                  \"type\": \"number\"\n                                },\n                                \"type\": \"object\"\n                              },\n                              \"defaultVariantId\": {\n                                \"type\": \"string\"\n                              }\n                            },\n                            \"required\": [\n                              \"base\",\n                              \"defaultVariantId\",\n                              \"type\",\n                              \"weights\"\n                            ],\n                            \"type\": \"object\"\n                          }\n                        ]\n                      },\n                      \"conditions\": {\n                        \"items\": {\n                          \"properties\": {\n                            \"rhs\": {\n                              \"oneOf\": [\n                                {\n                                  \"type\": \"string\"\n                                },\n                                {\n                                  \"type\": \"number\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"list/inline\",\n                                        \"list\"\n                                      ]\n                                    },\n                                    \"items\": {\n                                      \"items\": {\n                                        \"oneOf\": [\n                                          {\n                                            \"properties\": {\n                                              \"label\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"note\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"value\": {\n                                                \"type\": \"number\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          },\n                                          {\n                                            \"properties\": {\n                                              \"label\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"note\": {\n                                                \"type\": \"string\"\n                                              },\n                                              \"value\": {\n                                                \"type\": \"string\"\n                                              }\n                                            },\n                                            \"required\": [\n                                              \"value\"\n                                            ],\n                                            \"type\": \"object\"\n                                          }\n                                        ]\n                                      },\n                                      \"type\": \"array\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"items\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"regex\"\n                                      ]\n                                    },\n                                    \"pattern\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"flags\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"flags\",\n                                    \"pattern\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              ]\n                            },\n                            \"cmpOptions\": {\n                              \"properties\": {\n                                \"ignoreCase\": {\n                                  \"type\": \"boolean\",\n                                  \"enum\": [\n                                    false,\n                                    true\n                                  ]\n                                }\n                              },\n                              \"type\": \"object\"\n                            },\n                            \"lhs\": {\n                              \"oneOf\": [\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"segment\"\n                                      ]\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                },\n                                {\n                                  \"properties\": {\n                                    \"type\": {\n                                      \"type\": \"string\",\n                                      \"enum\": [\n                                        \"entity\"\n                                      ]\n                                    },\n                                    \"kind\": {\n                                      \"type\": \"string\"\n                                    },\n                                    \"attribute\": {\n                                      \"type\": \"string\"\n                                    }\n                                  },\n                                  \"required\": [\n                                    \"attribute\",\n                                    \"kind\",\n                                    \"type\"\n                                  ],\n                                  \"type\": \"object\"\n                                }\n                              ]\n                            },\n                            \"cmp\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"eq\",\n                                \"!eq\",\n                                \"oneOf\",\n                                \"!oneOf\",\n                                \"containsAllOf\",\n                                \"containsAnyOf\",\n                                \"containsNoneOf\",\n                                \"startsWith\",\n                                \"!startsWith\",\n                                \"endsWith\",\n                                \"!endsWith\",\n                                \"contains\",\n                                \"!contains\",\n                                \"ex\",\n                                \"!ex\",\n                                \"gt\",\n                                \"gte\",\n                                \"lt\",\n                                \"lte\",\n                                \"regex\",\n                                \"!regex\",\n                                \"before\",\n                                \"after\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"cmp\",\n                            \"lhs\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        \"type\": \"array\"\n                      }\n                    },\n                    \"required\": [\n                      \"conditions\",\n                      \"id\",\n                      \"outcome\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"type\": \"array\"\n                }\n              },\n              \"required\": [\n                \"active\",\n                \"fallthrough\",\n                \"pausedOutcome\",\n                \"rules\"\n              ],\n              \"type\": \"object\"\n            },\n            \"type\": \"object\"\n          },\n          \"kind\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"string\",\n              \"number\",\n              \"boolean\"\n            ]\n          },\n          \"revision\": {\n            \"type\": \"number\"\n          },\n          \"seed\": {\n            \"type\": \"number\"\n          },\n          \"state\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"active\",\n              \"archived\"\n            ]\n          },\n          \"slug\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\"\n          },\n          \"updatedAt\": {\n            \"type\": \"number\"\n          },\n          \"createdBy\": {\n            \"type\": \"string\"\n          },\n          \"ownerId\": {\n            \"type\": \"string\"\n          },\n          \"projectId\": {\n            \"type\": \"string\"\n          },\n          \"typeName\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"flag\"\n            ]\n          },\n          \"metadata\": {\n            \"properties\": {\n              \"creator\": {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"name\"\n                ],\n                \"type\": \"object\"\n              }\n            },\n            \"type\": \"object\"\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"createdBy\",\n          \"environments\",\n          \"id\",\n          \"kind\",\n          \"ownerId\",\n          \"projectId\",\n          \"revision\",\n          \"seed\",\n          \"slug\",\n          \"state\",\n          \"typeName\",\n          \"updatedAt\",\n          \"variants\"\n        ],\n        \"type\": \"object\"\n      },\n      \"Segment\": {\n        \"properties\": {\n          \"description\": {\n            \"type\": \"string\"\n          },\n          \"createdBy\": {\n            \"type\": \"string\"\n          },\n          \"usedByFlags\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\"\n          },\n          \"usedBySegments\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\"\n          },\n          \"id\": {\n            \"type\": \"string\"\n          },\n          \"label\": {\n            \"type\": \"string\"\n          },\n          \"slug\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\"\n          },\n          \"updatedAt\": {\n            \"type\": \"number\"\n          },\n          \"projectId\": {\n            \"type\": \"string\"\n          },\n          \"typeName\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"segment\"\n            ]\n          },\n          \"data\": {\n            \"properties\": {\n              \"rules\": {\n                \"items\": {\n                  \"properties\": {\n                    \"id\": {\n                      \"type\": \"string\"\n                    },\n                    \"outcome\": {\n                      \"oneOf\": [\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"all\"\n                              ]\n                            }\n                          },\n                          \"required\": [\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        },\n                        {\n                          \"properties\": {\n                            \"type\": {\n                              \"type\": \"string\",\n                              \"enum\": [\n                                \"split\"\n                              ]\n                            },\n                            \"base\": {\n                              \"properties\": {\n                                \"type\": {\n                                  \"type\": \"string\",\n                                  \"enum\": [\n                                    \"entity\"\n                                  ]\n                                },\n                                \"kind\": {\n                                  \"type\": \"string\"\n                                },\n                                \"attribute\": {\n                                  \"type\": \"string\"\n                                }\n                              },\n                              \"required\": [\n                                \"attribute\",\n                                \"kind\",\n                                \"type\"\n                              ],\n                              \"type\": \"object\"\n                            },\n                            \"passPromille\": {\n                              \"type\": \"number\"\n                            }\n                          },\n                          \"required\": [\n                            \"base\",\n                            \"passPromille\",\n                            \"type\"\n                          ],\n                          \"type\": \"object\"\n                        }\n                      ]\n                    },\n                    \"conditions\": {\n                      \"items\": {\n                        \"properties\": {\n                          \"rhs\": {\n                            \"oneOf\": [\n                              {\n                                \"type\": \"string\"\n                              },\n                              {\n                                \"type\": \"number\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"list/inline\",\n                                      \"list\"\n                                    ]\n                                  },\n                                  \"items\": {\n                                    \"items\": {\n                                      \"oneOf\": [\n                                        {\n                                          \"properties\": {\n                                            \"label\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"note\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"type\": \"number\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        },\n                                        {\n                                          \"properties\": {\n                                            \"label\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"note\": {\n                                              \"type\": \"string\"\n                                            },\n                                            \"value\": {\n                                              \"type\": \"string\"\n                                            }\n                                          },\n                                          \"required\": [\n                                            \"value\"\n                                          ],\n                                          \"type\": \"object\"\n                                        }\n                                      ]\n                                    },\n                                    \"type\": \"array\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"items\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"regex\"\n                                    ]\n                                  },\n                                  \"pattern\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"flags\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"flags\",\n                                  \"pattern\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            ]\n                          },\n                          \"cmpOptions\": {\n                            \"properties\": {\n                              \"ignoreCase\": {\n                                \"type\": \"boolean\",\n                                \"enum\": [\n                                  false,\n                                  true\n                                ]\n                              }\n                            },\n                            \"type\": \"object\"\n                          },\n                          \"lhs\": {\n                            \"oneOf\": [\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"segment\"\n                                    ]\n                                  }\n                                },\n                                \"required\": [\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              },\n                              {\n                                \"properties\": {\n                                  \"type\": {\n                                    \"type\": \"string\",\n                                    \"enum\": [\n                                      \"entity\"\n                                    ]\n                                  },\n                                  \"kind\": {\n                                    \"type\": \"string\"\n                                  },\n                                  \"attribute\": {\n                                    \"type\": \"string\"\n                                  }\n                                },\n                                \"required\": [\n                                  \"attribute\",\n                                  \"kind\",\n                                  \"type\"\n                                ],\n                                \"type\": \"object\"\n                              }\n                            ]\n                          },\n                          \"cmp\": {\n                            \"type\": \"string\",\n                            \"enum\": [\n                              \"eq\",\n                              \"!eq\",\n                              \"oneOf\",\n                              \"!oneOf\",\n                              \"containsAllOf\",\n                              \"containsAnyOf\",\n                              \"containsNoneOf\",\n                              \"startsWith\",\n                              \"!startsWith\",\n                              \"endsWith\",\n                              \"!endsWith\",\n                              \"contains\",\n                              \"!contains\",\n                              \"ex\",\n                              \"!ex\",\n                              \"gt\",\n                              \"gte\",\n                              \"lt\",\n                              \"lte\",\n                              \"regex\",\n                              \"!regex\",\n                              \"before\",\n                              \"after\"\n                            ]\n                          }\n                        },\n                        \"required\": [\n                          \"cmp\",\n                          \"lhs\"\n                        ],\n                        \"type\": \"object\"\n                      },\n                      \"type\": \"array\"\n                    }\n                  },\n                  \"required\": [\n                    \"conditions\",\n                    \"id\",\n                    \"outcome\"\n                  ],\n                  \"type\": \"object\"\n                },\n                \"type\": \"array\"\n              },\n              \"include\": {\n                \"additionalProperties\": {\n                  \"additionalProperties\": {\n                    \"items\": {\n                      \"properties\": {\n                        \"note\": {\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"value\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"type\": \"object\"\n                },\n                \"type\": \"object\"\n              },\n              \"exclude\": {\n                \"additionalProperties\": {\n                  \"additionalProperties\": {\n                    \"items\": {\n                      \"properties\": {\n                        \"note\": {\n                          \"type\": \"string\"\n                        },\n                        \"value\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"value\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"type\": \"array\"\n                  },\n                  \"type\": \"object\"\n                },\n                \"type\": \"object\"\n              }\n            },\n            \"type\": \"object\"\n          },\n          \"hint\": {\n            \"type\": \"string\"\n          },\n          \"metadata\": {\n            \"properties\": {\n              \"creator\": {\n                \"properties\": {\n                  \"id\": {\n                    \"type\": \"string\"\n                  },\n                  \"name\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"id\",\n                  \"name\"\n                ],\n                \"type\": \"object\"\n              }\n            },\n            \"type\": \"object\"\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"data\",\n          \"hint\",\n          \"id\",\n          \"label\",\n          \"projectId\",\n          \"slug\",\n          \"typeName\",\n          \"updatedAt\"\n        ],\n        \"type\": \"object\"\n      },\n      \"FlagsSdkKey\": {\n        \"properties\": {\n          \"hashKey\": {\n            \"type\": \"string\"\n          },\n          \"projectId\": {\n            \"type\": \"string\"\n          },\n          \"type\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"server\",\n              \"mobile\",\n              \"client\"\n            ]\n          },\n          \"environment\": {\n            \"type\": \"string\"\n          },\n          \"createdBy\": {\n            \"type\": \"string\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\"\n          },\n          \"updatedAt\": {\n            \"type\": \"number\"\n          },\n          \"label\": {\n            \"type\": \"string\"\n          },\n          \"deletedAt\": {\n            \"type\": \"number\"\n          },\n          \"keyValue\": {\n            \"type\": \"string\",\n            \"description\": \"Cleartext value of the SDK key\"\n          },\n          \"tokenValue\": {\n            \"type\": \"string\",\n            \"description\": \"Cleartext value of the Edge Config token\"\n          },\n          \"connectionString\": {\n            \"type\": \"string\",\n            \"description\": \"Connection string for the SDK\"\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"createdBy\",\n          \"environment\",\n          \"hashKey\",\n          \"projectId\",\n          \"type\",\n          \"updatedAt\"\n        ],\n        \"type\": \"object\"\n      },\n      \"ACLAction\": {\n        \"type\": \"string\",\n        \"enum\": [\n          \"create\",\n          \"delete\",\n          \"read\",\n          \"update\",\n          \"list\"\n        ],\n        \"description\": \"Enum containing the actions that can be performed against a resource. Group operations are included.\"\n      },\n      \"SandboxInjectionRule\": {\n        \"properties\": {\n          \"domain\": {\n            \"type\": \"string\",\n            \"description\": \"The domain (or pattern) that this injection rule applies to. Supports wildcards like *.vercel.com.\",\n            \"example\": \"api.vercel.com\"\n          },\n          \"headerNames\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"The names of HTTP headers that have value that will be injected for requests to this domain.\",\n            \"example\": [\n              \"Authorization\",\n              \"X-API-Key\"\n            ]\n          }\n        },\n        \"required\": [\n          \"domain\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"HTTP header injection rules for outgoing requests matching specific domains.\"\n      },\n      \"SandboxNetworkPolicy\": {\n        \"properties\": {\n          \"mode\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"allow-all\",\n              \"deny-all\",\n              \"custom\"\n            ],\n            \"description\": \"The network policy mode. - 'allow-all': All traffic is allowed. - 'deny-all': All traffic is blocked. - 'custom': Traffic is controlled by explicit allow/deny rules.\",\n            \"example\": \"custom\"\n          },\n          \"allowedDomains\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"List of domain names the sandbox is allowed to connect to. Supports wildcard patterns (e.g., \\\"*.vercel.com\\\" matches all subdomains).\",\n            \"example\": [\n              \"api.vercel.com\",\n              \"*.example.com\"\n            ]\n          },\n          \"allowedCIDRs\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"List of IP address ranges (in CIDR notation) the sandbox is allowed to connect to.\",\n            \"example\": [\n              \"10.0.0.0/8\"\n            ]\n          },\n          \"deniedCIDRs\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"List of IP address ranges (in CIDR notation) the sandbox is blocked from connecting to. These rules take precedence over all allowed rules.\",\n            \"example\": [\n              \"10.0.0.0/8\"\n            ]\n          },\n          \"injectionRules\": {\n            \"items\": {\n              \"$ref\": \"#/components/schemas/SandboxInjectionRule\"\n            },\n            \"type\": \"array\",\n            \"description\": \"HTTP header injection rules for outgoing requests matching specific domains.\"\n          }\n        },\n        \"required\": [\n          \"mode\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"The network policy applied to this sandbox, if any.\"\n      },\n      \"Sandbox\": {\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the sandbox.\",\n            \"example\": \"sbx_123a6c5209bc3778245d011443644c8d27dc2c50\"\n          },\n          \"memory\": {\n            \"type\": \"number\",\n            \"description\": \"Memory allocated to this sandbox in MB.\",\n            \"example\": 2048\n          },\n          \"vcpus\": {\n            \"type\": \"number\",\n            \"description\": \"Number of vCPUs allocated to this sandbox.\",\n            \"example\": 2\n          },\n          \"region\": {\n            \"type\": \"string\",\n            \"description\": \"The region where the sandbox is hosted.\",\n            \"example\": \"iad1\"\n          },\n          \"runtime\": {\n            \"type\": \"string\",\n            \"description\": \"The runtime of the sandbox.\",\n            \"example\": \"node22\"\n          },\n          \"timeout\": {\n            \"type\": \"number\",\n            \"description\": \"The maximum amount of time the sandbox will run for in milliseconds.\",\n            \"example\": 3600000\n          },\n          \"status\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"failed\",\n              \"aborted\",\n              \"pending\",\n              \"stopping\",\n              \"snapshotting\",\n              \"running\",\n              \"stopped\"\n            ],\n            \"description\": \"The status of the sandbox.\",\n            \"example\": \"running\"\n          },\n          \"requestedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the sandbox was requested, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"startedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the sandbox was started, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"cwd\": {\n            \"type\": \"string\",\n            \"description\": \"The working directory of the sandbox.\",\n            \"example\": \"/vercel/sandbox\"\n          },\n          \"requestedStopAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the sandbox was requested to stop, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"stoppedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the sandbox was stopped, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"abortedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the sandbox was aborted, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"duration\": {\n            \"type\": \"number\",\n            \"description\": \"The duration of the sandbox in milliseconds.\",\n            \"example\": 3600000\n          },\n          \"sourceSnapshotId\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the snapshot associated with this sandbox, if any.\",\n            \"example\": \"snap_123a6c5209bc3778245d011443644c8d27dc2c50\"\n          },\n          \"snapshottedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when a snapshot was requested, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the sandbox was created, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"updatedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The last time the sandbox was updated, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"networkPolicy\": {\n            \"$ref\": \"#/components/schemas/SandboxNetworkPolicy\"\n          },\n          \"activeCpuDurationMs\": {\n            \"type\": \"number\",\n            \"description\": \"The amount of CPU time the sandbox consumed, if available, in milliseconds. This value is only available once the sandbox is stopped, and only if it stopped successfully.\",\n            \"example\": 42\n          },\n          \"networkTransfer\": {\n            \"properties\": {\n              \"ingress\": {\n                \"type\": \"number\"\n              },\n              \"egress\": {\n                \"type\": \"number\"\n              }\n            },\n            \"required\": [\n              \"egress\",\n              \"ingress\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"The quantity of data transfered to and from the sandbox, in bytes. This value is only available once the sandbox is stopped, and only if it stopped successfully.\",\n            \"example\": {\n              \"in\": 12543852,\n              \"out\": 15368\n            }\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"cwd\",\n          \"id\",\n          \"memory\",\n          \"region\",\n          \"requestedAt\",\n          \"runtime\",\n          \"status\",\n          \"timeout\",\n          \"updatedAt\",\n          \"vcpus\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"This object contains information related to a Vercel Sandbox.\"\n      },\n      \"Snapshot\": {\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the snapshot.\",\n            \"example\": \"snap_123a6c5209bc3778245d011443644c8d27dc2c50\"\n          },\n          \"sourceSandboxId\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the sandbox from which the snapshot was created.\",\n            \"example\": \"sbx_123a6c5209bc3778245d011443644c8d27dc2c50\"\n          },\n          \"region\": {\n            \"type\": \"string\",\n            \"description\": \"The region where the snapshot is stored.\",\n            \"example\": \"iad1\"\n          },\n          \"status\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"failed\",\n              \"created\",\n              \"deleted\"\n            ],\n            \"description\": \"The status of the snapshot.\",\n            \"example\": \"created\"\n          },\n          \"sizeBytes\": {\n            \"type\": \"number\",\n            \"description\": \"The size of the snapshot in bytes.\",\n            \"example\": 104857600\n          },\n          \"expiresAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the snapshot will expire, in milliseconds since the epoch. If not set, the snapshot does not have any expiration.\",\n            \"example\": 1750344501629\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"The time when the snapshot was created, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          },\n          \"updatedAt\": {\n            \"type\": \"number\",\n            \"description\": \"The last time the snapshot was updated, in milliseconds since the epoch.\",\n            \"example\": 1750344501629\n          }\n        },\n        \"required\": [\n          \"createdAt\",\n          \"id\",\n          \"region\",\n          \"sizeBytes\",\n          \"sourceSandboxId\",\n          \"status\",\n          \"updatedAt\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"This object contains information related to a Snapshot of a Vercel Sandbox.\"\n      },\n      \"SandboxPublicRoute\": {\n        \"properties\": {\n          \"url\": {\n            \"type\": \"string\",\n            \"description\": \"A public URL to access the corresponding port in the Sandbox.\"\n          },\n          \"port\": {\n            \"type\": \"number\",\n            \"description\": \"The user port number that the route is mapped to.\"\n          },\n          \"subdomain\": {\n            \"type\": \"string\",\n            \"description\": \"The subdomain assigned to this route.\"\n          },\n          \"system\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              true\n            ],\n            \"description\": \"Whether the route is reserved by the system (e.g. for internal use).\"\n          }\n        },\n        \"required\": [\n          \"port\",\n          \"subdomain\",\n          \"url\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"This object represents a public route in a Vercel Sandbox.\"\n      },\n      \"SandboxCommand\": {\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the command.\",\n            \"example\": \"cmd_123a6c5209bc3778245d011443644c8d27dc2c50\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the command.\",\n            \"example\": \"npm\"\n          },\n          \"args\": {\n            \"items\": {\n              \"type\": \"string\"\n            },\n            \"type\": \"array\",\n            \"description\": \"The arguments of the command.\",\n            \"example\": [\n              \"run\",\n              \"build\"\n            ]\n          },\n          \"cwd\": {\n            \"type\": \"string\",\n            \"description\": \"The current working directory of the command.\",\n            \"example\": \"/vercel/sandbox\"\n          },\n          \"sandboxId\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the sandbox associated with the command.\",\n            \"example\": \"sbx_123a6c5209bc3778245d011443644c8d27dc2c50\"\n          },\n          \"exitCode\": {\n            \"nullable\": true,\n            \"type\": \"number\",\n            \"description\": \"If the command did finish, the exit code.\",\n            \"example\": 0\n          },\n          \"startedAt\": {\n            \"type\": \"number\",\n            \"description\": \"When the command was started, in milliseconds since the epoch.\",\n            \"example\": 1673123456789\n          }\n        },\n        \"required\": [\n          \"args\",\n          \"cwd\",\n          \"exitCode\",\n          \"id\",\n          \"name\",\n          \"sandboxId\",\n          \"startedAt\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"This object represents command run in a Vercel Sandbox.\"\n      },\n      \"InvitedTeamMember\": {\n        \"properties\": {\n          \"uid\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the invited user\",\n            \"example\": \"kr1PsOIzqEL5Xg6M4VZcZosf\"\n          },\n          \"username\": {\n            \"type\": \"string\",\n            \"description\": \"The username of the invited user\",\n            \"example\": \"john-doe\"\n          },\n          \"email\": {\n            \"type\": \"string\",\n            \"description\": \"The email of the invited user.\",\n            \"example\": \"john@user.co\"\n          },\n          \"role\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"OWNER\",\n              \"MEMBER\",\n              \"DEVELOPER\",\n              \"SECURITY\",\n              \"BILLING\",\n              \"VIEWER\",\n              \"VIEWER_FOR_PLUS\",\n              \"CONTRIBUTOR\"\n            ],\n            \"description\": \"The role used for the invitation\",\n            \"example\": \"MEMBER\"\n          },\n          \"teamRoles\": {\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"OWNER\",\n                \"MEMBER\",\n                \"DEVELOPER\",\n                \"SECURITY\",\n                \"BILLING\",\n                \"VIEWER\",\n                \"VIEWER_FOR_PLUS\",\n                \"CONTRIBUTOR\"\n              ],\n              \"description\": \"The team roles of the user\",\n              \"example\": [\n                \"MEMBER\"\n              ]\n            },\n            \"type\": \"array\",\n            \"description\": \"The team roles of the user\",\n            \"example\": [\n              \"MEMBER\"\n            ]\n          },\n          \"teamPermissions\": {\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"IntegrationManager\",\n                \"CreateProject\",\n                \"FullProductionDeployment\",\n                \"UsageViewer\",\n                \"EnvVariableManager\",\n                \"EnvironmentManager\",\n                \"V0Builder\",\n                \"V0Chatter\",\n                \"V0Viewer\"\n              ],\n              \"description\": \"The team permissions of the user\",\n              \"example\": [\n                \"CreateProject\"\n              ]\n            },\n            \"type\": \"array\",\n            \"description\": \"The team permissions of the user\",\n            \"example\": [\n              \"CreateProject\"\n            ]\n          }\n        },\n        \"required\": [\n          \"email\",\n          \"role\",\n          \"uid\",\n          \"username\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"The member was successfully added to the team.\"\n      },\n      \"Team\": {\n        \"properties\": {\n          \"connect\": {\n            \"properties\": {\n              \"enabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ]\n              }\n            },\n            \"type\": \"object\"\n          },\n          \"creatorId\": {\n            \"type\": \"string\",\n            \"description\": \"The ID of the user who created the Team.\",\n            \"example\": \"R6efeCJQ2HKXywuasPDc0fOWB\"\n          },\n          \"updatedAt\": {\n            \"type\": \"number\",\n            \"description\": \"Timestamp (in milliseconds) of when the Team was last updated.\",\n            \"example\": 1611796915677\n          },\n          \"emailDomain\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"Hostname that'll be matched with emails on sign-up to automatically join the Team.\",\n            \"example\": \"example.com\"\n          },\n          \"saml\": {\n            \"properties\": {\n              \"connection\": {\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"description\": \"The Identity Provider \\\"type\\\", for example Okta.\",\n                    \"example\": \"OktaSAML\"\n                  },\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"description\": \"Current status of the connection.\",\n                    \"example\": \"linked\"\n                  },\n                  \"state\": {\n                    \"type\": \"string\",\n                    \"description\": \"Current state of the connection.\",\n                    \"example\": \"active\"\n                  },\n                  \"connectedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the configuration was connected.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastReceivedWebhookEvent\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastSyncedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last directory sync was performed.\",\n                    \"example\": 1611796915677\n                  },\n                  \"syncState\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SETUP\",\n                      \"ACTIVE\"\n                    ],\n                    \"description\": \"Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility.\"\n                  }\n                },\n                \"required\": [\n                  \"connectedAt\",\n                  \"state\",\n                  \"status\",\n                  \"type\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"Information for the SAML Single Sign-On configuration.\"\n              },\n              \"directory\": {\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"description\": \"The Identity Provider \\\"type\\\", for example Okta.\",\n                    \"example\": \"OktaSAML\"\n                  },\n                  \"state\": {\n                    \"type\": \"string\",\n                    \"description\": \"Current state of the connection.\",\n                    \"example\": \"active\"\n                  },\n                  \"connectedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the configuration was connected.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastReceivedWebhookEvent\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastSyncedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last directory sync was performed.\",\n                    \"example\": 1611796915677\n                  },\n                  \"syncState\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SETUP\",\n                      \"ACTIVE\"\n                    ],\n                    \"description\": \"Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility.\"\n                  }\n                },\n                \"required\": [\n                  \"connectedAt\",\n                  \"state\",\n                  \"type\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"Information for the Directory Sync configuration.\"\n              },\n              \"enforced\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ],\n                \"description\": \"When `true`, interactions with the Team **must** be done with an authentication token that has been authenticated with the Team's SAML Single Sign-On provider.\"\n              },\n              \"defaultRedirectUri\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"vercel.com\",\n                  \"v0.dev\",\n                  \"v0.app\"\n                ],\n                \"description\": \"The default redirect URI to use after successful SAML authentication.\"\n              },\n              \"roles\": {\n                \"additionalProperties\": {\n                  \"oneOf\": [\n                    {\n                      \"properties\": {\n                        \"accessGroupId\": {\n                          \"type\": \"string\"\n                        }\n                      },\n                      \"required\": [\n                        \"accessGroupId\"\n                      ],\n                      \"type\": \"object\",\n                      \"description\": \"When \\\"Directory Sync\\\" is configured, this object contains a mapping of which Directory Group (by ID) should be assigned to which Vercel Team \\\"role\\\".\"\n                    },\n                    {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"OWNER\",\n                        \"MEMBER\",\n                        \"DEVELOPER\",\n                        \"SECURITY\",\n                        \"BILLING\",\n                        \"VIEWER\",\n                        \"VIEWER_FOR_PLUS\",\n                        \"CONTRIBUTOR\"\n                      ]\n                    }\n                  ]\n                },\n                \"type\": \"object\",\n                \"description\": \"When \\\"Directory Sync\\\" is configured, this object contains a mapping of which Directory Group (by ID) should be assigned to which Vercel Team \\\"role\\\".\"\n              }\n            },\n            \"required\": [\n              \"enforced\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"When \\\"Single Sign-On (SAML)\\\" is configured, this object contains information regarding the configuration of the Identity Provider (IdP).\"\n          },\n          \"inviteCode\": {\n            \"type\": \"string\",\n            \"description\": \"Code that can be used to join this Team. Only visible to Team owners.\",\n            \"example\": \"hasihf9e89\"\n          },\n          \"description\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"A short description of the Team.\",\n            \"example\": \"Our mission is to make cloud computing accessible to everyone.\"\n          },\n          \"defaultRoles\": {\n            \"properties\": {\n              \"teamRoles\": {\n                \"items\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"OWNER\",\n                    \"MEMBER\",\n                    \"DEVELOPER\",\n                    \"SECURITY\",\n                    \"BILLING\",\n                    \"VIEWER\",\n                    \"VIEWER_FOR_PLUS\",\n                    \"CONTRIBUTOR\"\n                  ]\n                },\n                \"type\": \"array\"\n              },\n              \"teamPermissions\": {\n                \"items\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"IntegrationManager\",\n                    \"CreateProject\",\n                    \"FullProductionDeployment\",\n                    \"UsageViewer\",\n                    \"EnvVariableManager\",\n                    \"EnvironmentManager\",\n                    \"V0Builder\",\n                    \"V0Chatter\",\n                    \"V0Viewer\"\n                  ]\n                },\n                \"type\": \"array\"\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"Default roles for the team.\"\n          },\n          \"stagingPrefix\": {\n            \"type\": \"string\",\n            \"description\": \"The prefix that is prepended to automatic aliases.\"\n          },\n          \"resourceConfig\": {\n            \"properties\": {\n              \"concurrentBuilds\": {\n                \"type\": \"number\",\n                \"description\": \"The total amount of concurrent builds that can be used.\"\n              },\n              \"elasticConcurrencyEnabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ],\n                \"description\": \"Whether every build for this team / user has elastic concurrency enabled automatically.\"\n              },\n              \"edgeConfigSize\": {\n                \"type\": \"number\",\n                \"description\": \"The maximum size in kilobytes of an Edge Config. Only specified if a custom limit is set.\"\n              },\n              \"edgeConfigs\": {\n                \"type\": \"number\",\n                \"description\": \"The maximum number of edge configs an account can create.\"\n              },\n              \"kvDatabases\": {\n                \"type\": \"number\",\n                \"description\": \"The maximum number of kv databases an account can create.\"\n              },\n              \"blobStores\": {\n                \"type\": \"number\",\n                \"description\": \"The maximum number of blob stores an account can create.\"\n              },\n              \"postgresDatabases\": {\n                \"type\": \"number\",\n                \"description\": \"The maximum number of postgres databases an account can create.\"\n              },\n              \"buildEntitlements\": {\n                \"properties\": {\n                  \"enhancedBuilds\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"type\": \"object\"\n              },\n              \"buildMachine\": {\n                \"properties\": {\n                  \"default\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enhanced\",\n                      \"turbo\",\n                      \"standard\",\n                      \"elastic\"\n                    ],\n                    \"description\": \"Default build machine type for new builds\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"Build machine configuration\"\n              }\n            },\n            \"type\": \"object\"\n          },\n          \"previewDeploymentSuffix\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"The hostname that is current set as preview deployment suffix.\",\n            \"example\": \"example.dev\"\n          },\n          \"platform\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ],\n            \"description\": \"Whether the team is a platform team.\",\n            \"example\": true\n          },\n          \"disableHardAutoBlocks\": {\n            \"oneOf\": [\n              {\n                \"type\": \"number\"\n              },\n              {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ]\n              }\n            ]\n          },\n          \"remoteCaching\": {\n            \"properties\": {\n              \"enabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ]\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"Is remote caching enabled for this team\"\n          },\n          \"defaultDeploymentProtection\": {\n            \"properties\": {\n              \"passwordProtection\": {\n                \"nullable\": true,\n                \"properties\": {\n                  \"deploymentType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"deploymentType\"\n                ],\n                \"type\": \"object\"\n              },\n              \"ssoProtection\": {\n                \"nullable\": true,\n                \"properties\": {\n                  \"deploymentType\": {\n                    \"type\": \"string\"\n                  }\n                },\n                \"required\": [\n                  \"deploymentType\"\n                ],\n                \"type\": \"object\"\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"Default deployment protection for this team null indicates protection is disabled\"\n          },\n          \"defaultExpirationSettings\": {\n            \"properties\": {\n              \"expirationDays\": {\n                \"type\": \"number\",\n                \"description\": \"Number of days to keep non-production deployments (mostly preview deployments) before soft deletion.\"\n              },\n              \"expirationDaysProduction\": {\n                \"type\": \"number\",\n                \"description\": \"Number of days to keep production deployments before soft deletion.\"\n              },\n              \"expirationDaysCanceled\": {\n                \"type\": \"number\",\n                \"description\": \"Number of days to keep canceled deployments before soft deletion.\"\n              },\n              \"expirationDaysErrored\": {\n                \"type\": \"number\",\n                \"description\": \"Number of days to keep errored deployments before soft deletion.\"\n              },\n              \"deploymentsToKeep\": {\n                \"type\": \"number\",\n                \"description\": \"Minimum number of production deployments to keep for this project, even if they are over the production expiration limit.\"\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"Default deployment expiration settings for this team\"\n          },\n          \"enablePreviewFeedback\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"default\",\n              \"on\",\n              \"off\",\n              \"on-force\",\n              \"off-force\",\n              \"default-force\"\n            ],\n            \"description\": \"Whether toolbar is enabled on preview deployments\"\n          },\n          \"enableProductionFeedback\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"default\",\n              \"on\",\n              \"off\",\n              \"on-force\",\n              \"off-force\",\n              \"default-force\"\n            ],\n            \"description\": \"Whether toolbar is enabled on production deployments\"\n          },\n          \"sensitiveEnvironmentVariablePolicy\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"default\",\n              \"on\",\n              \"off\"\n            ],\n            \"description\": \"Sensitive environment variable policy for this team\"\n          },\n          \"hideIpAddresses\": {\n            \"nullable\": true,\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ],\n            \"description\": \"Indicates if IP addresses should be accessible in observability (o11y) tooling\"\n          },\n          \"hideIpAddressesInLogDrains\": {\n            \"nullable\": true,\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ],\n            \"description\": \"Indicates if IP addresses should be accessible in log drains\"\n          },\n          \"ipBuckets\": {\n            \"items\": {\n              \"properties\": {\n                \"bucket\": {\n                  \"type\": \"string\"\n                },\n                \"supportUntil\": {\n                  \"type\": \"number\"\n                }\n              },\n              \"required\": [\n                \"bucket\"\n              ],\n              \"type\": \"object\"\n            },\n            \"type\": \"array\"\n          },\n          \"strictDeploymentProtectionSettings\": {\n            \"properties\": {\n              \"enabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ]\n              },\n              \"updatedAt\": {\n                \"type\": \"number\"\n              }\n            },\n            \"required\": [\n              \"enabled\",\n              \"updatedAt\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"When enabled, deployment protection settings require stricter permissions (owner-only).\"\n          },\n          \"nsnbConfig\": {\n            \"properties\": {\n              \"preference\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"auto-approval\",\n                  \"manual-approval\",\n                  \"block\"\n                ]\n              }\n            },\n            \"required\": [\n              \"preference\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"NSNB configuration for the team.\"\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The Team's unique identifier.\",\n            \"example\": \"team_nllPyCtREAqxxdyFKbbMDlxd\"\n          },\n          \"slug\": {\n            \"type\": \"string\",\n            \"description\": \"The Team's slug, which is unique across the Vercel platform.\",\n            \"example\": \"my-team\"\n          },\n          \"name\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"Name associated with the Team account, or `null` if none has been provided.\",\n            \"example\": \"My Team\"\n          },\n          \"avatar\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"The ID of the file used as avatar for this Team.\",\n            \"example\": \"6eb07268bcfadd309905ffb1579354084c24655c\"\n          },\n          \"membership\": {\n            \"properties\": {\n              \"uid\": {\n                \"type\": \"string\"\n              },\n              \"entitlements\": {\n                \"items\": {\n                  \"properties\": {\n                    \"entitlement\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"entitlement\"\n                  ],\n                  \"type\": \"object\"\n                },\n                \"type\": \"array\"\n              },\n              \"teamId\": {\n                \"type\": \"string\"\n              },\n              \"confirmed\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  true\n                ]\n              },\n              \"accessRequestedAt\": {\n                \"type\": \"number\"\n              },\n              \"role\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"OWNER\",\n                  \"MEMBER\",\n                  \"DEVELOPER\",\n                  \"SECURITY\",\n                  \"BILLING\",\n                  \"VIEWER\",\n                  \"VIEWER_FOR_PLUS\",\n                  \"CONTRIBUTOR\"\n                ]\n              },\n              \"teamRoles\": {\n                \"items\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"OWNER\",\n                    \"MEMBER\",\n                    \"DEVELOPER\",\n                    \"SECURITY\",\n                    \"BILLING\",\n                    \"VIEWER\",\n                    \"VIEWER_FOR_PLUS\",\n                    \"CONTRIBUTOR\"\n                  ]\n                },\n                \"type\": \"array\"\n              },\n              \"teamPermissions\": {\n                \"items\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"IntegrationManager\",\n                    \"CreateProject\",\n                    \"FullProductionDeployment\",\n                    \"UsageViewer\",\n                    \"EnvVariableManager\",\n                    \"EnvironmentManager\",\n                    \"V0Builder\",\n                    \"V0Chatter\",\n                    \"V0Viewer\"\n                  ]\n                },\n                \"type\": \"array\"\n              },\n              \"createdAt\": {\n                \"type\": \"number\"\n              },\n              \"created\": {\n                \"type\": \"number\"\n              },\n              \"joinedFrom\": {\n                \"properties\": {\n                  \"origin\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"link\",\n                      \"saml\",\n                      \"mail\",\n                      \"import\",\n                      \"teams\",\n                      \"github\",\n                      \"gitlab\",\n                      \"bitbucket\",\n                      \"dsync\",\n                      \"feedback\",\n                      \"organization-teams\",\n                      \"nsnb-auto-approve\",\n                      \"nsnb-hobby-upgrade\",\n                      \"nsnb-request-access\",\n                      \"nsnb-viewer-upgrade\",\n                      \"nsnb-invite\",\n                      \"nsnb-redeploy\"\n                    ]\n                  },\n                  \"commitId\": {\n                    \"type\": \"string\"\n                  },\n                  \"repoId\": {\n                    \"type\": \"string\"\n                  },\n                  \"repoPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitUserId\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      },\n                      {\n                        \"type\": \"number\"\n                      }\n                    ]\n                  },\n                  \"gitUserLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoUserId\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoConnectedAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"idpUserId\": {\n                    \"type\": \"string\"\n                  },\n                  \"dsyncUserId\": {\n                    \"type\": \"string\"\n                  },\n                  \"dsyncConnectedAt\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"origin\"\n                ],\n                \"type\": \"object\"\n              }\n            },\n            \"required\": [\n              \"confirmed\",\n              \"created\",\n              \"createdAt\",\n              \"role\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"The membership of the authenticated User in relation to the Team.\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"UNIX timestamp (in milliseconds) when the Team was created.\",\n            \"example\": 1630748523395\n          }\n        },\n        \"required\": [\n          \"avatar\",\n          \"createdAt\",\n          \"creatorId\",\n          \"description\",\n          \"id\",\n          \"membership\",\n          \"name\",\n          \"slug\",\n          \"stagingPrefix\",\n          \"updatedAt\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"Data representing a Team.\",\n        \"additionalProperties\": true\n      },\n      \"TeamLimited\": {\n        \"properties\": {\n          \"limited\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              true\n            ],\n            \"description\": \"Property indicating that this Team data contains only limited information, due to the authentication token missing privileges to read the full Team data or due to team having MFA enforced and the user not having MFA enabled. Re-login with the Team's configured SAML Single Sign-On provider in order to upgrade the authentication token with the necessary privileges.\"\n          },\n          \"limitedBy\": {\n            \"items\": {\n              \"type\": \"string\",\n              \"enum\": [\n                \"mfa\",\n                \"scope\"\n              ]\n            },\n            \"type\": \"array\"\n          },\n          \"saml\": {\n            \"properties\": {\n              \"connection\": {\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"description\": \"The Identity Provider \\\"type\\\", for example Okta.\",\n                    \"example\": \"OktaSAML\"\n                  },\n                  \"status\": {\n                    \"type\": \"string\",\n                    \"description\": \"Current status of the connection.\",\n                    \"example\": \"linked\"\n                  },\n                  \"state\": {\n                    \"type\": \"string\",\n                    \"description\": \"Current state of the connection.\",\n                    \"example\": \"active\"\n                  },\n                  \"connectedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the configuration was connected.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastReceivedWebhookEvent\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastSyncedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last directory sync was performed.\",\n                    \"example\": 1611796915677\n                  },\n                  \"syncState\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SETUP\",\n                      \"ACTIVE\"\n                    ],\n                    \"description\": \"Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility.\"\n                  }\n                },\n                \"required\": [\n                  \"connectedAt\",\n                  \"state\",\n                  \"status\",\n                  \"type\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"Information for the SAML Single Sign-On configuration.\"\n              },\n              \"directory\": {\n                \"properties\": {\n                  \"type\": {\n                    \"type\": \"string\",\n                    \"description\": \"The Identity Provider \\\"type\\\", for example Okta.\",\n                    \"example\": \"OktaSAML\"\n                  },\n                  \"state\": {\n                    \"type\": \"string\",\n                    \"description\": \"Current state of the connection.\",\n                    \"example\": \"active\"\n                  },\n                  \"connectedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the configuration was connected.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastReceivedWebhookEvent\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last webhook event was received from WorkOS.\",\n                    \"example\": 1611796915677\n                  },\n                  \"lastSyncedAt\": {\n                    \"type\": \"number\",\n                    \"description\": \"Timestamp (in milliseconds) of when the last directory sync was performed.\",\n                    \"example\": 1611796915677\n                  },\n                  \"syncState\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SETUP\",\n                      \"ACTIVE\"\n                    ],\n                    \"description\": \"Controls whether directory sync events are processed. - 'SETUP': Directory connected but role mappings not yet configured. Events are acknowledged but not processed. - 'ACTIVE': Fully configured. Events are processed normally. - undefined: Legacy directory (pre-feature), treat as 'ACTIVE' for backwards compatibility.\"\n                  }\n                },\n                \"required\": [\n                  \"connectedAt\",\n                  \"state\",\n                  \"type\"\n                ],\n                \"type\": \"object\",\n                \"description\": \"Information for the Directory Sync configuration.\"\n              },\n              \"enforced\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ],\n                \"description\": \"When `true`, interactions with the Team **must** be done with an authentication token that has been authenticated with the Team's SAML Single Sign-On provider.\"\n              }\n            },\n            \"required\": [\n              \"enforced\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"When \\\"Single Sign-On (SAML)\\\" is configured, this object contains information that allows the client-side to identify whether or not this Team has SAML enforced.\"\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The Team's unique identifier.\",\n            \"example\": \"team_nllPyCtREAqxxdyFKbbMDlxd\"\n          },\n          \"slug\": {\n            \"type\": \"string\",\n            \"description\": \"The Team's slug, which is unique across the Vercel platform.\",\n            \"example\": \"my-team\"\n          },\n          \"name\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"Name associated with the Team account, or `null` if none has been provided.\",\n            \"example\": \"My Team\"\n          },\n          \"avatar\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"The ID of the file used as avatar for this Team.\",\n            \"example\": \"6eb07268bcfadd309905ffb1579354084c24655c\"\n          },\n          \"membership\": {\n            \"properties\": {\n              \"uid\": {\n                \"type\": \"string\"\n              },\n              \"entitlements\": {\n                \"items\": {\n                  \"properties\": {\n                    \"entitlement\": {\n                      \"type\": \"string\"\n                    }\n                  },\n                  \"required\": [\n                    \"entitlement\"\n                  ],\n                  \"type\": \"object\"\n                },\n                \"type\": \"array\"\n              },\n              \"teamId\": {\n                \"type\": \"string\"\n              },\n              \"confirmed\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  true\n                ]\n              },\n              \"accessRequestedAt\": {\n                \"type\": \"number\"\n              },\n              \"role\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"OWNER\",\n                  \"MEMBER\",\n                  \"DEVELOPER\",\n                  \"SECURITY\",\n                  \"BILLING\",\n                  \"VIEWER\",\n                  \"VIEWER_FOR_PLUS\",\n                  \"CONTRIBUTOR\"\n                ]\n              },\n              \"teamRoles\": {\n                \"items\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"OWNER\",\n                    \"MEMBER\",\n                    \"DEVELOPER\",\n                    \"SECURITY\",\n                    \"BILLING\",\n                    \"VIEWER\",\n                    \"VIEWER_FOR_PLUS\",\n                    \"CONTRIBUTOR\"\n                  ]\n                },\n                \"type\": \"array\"\n              },\n              \"teamPermissions\": {\n                \"items\": {\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"IntegrationManager\",\n                    \"CreateProject\",\n                    \"FullProductionDeployment\",\n                    \"UsageViewer\",\n                    \"EnvVariableManager\",\n                    \"EnvironmentManager\",\n                    \"V0Builder\",\n                    \"V0Chatter\",\n                    \"V0Viewer\"\n                  ]\n                },\n                \"type\": \"array\"\n              },\n              \"createdAt\": {\n                \"type\": \"number\"\n              },\n              \"created\": {\n                \"type\": \"number\"\n              },\n              \"joinedFrom\": {\n                \"properties\": {\n                  \"origin\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"link\",\n                      \"saml\",\n                      \"mail\",\n                      \"import\",\n                      \"teams\",\n                      \"github\",\n                      \"gitlab\",\n                      \"bitbucket\",\n                      \"dsync\",\n                      \"feedback\",\n                      \"organization-teams\",\n                      \"nsnb-auto-approve\",\n                      \"nsnb-hobby-upgrade\",\n                      \"nsnb-request-access\",\n                      \"nsnb-viewer-upgrade\",\n                      \"nsnb-invite\",\n                      \"nsnb-redeploy\"\n                    ]\n                  },\n                  \"commitId\": {\n                    \"type\": \"string\"\n                  },\n                  \"repoId\": {\n                    \"type\": \"string\"\n                  },\n                  \"repoPath\": {\n                    \"type\": \"string\"\n                  },\n                  \"gitUserId\": {\n                    \"oneOf\": [\n                      {\n                        \"type\": \"string\"\n                      },\n                      {\n                        \"type\": \"number\"\n                      }\n                    ]\n                  },\n                  \"gitUserLogin\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoUserId\": {\n                    \"type\": \"string\"\n                  },\n                  \"ssoConnectedAt\": {\n                    \"type\": \"number\"\n                  },\n                  \"idpUserId\": {\n                    \"type\": \"string\"\n                  },\n                  \"dsyncUserId\": {\n                    \"type\": \"string\"\n                  },\n                  \"dsyncConnectedAt\": {\n                    \"type\": \"number\"\n                  }\n                },\n                \"required\": [\n                  \"origin\"\n                ],\n                \"type\": \"object\"\n              }\n            },\n            \"required\": [\n              \"confirmed\",\n              \"created\",\n              \"createdAt\",\n              \"role\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"The membership of the authenticated User in relation to the Team.\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"UNIX timestamp (in milliseconds) when the Team was created.\",\n            \"example\": 1630748523395\n          }\n        },\n        \"required\": [\n          \"avatar\",\n          \"createdAt\",\n          \"id\",\n          \"limited\",\n          \"limitedBy\",\n          \"membership\",\n          \"name\",\n          \"slug\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"A limited form of data representing a Team, due to the authentication token missing privileges to read the full Team data.\"\n      },\n      \"AuthToken\": {\n        \"properties\": {\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the token.\",\n            \"example\": \"5d9f2ebd38ddca62e5d51e9c1704c72530bdc8bfdd41e782a6687c48399e8391\"\n          },\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The human-readable name of the token.\"\n          },\n          \"type\": {\n            \"type\": \"string\",\n            \"description\": \"The type of the token.\",\n            \"example\": \"oauth2-token\"\n          },\n          \"prefix\": {\n            \"type\": \"string\",\n            \"description\": \"The token's prefix, for identification purposes.\",\n            \"example\": \"vcp_\"\n          },\n          \"suffix\": {\n            \"type\": \"string\",\n            \"description\": \"The last few characters of the token, for identification purposes.\",\n            \"example\": \"abc123\"\n          },\n          \"origin\": {\n            \"type\": \"string\",\n            \"description\": \"The origin of how the token was created.\",\n            \"example\": \"github\"\n          },\n          \"scopes\": {\n            \"items\": {\n              \"oneOf\": [\n                {\n                  \"properties\": {\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"user\"\n                      ]\n                    },\n                    \"sudo\": {\n                      \"properties\": {\n                        \"origin\": {\n                          \"type\": \"string\",\n                          \"enum\": [\n                            \"totp\",\n                            \"webauthn\",\n                            \"recovery-code\"\n                          ],\n                          \"description\": \"Possible multi-factor origins\"\n                        },\n                        \"expiresAt\": {\n                          \"type\": \"number\"\n                        }\n                      },\n                      \"required\": [\n                        \"expiresAt\",\n                        \"origin\"\n                      ],\n                      \"type\": \"object\"\n                    },\n                    \"origin\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"saml\",\n                        \"github\",\n                        \"github-webhook\",\n                        \"gitlab\",\n                        \"bitbucket\",\n                        \"email\",\n                        \"manual\",\n                        \"passkey\",\n                        \"otp\",\n                        \"sms\",\n                        \"invite\",\n                        \"google\",\n                        \"apple\",\n                        \"chatgpt\",\n                        \"app\",\n                        \"emu\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"expiresAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"type\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The access scopes granted to the token.\"\n                },\n                {\n                  \"properties\": {\n                    \"type\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"team\"\n                      ]\n                    },\n                    \"teamId\": {\n                      \"type\": \"string\"\n                    },\n                    \"origin\": {\n                      \"type\": \"string\",\n                      \"enum\": [\n                        \"saml\",\n                        \"github\",\n                        \"github-webhook\",\n                        \"gitlab\",\n                        \"bitbucket\",\n                        \"email\",\n                        \"manual\",\n                        \"passkey\",\n                        \"otp\",\n                        \"sms\",\n                        \"invite\",\n                        \"google\",\n                        \"apple\",\n                        \"chatgpt\",\n                        \"app\",\n                        \"emu\"\n                      ]\n                    },\n                    \"createdAt\": {\n                      \"type\": \"number\"\n                    },\n                    \"expiresAt\": {\n                      \"type\": \"number\"\n                    }\n                  },\n                  \"required\": [\n                    \"createdAt\",\n                    \"teamId\",\n                    \"type\"\n                  ],\n                  \"type\": \"object\",\n                  \"description\": \"The access scopes granted to the token.\"\n                }\n              ]\n            },\n            \"type\": \"array\",\n            \"description\": \"The access scopes granted to the token.\"\n          },\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"Timestamp (in milliseconds) of when the token was created.\",\n            \"example\": 1632816536002\n          },\n          \"activeAt\": {\n            \"type\": \"number\",\n            \"description\": \"Timestamp (in milliseconds) of when the token was most recently used.\",\n            \"example\": 1632816536002\n          },\n          \"expiresAt\": {\n            \"type\": \"number\",\n            \"description\": \"Timestamp (in milliseconds) of when the token expires.\",\n            \"example\": 1632816536002\n          },\n          \"leakedAt\": {\n            \"type\": \"number\",\n            \"description\": \"Timestamp (in milliseconds) of when the token was marked as leaked.\",\n            \"example\": 1632816536002\n          },\n          \"leakedUrl\": {\n            \"type\": \"string\",\n            \"description\": \"URL where the token was discovered as leaked.\"\n          }\n        },\n        \"required\": [\n          \"activeAt\",\n          \"createdAt\",\n          \"id\",\n          \"name\",\n          \"type\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"Authentication token metadata.\"\n      },\n      \"AuthUser\": {\n        \"properties\": {\n          \"createdAt\": {\n            \"type\": \"number\",\n            \"description\": \"UNIX timestamp (in milliseconds) when the User account was created.\",\n            \"example\": 1630748523395\n          },\n          \"softBlock\": {\n            \"nullable\": true,\n            \"properties\": {\n              \"blockedAt\": {\n                \"type\": \"number\"\n              },\n              \"reason\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"SUBSCRIPTION_CANCELED\",\n                  \"SUBSCRIPTION_EXPIRED\",\n                  \"UNPAID_INVOICE\",\n                  \"ENTERPRISE_TRIAL_ENDED\",\n                  \"FAIR_USE_LIMITS_EXCEEDED\",\n                  \"BLOCKED_FOR_PLATFORM_ABUSE\"\n                ]\n              },\n              \"blockedDueToOverageType\": {\n                \"type\": \"string\",\n                \"enum\": [\n                  \"analyticsUsage\",\n                  \"artifacts\",\n                  \"bandwidth\",\n                  \"blobTotalAdvancedRequests\",\n                  \"blobTotalAvgSizeInBytes\",\n                  \"blobTotalGetResponseObjectSizeInBytes\",\n                  \"blobTotalSimpleRequests\",\n                  \"connectDataTransfer\",\n                  \"dataCacheRead\",\n                  \"dataCacheWrite\",\n                  \"edgeConfigRead\",\n                  \"edgeConfigWrite\",\n                  \"edgeFunctionExecutionUnits\",\n                  \"edgeMiddlewareInvocations\",\n                  \"edgeRequestAdditionalCpuDuration\",\n                  \"edgeRequest\",\n                  \"elasticConcurrencyBuildSlots\",\n                  \"fastDataTransfer\",\n                  \"fastOriginTransfer\",\n                  \"fluidCpuDuration\",\n                  \"fluidDuration\",\n                  \"functionDuration\",\n                  \"functionInvocation\",\n                  \"imageOptimizationCacheRead\",\n                  \"imageOptimizationCacheWrite\",\n                  \"imageOptimizationTransformation\",\n                  \"logDrainsVolume\",\n                  \"monitoringMetric\",\n                  \"blobDataTransfer\",\n                  \"observabilityEvent\",\n                  \"onDemandConcurrencyMinutes\",\n                  \"runtimeCacheRead\",\n                  \"runtimeCacheWrite\",\n                  \"serverlessFunctionExecution\",\n                  \"sourceImages\",\n                  \"wafOwaspExcessBytes\",\n                  \"wafOwaspRequests\",\n                  \"wafRateLimitRequest\",\n                  \"webAnalyticsEvent\"\n                ]\n              }\n            },\n            \"required\": [\n              \"blockedAt\",\n              \"reason\"\n            ],\n            \"type\": \"object\",\n            \"description\": \"When the User account has been \\\"soft blocked\\\", this property will contain the date when the restriction was enacted, and the identifier for why.\"\n          },\n          \"billing\": {\n            \"nullable\": true,\n            \"type\": \"object\",\n            \"description\": \"An object containing billing infomation associated with the User account.\"\n          },\n          \"resourceConfig\": {\n            \"properties\": {\n              \"nodeType\": {\n                \"type\": \"string\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"concurrentBuilds\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"elasticConcurrencyEnabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ],\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"buildEntitlements\": {\n                \"properties\": {\n                  \"enhancedBuilds\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ],\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"buildQueue\": {\n                \"properties\": {\n                  \"configuration\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"SKIP_NAMESPACE_QUEUE\",\n                      \"WAIT_FOR_NAMESPACE_QUEUE\"\n                    ],\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"awsAccountType\": {\n                \"type\": \"string\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"awsAccountIds\": {\n                \"items\": {\n                  \"type\": \"string\"\n                },\n                \"type\": \"array\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"cfZoneName\": {\n                \"type\": \"string\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"imageOptimizationType\": {\n                \"type\": \"string\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"edgeConfigs\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"edgeConfigSize\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"edgeFunctionMaxSizeBytes\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"edgeFunctionExecutionTimeoutMs\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"serverlessFunctionMaxMemorySize\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"kvDatabases\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"postgresDatabases\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"blobStores\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"integrationStores\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"cronJobsPerProject\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"microfrontendGroupsPerTeam\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"microfrontendProjectsPerGroup\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"flagsExplorerOverridesThreshold\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"flagsExplorerUnlimitedOverrides\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ],\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"customEnvironmentsPerProject\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"buildMachine\": {\n                \"properties\": {\n                  \"default\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enhanced\",\n                      \"turbo\",\n                      \"standard\",\n                      \"elastic\"\n                    ],\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"purchaseType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enhanced\",\n                      \"turbo\",\n                      \"standard\"\n                    ],\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"defaultPurchaseType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"enhanced\",\n                      \"turbo\",\n                      \"standard\"\n                    ],\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"cores\": {\n                    \"type\": \"number\",\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"memory\": {\n                    \"type\": \"number\",\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"machineSelectionType\": {\n                    \"type\": \"string\",\n                    \"enum\": [\n                      \"fixed\",\n                      \"elastic\"\n                    ],\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"security\": {\n                \"properties\": {\n                  \"customRules\": {\n                    \"type\": \"number\",\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"ipBlocks\": {\n                    \"type\": \"number\",\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"ipBypass\": {\n                    \"type\": \"number\",\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  },\n                  \"rateLimit\": {\n                    \"type\": \"number\",\n                    \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n                  }\n                },\n                \"type\": \"object\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              },\n              \"bulkRedirectsFreeLimitOverride\": {\n                \"type\": \"number\",\n                \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"An object containing infomation related to the amount of platform resources may be allocated to the User account.\"\n          },\n          \"stagingPrefix\": {\n            \"type\": \"string\",\n            \"description\": \"Prefix that will be used in the URL of \\\"Preview\\\" deployments created by the User account.\"\n          },\n          \"activeDashboardViews\": {\n            \"items\": {\n              \"properties\": {\n                \"scopeId\": {\n                  \"type\": \"string\"\n                },\n                \"viewPreference\": {\n                  \"nullable\": true,\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"list\",\n                    \"cards\"\n                  ]\n                },\n                \"favoritesViewPreference\": {\n                  \"nullable\": true,\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"open\",\n                    \"closed\"\n                  ]\n                },\n                \"recentsViewPreference\": {\n                  \"nullable\": true,\n                  \"type\": \"string\",\n                  \"enum\": [\n                    \"open\",\n                    \"closed\"\n                  ]\n                }\n              },\n              \"required\": [\n                \"scopeId\"\n              ],\n              \"type\": \"object\",\n              \"description\": \"set of dashboard view preferences (cards or list) per scopeId\"\n            },\n            \"type\": \"array\",\n            \"description\": \"set of dashboard view preferences (cards or list) per scopeId\"\n          },\n          \"importFlowGitNamespace\": {\n            \"nullable\": true,\n            \"oneOf\": [\n              {\n                \"type\": \"string\"\n              },\n              {\n                \"type\": \"number\"\n              }\n            ]\n          },\n          \"importFlowGitNamespaceId\": {\n            \"nullable\": true,\n            \"oneOf\": [\n              {\n                \"type\": \"string\"\n              },\n              {\n                \"type\": \"number\"\n              }\n            ]\n          },\n          \"importFlowGitProvider\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"enum\": [\n              \"gitlab\",\n              \"bitbucket\",\n              \"github\",\n              \"github-limited\",\n              \"github-custom-host\"\n            ]\n          },\n          \"preferredScopesAndGitNamespaces\": {\n            \"items\": {\n              \"properties\": {\n                \"scopeId\": {\n                  \"type\": \"string\"\n                },\n                \"gitNamespaceId\": {\n                  \"nullable\": true,\n                  \"oneOf\": [\n                    {\n                      \"type\": \"string\"\n                    },\n                    {\n                      \"type\": \"number\"\n                    }\n                  ]\n                }\n              },\n              \"required\": [\n                \"gitNamespaceId\",\n                \"scopeId\"\n              ],\n              \"type\": \"object\"\n            },\n            \"type\": \"array\"\n          },\n          \"dismissedToasts\": {\n            \"items\": {\n              \"properties\": {\n                \"name\": {\n                  \"type\": \"string\"\n                },\n                \"dismissals\": {\n                  \"items\": {\n                    \"properties\": {\n                      \"scopeId\": {\n                        \"type\": \"string\"\n                      },\n                      \"createdAt\": {\n                        \"type\": \"number\"\n                      }\n                    },\n                    \"required\": [\n                      \"createdAt\",\n                      \"scopeId\"\n                    ],\n                    \"type\": \"object\"\n                  },\n                  \"type\": \"array\"\n                }\n              },\n              \"required\": [\n                \"dismissals\",\n                \"name\"\n              ],\n              \"type\": \"object\",\n              \"description\": \"A record of when, under a certain scopeId, a toast was dismissed\"\n            },\n            \"type\": \"array\",\n            \"description\": \"A record of when, under a certain scopeId, a toast was dismissed\"\n          },\n          \"favoriteProjectsAndSpaces\": {\n            \"items\": {\n              \"properties\": {\n                \"teamId\": {\n                  \"type\": \"string\"\n                },\n                \"projectId\": {\n                  \"type\": \"string\"\n                }\n              },\n              \"required\": [\n                \"projectId\",\n                \"teamId\"\n              ],\n              \"type\": \"object\",\n              \"description\": \"A list of projects and spaces across teams that a user has marked as a favorite.\"\n            },\n            \"type\": \"array\",\n            \"description\": \"A list of projects and spaces across teams that a user has marked as a favorite.\"\n          },\n          \"hasTrialAvailable\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ],\n            \"description\": \"Whether the user has a trial available for a paid plan subscription.\"\n          },\n          \"remoteCaching\": {\n            \"properties\": {\n              \"enabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ]\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"remote caching settings\"\n          },\n          \"dataCache\": {\n            \"properties\": {\n              \"excessBillingEnabled\": {\n                \"type\": \"boolean\",\n                \"enum\": [\n                  false,\n                  true\n                ]\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"data cache settings\"\n          },\n          \"featureBlocks\": {\n            \"properties\": {\n              \"webAnalytics\": {\n                \"properties\": {\n                  \"blockedFrom\": {\n                    \"type\": \"number\"\n                  },\n                  \"blockedUntil\": {\n                    \"type\": \"number\"\n                  },\n                  \"isCurrentlyBlocked\": {\n                    \"type\": \"boolean\",\n                    \"enum\": [\n                      false,\n                      true\n                    ]\n                  }\n                },\n                \"required\": [\n                  \"isCurrentlyBlocked\"\n                ],\n                \"type\": \"object\"\n              }\n            },\n            \"type\": \"object\",\n            \"description\": \"Feature blocks for the user\"\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The User's unique identifier.\",\n            \"example\": \"AEIIDYVk59zbFF2Sxfyxxmua\"\n          },\n          \"email\": {\n            \"type\": \"string\",\n            \"description\": \"Email address associated with the User account.\",\n            \"example\": \"me@example.com\"\n          },\n          \"name\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"Name associated with the User account, or `null` if none has been provided.\",\n            \"example\": \"John Doe\"\n          },\n          \"username\": {\n            \"type\": \"string\",\n            \"description\": \"Unique username associated with the User account.\",\n            \"example\": \"jdoe\"\n          },\n          \"avatar\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"SHA1 hash of the avatar for the User account. Can be used in conjuction with the ... endpoint to retrieve the avatar image.\",\n            \"example\": \"22cb30c85ff45ac4c72de8981500006b28114aa1\"\n          },\n          \"defaultTeamId\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"The user's default team.\"\n          },\n          \"isEnterpriseManaged\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ],\n            \"description\": \"Indicates whether the user is managed by an enterprise.\"\n          }\n        },\n        \"required\": [\n          \"avatar\",\n          \"billing\",\n          \"createdAt\",\n          \"defaultTeamId\",\n          \"email\",\n          \"hasTrialAvailable\",\n          \"id\",\n          \"name\",\n          \"resourceConfig\",\n          \"softBlock\",\n          \"stagingPrefix\",\n          \"username\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"Data for the currently authenticated User.\"\n      },\n      \"AuthUserLimited\": {\n        \"properties\": {\n          \"limited\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              true\n            ],\n            \"description\": \"Property indicating that this User data contains only limited information, due to the authentication token missing privileges to read the full User data. Re-login with email, GitHub, GitLab or Bitbucket in order to upgrade the authentication token with the necessary privileges.\"\n          },\n          \"id\": {\n            \"type\": \"string\",\n            \"description\": \"The User's unique identifier.\",\n            \"example\": \"AEIIDYVk59zbFF2Sxfyxxmua\"\n          },\n          \"email\": {\n            \"type\": \"string\",\n            \"description\": \"Email address associated with the User account.\",\n            \"example\": \"me@example.com\"\n          },\n          \"name\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"Name associated with the User account, or `null` if none has been provided.\",\n            \"example\": \"John Doe\"\n          },\n          \"username\": {\n            \"type\": \"string\",\n            \"description\": \"Unique username associated with the User account.\",\n            \"example\": \"jdoe\"\n          },\n          \"avatar\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"SHA1 hash of the avatar for the User account. Can be used in conjuction with the ... endpoint to retrieve the avatar image.\",\n            \"example\": \"22cb30c85ff45ac4c72de8981500006b28114aa1\"\n          },\n          \"defaultTeamId\": {\n            \"nullable\": true,\n            \"type\": \"string\",\n            \"description\": \"The user's default team.\"\n          },\n          \"isEnterpriseManaged\": {\n            \"type\": \"boolean\",\n            \"enum\": [\n              false,\n              true\n            ],\n            \"description\": \"Indicates whether the user is managed by an enterprise.\"\n          }\n        },\n        \"required\": [\n          \"avatar\",\n          \"defaultTeamId\",\n          \"email\",\n          \"id\",\n          \"limited\",\n          \"name\",\n          \"username\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"A limited form of data for the currently authenticated User, due to the authentication token missing privileges to read the full User data.\"\n      },\n      \"FileTree\": {\n        \"properties\": {\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the file tree entry\",\n            \"example\": \"my-file.json\"\n          },\n          \"type\": {\n            \"type\": \"string\",\n            \"enum\": [\n              \"directory\",\n              \"file\",\n              \"symlink\",\n              \"lambda\",\n              \"middleware\",\n              \"invalid\"\n            ],\n            \"description\": \"String indicating the type of file tree entry.\",\n            \"example\": \"file\"\n          },\n          \"uid\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier of the file (only valid for the `file` type)\",\n            \"example\": \"2d4aad419917f15b1146e9e03ddc9bb31747e4d0\"\n          },\n          \"children\": {\n            \"items\": {\n              \"$ref\": \"#/components/schemas/FileTree\"\n            },\n            \"type\": \"array\",\n            \"description\": \"The list of children files of the directory (only valid for the `directory` type)\"\n          },\n          \"contentType\": {\n            \"type\": \"string\",\n            \"description\": \"The content-type of the file (only valid for the `file` type)\",\n            \"example\": \"application/json\"\n          },\n          \"mode\": {\n            \"type\": \"number\",\n            \"description\": \"The file \\\"mode\\\" indicating file type and permissions.\"\n          }\n        },\n        \"required\": [\n          \"mode\",\n          \"name\",\n          \"type\"\n        ],\n        \"type\": \"object\",\n        \"description\": \"A deployment file tree entry\"\n      },\n      \"VercelBaseError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"code\",\n          \"message\"\n        ],\n        \"properties\": {\n          \"code\": {\n            \"type\": \"string\"\n          },\n          \"message\": {\n            \"type\": \"string\"\n          }\n        }\n      },\n      \"VercelForbiddenError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"error\"\n        ],\n        \"properties\": {\n          \"error\": {\n            \"allOf\": [\n              {\n                \"$ref\": \"#/components/schemas/VercelBaseError\"\n              },\n              {\n                \"type\": \"object\",\n                \"required\": [\n                  \"code\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            ]\n          }\n        }\n      },\n      \"VercelNotFoundError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"error\"\n        ],\n        \"properties\": {\n          \"error\": {\n            \"allOf\": [\n              {\n                \"$ref\": \"#/components/schemas/VercelBaseError\"\n              },\n              {\n                \"type\": \"object\",\n                \"required\": [\n                  \"code\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            ]\n          }\n        }\n      },\n      \"VercelBadRequestError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"error\"\n        ],\n        \"properties\": {\n          \"error\": {\n            \"allOf\": [\n              {\n                \"$ref\": \"#/components/schemas/VercelBaseError\"\n              },\n              {\n                \"type\": \"object\",\n                \"required\": [\n                  \"code\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"message\": {\n                    \"type\": \"string\"\n                  }\n                }\n              }\n            ]\n          }\n        }\n      },\n      \"VercelRateLimitError\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"error\"\n        ],\n        \"properties\": {\n          \"error\": {\n            \"allOf\": [\n              {\n                \"$ref\": \"#/components/schemas/VercelBaseError\"\n              },\n              {\n                \"type\": \"object\",\n                \"required\": [\n                  \"code\"\n                ],\n                \"properties\": {\n                  \"code\": {\n                    \"type\": \"string\"\n                  },\n                  \"limit\": {\n                    \"$ref\": \"#/components/schemas/RateLimitNotice\"\n                  }\n                }\n              }\n            ]\n          }\n        }\n      },\n      \"RateLimitNotice\": {\n        \"type\": \"object\",\n        \"required\": [\n          \"remaining\",\n          \"reset\",\n          \"resetMs\",\n          \"total\"\n        ],\n        \"properties\": {\n          \"remaining\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          },\n          \"reset\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          },\n          \"resetMs\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          },\n          \"total\": {\n            \"type\": \"integer\",\n            \"minimum\": 0\n          }\n        }\n      }\n    },\n    \"securitySchemes\": {\n      \"bearerToken\": {\n        \"type\": \"http\",\n        \"description\": \"Default authentication mechanism\",\n        \"scheme\": \"bearer\"\n      },\n      \"oauth2\": {\n        \"type\": \"oauth2\",\n        \"flows\": {\n          \"authorizationCode\": {\n            \"authorizationUrl\": \"https://api.vercel.com/oauth/authorize\",\n            \"tokenUrl\": \"https://api.vercel.com/oauth/access_token\",\n            \"scopes\": {}\n          }\n        }\n      }\n    }\n  },\n  \"security\": []\n}"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/index.ts",
    "content": "import { FileSystem } from \"@effect/platform\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Layer from \"effect/Layer\";\nimport * as ManagedRuntime from \"effect/ManagedRuntime\";\nimport * as Scope from \"effect/Scope\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { clearAllMcpConnectionPools } from \"@executor/source-mcp\";\n\nimport { type ControlPlaneApiRuntimeContext } from \"#api\";\nimport type { LocalInstallation } from \"#schema\";\n\nimport { type ResolveExecutionEnvironment } from \"./execution/state\";\nimport {\n  createLiveExecutionManager,\n  LiveExecutionManagerService,\n} from \"./execution/live\";\nimport {\n  createLocalControlPlanePersistence,\n  type LocalControlPlanePersistence,\n} from \"./local/control-plane-store\";\n\nimport {\n  resolveLocalWorkspaceContext,\n} from \"./local/config\";\nimport {\n  LocalStorageLive,\n  LocalInstallationStore,\n  LocalWorkspaceConfigStore,\n} from \"./local/storage\";\nimport {\n  type RuntimeLocalWorkspaceState,\n  RuntimeLocalWorkspaceLive,\n} from \"./local/runtime-context\";\nimport { LocalToolRuntimeLoaderLive } from \"./local/tools\";\nimport { synchronizeLocalWorkspaceState } from \"./local/workspace-sync\";\nimport { ControlPlaneStore, type ControlPlaneStoreShape } from \"./store\";\nimport { RuntimeSourceStoreLive } from \"./sources/source-store\";\nimport { RuntimeSourceCatalogStoreLive } from \"./catalog/source/runtime\";\nimport { reconcileMissingSourceCatalogArtifacts } from \"./catalog/source/reconcile\";\nimport { RuntimeSourceAuthMaterialLive } from \"./auth/source-auth-material\";\nimport { RuntimeSourceCatalogSyncLive } from \"./catalog/source/sync\";\nimport {\n  RuntimeSourceAuthServiceLive,\n} from \"./sources/source-auth-service\";\nimport type { ResolveSecretMaterial } from \"./local/secret-material-providers\";\nimport { SecretMaterialLive } from \"./local/secret-material-providers\";\nimport {\n  RuntimeExecutionResolverLive,\n} from \"./execution/workspace/environment\";\n\nexport * from \"./execution/state\";\nexport * from \"./sources/executor-tools\";\nexport * from \"./execution/live\";\nexport * from \"./local/config\";\nexport * from \"./local/installation\";\nexport * from \"./local/storage\";\nexport * from \"./local/source-artifacts\";\nexport * from \"./local/tools\";\nexport * from \"./catalog/schema-type-signature\";\nexport * from \"./sources/source-auth-service\";\nexport * from \"./local/secret-material-providers\";\nexport * from \"./sources/source-credential-interactions\";\nexport * from \"./sources/source-adapters/mcp\";\nexport * from \"./store\";\nexport * from \"./execution/workspace/environment\";\nexport * from \"./sources/source-inspection\";\nexport * from \"./sources/source-discovery\";\nexport * from \"./execution/service\";\n\nexport type RuntimeControlPlaneOptions = {\n  executionResolver?: ResolveExecutionEnvironment;\n  resolveSecretMaterial?: ResolveSecretMaterial;\n  getLocalServerBaseUrl?: () => string | undefined;\n  localDataDir?: string;\n  workspaceRoot?: string;\n  homeConfigPath?: string;\n  homeStateDirectory?: string;\n};\n\nconst detailsFromCause = (cause: unknown): string =>\n  cause instanceof Error ? cause.message : String(cause);\n\nconst toLocalRuntimeBootstrapError = (\n  cause: unknown,\n): Error => {\n  const details = detailsFromCause(cause);\n  return new Error(`Failed initializing local runtime: ${details}`);\n};\n\nconst closeScope = (scope: Scope.CloseableScope) =>\n  Scope.close(scope, Exit.void).pipe(Effect.orDie);\n\nexport type RuntimeControlPlaneLayer = Layer.Layer<\n  ControlPlaneApiRuntimeContext,\n  never,\n  never\n>;\n\nexport const createRuntimeControlPlaneLayer = (\n  input: RuntimeControlPlaneOptions & {\n    store: ControlPlaneStoreShape;\n    localWorkspaceState: RuntimeLocalWorkspaceState;\n    liveExecutionManager: ReturnType<typeof createLiveExecutionManager>;\n  },\n) => {\n  const platformLayer = NodeFileSystem.layer;\n  const storageLayer = LocalStorageLive.pipe(\n    Layer.provide(platformLayer),\n  );\n  const localToolRuntimeLayer = LocalToolRuntimeLoaderLive.pipe(\n    Layer.provide(platformLayer),\n  );\n\n  const baseLayer = Layer.mergeAll(\n    platformLayer,\n    Layer.succeed(ControlPlaneStore, input.store),\n    RuntimeLocalWorkspaceLive(input.localWorkspaceState),\n    storageLayer,\n    Layer.succeed(LiveExecutionManagerService, input.liveExecutionManager),\n  );\n\n  const secretMaterialLayer = SecretMaterialLive({\n    resolveSecretMaterial: input.resolveSecretMaterial,\n  }).pipe(Layer.provide(baseLayer));\n\n  const sourceStoreLayer = RuntimeSourceStoreLive.pipe(\n    Layer.provide(baseLayer),\n  );\n\n  const sourceCatalogStoreLayer = RuntimeSourceCatalogStoreLive.pipe(\n    Layer.provide(Layer.mergeAll(baseLayer, sourceStoreLayer)),\n  );\n\n  const sourceAuthMaterialLayer = RuntimeSourceAuthMaterialLive.pipe(\n    Layer.provide(Layer.mergeAll(baseLayer, secretMaterialLayer)),\n  );\n\n  const sourceCatalogSyncLayer = RuntimeSourceCatalogSyncLive.pipe(\n    Layer.provide(\n      Layer.mergeAll(baseLayer, secretMaterialLayer, sourceAuthMaterialLayer),\n    ),\n  );\n\n  const sourceAuthLayer = RuntimeSourceAuthServiceLive({\n    getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n  }).pipe(\n    Layer.provide(\n      Layer.mergeAll(\n        baseLayer,\n        secretMaterialLayer,\n        sourceStoreLayer,\n        sourceCatalogSyncLayer,\n      ),\n    ),\n  );\n\n  const executionResolverLayer = RuntimeExecutionResolverLive({\n    executionResolver: input.executionResolver,\n  }).pipe(\n    Layer.provide(\n      Layer.mergeAll(\n        baseLayer,\n        secretMaterialLayer,\n        sourceAuthMaterialLayer,\n        sourceCatalogSyncLayer,\n        sourceAuthLayer,\n        sourceCatalogStoreLayer,\n        localToolRuntimeLayer,\n      ),\n    ),\n  );\n\n  return Layer.mergeAll(\n    baseLayer,\n    secretMaterialLayer,\n    sourceStoreLayer,\n    sourceAuthMaterialLayer,\n    sourceCatalogSyncLayer,\n    sourceCatalogStoreLayer,\n    localToolRuntimeLayer,\n    sourceAuthLayer,\n    executionResolverLayer,\n  ) as RuntimeControlPlaneLayer;\n};\n\nexport type ControlPlaneRuntime = {\n  persistence: LocalControlPlanePersistence;\n  localInstallation: LocalInstallation;\n  managedRuntime: ManagedRuntime.ManagedRuntime<ControlPlaneApiRuntimeContext, never>;\n  runtimeLayer: RuntimeControlPlaneLayer;\n  close: () => Promise<void>;\n};\n\nexport type CreateControlPlaneRuntimeOptions = RuntimeControlPlaneOptions;\n\nexport const provideControlPlaneRuntime = <A, E, R>(\n  effect: Effect.Effect<A, E, R>,\n  runtime: ControlPlaneRuntime,\n): Effect.Effect<A, E | never, Exclude<R, ControlPlaneApiRuntimeContext>> =>\n  effect.pipe(Effect.provide(runtime.managedRuntime));\n\nexport const createControlPlaneRuntime = (\n  options: CreateControlPlaneRuntimeOptions,\n): Effect.Effect<ControlPlaneRuntime, Error> =>\n  Effect.gen(function* () {\n    const scope = yield* Scope.make();\n\n    const localWorkspaceContext = yield* resolveLocalWorkspaceContext({\n      workspaceRoot: options.workspaceRoot,\n      homeConfigPath: options.homeConfigPath,\n      homeStateDirectory: options.homeStateDirectory,\n    }).pipe(\n      Effect.mapError(toLocalRuntimeBootstrapError),\n      Effect.catchAll((error) =>\n        closeScope(scope).pipe(Effect.zipRight(Effect.fail(error))),\n      ),\n    );\n\n\n    const installationStore = LocalInstallationStore;\n    const workspaceConfigStore = LocalWorkspaceConfigStore;\n    const fileSystem = yield* FileSystem.FileSystem;\n\n    const localInstallation = yield* installationStore.getOrProvision({\n      context: localWorkspaceContext,\n    }).pipe(\n      Effect.mapError(toLocalRuntimeBootstrapError),\n      Effect.catchAll((error) =>\n        closeScope(scope).pipe(Effect.zipRight(Effect.fail(error))),\n      ),\n    );\n\n    const persistence = createLocalControlPlanePersistence(\n      localWorkspaceContext,\n      fileSystem,\n    );\n    const rows = persistence.rows;\n\n    const loadedLocalConfig = yield* workspaceConfigStore.load(\n      localWorkspaceContext,\n    ).pipe(\n      Effect.mapError(toLocalRuntimeBootstrapError),\n      Effect.catchAll((error) =>\n        closeScope(scope).pipe(Effect.zipRight(Effect.fail(error))),\n      ),\n    );\n\n    const effectiveLocalConfig = yield* synchronizeLocalWorkspaceState({\n      context: localWorkspaceContext,\n      loadedConfig: loadedLocalConfig,\n    }).pipe(\n      Effect.mapError(toLocalRuntimeBootstrapError),\n      Effect.catchAll((error) =>\n        closeScope(scope).pipe(Effect.zipRight(Effect.fail(error))),\n      ),\n    );\n\n    const runtimeLocalWorkspaceState: RuntimeLocalWorkspaceState = {\n      context: localWorkspaceContext,\n      installation: {\n        workspaceId: localInstallation.workspaceId,\n        accountId: localInstallation.accountId,\n      },\n      loadedConfig: {\n        ...loadedLocalConfig,\n        config: effectiveLocalConfig,\n      },\n    };\n    const liveExecutionManager = createLiveExecutionManager();\n\n    const concreteRuntimeLayer = createRuntimeControlPlaneLayer({\n      ...options,\n      store: rows,\n      localWorkspaceState: runtimeLocalWorkspaceState,\n      liveExecutionManager,\n    });\n    const managedRuntime = ManagedRuntime.make(concreteRuntimeLayer);\n    yield* managedRuntime.runtimeEffect;\n    yield* reconcileMissingSourceCatalogArtifacts({\n      workspaceId: localInstallation.workspaceId,\n      actorAccountId: localInstallation.accountId,\n    }).pipe(\n      Effect.provide(managedRuntime),\n      Effect.catchAll(() => Effect.void),\n    );\n\n    return {\n      persistence,\n      localInstallation,\n      managedRuntime,\n      runtimeLayer: concreteRuntimeLayer as RuntimeControlPlaneLayer,\n      close: async () => {\n        await Effect.runPromise(clearAllMcpConnectionPools()).catch(() => undefined);\n        await managedRuntime.dispose().catch(() => undefined);\n      },\n    };\n  }).pipe(Effect.provide(NodeFileSystem.layer));\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/capture-release-workspace-fixture.ts",
    "content": "import { dirname, join, resolve } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport * as Cause from \"effect/Cause\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\n\nimport type { LocalExecutorConfig } from \"#schema\";\n\nimport {\n  readOptionalLocalExecutorConfig,\n  resolveLocalWorkspaceContext,\n} from \"./config\";\nimport {\n  ReleaseWorkspaceFixtureManifestSchema,\n  defaultReleaseWorkspaceFixtureDirectoryName,\n  releaseWorkspaceFixturesRoot,\n  type ReleaseWorkspaceFixtureManifest,\n} from \"./release-upgrade-fixtures\";\nimport { loadLocalWorkspaceState } from \"./workspace-state\";\n\nclass CaptureReleaseWorkspaceFixtureError extends Data.TaggedError(\n  \"CaptureReleaseWorkspaceFixtureError\",\n)<{\n  readonly message: string;\n}> {}\n\ntype CaptureReleaseWorkspaceFixtureArgs = {\n  readonly workspaceRoot: string;\n  readonly sourceId: string;\n  readonly releaseVersion: string;\n  readonly artifactExpectation: ReleaseWorkspaceFixtureManifest[\"artifactExpectation\"];\n  readonly description?: string;\n  readonly outputDirectory?: string;\n  readonly overwrite: boolean;\n};\n\nconst usage = `Usage:\n  bun run ./src/runtime/local/capture-release-workspace-fixture.ts \\\\\n    --workspace-root /path/to/workspace \\\\\n    --source-id google-calendar \\\\\n    --release-version v1.2.4-beta.1 \\\\\n    [--artifact-expectation readable|cache-miss] \\\\\n    [--description \"Google Calendar fixture\"] \\\\\n    [--output-directory /custom/output/path] \\\\\n    [--overwrite]\n`;\n\nconst fail = (message: string) =>\n  new CaptureReleaseWorkspaceFixtureError({ message });\n\nconst parseCliArgs = (\n  argv: readonly string[],\n): CaptureReleaseWorkspaceFixtureArgs | \"help\" => {\n  let workspaceRoot: string | undefined;\n  let sourceId: string | undefined;\n  let releaseVersion: string | undefined;\n  let artifactExpectation: CaptureReleaseWorkspaceFixtureArgs[\"artifactExpectation\"] =\n    \"readable\";\n  let description: string | undefined;\n  let outputDirectory: string | undefined;\n  let overwrite = false;\n\n  const readValue = (flag: string, index: number): string => {\n    const value = argv[index + 1];\n    if (!value || value.startsWith(\"--\")) {\n      throw fail(`Missing value for ${flag}\\n\\n${usage}`);\n    }\n    return value;\n  };\n\n  for (let index = 0; index < argv.length; index += 1) {\n    const arg = argv[index];\n    switch (arg) {\n      case \"--help\":\n      case \"-h\":\n        return \"help\";\n      case \"--workspace-root\":\n        workspaceRoot = readValue(arg, index);\n        index += 1;\n        break;\n      case \"--source-id\":\n        sourceId = readValue(arg, index);\n        index += 1;\n        break;\n      case \"--release-version\":\n        releaseVersion = readValue(arg, index);\n        index += 1;\n        break;\n      case \"--artifact-expectation\": {\n        const value = readValue(arg, index);\n        if (value !== \"readable\" && value !== \"cache-miss\") {\n          throw fail(\n            `Invalid --artifact-expectation value: ${value}\\n\\n${usage}`,\n          );\n        }\n        artifactExpectation = value;\n        index += 1;\n        break;\n      }\n      case \"--description\":\n        description = readValue(arg, index);\n        index += 1;\n        break;\n      case \"--output-directory\":\n        outputDirectory = readValue(arg, index);\n        index += 1;\n        break;\n      case \"--overwrite\":\n        overwrite = true;\n        break;\n      default:\n        throw fail(`Unknown argument: ${arg}\\n\\n${usage}`);\n    }\n  }\n\n  if (!workspaceRoot || !sourceId || !releaseVersion) {\n    throw fail(`Missing required arguments\\n\\n${usage}`);\n  }\n\n  return {\n    workspaceRoot,\n    sourceId,\n    releaseVersion,\n    artifactExpectation,\n    description,\n    outputDirectory,\n    overwrite,\n  };\n};\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  fail(\n    `Failed to ${action} ${path}: ${cause instanceof Error ? cause.message : String(cause)}`,\n  );\n\nconst copyRecursive = (\n  sourcePath: string,\n  targetPath: string,\n): Effect.Effect<void, CaptureReleaseWorkspaceFixtureError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const exists = yield* fs.exists(sourcePath).pipe(\n      Effect.mapError(mapFileSystemError(sourcePath, \"check path\")),\n    );\n    if (!exists) {\n      return;\n    }\n\n    const info = yield* fs.stat(sourcePath).pipe(\n      Effect.mapError(mapFileSystemError(sourcePath, \"stat path\")),\n    );\n\n    if (info.type === \"Directory\") {\n      yield* fs.makeDirectory(targetPath, { recursive: true }).pipe(\n        Effect.mapError(mapFileSystemError(targetPath, \"create directory\")),\n      );\n      const entries = yield* fs.readDirectory(sourcePath).pipe(\n        Effect.mapError(mapFileSystemError(sourcePath, \"read directory\")),\n      );\n      for (const entry of entries.sort((left, right) => left.localeCompare(right))) {\n        yield* copyRecursive(\n          join(sourcePath, entry),\n          join(targetPath, entry),\n        );\n      }\n      return;\n    }\n\n    if (info.type !== \"File\") {\n      return yield* Effect.fail(\n        fail(`Unsupported filesystem entry while copying fixture: ${sourcePath}`),\n      );\n    }\n\n    const file = yield* fs.readFile(sourcePath).pipe(\n      Effect.mapError(mapFileSystemError(sourcePath, \"read file\")),\n    );\n    yield* fs.makeDirectory(dirname(targetPath), { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(dirname(targetPath), \"create directory\")),\n    );\n    yield* fs.writeFile(targetPath, file).pipe(\n      Effect.mapError(mapFileSystemError(targetPath, \"write file\")),\n    );\n  });\n\nconst sanitizeSourceConfig = (\n  sourceConfig: NonNullable<LocalExecutorConfig[\"sources\"]>[string],\n): NonNullable<LocalExecutorConfig[\"sources\"]>[string] => {\n  const { auth: _ignoredAuth, ...connection } = sourceConfig.connection;\n  return {\n    ...sourceConfig,\n    connection,\n  };\n};\n\nconst main = Effect.gen(function* () {\n  const args = yield* Effect.try({\n    try: () => parseCliArgs(process.argv.slice(2)),\n    catch: (cause) =>\n      cause instanceof CaptureReleaseWorkspaceFixtureError\n        ? cause\n        : fail(\n            cause instanceof Error ? cause.message : String(cause),\n          ),\n  });\n  if (args === \"help\") {\n    console.log(usage);\n    return;\n  }\n\n  const fs = yield* FileSystem.FileSystem;\n  const workspaceRoot = resolve(args.workspaceRoot);\n  const context = yield* resolveLocalWorkspaceContext({\n    workspaceRoot,\n    homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n    homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n  }).pipe(\n    Effect.mapError((cause) =>\n      fail(\n        `Failed to resolve workspace context for ${workspaceRoot}: ${cause.message}`,\n      ),\n    ),\n  );\n\n  const projectConfig = yield* readOptionalLocalExecutorConfig(\n    context.projectConfigPath,\n  ).pipe(\n    Effect.mapError((cause) =>\n      fail(\n        `Failed to read project config ${context.projectConfigPath}: ${cause.message}`,\n      ),\n    ),\n  );\n\n  const sourceConfig = projectConfig?.sources?.[args.sourceId];\n  if (!sourceConfig) {\n    return yield* Effect.fail(\n      fail(\n      `Source ${args.sourceId} was not found in ${context.projectConfigPath}`,\n      ),\n    );\n  }\n\n  const workspaceState = yield* loadLocalWorkspaceState(context).pipe(\n    Effect.mapError((cause) =>\n      fail(\n        `Failed to load workspace state for ${workspaceRoot}: ${cause.message}`,\n      ),\n    ),\n  );\n  const sourceState = workspaceState.sources[args.sourceId];\n  if (!sourceState) {\n    return yield* Effect.fail(\n      fail(\n      `Source ${args.sourceId} was not found in ${context.stateDirectory}/workspace-state.json`,\n      ),\n    );\n  }\n\n  const sourceArtifactPath = join(\n    context.artifactsDirectory,\n    \"sources\",\n    `${args.sourceId}.json`,\n  );\n  const artifactExists = yield* fs.exists(sourceArtifactPath).pipe(\n    Effect.mapError(mapFileSystemError(sourceArtifactPath, \"check source artifact\")),\n  );\n  if (!artifactExists) {\n    return yield* Effect.fail(\n      fail(`Source artifact not found at ${sourceArtifactPath}`),\n    );\n  }\n\n  const outputDirectory =\n    args.outputDirectory !== undefined\n      ? resolve(args.outputDirectory)\n      : join(\n          releaseWorkspaceFixturesRoot,\n          defaultReleaseWorkspaceFixtureDirectoryName({\n            releaseVersion: args.releaseVersion,\n            sourceId: args.sourceId,\n          }),\n        );\n\n  const outputExists = yield* fs.exists(outputDirectory).pipe(\n    Effect.mapError(mapFileSystemError(outputDirectory, \"check output directory\")),\n  );\n  if (outputExists && !args.overwrite) {\n    return yield* Effect.fail(\n      fail(\n        `Output directory already exists: ${outputDirectory}. Pass --overwrite to replace it.`,\n      ),\n    );\n  }\n\n  if (outputExists) {\n    yield* fs.remove(outputDirectory, { recursive: true, force: true }).pipe(\n      Effect.mapError(mapFileSystemError(outputDirectory, \"remove output directory\")),\n    );\n  }\n\n  const fixtureConfig = {\n    ...(projectConfig?.runtime ? { runtime: projectConfig.runtime } : {}),\n    ...(projectConfig?.workspace ? { workspace: projectConfig.workspace } : {}),\n    sources: {\n      [args.sourceId]: sanitizeSourceConfig(sourceConfig),\n    },\n  } satisfies LocalExecutorConfig;\n\n  const fixtureState = {\n    version: 1 as const,\n    sources: {\n      [args.sourceId]: sourceState,\n    },\n    policies: {},\n  };\n\n  const manifest = ReleaseWorkspaceFixtureManifestSchema.make({\n    schemaVersion: 1,\n    kind: \"release-workspace\",\n    id: `${args.releaseVersion}-${args.sourceId}`,\n    releaseVersion: args.releaseVersion,\n    sourceId: args.sourceId,\n    artifactExpectation: args.artifactExpectation,\n    ...(args.description ? { description: args.description } : {}),\n  });\n\n  yield* fs.makeDirectory(join(outputDirectory, \".executor\", \"state\"), {\n    recursive: true,\n  }).pipe(\n    Effect.mapError(\n      mapFileSystemError(join(outputDirectory, \".executor\", \"state\"), \"create fixture state directory\"),\n    ),\n  );\n\n  yield* fs.writeFileString(\n    join(outputDirectory, \"fixture.json\"),\n    `${JSON.stringify(manifest, null, 2)}\\n`,\n  ).pipe(\n    Effect.mapError(mapFileSystemError(join(outputDirectory, \"fixture.json\"), \"write fixture manifest\")),\n  );\n  yield* fs.writeFileString(\n    join(outputDirectory, \".executor\", \"executor.jsonc\"),\n    `${JSON.stringify(fixtureConfig, null, 2)}\\n`,\n  ).pipe(\n    Effect.mapError(mapFileSystemError(join(outputDirectory, \".executor\", \"executor.jsonc\"), \"write fixture config\")),\n  );\n  yield* fs.writeFileString(\n    join(outputDirectory, \".executor\", \"state\", \"workspace-state.json\"),\n    `${JSON.stringify(fixtureState, null, 2)}\\n`,\n  ).pipe(\n    Effect.mapError(\n      mapFileSystemError(\n        join(outputDirectory, \".executor\", \"state\", \"workspace-state.json\"),\n        \"write fixture workspace state\",\n      ),\n    ),\n  );\n\n  yield* copyRecursive(\n    sourceArtifactPath,\n    join(outputDirectory, \".executor\", \"artifacts\", \"sources\", `${args.sourceId}.json`),\n  );\n  yield* copyRecursive(\n    join(context.artifactsDirectory, \"sources\", args.sourceId),\n    join(outputDirectory, \".executor\", \"artifacts\", \"sources\", args.sourceId),\n  );\n\n  console.log(`Captured release workspace fixture at ${outputDirectory}`);\n});\n\nconst exit = await Effect.runPromiseExit(\n  main.pipe(Effect.provide(NodeFileSystem.layer)),\n);\n\nif (Exit.isFailure(exit)) {\n  const error = Cause.squash(exit.cause);\n  if (error instanceof CaptureReleaseWorkspaceFixtureError) {\n    console.error(error.message);\n  } else {\n    console.error(\"Unexpected failure while capturing release workspace fixture\");\n    console.error(error);\n  }\n\n  process.exit(1);\n}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/config-secrets.ts",
    "content": "export const CONFIG_SECRET_PROVIDER_PREFIX = \"config:\";\n\nexport const toConfigSecretProviderId = (providerAlias: string): string =>\n  `${CONFIG_SECRET_PROVIDER_PREFIX}${providerAlias}`;\n\nexport const fromConfigSecretProviderId = (providerId: string): string | null =>\n  providerId.startsWith(CONFIG_SECRET_PROVIDER_PREFIX)\n    ? providerId.slice(CONFIG_SECRET_PROVIDER_PREFIX.length)\n    : null;\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/config.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  loadLocalExecutorConfig,\n  mergeLocalExecutorConfigs,\n  resolveDefaultHomeConfigCandidates,\n  resolveDefaultHomeStateDirectory,\n  resolveLocalWorkspaceContext,\n} from \"./config\";\n\nconst makeWorkspaceRoot = () =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) =>\n      fs.makeTempDirectory({\n        directory: tmpdir(),\n        prefix: \"executor-local-config-\",\n      })\n    ),\n  );\n\ndescribe(\"local-config\", () => {\n  it.effect(\"parses jsonc project config with comments and trailing commas\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const workspaceRoot = yield* makeWorkspaceRoot();\n      const configDirectory = join(workspaceRoot, \".executor\");\n      yield* fs.makeDirectory(configDirectory, { recursive: true });\n      yield* fs.writeFileString(\n        join(configDirectory, \"executor.jsonc\"),\n        `{\n  \"runtime\": \"ses\",\n  // local workspace config\n  \"sources\": {\n    \"github\": {\n      \"kind\": \"openapi\",\n      \"connection\": {\n        \"endpoint\": \"https://api.github.com\",\n      },\n      \"binding\": {\n        \"specUrl\": \"https://example.com/openapi.json\",\n      },\n    },\n  },\n}\n`,\n      );\n\n      const context = yield* resolveLocalWorkspaceContext({ workspaceRoot });\n      const loaded = yield* loadLocalExecutorConfig(context);\n\n      expect(loaded.config?.sources?.github?.kind).toBe(\"openapi\");\n      expect(loaded.config?.sources?.github?.connection.endpoint).toBe(\n        \"https://api.github.com\",\n      );\n      expect(loaded.config?.runtime).toBe(\"ses\");\n      expect(context.homeStateDirectory).toContain(\"executor\");\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n\n  it.effect(\"reports jsonc syntax errors with line and column details\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const workspaceRoot = yield* makeWorkspaceRoot();\n      const configDirectory = join(workspaceRoot, \".executor\");\n      yield* fs.makeDirectory(configDirectory, { recursive: true });\n      yield* fs.writeFileString(\n        join(configDirectory, \"executor.jsonc\"),\n        `{\n  \"sources\": {\n    \"github\": {\n      \"kind\": \"openapi\"\n      \"connection\": {\n        \"endpoint\": \"https://api.github.com\"\n      }\n    }\n  }\n}\n`,\n      );\n\n      const context = yield* resolveLocalWorkspaceContext({ workspaceRoot });\n      const failure = yield* Effect.flip(loadLocalExecutorConfig(context));\n\n      expect(failure.message).toContain(\"Invalid executor config\");\n      expect(failure.message).toContain(\"line 5, column 7\");\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n\n  it(\"uses platform-standard home config candidates\", () => {\n    const linuxCandidates = resolveDefaultHomeConfigCandidates({\n      platform: \"linux\",\n      homeDirectory: \"/home/alice\",\n      env: {},\n    });\n    const macCandidates = resolveDefaultHomeConfigCandidates({\n      platform: \"darwin\",\n      homeDirectory: \"/Users/alice\",\n      env: {},\n    });\n\n    expect(linuxCandidates[0]).toBe(\"/home/alice/.config/executor/executor.jsonc\");\n    expect(macCandidates[0]).toBe(\n      \"/Users/alice/Library/Application Support/Executor/executor.jsonc\",\n    );\n    expect(linuxCandidates).toHaveLength(1);\n    expect(macCandidates).toHaveLength(1);\n  });\n\n  it(\"uses platform-standard home state directories\", () => {\n    const linuxStateDirectory = resolveDefaultHomeStateDirectory({\n      platform: \"linux\",\n      homeDirectory: \"/home/alice\",\n      env: {},\n    });\n    const macStateDirectory = resolveDefaultHomeStateDirectory({\n      platform: \"darwin\",\n      homeDirectory: \"/Users/alice\",\n      env: {},\n    });\n\n    expect(linuxStateDirectory).toBe(\"/home/alice/.local/state/executor\");\n    expect(macStateDirectory).toBe(\n      \"/Users/alice/Library/Application Support/Executor/State\",\n    );\n  });\n\n  it(\"lets project config override the merged runtime\", () => {\n    const merged = mergeLocalExecutorConfigs(\n      {\n        runtime: \"quickjs\",\n        sources: {},\n      },\n      {\n        runtime: \"deno\",\n      },\n    );\n\n    expect(merged?.runtime).toBe(\"deno\");\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/config.ts",
    "content": "import { homedir } from \"node:os\";\nimport { basename, dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport {\n  type ParseError as JsoncParseError,\n  parse as parseJsoncDocument,\n  printParseErrorCode,\n} from \"jsonc-parser/lib/esm/main.js\";\n\nimport {\n  LocalExecutorConfigSchema,\n  type LocalExecutorConfig,\n  type LocalConfigPolicy,\n  type LocalConfigSecretProvider,\n  type LocalConfigSource,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport {\n  LocalExecutorConfigDecodeError,\n  LocalFileSystemError,\n  unknownLocalErrorDetails,\n} from \"./errors\";\n\nconst decodeLocalExecutorConfig = Schema.decodeUnknownSync(LocalExecutorConfigSchema);\n\nconst PROJECT_CONFIG_BASENAME = \"executor.jsonc\";\nconst PROJECT_CONFIG_DIRECTORY = \".executor\";\nconst EXECUTOR_CONFIG_DIR_ENV = \"EXECUTOR_CONFIG_DIR\";\nconst EXECUTOR_STATE_DIR_ENV = \"EXECUTOR_STATE_DIR\";\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  new LocalFileSystemError({\n    message: `Failed to ${action} ${path}: ${unknownLocalErrorDetails(cause)}`,\n    action,\n    path,\n    details: unknownLocalErrorDetails(cause),\n  });\n\nconst trimOrUndefined = (value: string | undefined | null): string | undefined => {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : undefined;\n};\n\nconst defaultExecutorConfigDirectory = (input: {\n  env?: NodeJS.ProcessEnv;\n  platform?: NodeJS.Platform;\n  homeDirectory?: string;\n} = {}): string => {\n  const env = input.env ?? process.env;\n  const platform = input.platform ?? process.platform;\n  const homeDirectory = input.homeDirectory ?? homedir();\n  const explicitConfigDirectory = trimOrUndefined(env[EXECUTOR_CONFIG_DIR_ENV]);\n\n  if (explicitConfigDirectory) {\n    return explicitConfigDirectory;\n  }\n\n  if (platform === \"win32\") {\n    return join(\n      trimOrUndefined(env.LOCALAPPDATA) ?? join(homeDirectory, \"AppData\", \"Local\"),\n      \"Executor\",\n    );\n  }\n\n  if (platform === \"darwin\") {\n    return join(homeDirectory, \"Library\", \"Application Support\", \"Executor\");\n  }\n\n  return join(\n    trimOrUndefined(env.XDG_CONFIG_HOME) ?? join(homeDirectory, \".config\"),\n    \"executor\",\n  );\n};\n\nconst defaultExecutorStateDirectory = (input: {\n  env?: NodeJS.ProcessEnv;\n  platform?: NodeJS.Platform;\n  homeDirectory?: string;\n} = {}): string => {\n  const env = input.env ?? process.env;\n  const platform = input.platform ?? process.platform;\n  const homeDirectory = input.homeDirectory ?? homedir();\n  const explicitStateDirectory = trimOrUndefined(env[EXECUTOR_STATE_DIR_ENV]);\n\n  if (explicitStateDirectory) {\n    return explicitStateDirectory;\n  }\n\n  if (platform === \"win32\") {\n    return join(\n      trimOrUndefined(env.LOCALAPPDATA) ?? join(homeDirectory, \"AppData\", \"Local\"),\n      \"Executor\",\n      \"State\",\n    );\n  }\n\n  if (platform === \"darwin\") {\n    return join(homeDirectory, \"Library\", \"Application Support\", \"Executor\", \"State\");\n  }\n\n  return join(\n    trimOrUndefined(env.XDG_STATE_HOME) ?? join(homeDirectory, \".local\", \"state\"),\n    \"executor\",\n  );\n};\n\nexport const resolveDefaultHomeConfigCandidates = (input: {\n  env?: NodeJS.ProcessEnv;\n  platform?: NodeJS.Platform;\n  homeDirectory?: string;\n} = {}): string[] => {\n  const directory = defaultExecutorConfigDirectory({\n    env: input.env,\n    platform: input.platform,\n    homeDirectory: input.homeDirectory ?? homedir(),\n  });\n  return [join(directory, PROJECT_CONFIG_BASENAME)];\n};\n\nexport const resolveHomeConfigPath = (input: {\n  env?: NodeJS.ProcessEnv;\n  platform?: NodeJS.Platform;\n  homeDirectory?: string;\n} = {}): Effect.Effect<string, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const candidates = resolveDefaultHomeConfigCandidates(input);\n\n    for (const candidate of candidates) {\n      const exists = yield* fs.exists(candidate).pipe(\n        Effect.mapError(mapFileSystemError(candidate, \"check config path\")),\n      );\n      if (exists) {\n        return candidate;\n      }\n    }\n\n    return candidates[0]!;\n  });\n\nexport const resolveDefaultHomeStateDirectory = (input: {\n  env?: NodeJS.ProcessEnv;\n  platform?: NodeJS.Platform;\n  homeDirectory?: string;\n} = {}): string =>\n  defaultExecutorStateDirectory(input);\n\nconst formatJsoncParseErrors = (content: string, errors: readonly JsoncParseError[]): string => {\n  const lines = content.split(\"\\n\");\n\n  return errors\n    .map((error) => {\n      const beforeOffset = content.slice(0, error.offset).split(\"\\n\");\n      const line = beforeOffset.length;\n      const column = beforeOffset[beforeOffset.length - 1]?.length ?? 0;\n      const lineText = lines[line - 1];\n      const location = `line ${line}, column ${column + 1}`;\n      const detail = printParseErrorCode(error.error);\n\n      if (!lineText) {\n        return `${detail} at ${location}`;\n      }\n\n      return `${detail} at ${location}\\n${lineText}`;\n    })\n    .join(\"\\n\");\n};\n\nconst parseJsonc = (input: { path: string; content: string }): LocalExecutorConfig => {\n  const errors: JsoncParseError[] = [];\n\n  try {\n    const parsed = parseJsoncDocument(input.content, errors, {\n      allowTrailingComma: true,\n    });\n    if (errors.length > 0) {\n      throw new LocalExecutorConfigDecodeError({\n        message: `Invalid executor config at ${input.path}: ${formatJsoncParseErrors(input.content, errors)}`,\n        path: input.path,\n        details: formatJsoncParseErrors(input.content, errors),\n      });\n    }\n\n    return decodeLocalExecutorConfig(parsed);\n  } catch (cause) {\n    if (cause instanceof LocalExecutorConfigDecodeError) {\n      throw cause;\n    }\n    throw new LocalExecutorConfigDecodeError({\n      message: `Invalid executor config at ${input.path}: ${unknownLocalErrorDetails(cause)}`,\n      path: input.path,\n      details: unknownLocalErrorDetails(cause),\n    });\n  }\n};\n\nconst mergeSourceMaps = (\n  base: Record<string, LocalConfigSource> | undefined,\n  extra: Record<string, LocalConfigSource> | undefined,\n): Record<string, LocalConfigSource> | undefined => {\n  if (!base && !extra) {\n    return undefined;\n  }\n  return {\n    ...base,\n    ...extra,\n  };\n};\n\nconst mergePolicyMaps = (\n  base: Record<string, LocalConfigPolicy> | undefined,\n  extra: Record<string, LocalConfigPolicy> | undefined,\n): Record<string, LocalConfigPolicy> | undefined => {\n  if (!base && !extra) {\n    return undefined;\n  }\n  return {\n    ...base,\n    ...extra,\n  };\n};\n\nconst mergeSecretProviderMaps = (\n  base: Record<string, LocalConfigSecretProvider> | undefined,\n  extra: Record<string, LocalConfigSecretProvider> | undefined,\n): Record<string, LocalConfigSecretProvider> | undefined => {\n  if (!base && !extra) {\n    return undefined;\n  }\n  return {\n    ...base,\n    ...extra,\n  };\n};\n\nexport const mergeLocalExecutorConfigs = (\n  base: LocalExecutorConfig | null,\n  extra: LocalExecutorConfig | null,\n): LocalExecutorConfig | null => {\n  if (!base && !extra) {\n    return null;\n  }\n\n  return decodeLocalExecutorConfig({\n    runtime: extra?.runtime ?? base?.runtime,\n    workspace: {\n      ...base?.workspace,\n      ...extra?.workspace,\n    },\n    sources: mergeSourceMaps(base?.sources, extra?.sources),\n    policies: mergePolicyMaps(base?.policies, extra?.policies),\n    secrets: {\n      providers: mergeSecretProviderMaps(\n        base?.secrets?.providers,\n        extra?.secrets?.providers,\n      ),\n      defaults: {\n        ...base?.secrets?.defaults,\n        ...extra?.secrets?.defaults,\n      },\n    },\n  });\n};\n\nconst resolveProjectConfigPathEffect = (workspaceRoot: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const jsoncPath = join(workspaceRoot, PROJECT_CONFIG_DIRECTORY, PROJECT_CONFIG_BASENAME);\n    yield* fs.exists(jsoncPath).pipe(\n      Effect.mapError(mapFileSystemError(jsoncPath, \"check project config path\")),\n    );\n    return jsoncPath;\n  });\n\nconst hasProjectConfigEffect = (workspaceRoot: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const jsoncPath = join(workspaceRoot, PROJECT_CONFIG_DIRECTORY, PROJECT_CONFIG_BASENAME);\n    return yield* fs.exists(jsoncPath).pipe(\n      Effect.mapError(mapFileSystemError(jsoncPath, \"check project config path\")),\n    );\n  });\n\nconst resolveWorkspaceRootFromCwdEffect = (cwd: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    let current = resolve(cwd);\n    let nearestProjectConfigRoot: string | null = null;\n    let nearestGitRoot: string | null = null;\n\n    while (true) {\n      if (nearestProjectConfigRoot === null) {\n        const hasProjectConfig = yield* hasProjectConfigEffect(current);\n        if (hasProjectConfig) {\n          nearestProjectConfigRoot = current;\n        }\n      }\n\n      if (nearestGitRoot === null) {\n        const gitPath = join(current, \".git\");\n        const gitExists = yield* fs.exists(gitPath).pipe(\n          Effect.mapError(mapFileSystemError(gitPath, \"check git root\")),\n        );\n        if (gitExists) {\n          nearestGitRoot = current;\n        }\n      }\n\n      const parent = dirname(current);\n      if (parent === current) {\n        break;\n      }\n      current = parent;\n    }\n\n    return nearestProjectConfigRoot ?? nearestGitRoot ?? resolve(cwd);\n  });\n\nexport type ResolvedLocalWorkspaceContext = {\n  cwd: string;\n  workspaceRoot: string;\n  workspaceName: string;\n  configDirectory: string;\n  projectConfigPath: string;\n  homeConfigPath: string;\n  homeStateDirectory: string;\n  artifactsDirectory: string;\n  stateDirectory: string;\n};\n\nexport type LoadedLocalExecutorConfig = {\n  config: LocalExecutorConfig | null;\n  homeConfig: LocalExecutorConfig | null;\n  projectConfig: LocalExecutorConfig | null;\n  homeConfigPath: string;\n  projectConfigPath: string;\n};\n\nexport const resolveLocalWorkspaceContext = (input: {\n  cwd?: string;\n  workspaceRoot?: string;\n  homeConfigPath?: string;\n  homeStateDirectory?: string;\n} = {}): Effect.Effect<\n  ResolvedLocalWorkspaceContext,\n  LocalFileSystemError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const cwd = resolve(input.cwd ?? process.cwd());\n    const workspaceRoot = resolve(\n      input.workspaceRoot ?? (yield* resolveWorkspaceRootFromCwdEffect(cwd)),\n    );\n    const workspaceName = basename(workspaceRoot) || \"workspace\";\n    const projectConfigPath = yield* resolveProjectConfigPathEffect(workspaceRoot);\n    const homeConfigPath = resolve(\n      input.homeConfigPath ?? (yield* resolveHomeConfigPath()),\n    );\n    const homeStateDirectory = resolve(\n      input.homeStateDirectory ?? resolveDefaultHomeStateDirectory(),\n    );\n\n    return {\n      cwd,\n      workspaceRoot,\n      workspaceName,\n      configDirectory: join(workspaceRoot, PROJECT_CONFIG_DIRECTORY),\n      projectConfigPath,\n      homeConfigPath,\n      homeStateDirectory,\n      artifactsDirectory: join(workspaceRoot, PROJECT_CONFIG_DIRECTORY, \"artifacts\"),\n      stateDirectory: join(workspaceRoot, PROJECT_CONFIG_DIRECTORY, \"state\"),\n    };\n  });\n\nexport const readOptionalLocalExecutorConfig = (\n  path: string,\n): Effect.Effect<\n  LocalExecutorConfig | null,\n  LocalFileSystemError | LocalExecutorConfigDecodeError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const exists = yield* fs.exists(path).pipe(\n      Effect.mapError(mapFileSystemError(path, \"check config path\")),\n    );\n    if (!exists) {\n      return null;\n    }\n\n    const content = yield* fs.readFileString(path, \"utf8\").pipe(\n      Effect.mapError(mapFileSystemError(path, \"read config\")),\n    );\n    return yield* Effect.try({\n      try: () => parseJsonc({ path, content }),\n      catch: (cause) =>\n        cause instanceof LocalExecutorConfigDecodeError\n          ? cause\n          : new LocalExecutorConfigDecodeError({\n              message: `Invalid executor config at ${path}: ${unknownLocalErrorDetails(cause)}`,\n              path,\n              details: unknownLocalErrorDetails(cause),\n            }),\n    });\n  });\n\nexport const loadLocalExecutorConfig = (\n  context: ResolvedLocalWorkspaceContext,\n): Effect.Effect<\n  LoadedLocalExecutorConfig,\n  LocalFileSystemError | LocalExecutorConfigDecodeError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const [homeConfig, projectConfig] = yield* Effect.all([\n      readOptionalLocalExecutorConfig(context.homeConfigPath),\n      readOptionalLocalExecutorConfig(context.projectConfigPath),\n    ]);\n\n    return {\n      config: mergeLocalExecutorConfigs(homeConfig, projectConfig),\n      homeConfig,\n      projectConfig,\n      homeConfigPath: context.homeConfigPath,\n      projectConfigPath: context.projectConfigPath,\n    };\n  });\n\nexport const encodeLocalExecutorConfig = (config: LocalExecutorConfig): string =>\n  `${JSON.stringify(config, null, 2)}\\n`;\n\nexport const writeProjectLocalExecutorConfig = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  config: LocalExecutorConfig;\n}): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    yield* fs.makeDirectory(input.context.configDirectory, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(input.context.configDirectory, \"create config directory\")),\n    );\n    yield* fs.writeFileString(\n      input.context.projectConfigPath,\n      encodeLocalExecutorConfig(input.config),\n    ).pipe(\n      Effect.mapError(mapFileSystemError(input.context.projectConfigPath, \"write config\")),\n    );\n  });\n\nexport const resolveConfigRelativePath = (input: {\n  path: string;\n  workspaceRoot: string;\n}): string => {\n  const trimmed = input.path.trim();\n  if (trimmed.startsWith(\"~/\")) {\n    return join(homedir(), trimmed.slice(2));\n  }\n  if (trimmed === \"~\") {\n    return homedir();\n  }\n  if (isAbsolute(trimmed)) {\n    return trimmed;\n  }\n  return resolve(input.workspaceRoot, trimmed);\n};\n\nexport const defaultWorkspaceDisplayName = (context: ResolvedLocalWorkspaceContext): string =>\n  trimOrUndefined(context.workspaceName) ?? \"workspace\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/control-plane-store.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { ResolvedLocalWorkspaceContext } from \"./config\";\nimport {\n  loadLocalControlPlaneState,\n  localControlPlaneStatePath,\n  writeLocalControlPlaneState,\n} from \"./control-plane-store\";\n\nconst makeContext = (): Effect.Effect<\n  ResolvedLocalWorkspaceContext,\n  never,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const workspaceRoot = yield* fs.makeTempDirectory({\n      directory: tmpdir(),\n      prefix: \"executor-control-plane-store-\",\n    }).pipe(Effect.orDie);\n\n    return {\n      cwd: workspaceRoot,\n      workspaceRoot,\n      workspaceName: \"executor-control-plane-store\",\n      configDirectory: join(workspaceRoot, \".executor\"),\n      projectConfigPath: join(workspaceRoot, \".executor\", \"executor.jsonc\"),\n      homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n      homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n      artifactsDirectory: join(workspaceRoot, \".executor\", \"artifacts\"),\n      stateDirectory: join(workspaceRoot, \".executor\", \"state\"),\n    };\n  });\n\ndescribe(\"local-control-plane-store\", () => {\n  it.effect(\"stores secret-bearing control-plane state outside the workspace\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const context = yield* makeContext();\n      const expectedPath = localControlPlaneStatePath(context);\n      const workspacePath = join(context.stateDirectory, \"control-plane-state.json\");\n\n      yield* writeLocalControlPlaneState({\n        context,\n        state: {\n          version: 1,\n          authArtifacts: [],\n          authLeases: [],\n          sourceOauthClients: [],\n          workspaceOauthClients: [],\n          providerAuthGrants: [],\n          sourceAuthSessions: [],\n          secretMaterials: [],\n          executions: [],\n          executionInteractions: [],\n          executionSteps: [],\n        },\n      });\n\n      expect(expectedPath.startsWith(context.homeStateDirectory)).toBe(true);\n      expect(yield* fs.exists(expectedPath)).toBe(true);\n      expect(yield* fs.exists(workspacePath)).toBe(false);\n\n      const loaded = yield* loadLocalControlPlaneState(context);\n      expect(loaded.version).toBe(1);\n      expect(loaded.secretMaterials).toEqual([]);\n\n      if (process.platform !== \"win32\") {\n        expect((yield* fs.stat(expectedPath)).mode & 0o777).toBe(0o600);\n      }\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/control-plane-store.ts",
    "content": "import { randomUUID } from \"node:crypto\";\nimport { dirname, join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\n\nimport {\n  AuthArtifactSchema,\n  AuthLeaseSchema,\n  type AuthArtifact,\n  type AuthLease,\n  type Execution,\n  type ExecutionInteraction,\n  type ExecutionStep,\n  ExecutionInteractionSchema,\n  ExecutionSchema,\n  ExecutionStepSchema,\n  type ProviderAuthGrant,\n  ProviderAuthGrantSchema,\n  SecretMaterialSchema,\n  type SecretMaterial,\n  type SourceAuthSession,\n  SourceAuthSessionSchema,\n  type WorkspaceOauthClient,\n  WorkspaceOauthClientSchema,\n  type WorkspaceSourceOauthClient,\n  WorkspaceSourceOauthClientSchema,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ResolvedLocalWorkspaceContext } from \"./config\";\nimport { deriveLocalInstallation } from \"./installation\";\nimport {\n  LocalFileSystemError,\n  unknownLocalErrorDetails,\n} from \"./errors\";\n\nconst LOCAL_CONTROL_PLANE_STATE_VERSION = 1 as const;\nconst LOCAL_CONTROL_PLANE_STATE_BASENAME = \"control-plane-state.json\";\n\nconst LocalControlPlaneStateSchema = Schema.Struct({\n  version: Schema.Literal(LOCAL_CONTROL_PLANE_STATE_VERSION),\n  authArtifacts: Schema.Array(AuthArtifactSchema),\n  authLeases: Schema.Array(AuthLeaseSchema),\n  sourceOauthClients: Schema.Array(WorkspaceSourceOauthClientSchema),\n  workspaceOauthClients: Schema.Array(WorkspaceOauthClientSchema),\n  providerAuthGrants: Schema.Array(ProviderAuthGrantSchema),\n  sourceAuthSessions: Schema.Array(SourceAuthSessionSchema),\n  secretMaterials: Schema.Array(SecretMaterialSchema),\n  executions: Schema.Array(ExecutionSchema),\n  executionInteractions: Schema.Array(ExecutionInteractionSchema),\n  executionSteps: Schema.Array(ExecutionStepSchema),\n});\n\nexport type LocalControlPlaneState = typeof LocalControlPlaneStateSchema.Type;\n\nexport type LocalControlPlanePersistence = {\n  rows: LocalControlPlaneStore;\n  close: () => Promise<void>;\n};\n\nconst decodeLocalControlPlaneState = Schema.decodeUnknown(\n  LocalControlPlaneStateSchema,\n);\n\nconst defaultLocalControlPlaneState = (): LocalControlPlaneState => ({\n  version: LOCAL_CONTROL_PLANE_STATE_VERSION,\n  authArtifacts: [],\n  authLeases: [],\n  sourceOauthClients: [],\n  workspaceOauthClients: [],\n  providerAuthGrants: [],\n  sourceAuthSessions: [],\n  secretMaterials: [],\n  executions: [],\n  executionInteractions: [],\n  executionSteps: [],\n});\n\nconst cloneValue = <T>(value: T): T =>\n  JSON.parse(JSON.stringify(value)) as T;\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  new LocalFileSystemError({\n    message: `Failed to ${action} ${path}: ${unknownLocalErrorDetails(cause)}`,\n    action,\n    path,\n    details: unknownLocalErrorDetails(cause),\n  });\n\nconst actorEquals = (\n  left: string | null | undefined,\n  right: string | null | undefined,\n): boolean => (left ?? null) === (right ?? null);\n\nconst sortByUpdatedAtAndIdAsc = <T extends { updatedAt: number; id: string }>(\n  values: readonly T[],\n): T[] =>\n  [...values].sort((left, right) =>\n    left.updatedAt - right.updatedAt || left.id.localeCompare(right.id),\n  );\n\nconst sortByUpdatedAtAndIdDesc = <T extends { updatedAt: number; id: string }>(\n  values: readonly T[],\n): T[] =>\n  [...values].sort((left, right) =>\n    right.updatedAt - left.updatedAt || right.id.localeCompare(left.id),\n  );\n\nconst localControlPlaneStatePath = (\n  context: ResolvedLocalWorkspaceContext,\n): string =>\n  join(\n    context.homeStateDirectory,\n    \"workspaces\",\n    deriveLocalInstallation(context).workspaceId,\n    LOCAL_CONTROL_PLANE_STATE_BASENAME,\n  );\n\nconst bindFileSystem = <A, E>(\n  fileSystem: FileSystem.FileSystem,\n  effect: Effect.Effect<A, E, FileSystem.FileSystem>,\n): Effect.Effect<A, E, never> =>\n  effect.pipe(Effect.provideService(FileSystem.FileSystem, fileSystem));\n\nconst bindNodeFileSystem = <A, E>(\n  effect: Effect.Effect<A, E, FileSystem.FileSystem>,\n): Effect.Effect<A, E, never> =>\n  effect.pipe(Effect.provide(NodeFileSystem.layer));\n\nconst readStateFromDisk = (\n  context: ResolvedLocalWorkspaceContext,\n): Effect.Effect<LocalControlPlaneState, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const path = localControlPlaneStatePath(context);\n    const exists = yield* fs.exists(path).pipe(\n      Effect.mapError(mapFileSystemError(path, \"check control plane state path\")),\n    );\n    if (!exists) {\n      return defaultLocalControlPlaneState();\n    }\n\n    const content = yield* fs.readFileString(path, \"utf8\").pipe(\n      Effect.mapError(mapFileSystemError(path, \"read control plane state\")),\n    );\n    const parsed = yield* Effect.try({\n      try: () => JSON.parse(content) as unknown,\n      catch: mapFileSystemError(path, \"parse control plane state\"),\n    });\n    return yield* decodeLocalControlPlaneState(parsed).pipe(\n      Effect.mapError(mapFileSystemError(path, \"decode control plane state\")),\n    );\n  });\n\nconst writeStateToDisk = (\n  context: ResolvedLocalWorkspaceContext,\n  state: LocalControlPlaneState,\n): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const path = localControlPlaneStatePath(context);\n    const tempPath = `${path}.${randomUUID()}.tmp`;\n\n    yield* fs.makeDirectory(dirname(path), { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(dirname(path), \"create control plane state directory\")),\n    );\n    yield* fs.writeFileString(tempPath, `${JSON.stringify(state, null, 2)}\\n`, {\n      mode: 0o600,\n    }).pipe(\n      Effect.mapError(mapFileSystemError(tempPath, \"write control plane state\")),\n    );\n    yield* fs.rename(tempPath, path).pipe(\n      Effect.mapError(mapFileSystemError(path, \"replace control plane state\")),\n    );\n  });\n\nexport const loadLocalControlPlaneState = (\n  context: ResolvedLocalWorkspaceContext,\n): Effect.Effect<LocalControlPlaneState, LocalFileSystemError> =>\n  bindNodeFileSystem(readStateFromDisk(context));\n\nexport const writeLocalControlPlaneState = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  state: LocalControlPlaneState;\n}): Effect.Effect<void, LocalFileSystemError> =>\n  bindNodeFileSystem(writeStateToDisk(input.context, input.state));\n\nconst mergeById = <T extends { id: string }>(\n  current: readonly T[],\n  imported: readonly T[],\n): T[] => {\n  const merged = new Map<string, T>();\n\n  for (const item of imported) {\n    merged.set(item.id, cloneValue(item));\n  }\n\n  for (const item of current) {\n    merged.set(item.id, cloneValue(item));\n  }\n\n  return [...merged.values()];\n};\n\nconst mergeAuthLeases = (\n  current: readonly AuthLease[],\n  imported: readonly AuthLease[],\n): AuthLease[] => {\n  const merged = new Map<string, AuthLease>();\n\n  for (const lease of imported) {\n    merged.set(lease.authArtifactId, cloneValue(lease));\n  }\n\n  for (const lease of current) {\n    merged.set(lease.authArtifactId, cloneValue(lease));\n  }\n\n  return [...merged.values()];\n};\n\nconst mergeAuthArtifacts = (\n  current: readonly AuthArtifact[],\n  imported: readonly AuthArtifact[],\n): AuthArtifact[] => {\n  const merged = new Map<string, AuthArtifact>();\n\n  for (const artifact of imported) {\n    merged.set(\n      [\n        artifact.workspaceId,\n        artifact.sourceId,\n        artifact.actorAccountId ?? \"\",\n        artifact.slot,\n      ].join(\"::\"),\n      cloneValue(artifact),\n    );\n  }\n\n  for (const artifact of current) {\n    merged.set(\n      [\n        artifact.workspaceId,\n        artifact.sourceId,\n        artifact.actorAccountId ?? \"\",\n        artifact.slot,\n      ].join(\"::\"),\n      cloneValue(artifact),\n    );\n  }\n\n  return [...merged.values()];\n};\n\nconst mergeSourceOauthClients = (\n  current: readonly WorkspaceSourceOauthClient[],\n  imported: readonly WorkspaceSourceOauthClient[],\n): WorkspaceSourceOauthClient[] => {\n  const merged = new Map<string, WorkspaceSourceOauthClient>();\n\n  for (const oauthClient of imported) {\n    merged.set(\n      [oauthClient.workspaceId, oauthClient.sourceId, oauthClient.providerKey].join(\n        \"::\",\n      ),\n      cloneValue(oauthClient),\n    );\n  }\n\n  for (const oauthClient of current) {\n    merged.set(\n      [oauthClient.workspaceId, oauthClient.sourceId, oauthClient.providerKey].join(\n        \"::\",\n      ),\n      cloneValue(oauthClient),\n    );\n  }\n\n  return [...merged.values()];\n};\n\nconst mergeWorkspaceOauthClients = (\n  current: readonly WorkspaceOauthClient[],\n  imported: readonly WorkspaceOauthClient[],\n): WorkspaceOauthClient[] => {\n  const merged = new Map<string, WorkspaceOauthClient>();\n\n  for (const oauthClient of imported) {\n    merged.set(\n      [oauthClient.workspaceId, oauthClient.providerKey, oauthClient.id].join(\"::\"),\n      cloneValue(oauthClient),\n    );\n  }\n\n  for (const oauthClient of current) {\n    merged.set(\n      [oauthClient.workspaceId, oauthClient.providerKey, oauthClient.id].join(\"::\"),\n      cloneValue(oauthClient),\n    );\n  }\n\n  return [...merged.values()];\n};\n\nconst mergeProviderAuthGrants = (\n  current: readonly ProviderAuthGrant[],\n  imported: readonly ProviderAuthGrant[],\n): ProviderAuthGrant[] => mergeById(current, imported);\n\nexport const mergeImportedLocalControlPlaneState = (input: {\n  current: LocalControlPlaneState;\n  imported: Partial<Omit<LocalControlPlaneState, \"version\">>;\n}): LocalControlPlaneState => ({\n  version: LOCAL_CONTROL_PLANE_STATE_VERSION,\n  authArtifacts: mergeAuthArtifacts(\n    input.current.authArtifacts,\n    input.imported.authArtifacts ?? [],\n  ),\n  authLeases: mergeAuthLeases(\n    input.current.authLeases,\n    input.imported.authLeases ?? [],\n  ),\n  sourceOauthClients: mergeSourceOauthClients(\n    input.current.sourceOauthClients,\n    input.imported.sourceOauthClients ?? [],\n  ),\n  workspaceOauthClients: mergeWorkspaceOauthClients(\n    input.current.workspaceOauthClients,\n    input.imported.workspaceOauthClients ?? [],\n  ),\n  providerAuthGrants: mergeProviderAuthGrants(\n    input.current.providerAuthGrants,\n    input.imported.providerAuthGrants ?? [],\n  ),\n  sourceAuthSessions: mergeById(\n    input.current.sourceAuthSessions,\n    input.imported.sourceAuthSessions ?? [],\n  ),\n  secretMaterials: mergeById(\n    input.current.secretMaterials,\n    input.imported.secretMaterials ?? [],\n  ),\n  executions: mergeById(input.current.executions, input.imported.executions ?? []),\n  executionInteractions: mergeById(\n    input.current.executionInteractions,\n    input.imported.executionInteractions ?? [],\n  ),\n  executionSteps: mergeById(\n    input.current.executionSteps,\n    input.imported.executionSteps ?? [],\n  ),\n});\n\ntype StateMutationResult<A> = {\n  state: LocalControlPlaneState;\n  value: A;\n};\n\nconst createStateManager = (\n  context: ResolvedLocalWorkspaceContext,\n  fileSystem: FileSystem.FileSystem,\n) => {\n  let cache: LocalControlPlaneState | null = null;\n  let mutationQueue: Promise<void> = Promise.resolve();\n  const run = <A, E>(effect: Effect.Effect<A, E, FileSystem.FileSystem>) =>\n    Effect.runPromise(bindFileSystem(fileSystem, effect));\n\n  const ensureLoaded = async (): Promise<LocalControlPlaneState> => {\n    if (cache !== null) {\n      return cache;\n    }\n\n    cache = await run(readStateFromDisk(context));\n    return cache;\n  };\n\n  const read = <A>(\n    operation: (state: LocalControlPlaneState) => A | Promise<A>,\n  ): Effect.Effect<A, LocalFileSystemError> =>\n    Effect.tryPromise({\n      try: async () => {\n        await mutationQueue;\n        return operation(cloneValue(await ensureLoaded()));\n      },\n      catch: mapFileSystemError(\n        localControlPlaneStatePath(context),\n        \"read control plane state\",\n      ),\n    });\n\n  const mutate = <A>(\n    operation: (\n      state: LocalControlPlaneState,\n    ) => StateMutationResult<A> | Promise<StateMutationResult<A>>,\n  ): Effect.Effect<A, LocalFileSystemError> =>\n    Effect.tryPromise({\n      try: async () => {\n        let value!: A;\n        let failure: unknown = null;\n\n        mutationQueue = mutationQueue.then(async () => {\n          try {\n            const current = cloneValue(await ensureLoaded());\n            const result = await operation(current);\n            cache = result.state;\n            value = result.value;\n            await run(writeStateToDisk(context, cache));\n          } catch (cause) {\n            failure = cause;\n          }\n        });\n\n        await mutationQueue;\n\n        if (failure !== null) {\n          throw failure;\n        }\n\n        return value;\n      },\n      catch: mapFileSystemError(\n        localControlPlaneStatePath(context),\n        \"write control plane state\",\n      ),\n    });\n\n  return {\n    read,\n    mutate,\n  };\n};\n\nexport const createLocalControlPlaneStore = (\n  context: ResolvedLocalWorkspaceContext,\n  fileSystem: FileSystem.FileSystem,\n) => {\n  const stateManager = createStateManager(context, fileSystem);\n\n  return {\n    authArtifacts: {\n      listByWorkspaceId: (workspaceId: AuthArtifact[\"workspaceId\"]) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdAsc(\n            state.authArtifacts.filter((artifact) => artifact.workspaceId === workspaceId),\n          ),\n        ),\n\n      listByWorkspaceAndSourceId: (input: {\n        workspaceId: AuthArtifact[\"workspaceId\"];\n        sourceId: AuthArtifact[\"sourceId\"];\n      }) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdAsc(\n            state.authArtifacts.filter(\n              (artifact) =>\n                artifact.workspaceId === input.workspaceId\n                && artifact.sourceId === input.sourceId,\n            ),\n          ),\n        ),\n\n      getByWorkspaceSourceAndActor: (input: {\n        workspaceId: AuthArtifact[\"workspaceId\"];\n        sourceId: AuthArtifact[\"sourceId\"];\n        actorAccountId: AuthArtifact[\"actorAccountId\"];\n        slot: AuthArtifact[\"slot\"];\n      }) =>\n        stateManager.read((state) => {\n          const artifact = state.authArtifacts.find(\n            (candidate) =>\n              candidate.workspaceId === input.workspaceId\n              && candidate.sourceId === input.sourceId\n              && candidate.slot === input.slot\n              && actorEquals(candidate.actorAccountId, input.actorAccountId),\n          );\n\n          return artifact ? Option.some(cloneValue(artifact)) : Option.none<AuthArtifact>();\n        }),\n\n      upsert: (artifact: AuthArtifact) =>\n        stateManager.mutate((state) => {\n          const nextArtifacts = state.authArtifacts.filter(\n            (candidate) =>\n              !(\n                candidate.workspaceId === artifact.workspaceId\n                && candidate.sourceId === artifact.sourceId\n                && candidate.slot === artifact.slot\n                && actorEquals(candidate.actorAccountId, artifact.actorAccountId)\n              ),\n          );\n          nextArtifacts.push(cloneValue(artifact));\n\n          return {\n            state: {\n              ...state,\n              authArtifacts: nextArtifacts,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      removeByWorkspaceSourceAndActor: (input: {\n        workspaceId: AuthArtifact[\"workspaceId\"];\n        sourceId: AuthArtifact[\"sourceId\"];\n        actorAccountId: AuthArtifact[\"actorAccountId\"];\n        slot?: AuthArtifact[\"slot\"];\n      }) =>\n        stateManager.mutate((state) => {\n          const nextArtifacts = state.authArtifacts.filter(\n            (candidate) =>\n              candidate.workspaceId !== input.workspaceId\n              || candidate.sourceId !== input.sourceId\n              || !actorEquals(candidate.actorAccountId, input.actorAccountId)\n              || (input.slot !== undefined && candidate.slot !== input.slot),\n          );\n\n          return {\n            state: {\n              ...state,\n              authArtifacts: nextArtifacts,\n            },\n            value: nextArtifacts.length !== state.authArtifacts.length,\n          } satisfies StateMutationResult<boolean>;\n        }),\n\n      removeByWorkspaceAndSourceId: (input: {\n        workspaceId: AuthArtifact[\"workspaceId\"];\n        sourceId: AuthArtifact[\"sourceId\"];\n      }) =>\n        stateManager.mutate((state) => {\n          const nextArtifacts = state.authArtifacts.filter(\n            (candidate) =>\n              candidate.workspaceId !== input.workspaceId\n              || candidate.sourceId !== input.sourceId,\n          );\n\n          return {\n            state: {\n              ...state,\n              authArtifacts: nextArtifacts,\n            },\n            value: state.authArtifacts.length - nextArtifacts.length,\n          } satisfies StateMutationResult<number>;\n        }),\n    },\n\n    authLeases: {\n      listAll: () =>\n        stateManager.read((state) => sortByUpdatedAtAndIdAsc(state.authLeases)),\n\n      getByAuthArtifactId: (authArtifactId: AuthLease[\"authArtifactId\"]) =>\n        stateManager.read((state) => {\n          const lease = state.authLeases.find(\n            (candidate) => candidate.authArtifactId === authArtifactId,\n          );\n          return lease ? Option.some(cloneValue(lease)) : Option.none<AuthLease>();\n        }),\n\n      upsert: (lease: AuthLease) =>\n        stateManager.mutate((state) => {\n          const nextLeases = state.authLeases.filter(\n            (candidate) => candidate.authArtifactId !== lease.authArtifactId,\n          );\n          nextLeases.push(cloneValue(lease));\n\n          return {\n            state: {\n              ...state,\n              authLeases: nextLeases,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      removeByAuthArtifactId: (authArtifactId: AuthLease[\"authArtifactId\"]) =>\n        stateManager.mutate((state) => {\n          const nextLeases = state.authLeases.filter(\n            (candidate) => candidate.authArtifactId !== authArtifactId,\n          );\n\n          return {\n            state: {\n              ...state,\n              authLeases: nextLeases,\n            },\n            value: nextLeases.length !== state.authLeases.length,\n          } satisfies StateMutationResult<boolean>;\n        }),\n    },\n\n    sourceOauthClients: {\n      getByWorkspaceSourceAndProvider: (input: {\n        workspaceId: WorkspaceSourceOauthClient[\"workspaceId\"];\n        sourceId: WorkspaceSourceOauthClient[\"sourceId\"];\n        providerKey: string;\n      }) =>\n        stateManager.read((state) => {\n          const oauthClient = state.sourceOauthClients.find(\n            (candidate) =>\n              candidate.workspaceId === input.workspaceId\n              && candidate.sourceId === input.sourceId\n              && candidate.providerKey === input.providerKey,\n          );\n\n          return oauthClient\n            ? Option.some(cloneValue(oauthClient))\n            : Option.none<WorkspaceSourceOauthClient>();\n        }),\n\n      upsert: (oauthClient: WorkspaceSourceOauthClient) =>\n        stateManager.mutate((state) => {\n          const nextOauthClients = state.sourceOauthClients.filter(\n            (candidate) =>\n              !(\n                candidate.workspaceId === oauthClient.workspaceId\n                && candidate.sourceId === oauthClient.sourceId\n                && candidate.providerKey === oauthClient.providerKey\n              ),\n          );\n          nextOauthClients.push(cloneValue(oauthClient));\n\n          return {\n            state: {\n              ...state,\n              sourceOauthClients: nextOauthClients,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      removeByWorkspaceAndSourceId: (input: {\n        workspaceId: WorkspaceSourceOauthClient[\"workspaceId\"];\n        sourceId: WorkspaceSourceOauthClient[\"sourceId\"];\n      }) =>\n        stateManager.mutate((state) => {\n          const nextOauthClients = state.sourceOauthClients.filter(\n            (candidate) =>\n              candidate.workspaceId !== input.workspaceId\n              || candidate.sourceId !== input.sourceId,\n          );\n\n          return {\n            state: {\n              ...state,\n              sourceOauthClients: nextOauthClients,\n            },\n            value: state.sourceOauthClients.length - nextOauthClients.length,\n          } satisfies StateMutationResult<number>;\n        }),\n    },\n\n    workspaceOauthClients: {\n      listByWorkspaceAndProvider: (input: {\n        workspaceId: WorkspaceOauthClient[\"workspaceId\"];\n        providerKey: string;\n      }) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdAsc(\n            state.workspaceOauthClients.filter(\n              (candidate) =>\n                candidate.workspaceId === input.workspaceId\n                && candidate.providerKey === input.providerKey,\n            ),\n          ),\n        ),\n\n      getById: (id: WorkspaceOauthClient[\"id\"]) =>\n        stateManager.read((state) => {\n          const oauthClient = state.workspaceOauthClients.find(\n            (candidate) => candidate.id === id,\n          );\n\n          return oauthClient\n            ? Option.some(cloneValue(oauthClient))\n            : Option.none<WorkspaceOauthClient>();\n        }),\n\n      upsert: (oauthClient: WorkspaceOauthClient) =>\n        stateManager.mutate((state) => {\n          const nextOauthClients = state.workspaceOauthClients.filter(\n            (candidate) => candidate.id !== oauthClient.id,\n          );\n          nextOauthClients.push(cloneValue(oauthClient));\n\n          return {\n            state: {\n              ...state,\n              workspaceOauthClients: nextOauthClients,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      removeById: (id: WorkspaceOauthClient[\"id\"]) =>\n        stateManager.mutate((state) => {\n          const nextOauthClients = state.workspaceOauthClients.filter(\n            (candidate) => candidate.id !== id,\n          );\n\n          return {\n            state: {\n              ...state,\n              workspaceOauthClients: nextOauthClients,\n            },\n            value: nextOauthClients.length !== state.workspaceOauthClients.length,\n          } satisfies StateMutationResult<boolean>;\n        }),\n    },\n\n    providerAuthGrants: {\n      listByWorkspaceId: (workspaceId: ProviderAuthGrant[\"workspaceId\"]) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdAsc(\n            state.providerAuthGrants.filter(\n              (grant) => grant.workspaceId === workspaceId,\n            ),\n          ),\n        ),\n\n      listByWorkspaceActorAndProvider: (input: {\n        workspaceId: ProviderAuthGrant[\"workspaceId\"];\n        actorAccountId: ProviderAuthGrant[\"actorAccountId\"];\n        providerKey: string;\n      }) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdAsc(\n            state.providerAuthGrants.filter(\n              (grant) =>\n                grant.workspaceId === input.workspaceId\n                && grant.providerKey === input.providerKey\n                && actorEquals(grant.actorAccountId, input.actorAccountId),\n            ),\n          ),\n        ),\n\n      getById: (id: ProviderAuthGrant[\"id\"]) =>\n        stateManager.read((state) => {\n          const grant = state.providerAuthGrants.find(\n            (candidate) => candidate.id === id,\n          );\n\n          return grant\n            ? Option.some(cloneValue(grant))\n            : Option.none<ProviderAuthGrant>();\n        }),\n\n      upsert: (grant: ProviderAuthGrant) =>\n        stateManager.mutate((state) => {\n          const nextGrants = state.providerAuthGrants.filter(\n            (candidate) => candidate.id !== grant.id,\n          );\n          nextGrants.push(cloneValue(grant));\n\n          return {\n            state: {\n              ...state,\n              providerAuthGrants: nextGrants,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      removeById: (id: ProviderAuthGrant[\"id\"]) =>\n        stateManager.mutate((state) => {\n          const nextGrants = state.providerAuthGrants.filter(\n            (candidate) => candidate.id !== id,\n          );\n\n          return {\n            state: {\n              ...state,\n              providerAuthGrants: nextGrants,\n            },\n            value: nextGrants.length !== state.providerAuthGrants.length,\n          } satisfies StateMutationResult<boolean>;\n        }),\n    },\n\n    sourceAuthSessions: {\n      listAll: () =>\n        stateManager.read((state) => sortByUpdatedAtAndIdAsc(state.sourceAuthSessions)),\n\n      listByWorkspaceId: (workspaceId: SourceAuthSession[\"workspaceId\"]) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdAsc(\n            state.sourceAuthSessions.filter(\n              (session) => session.workspaceId === workspaceId,\n            ),\n          ),\n        ),\n\n      getById: (id: SourceAuthSession[\"id\"]) =>\n        stateManager.read((state) => {\n          const session = state.sourceAuthSessions.find(\n            (candidate) => candidate.id === id,\n          );\n          return session\n            ? Option.some(cloneValue(session))\n            : Option.none<SourceAuthSession>();\n        }),\n\n      getByState: (stateValue: SourceAuthSession[\"state\"]) =>\n        stateManager.read((state) => {\n          const session = state.sourceAuthSessions.find(\n            (candidate) => candidate.state === stateValue,\n          );\n          return session\n            ? Option.some(cloneValue(session))\n            : Option.none<SourceAuthSession>();\n        }),\n\n      getPendingByWorkspaceSourceAndActor: (input: {\n        workspaceId: SourceAuthSession[\"workspaceId\"];\n        sourceId: SourceAuthSession[\"sourceId\"];\n        actorAccountId: SourceAuthSession[\"actorAccountId\"];\n        credentialSlot?: SourceAuthSession[\"credentialSlot\"];\n      }) =>\n        stateManager.read((state) => {\n          const session = sortByUpdatedAtAndIdAsc(\n            state.sourceAuthSessions.filter(\n              (candidate) =>\n                candidate.workspaceId === input.workspaceId\n                && candidate.sourceId === input.sourceId\n                && candidate.status === \"pending\"\n                && actorEquals(candidate.actorAccountId, input.actorAccountId)\n                && (input.credentialSlot === undefined\n                  || candidate.credentialSlot === input.credentialSlot),\n            ),\n          )[0] ?? null;\n\n          return session\n            ? Option.some(cloneValue(session))\n            : Option.none<SourceAuthSession>();\n        }),\n\n      insert: (session: SourceAuthSession) =>\n        stateManager.mutate((state) => ({\n          state: {\n            ...state,\n            sourceAuthSessions: [...state.sourceAuthSessions, cloneValue(session)],\n          },\n          value: undefined,\n        } satisfies StateMutationResult<void>)),\n\n      update: (\n        id: SourceAuthSession[\"id\"],\n        patch: Partial<Omit<SourceAuthSession, \"id\" | \"workspaceId\" | \"sourceId\" | \"createdAt\">>,\n      ) =>\n        stateManager.mutate((state) => {\n          let updated: SourceAuthSession | null = null;\n          const nextSessions = state.sourceAuthSessions.map((session) => {\n            if (session.id !== id) {\n              return session;\n            }\n\n            updated = {\n              ...session,\n              ...cloneValue(patch),\n            } satisfies SourceAuthSession;\n            return updated;\n          });\n\n          return {\n            state: {\n              ...state,\n              sourceAuthSessions: nextSessions,\n            },\n            value: updated ? Option.some(cloneValue(updated)) : Option.none<SourceAuthSession>(),\n          } satisfies StateMutationResult<Option.Option<SourceAuthSession>>;\n        }),\n\n      upsert: (session: SourceAuthSession) =>\n        stateManager.mutate((state) => {\n          const nextSessions = state.sourceAuthSessions.filter(\n            (candidate) => candidate.id !== session.id,\n          );\n          nextSessions.push(cloneValue(session));\n\n          return {\n            state: {\n              ...state,\n              sourceAuthSessions: nextSessions,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      removeByWorkspaceAndSourceId: (\n        workspaceId: SourceAuthSession[\"workspaceId\"],\n        sourceId: SourceAuthSession[\"sourceId\"],\n      ) =>\n        stateManager.mutate((state) => {\n          const nextSessions = state.sourceAuthSessions.filter(\n            (candidate) =>\n              candidate.workspaceId !== workspaceId || candidate.sourceId !== sourceId,\n          );\n\n          return {\n            state: {\n              ...state,\n              sourceAuthSessions: nextSessions,\n            },\n            value: nextSessions.length !== state.sourceAuthSessions.length,\n          } satisfies StateMutationResult<boolean>;\n        }),\n    },\n\n    secretMaterials: {\n      getById: (id: SecretMaterial[\"id\"]) =>\n        stateManager.read((state) => {\n          const material = state.secretMaterials.find(\n            (candidate) => candidate.id === id,\n          );\n          return material\n            ? Option.some(cloneValue(material))\n            : Option.none<SecretMaterial>();\n        }),\n\n      listAll: () =>\n        stateManager.read((state) => sortByUpdatedAtAndIdDesc(state.secretMaterials)),\n\n      upsert: (material: SecretMaterial) =>\n        stateManager.mutate((state) => {\n          const nextMaterials = state.secretMaterials.filter(\n            (candidate) => candidate.id !== material.id,\n          );\n          nextMaterials.push(cloneValue(material));\n\n          return {\n            state: {\n              ...state,\n              secretMaterials: nextMaterials,\n            },\n            value: undefined,\n          } satisfies StateMutationResult<void>;\n        }),\n\n      updateById: (\n        id: SecretMaterial[\"id\"],\n        update: { name?: string | null; value?: string },\n      ) =>\n        stateManager.mutate((state) => {\n          let updated: SecretMaterial | null = null;\n          const nextMaterials = state.secretMaterials.map((material) => {\n            if (material.id !== id) {\n              return material;\n            }\n\n            updated = {\n              ...material,\n              ...(update.name !== undefined ? { name: update.name } : {}),\n              ...(update.value !== undefined ? { value: update.value } : {}),\n              updatedAt: Date.now(),\n            } satisfies SecretMaterial;\n            return updated;\n          });\n\n          return {\n            state: {\n              ...state,\n              secretMaterials: nextMaterials,\n            },\n            value: updated ? Option.some(cloneValue(updated)) : Option.none<SecretMaterial>(),\n          } satisfies StateMutationResult<Option.Option<SecretMaterial>>;\n        }),\n\n      removeById: (id: SecretMaterial[\"id\"]) =>\n        stateManager.mutate((state) => {\n          const nextMaterials = state.secretMaterials.filter(\n            (candidate) => candidate.id !== id,\n          );\n\n          return {\n            state: {\n              ...state,\n              secretMaterials: nextMaterials,\n            },\n            value: nextMaterials.length !== state.secretMaterials.length,\n          } satisfies StateMutationResult<boolean>;\n        }),\n    },\n\n    executions: {\n      getById: (executionId: Execution[\"id\"]) =>\n        stateManager.read((state) => {\n          const execution = state.executions.find(\n            (candidate) => candidate.id === executionId,\n          );\n          return execution\n            ? Option.some(cloneValue(execution))\n            : Option.none<Execution>();\n        }),\n\n      getByWorkspaceAndId: (\n        workspaceId: Execution[\"workspaceId\"],\n        executionId: Execution[\"id\"],\n      ) =>\n        stateManager.read((state) => {\n          const execution = state.executions.find(\n            (candidate) =>\n              candidate.workspaceId === workspaceId && candidate.id === executionId,\n          );\n          return execution\n            ? Option.some(cloneValue(execution))\n            : Option.none<Execution>();\n        }),\n\n      insert: (execution: Execution) =>\n        stateManager.mutate((state) => ({\n          state: {\n            ...state,\n            executions: [...state.executions, cloneValue(execution)],\n          },\n          value: undefined,\n        } satisfies StateMutationResult<void>)),\n\n      update: (\n        executionId: Execution[\"id\"],\n        patch: Partial<\n          Omit<Execution, \"id\" | \"workspaceId\" | \"createdByAccountId\" | \"createdAt\">\n        >,\n      ) =>\n        stateManager.mutate((state) => {\n          let updated: Execution | null = null;\n          const nextExecutions = state.executions.map((execution) => {\n            if (execution.id !== executionId) {\n              return execution;\n            }\n\n            updated = {\n              ...execution,\n              ...cloneValue(patch),\n            } satisfies Execution;\n            return updated;\n          });\n\n          return {\n            state: {\n              ...state,\n              executions: nextExecutions,\n            },\n            value: updated ? Option.some(cloneValue(updated)) : Option.none<Execution>(),\n          } satisfies StateMutationResult<Option.Option<Execution>>;\n        }),\n    },\n\n    executionInteractions: {\n      getById: (interactionId: ExecutionInteraction[\"id\"]) =>\n        stateManager.read((state) => {\n          const interaction = state.executionInteractions.find(\n            (candidate) => candidate.id === interactionId,\n          );\n          return interaction\n            ? Option.some(cloneValue(interaction))\n            : Option.none<ExecutionInteraction>();\n        }),\n\n      listByExecutionId: (executionId: ExecutionInteraction[\"executionId\"]) =>\n        stateManager.read((state) =>\n          sortByUpdatedAtAndIdDesc(\n            state.executionInteractions.filter(\n              (interaction) => interaction.executionId === executionId,\n            ),\n          ),\n        ),\n\n      getPendingByExecutionId: (executionId: ExecutionInteraction[\"executionId\"]) =>\n        stateManager.read((state) => {\n          const interaction = sortByUpdatedAtAndIdDesc(\n            state.executionInteractions.filter(\n              (candidate) =>\n                candidate.executionId === executionId && candidate.status === \"pending\",\n            ),\n          )[0] ?? null;\n\n          return interaction\n            ? Option.some(cloneValue(interaction))\n            : Option.none<ExecutionInteraction>();\n        }),\n\n      insert: (interaction: ExecutionInteraction) =>\n        stateManager.mutate((state) => ({\n          state: {\n            ...state,\n            executionInteractions: [\n              ...state.executionInteractions,\n              cloneValue(interaction),\n            ],\n          },\n          value: undefined,\n        } satisfies StateMutationResult<void>)),\n\n      update: (\n        interactionId: ExecutionInteraction[\"id\"],\n        patch: Partial<\n          Omit<\n            ExecutionInteraction,\n            \"id\" | \"executionId\" | \"createdAt\"\n          >\n        >,\n      ) =>\n        stateManager.mutate((state) => {\n          let updated: ExecutionInteraction | null = null;\n          const nextInteractions = state.executionInteractions.map((interaction) => {\n            if (interaction.id !== interactionId) {\n              return interaction;\n            }\n\n            updated = {\n              ...interaction,\n              ...cloneValue(patch),\n            } as ExecutionInteraction;\n            return updated;\n          });\n\n          return {\n            state: {\n              ...state,\n              executionInteractions: nextInteractions,\n            },\n            value: updated\n              ? Option.some(cloneValue(updated))\n              : Option.none<ExecutionInteraction>(),\n          } satisfies StateMutationResult<Option.Option<ExecutionInteraction>>;\n        }),\n    },\n\n    executionSteps: {\n      getByExecutionAndSequence: (\n        executionId: ExecutionStep[\"executionId\"],\n        sequence: ExecutionStep[\"sequence\"],\n      ) =>\n        stateManager.read((state) => {\n          const step = state.executionSteps.find(\n            (candidate) =>\n              candidate.executionId === executionId && candidate.sequence === sequence,\n          );\n          return step\n            ? Option.some(cloneValue(step))\n            : Option.none<ExecutionStep>();\n        }),\n\n      listByExecutionId: (executionId: ExecutionStep[\"executionId\"]) =>\n        stateManager.read((state) =>\n          [...state.executionSteps]\n            .filter((step) => step.executionId === executionId)\n            .sort(\n              (left, right) =>\n                left.sequence - right.sequence\n                || right.updatedAt - left.updatedAt,\n            ),\n        ),\n\n      insert: (step: ExecutionStep) =>\n        stateManager.mutate((state) => ({\n          state: {\n            ...state,\n            executionSteps: [...state.executionSteps, cloneValue(step)],\n          },\n          value: undefined,\n        } satisfies StateMutationResult<void>)),\n\n      deleteByExecutionId: (executionId: ExecutionStep[\"executionId\"]) =>\n        stateManager.mutate((state) => ({\n          state: {\n            ...state,\n            executionSteps: state.executionSteps.filter(\n              (step) => step.executionId !== executionId,\n            ),\n          },\n          value: undefined,\n        } satisfies StateMutationResult<void>)),\n\n      updateByExecutionAndSequence: (\n        executionId: ExecutionStep[\"executionId\"],\n        sequence: ExecutionStep[\"sequence\"],\n        patch: Partial<\n          Omit<\n            ExecutionStep,\n            \"id\" | \"executionId\" | \"sequence\" | \"createdAt\"\n          >\n        >,\n      ) =>\n        stateManager.mutate((state) => {\n          let updated: ExecutionStep | null = null;\n          const nextSteps = state.executionSteps.map((step) => {\n            if (step.executionId !== executionId || step.sequence !== sequence) {\n              return step;\n            }\n\n            updated = {\n              ...step,\n              ...cloneValue(patch),\n            } as ExecutionStep;\n            return updated;\n          });\n\n          return {\n            state: {\n              ...state,\n              executionSteps: nextSteps,\n            },\n            value: updated\n              ? Option.some(cloneValue(updated))\n              : Option.none<ExecutionStep>(),\n          } satisfies StateMutationResult<Option.Option<ExecutionStep>>;\n        }),\n    },\n  };\n};\n\nexport type LocalControlPlaneStore = ReturnType<typeof createLocalControlPlaneStore>;\n\nexport const createLocalControlPlanePersistence = (\n  context: ResolvedLocalWorkspaceContext,\n  fileSystem: FileSystem.FileSystem,\n): LocalControlPlanePersistence => ({\n  rows: createLocalControlPlaneStore(context, fileSystem),\n  close: async () => {},\n});\n\nexport { localControlPlaneStatePath };\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport const unknownLocalErrorDetails = (cause: unknown): string =>\n  cause instanceof Error ? cause.message : String(cause);\n\nexport class LocalFileSystemError extends Data.TaggedError(\n  \"LocalFileSystemError\",\n)<{\n  readonly message: string;\n  readonly action: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalExecutorConfigDecodeError extends Data.TaggedError(\n  \"LocalExecutorConfigDecodeError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalWorkspaceStateDecodeError extends Data.TaggedError(\n  \"LocalWorkspaceStateDecodeError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalSourceArtifactDecodeError extends Data.TaggedError(\n  \"LocalSourceArtifactDecodeError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalToolTranspileError extends Data.TaggedError(\n  \"LocalToolTranspileError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalToolImportError extends Data.TaggedError(\n  \"LocalToolImportError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalToolDefinitionError extends Data.TaggedError(\n  \"LocalToolDefinitionError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly details: string;\n}> {}\n\nexport class LocalToolPathConflictError extends Data.TaggedError(\n  \"LocalToolPathConflictError\",\n)<{\n  readonly message: string;\n  readonly path: string;\n  readonly otherPath: string;\n  readonly toolPath: string;\n}> {}\n\nexport class RuntimeLocalWorkspaceUnavailableError extends Data.TaggedError(\n  \"RuntimeLocalWorkspaceUnavailableError\",\n)<{\n  readonly message: string;\n}> {}\n\nexport class RuntimeLocalWorkspaceMismatchError extends Data.TaggedError(\n  \"RuntimeLocalWorkspaceMismatchError\",\n)<{\n  readonly message: string;\n  readonly requestedWorkspaceId: string;\n  readonly activeWorkspaceId: string;\n}> {}\n\nexport class LocalConfiguredSourceNotFoundError extends Data.TaggedError(\n  \"LocalConfiguredSourceNotFoundError\",\n)<{\n  readonly message: string;\n  readonly sourceId: string;\n}> {}\n\nexport class LocalSourceArtifactMissingError extends Data.TaggedError(\n  \"LocalSourceArtifactMissingError\",\n)<{\n  readonly message: string;\n  readonly sourceId: string;\n}> {}\n\nexport class LocalUnsupportedSourceKindError extends Data.TaggedError(\n  \"LocalUnsupportedSourceKindError\",\n)<{\n  readonly message: string;\n  readonly kind: string;\n}> {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/installation.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport { createControlPlaneRuntime } from \"../index\";\nimport { getOrProvisionLocalInstallation } from \"./installation\";\nimport { resolveLocalWorkspaceContext } from \"./config\";\n\nconst makeRuntime = Effect.acquireRelease(\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const workspaceRoot = yield* fs.makeTempDirectory({\n      directory: tmpdir(),\n      prefix: \"executor-local-installation-\",\n    });\n    const homeConfigPath = join(workspaceRoot, \".executor-home.jsonc\");\n    const homeStateDirectory = join(workspaceRoot, \".executor-home-state\");\n    const runtime = yield* createControlPlaneRuntime({\n      localDataDir: \":memory:\",\n      workspaceRoot,\n      homeConfigPath,\n      homeStateDirectory,\n    });\n\n    return {\n      runtime,\n      workspaceRoot,\n      homeConfigPath,\n      homeStateDirectory,\n    };\n  }).pipe(Effect.provide(NodeFileSystem.layer)),\n  ({ runtime }) => Effect.promise(() => runtime.close()).pipe(Effect.orDie),\n);\n\ndescribe(\"local-installation\", () => {\n  it.scoped(\"derives a stable local identity on first boot\", () =>\n    Effect.gen(function* () {\n      const { runtime, workspaceRoot } = yield* makeRuntime;\n      const installation = runtime.localInstallation;\n      const fs = yield* FileSystem.FileSystem;\n\n      expect(installation.accountId).toBe(\"acc_local_default\");\n      expect(installation.workspaceId.startsWith(\"ws_local_\")).toBe(true);\n      expect(yield* fs.exists(join(workspaceRoot, \".executor\", \"executor.jsonc\"))).toBe(false);\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n    60_000,\n  );\n\n  it.scoped(\"is idempotent when loading the default local installation\", () =>\n    Effect.gen(function* () {\n      const { runtime, workspaceRoot, homeConfigPath, homeStateDirectory } = yield* makeRuntime;\n      const context = yield* resolveLocalWorkspaceContext({\n        workspaceRoot,\n        homeConfigPath,\n        homeStateDirectory,\n      });\n\n      const first = runtime.localInstallation;\n      const second = yield* getOrProvisionLocalInstallation({\n        context,\n      });\n\n      expect(second.accountId).toBe(first.accountId);\n      expect(second.workspaceId).toBe(first.workspaceId);\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/installation.ts",
    "content": "import { createHash } from \"node:crypto\";\n\nimport {\n  AccountIdSchema,\n  WorkspaceIdSchema,\n  type LocalInstallation,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { ResolvedLocalWorkspaceContext } from \"./config\";\n\nconst LOCAL_ACCOUNT_ID = AccountIdSchema.make(\"acc_local_default\");\n\nconst stableHash = (value: string): string =>\n  createHash(\"sha256\").update(value).digest(\"hex\").slice(0, 16);\n\nconst normalizeSlashPath = (value: string): string =>\n  value.replaceAll(\"\\\\\", \"/\");\n\nconst deriveWorkspaceId = (context: ResolvedLocalWorkspaceContext) =>\n  WorkspaceIdSchema.make(\n    `ws_local_${stableHash(normalizeSlashPath(context.workspaceRoot))}`,\n  );\n\nexport const deriveLocalInstallation = (\n  context: ResolvedLocalWorkspaceContext,\n): LocalInstallation => ({\n  accountId: LOCAL_ACCOUNT_ID,\n  workspaceId: deriveWorkspaceId(context),\n});\n\nexport const loadLocalInstallation = (\n  context: ResolvedLocalWorkspaceContext,\n): Effect.Effect<LocalInstallation, never> =>\n  Effect.succeed(deriveLocalInstallation(context));\n\nexport const getOrProvisionLocalInstallation = (input: {\n  context: ResolvedLocalWorkspaceContext;\n}): Effect.Effect<LocalInstallation, never> =>\n  loadLocalInstallation(input.context);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/operations.ts",
    "content": "import type {\n  Execution,\n  ExecutionInteraction,\n  Source,\n  WorkspaceId,\n} from \"#schema\";\nimport {\n  SourceIdSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\n\nimport { submitExecutionInteractionResponse } from \"../execution/service\";\nimport { LiveExecutionManagerService } from \"../execution/live\";\nimport {\n  operationErrors,\n} from \"../policy/operation-errors\";\nimport { resolveLocalWorkspaceContext } from \"./config\";\nimport { InstallationStore, LocalInstallationStore } from \"./storage\";\nimport { getRuntimeLocalWorkspaceOption } from \"./runtime-context\";\nimport { RuntimeSourceAuthServiceTag } from \"../sources/source-auth-service\";\nimport {\n  createSourceCredentialSelectionBearerContent,\n  createSourceCredentialSelectionNoneContent,\n} from \"../sources/source-credential-interactions\";\nimport { ControlPlaneStore } from \"../store\";\n\nconst localOps = {\n  installation: operationErrors(\"local.installation.get\"),\n  sourceCredentialComplete: operationErrors(\"sources.credentials.complete\"),\n  sourceCredentialPage: operationErrors(\"sources.credentials.page\"),\n  sourceCredentialSubmit: operationErrors(\"sources.credentials.submit\"),\n} as const;\n\ntype SourceCredentialInteraction = {\n  interactionId: ExecutionInteraction[\"id\"];\n  executionId: Execution[\"id\"];\n  status: ExecutionInteraction[\"status\"];\n  message: string;\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  sourceLabel: string;\n  endpoint: string;\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null;\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" ? value : null;\n\nconst trimOrNull = (value: string | null | undefined): string | null => {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nconst decodeSourceCredentialInteraction = (\n  interaction: ExecutionInteraction,\n): Omit<SourceCredentialInteraction, \"sourceLabel\" | \"endpoint\"> | null => {\n  try {\n    if (interaction.purpose !== \"source_connect_oauth2\"\n      && interaction.purpose !== \"source_connect_secret\"\n      && interaction.purpose !== \"elicitation\") {\n      return null;\n    }\n\n    const payload = JSON.parse(interaction.payloadJson) as unknown;\n    if (!isRecord(payload)) {\n      return null;\n    }\n\n    const args = payload.args;\n    const elicitation = payload.elicitation;\n    if (!isRecord(args) || !isRecord(elicitation)) {\n      return null;\n    }\n\n    if (payload.path !== \"executor.sources.add\" || args.kind !== \"openapi\") {\n      return null;\n    }\n    const effectivePurpose = interaction.purpose === \"elicitation\"\n      ? elicitation.mode === \"url\"\n        ? \"source_connect_oauth2\"\n        : \"source_connect_secret\"\n      : interaction.purpose;\n    if (effectivePurpose === \"source_connect_oauth2\" && elicitation.mode !== \"url\") {\n      return null;\n    }\n    if (effectivePurpose === \"source_connect_secret\" && elicitation.mode !== \"form\") {\n      return null;\n    }\n\n    const workspaceId = trimOrNull(asString(args.workspaceId));\n    const sourceId = trimOrNull(asString(args.sourceId));\n    const message = trimOrNull(asString(elicitation.message));\n    if (workspaceId === null || sourceId === null || message === null) {\n      return null;\n    }\n\n    return {\n      interactionId: interaction.id,\n      executionId: interaction.executionId,\n      status: interaction.status,\n      message,\n      workspaceId: WorkspaceIdSchema.make(workspaceId),\n      sourceId: SourceIdSchema.make(sourceId),\n    };\n  } catch {\n    return null;\n  }\n};\n\nconst loadSourceCredentialInteraction = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  interactionId: ExecutionInteraction[\"id\"];\n  operation:\n    | typeof localOps.sourceCredentialPage\n    | typeof localOps.sourceCredentialSubmit;\n}) =>\n  Effect.gen(function* () {\n    const store = yield* ControlPlaneStore;\n    const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n\n    const stored = yield* store.executionInteractions.getById(input.interactionId).pipe(\n      Effect.mapError((error) =>\n        input.operation.unknownStorage(\n          error,\n          `Failed loading execution interaction ${input.interactionId}`,\n        ),\n      ),\n    );\n\n    if (Option.isNone(stored)) {\n      return yield* input.operation.notFound(\n          \"Source credential request not found\",\n          `interactionId=${input.interactionId}`,\n        );\n    }\n\n    const decoded = decodeSourceCredentialInteraction(stored.value);\n    if (\n      decoded === null\n      || decoded.workspaceId !== input.workspaceId\n      || decoded.sourceId !== input.sourceId\n    ) {\n      return yield* input.operation.notFound(\n          \"Source credential request not found\",\n          `workspaceId=${input.workspaceId} sourceId=${input.sourceId} interactionId=${input.interactionId}`,\n        );\n    }\n\n    const source = yield* sourceAuthService.getSourceById({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    }).pipe(\n      Effect.mapError((error) =>\n        input.operation.unknownStorage(\n          error,\n          `Failed loading source ${input.sourceId}`,\n        ),\n      ),\n    );\n\n    return {\n      ...decoded,\n      sourceLabel: source.name,\n      endpoint: source.endpoint,\n    } satisfies SourceCredentialInteraction;\n  });\n\nexport const getLocalInstallation = () =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* getRuntimeLocalWorkspaceOption();\n    const context = runtimeLocalWorkspace?.context\n      ?? (yield* resolveLocalWorkspaceContext().pipe(\n        Effect.mapError((error) =>\n          localOps.installation.unknownStorage(\n            error,\n            \"Failed resolving local workspace context\",\n          ),\n          ),\n      ));\n\n    const installationStore = runtimeLocalWorkspace !== null\n      ? yield* InstallationStore\n      : LocalInstallationStore;\n\n    return yield* installationStore.load(\n      context,\n    );\n  });\n\nexport const getSourceCredentialInteraction = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  interactionId: ExecutionInteraction[\"id\"];\n}) =>\n  loadSourceCredentialInteraction({\n    ...input,\n    operation: localOps.sourceCredentialPage,\n  });\n\nexport const submitSourceCredentialInteraction = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  interactionId: ExecutionInteraction[\"id\"];\n  action: \"submit\" | \"continue\" | \"cancel\";\n  token?: string | null;\n}) =>\n  Effect.gen(function* () {\n    const interaction = yield* loadSourceCredentialInteraction({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n      interactionId: input.interactionId,\n      operation: localOps.sourceCredentialSubmit,\n    });\n\n    if (interaction.status !== \"pending\") {\n      return yield* localOps.sourceCredentialSubmit.badRequest(\n          \"Source credential request is no longer active\",\n          `interactionId=${interaction.interactionId} status=${interaction.status}`,\n        );\n    }\n\n    const liveExecutionManager = yield* LiveExecutionManagerService;\n\n    if (input.action === \"cancel\") {\n      const resumed = yield* liveExecutionManager.resolveInteraction({\n        executionId: interaction.executionId,\n        response: {\n          action: \"cancel\",\n        },\n      });\n\n      if (!resumed) {\n        const persisted = yield* submitExecutionInteractionResponse({\n          executionId: interaction.executionId,\n          response: {\n            action: \"cancel\",\n          },\n        }).pipe(\n          Effect.mapError((error) =>\n            localOps.sourceCredentialSubmit.unknownStorage(\n              error,\n              `Failed resuming execution for interaction ${interaction.interactionId}`,\n            )\n          ),\n        );\n\n        if (!persisted) {\n          return yield* localOps.sourceCredentialSubmit.badRequest(\n              \"Source credential request is no longer resumable\",\n              `interactionId=${interaction.interactionId}`,\n            );\n        }\n      }\n\n      return {\n        kind: \"cancelled\" as const,\n        sourceLabel: interaction.sourceLabel,\n        endpoint: interaction.endpoint,\n      };\n    }\n\n    if (input.action === \"continue\") {\n      const resumed = yield* liveExecutionManager.resolveInteraction({\n        executionId: interaction.executionId,\n        response: {\n          action: \"accept\",\n          content: createSourceCredentialSelectionNoneContent(),\n        },\n      });\n\n      if (!resumed) {\n        const persisted = yield* submitExecutionInteractionResponse({\n          executionId: interaction.executionId,\n          response: {\n            action: \"accept\",\n            content: createSourceCredentialSelectionNoneContent(),\n          },\n        }).pipe(\n          Effect.mapError((error) =>\n            localOps.sourceCredentialSubmit.unknownStorage(\n              error,\n              `Failed resuming execution for interaction ${interaction.interactionId}`,\n            )\n          ),\n        );\n\n        if (!persisted) {\n          return yield* localOps.sourceCredentialSubmit.badRequest(\n              \"Source credential request is no longer resumable\",\n              `interactionId=${interaction.interactionId}`,\n            );\n        }\n      }\n\n      return {\n        kind: \"continued\" as const,\n        sourceLabel: interaction.sourceLabel,\n        endpoint: interaction.endpoint,\n      };\n    }\n\n    const token = trimOrNull(input.token);\n    if (token === null) {\n      return yield* localOps.sourceCredentialSubmit.badRequest(\n          \"Missing token\",\n          `interactionId=${interaction.interactionId}`,\n        );\n    }\n\n    const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n    const tokenRef = yield* sourceAuthService.storeSecretMaterial({\n      purpose: \"auth_material\",\n      value: token,\n    }).pipe(\n      Effect.mapError((error) =>\n        localOps.sourceCredentialSubmit.unknownStorage(\n          error,\n          `Failed storing credential material for interaction ${interaction.interactionId}`,\n        ),\n      ),\n    );\n    const resumed = yield* liveExecutionManager.resolveInteraction({\n      executionId: interaction.executionId,\n      response: {\n        action: \"accept\",\n        content: createSourceCredentialSelectionBearerContent(tokenRef),\n      },\n    });\n\n    if (!resumed) {\n      const persisted = yield* submitExecutionInteractionResponse({\n        executionId: interaction.executionId,\n        response: {\n          action: \"accept\",\n          content: createSourceCredentialSelectionBearerContent(tokenRef),\n        },\n      }).pipe(\n        Effect.mapError((error) =>\n          localOps.sourceCredentialSubmit.unknownStorage(\n            error,\n            `Failed resuming execution for interaction ${interaction.interactionId}`,\n          )\n        ),\n      );\n\n      if (!persisted) {\n        return yield* localOps.sourceCredentialSubmit.badRequest(\n            \"Source credential request is no longer resumable\",\n            `interactionId=${interaction.interactionId}`,\n          );\n      }\n    }\n\n    return {\n      kind: \"stored\" as const,\n      sourceLabel: interaction.sourceLabel,\n      endpoint: interaction.endpoint,\n    };\n  });\n\nexport const completeSourceCredentialSetup = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  state: string;\n  code?: string | null;\n  error?: string | null;\n  errorDescription?: string | null;\n}) =>\n  Effect.gen(function* () {\n    const sourceAuthService = yield* RuntimeSourceAuthServiceTag;\n\n    return yield* sourceAuthService.completeSourceCredentialSetup(input).pipe(\n      Effect.mapError((error) =>\n        localOps.sourceCredentialComplete.unknownStorage(\n          error,\n          \"Failed completing source credential setup\",\n        ),\n      ),\n    );\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/release-upgrade-fixtures.ts",
    "content": "import { existsSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport * as Schema from \"effect/Schema\";\n\nimport { resolveLocalWorkspaceContext } from \"./config\";\n\nexport const ReleaseWorkspaceFixtureArtifactExpectationSchema = Schema.Literal(\n  \"readable\",\n  \"cache-miss\",\n);\n\nexport const ReleaseWorkspaceFixtureManifestSchema = Schema.Struct({\n  schemaVersion: Schema.Literal(1),\n  kind: Schema.Literal(\"release-workspace\"),\n  id: Schema.String,\n  releaseVersion: Schema.String,\n  sourceId: Schema.String,\n  artifactExpectation: ReleaseWorkspaceFixtureArtifactExpectationSchema,\n  description: Schema.optional(Schema.String),\n});\n\nexport type ReleaseWorkspaceFixtureManifest =\n  typeof ReleaseWorkspaceFixtureManifestSchema.Type;\n\nexport type ReleaseWorkspaceFixture = ReleaseWorkspaceFixtureManifest & {\n  readonly rootDirectory: string;\n};\n\nexport const releaseWorkspaceFixturesRoot = fileURLToPath(\n  new URL(\"../__fixtures__\", import.meta.url),\n);\n\nconst decodeReleaseWorkspaceFixtureManifest = Schema.decodeUnknownSync(\n  Schema.parseJson(ReleaseWorkspaceFixtureManifestSchema),\n);\n\nconst sanitizeFixtureSegment = (value: string): string =>\n  value\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9._-]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n\nexport const defaultReleaseWorkspaceFixtureDirectoryName = (input: {\n  releaseVersion: string;\n  sourceId: string;\n}): string =>\n  `${sanitizeFixtureSegment(input.releaseVersion)}-${sanitizeFixtureSegment(input.sourceId)}-workspace`;\n\nexport const releaseWorkspaceFixtures: readonly ReleaseWorkspaceFixture[] =\n  readdirSync(releaseWorkspaceFixturesRoot, { withFileTypes: true })\n    .filter((entry) => entry.isDirectory())\n    .flatMap((entry) => {\n      const rootDirectory = join(releaseWorkspaceFixturesRoot, entry.name);\n      const manifestPath = join(rootDirectory, \"fixture.json\");\n\n      if (!existsSync(manifestPath)) {\n        return [];\n      }\n\n      const manifest = decodeReleaseWorkspaceFixtureManifest(\n        readFileSync(manifestPath, \"utf8\"),\n      );\n      return [{ ...manifest, rootDirectory }];\n    })\n    .sort(\n      (left, right) =>\n        left.releaseVersion.localeCompare(right.releaseVersion) ||\n        left.id.localeCompare(right.id),\n    );\n\nexport const resolveReleaseWorkspaceFixtureContext = (\n  fixture: ReleaseWorkspaceFixture,\n) =>\n  resolveLocalWorkspaceContext({\n    workspaceRoot: fixture.rootDirectory,\n    homeConfigPath: join(fixture.rootDirectory, \".executor-home.jsonc\"),\n    homeStateDirectory: join(fixture.rootDirectory, \".executor-home-state\"),\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/runtime-context.ts",
    "content": "import * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\n\nimport type { AccountId, WorkspaceId } from \"#schema\";\nimport type {\n  LoadedLocalExecutorConfig,\n  ResolvedLocalWorkspaceContext,\n} from \"./config\";\nimport {\n  RuntimeLocalWorkspaceMismatchError,\n  RuntimeLocalWorkspaceUnavailableError,\n} from \"./errors\";\n\nexport type RuntimeLocalWorkspaceState = {\n  context: ResolvedLocalWorkspaceContext;\n  installation: {\n    workspaceId: WorkspaceId;\n    accountId: AccountId;\n  };\n  loadedConfig: LoadedLocalExecutorConfig;\n};\n\nexport class RuntimeLocalWorkspaceService extends Context.Tag(\n  \"#runtime/RuntimeLocalWorkspaceService\",\n)<RuntimeLocalWorkspaceService, RuntimeLocalWorkspaceState>() {}\n\nexport const RuntimeLocalWorkspaceLive = (\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState,\n) => Layer.succeed(RuntimeLocalWorkspaceService, runtimeLocalWorkspace);\n\nexport const provideOptionalRuntimeLocalWorkspace = <A, E, R>(\n  effect: Effect.Effect<A, E, R>,\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState | null | undefined,\n): Effect.Effect<A, E, R> =>\n  runtimeLocalWorkspace === null || runtimeLocalWorkspace === undefined\n    ? effect\n    : effect.pipe(Effect.provide(RuntimeLocalWorkspaceLive(runtimeLocalWorkspace)));\n\nexport const getRuntimeLocalWorkspaceOption = () =>\n  Effect.contextWith((context) =>\n    Context.getOption(context, RuntimeLocalWorkspaceService),\n  ).pipe(\n    Effect.map((option) => (Option.isSome(option) ? option.value : null)),\n  ) as Effect.Effect<RuntimeLocalWorkspaceState | null, never, never>;\n\nexport const requireRuntimeLocalWorkspace = (\n  workspaceId?: WorkspaceId,\n): Effect.Effect<\n  RuntimeLocalWorkspaceState,\n  RuntimeLocalWorkspaceUnavailableError | RuntimeLocalWorkspaceMismatchError,\n  never\n> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* getRuntimeLocalWorkspaceOption();\n    if (runtimeLocalWorkspace === null) {\n      return yield* new RuntimeLocalWorkspaceUnavailableError({\n          message: \"Runtime local workspace is unavailable\",\n        });\n    }\n\n    if (\n      workspaceId !== undefined\n      && runtimeLocalWorkspace.installation.workspaceId !== workspaceId\n    ) {\n      return yield* new RuntimeLocalWorkspaceMismatchError({\n          message: `Workspace ${workspaceId} is not the active local workspace ${runtimeLocalWorkspace.installation.workspaceId}`,\n          requestedWorkspaceId: workspaceId,\n          activeWorkspaceId: runtimeLocalWorkspace.installation.workspaceId,\n        });\n    }\n\n    return runtimeLocalWorkspace;\n  });\n\nexport const requireRuntimeLocalAccountId = (workspaceId?: WorkspaceId) =>\n  requireRuntimeLocalWorkspace(workspaceId).pipe(\n    Effect.map((runtimeLocalWorkspace) => runtimeLocalWorkspace.installation.accountId),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/secret-material-providers.ts",
    "content": "import { randomUUID } from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { isAbsolute } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\n\nimport {\n  type LocalConfigSecretProvider,\n  type LocalExecutorConfig,\n  type SecretMaterial,\n  type SecretMaterialPurpose,\n  SecretMaterialIdSchema,\n  type SecretRef,\n} from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\n\nimport { resolveConfigRelativePath } from \"./config\";\nimport { fromConfigSecretProviderId } from \"./config-secrets\";\nimport { getRuntimeLocalWorkspaceOption } from \"./runtime-context\";\nimport { ControlPlaneStore } from \"../store\";\nimport type { ControlPlaneStoreShape } from \"../store\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nexport const ENV_SECRET_PROVIDER_ID = \"env\";\nexport const PARAMS_SECRET_PROVIDER_ID = \"params\";\nexport const KEYCHAIN_SECRET_PROVIDER_ID = \"keychain\";\nexport const LOCAL_SECRET_PROVIDER_ID = \"local\";\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nexport type SecretStoreProviderId =\n  | typeof KEYCHAIN_SECRET_PROVIDER_ID\n  | typeof LOCAL_SECRET_PROVIDER_ID;\n\nexport type SecretMaterialResolveContext = {\n  params?: Readonly<Record<string, string | undefined>>;\n};\n\nexport type ResolveSecretMaterial = (input: {\n  ref: SecretRef;\n  context?: SecretMaterialResolveContext;\n}) => Effect.Effect<string, Error, never>;\n\nexport type StoreSecretMaterial = (input: {\n  purpose: SecretMaterialPurpose;\n  value: string;\n  name?: string | null;\n}) => Effect.Effect<SecretRef, Error, never>;\n\nexport type DeleteSecretMaterial = (\n  ref: SecretRef,\n) => Effect.Effect<boolean, Error, never>;\n\nexport type UpdateSecretMaterial = (input: {\n  ref: SecretRef;\n  name?: string | null;\n  value?: string;\n}) => Effect.Effect<{\n  id: string;\n  providerId: string;\n  name: string | null;\n  purpose: string;\n  createdAt: number;\n  updatedAt: number;\n}, Error, never>;\n\nexport class SecretMaterialResolverService extends Context.Tag(\n  \"#runtime/SecretMaterialResolverService\",\n)<SecretMaterialResolverService, ResolveSecretMaterial>() {}\n\nexport class SecretMaterialStorerService extends Context.Tag(\n  \"#runtime/SecretMaterialStorerService\",\n)<SecretMaterialStorerService, StoreSecretMaterial>() {}\n\nexport class SecretMaterialDeleterService extends Context.Tag(\n  \"#runtime/SecretMaterialDeleterService\",\n)<SecretMaterialDeleterService, DeleteSecretMaterial>() {}\n\nexport class SecretMaterialUpdaterService extends Context.Tag(\n  \"#runtime/SecretMaterialUpdaterService\",\n)<SecretMaterialUpdaterService, UpdateSecretMaterial>() {}\n\ntype SecretMaterialProviderRuntime = {\n  rows: ControlPlaneStoreShape;\n  env: NodeJS.ProcessEnv;\n  dangerouslyAllowEnvSecrets: boolean;\n  keychainServiceName: string;\n  localConfig: LocalExecutorConfig | null;\n  workspaceRoot: string | null;\n};\n\ntype SecretMaterialProvider = {\n  resolve: (input: {\n    ref: SecretRef;\n    context: SecretMaterialResolveContext;\n    runtime: SecretMaterialProviderRuntime;\n  }) => Effect.Effect<string, Error, never>;\n  store?: (input: {\n    purpose: SecretMaterialPurpose;\n    value: string;\n    name?: string | null;\n    runtime: SecretMaterialProviderRuntime;\n  }) => Effect.Effect<SecretRef, Error, never>;\n  update?: (input: {\n    ref: SecretRef;\n    name?: string | null;\n    value?: string;\n    runtime: SecretMaterialProviderRuntime;\n  }) => Effect.Effect<{\n    id: string;\n    providerId: string;\n    name: string | null;\n    purpose: string;\n    createdAt: number;\n    updatedAt: number;\n  }, Error, never>;\n  remove?: (input: {\n    ref: SecretRef;\n    runtime: SecretMaterialProviderRuntime;\n  }) => Effect.Effect<boolean, Error, never>;\n};\n\ntype SecretMaterialProviderRegistry = ReadonlyMap<string, SecretMaterialProvider>;\n\ntype SpawnResult = {\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n};\n\nconst DEFAULT_KEYCHAIN_SERVICE_NAME = \"executor\";\nconst KEYCHAIN_COMMAND_TIMEOUT_MS = 5_000;\nconst DANGEROUSLY_ALLOW_ENV_SECRETS_ENV = \"DANGEROUSLY_ALLOW_ENV_SECRETS\";\nconst SECRET_STORE_PROVIDER_ENV = \"EXECUTOR_SECRET_STORE_PROVIDER\";\nconst KEYCHAIN_SERVICE_NAME_ENV = \"EXECUTOR_KEYCHAIN_SERVICE_NAME\";\n\ntype SecretMaterialSummary = {\n  id: string;\n  providerId: string;\n  name: string | null;\n  purpose: string;\n  createdAt: number;\n  updatedAt: number;\n};\n\nconst trimOrNull = (value: string | null | undefined): string | null => {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nconst parseBooleanEnv = (value: string | undefined): boolean => {\n  const normalized = trimOrNull(value)?.toLowerCase();\n  return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\";\n};\n\nexport const parseSecretStoreProviderId = (value: string | undefined): SecretStoreProviderId | null => {\n  const normalized = trimOrNull(value)?.toLowerCase();\n  if (normalized === KEYCHAIN_SECRET_PROVIDER_ID) {\n    return KEYCHAIN_SECRET_PROVIDER_ID;\n  }\n\n  if (\n    normalized === LOCAL_SECRET_PROVIDER_ID\n  ) {\n    return LOCAL_SECRET_PROVIDER_ID;\n  }\n\n  return null;\n};\n\nconst resolveDangerouslyAllowEnvSecrets = (value: boolean | undefined): boolean =>\n  value ?? parseBooleanEnv(process.env[DANGEROUSLY_ALLOW_ENV_SECRETS_ENV]);\n\nconst resolveKeychainServiceName = (value: string | undefined): string =>\n  trimOrNull(value)\n  ?? trimOrNull(process.env[KEYCHAIN_SERVICE_NAME_ENV])\n  ?? DEFAULT_KEYCHAIN_SERVICE_NAME;\n\nconst ensureNonEmptyString = (value: string | undefined): string | null => {\n  const trimmed = value?.trim();\n  return trimmed && trimmed.length > 0 ? trimmed : null;\n};\n\nconst toSecretMaterialSummary = (\n  material: Pick<SecretMaterial, \"id\" | \"providerId\" | \"name\" | \"purpose\" | \"createdAt\" | \"updatedAt\">,\n): SecretMaterialSummary => ({\n  id: material.id,\n  providerId: material.providerId,\n  name: material.name,\n  purpose: material.purpose,\n  createdAt: material.createdAt,\n  updatedAt: material.updatedAt,\n});\n\nconst keychainCommandForPlatform = (\n  platform: NodeJS.Platform = process.platform,\n): string | null => {\n  if (platform === \"darwin\") {\n    return \"security\";\n  }\n\n  if (platform === \"linux\") {\n    return \"secret-tool\";\n  }\n\n  return null;\n};\n\nconst runCommand = (input: {\n  command: string;\n  args: ReadonlyArray<string>;\n  stdin?: string;\n  env?: NodeJS.ProcessEnv;\n  operation: string;\n  timeoutMs?: number;\n}): Effect.Effect<SpawnResult, Error, never> =>\n  Effect.tryPromise({\n    try: () =>\n      new Promise<SpawnResult>((resolve, reject) => {\n        const child = spawn(input.command, [...input.args], {\n          stdio: \"pipe\",\n          env: input.env,\n        });\n\n        let stdout = \"\";\n        let stderr = \"\";\n        let settled = false;\n        const timeout = input.timeoutMs === undefined\n          ? null\n          : setTimeout(() => {\n            if (settled) {\n              return;\n            }\n\n            settled = true;\n            child.kill(\"SIGKILL\");\n            reject(\n              new Error(\n                `${input.operation}: '${input.command}' timed out after ${input.timeoutMs}ms`,\n              ),\n            );\n          }, input.timeoutMs);\n\n        child.stdout.on(\"data\", (chunk) => {\n          stdout += chunk.toString(\"utf8\");\n        });\n\n        child.stderr.on(\"data\", (chunk) => {\n          stderr += chunk.toString(\"utf8\");\n        });\n\n        child.on(\"error\", (error) => {\n          if (settled) {\n            return;\n          }\n          settled = true;\n          if (timeout) {\n            clearTimeout(timeout);\n          }\n          reject(new Error(`${input.operation}: failed spawning '${input.command}': ${error.message}`));\n        });\n\n        child.on(\"close\", (code) => {\n          if (settled) {\n            return;\n          }\n          settled = true;\n          if (timeout) {\n            clearTimeout(timeout);\n          }\n          resolve({\n            exitCode: code ?? 0,\n            stdout,\n            stderr,\n          });\n        });\n\n        if (input.stdin !== undefined) {\n          child.stdin.write(input.stdin);\n        }\n\n        child.stdin.end();\n      }),\n    catch: (cause) =>\n      cause instanceof Error\n        ? cause\n        : new Error(`${input.operation}: command execution failed: ${String(cause)}`),\n  });\n\nconst ensureCommandSuccess = (input: {\n  result: SpawnResult;\n  operation: string;\n  message: string;\n}): Effect.Effect<SpawnResult, Error, never> => {\n  if (input.result.exitCode === 0) {\n    return Effect.succeed(input.result);\n  }\n\n  const details = ensureNonEmptyString(input.result.stderr)\n    ?? ensureNonEmptyString(input.result.stdout)\n    ?? \"command returned non-zero exit code\";\n\n  return Effect.fail(runtimeEffectError(\"local/secret-material-providers\", `${input.operation}: ${input.message}: ${details}`));\n};\n\nconst commandAvailabilityCache = new Map<string, Promise<boolean>>();\n\nconst commandExists = (command: string): Effect.Effect<boolean, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      const cached = commandAvailabilityCache.get(command);\n      if (cached) {\n        return cached;\n      }\n\n      const probe = new Promise<boolean>((resolve) => {\n        const child = spawn(command, [\"--help\"], {\n          stdio: \"ignore\",\n        });\n        const timeout = setTimeout(() => {\n          child.kill(\"SIGKILL\");\n          resolve(false);\n        }, 2_000);\n\n        child.on(\"error\", () => {\n          clearTimeout(timeout);\n          resolve(false);\n        });\n        child.on(\"close\", () => {\n          clearTimeout(timeout);\n          resolve(true);\n        });\n      });\n\n      commandAvailabilityCache.set(command, probe);\n      const available = await probe;\n      if (!available) {\n        commandAvailabilityCache.delete(command);\n      }\n      return available;\n    },\n    catch: (cause) =>\n      cause instanceof Error\n        ? cause\n        : new Error(`command.exists: failed checking '${command}': ${String(cause)}`),\n  });\n\nconst isKeychainProviderAvailable = (\n  platform: NodeJS.Platform = process.platform,\n): Effect.Effect<boolean, Error, never> => {\n  const command = keychainCommandForPlatform(platform);\n  return command === null ? Effect.succeed(false) : commandExists(command);\n};\n\nexport const resolveDefaultSecretStoreProviderId = (input: {\n  storeProviderId?: SecretStoreProviderId;\n  env?: NodeJS.ProcessEnv;\n  platform?: NodeJS.Platform;\n} = {}): Effect.Effect<SecretStoreProviderId, never, never> => {\n  const localProviderId = LOCAL_SECRET_PROVIDER_ID as SecretStoreProviderId;\n  const explicit =\n    input.storeProviderId\n    ?? parseSecretStoreProviderId((input.env ?? process.env)[SECRET_STORE_PROVIDER_ENV]);\n  if (explicit) {\n    return Effect.succeed(explicit);\n  }\n\n  if ((input.platform ?? process.platform) !== \"darwin\") {\n    return Effect.succeed(localProviderId);\n  }\n\n  return isKeychainProviderAvailable(input.platform).pipe(\n    Effect.map((available): SecretStoreProviderId =>\n      available ? KEYCHAIN_SECRET_PROVIDER_ID : localProviderId),\n    Effect.catchAll(() => Effect.succeed(localProviderId)),\n  ) as Effect.Effect<SecretStoreProviderId, never, never>;\n};\n\nconst loadStoredSecretMaterial = (input: {\n  id: string;\n  runtime: SecretMaterialProviderRuntime;\n  operation: string;\n}) =>\n  Effect.gen(function* () {\n    const materialId = SecretMaterialIdSchema.make(input.id);\n    const stored = yield* input.runtime.rows.secretMaterials.getById(materialId);\n    if (Option.isNone(stored)) {\n      return yield* runtimeEffectError(\"local/secret-material-providers\", `${input.operation}: secret material not found: ${input.id}`);\n    }\n\n    return stored.value;\n  });\n\nconst createSecretMaterialMetadata = (input: {\n  providerId: SecretStoreProviderId;\n  providerHandle: string;\n  purpose: SecretMaterialPurpose;\n  value: string | null;\n  name?: string | null;\n  runtime: SecretMaterialProviderRuntime;\n}) =>\n  Effect.gen(function* () {\n    const now = Date.now();\n    const id = SecretMaterialIdSchema.make(`sec_${randomUUID()}`);\n    yield* input.runtime.rows.secretMaterials.upsert({\n      id,\n      providerId: input.providerId,\n      handle: input.providerHandle,\n      name: trimOrNull(input.name),\n      purpose: input.purpose,\n      value: input.value,\n      createdAt: now,\n      updatedAt: now,\n    });\n\n    return {\n      providerId: input.providerId,\n      handle: id,\n    } satisfies SecretRef;\n  });\n\nconst loadManagedKeychainRef = (input: {\n  ref: SecretRef;\n  runtime: SecretMaterialProviderRuntime;\n  operation: string;\n}) =>\n  Effect.gen(function* () {\n    const material = yield* loadStoredSecretMaterial({\n      id: input.ref.handle,\n      runtime: input.runtime,\n      operation: input.operation,\n    });\n    if (material.providerId !== KEYCHAIN_SECRET_PROVIDER_ID) {\n      return yield* runtimeEffectError(\"local/secret-material-providers\", \n          `${input.operation}: secret ${material.id} is stored in provider '${material.providerId}', not '${KEYCHAIN_SECRET_PROVIDER_ID}'`,\n        );\n    }\n\n    return {\n      providerHandle: material.handle,\n      material,\n    };\n  });\n\nconst readKeychainSecretValue = (input: {\n  providerHandle: string;\n  runtime: SecretMaterialProviderRuntime;\n}) => {\n  switch (process.platform) {\n    case \"darwin\":\n      return runCommand({\n        command: \"security\",\n        args: [\n          \"find-generic-password\",\n          \"-a\",\n          input.providerHandle,\n          \"-s\",\n          input.runtime.keychainServiceName,\n          \"-w\",\n        ],\n        operation: \"keychain.get\",\n        timeoutMs: KEYCHAIN_COMMAND_TIMEOUT_MS,\n      }).pipe(\n        Effect.flatMap((result) =>\n          ensureCommandSuccess({\n            result,\n            operation: \"keychain.get\",\n            message: \"Failed loading secret from macOS keychain\",\n          }),\n        ),\n        Effect.map((result) => result.stdout.trimEnd()),\n      );\n    case \"linux\":\n      return runCommand({\n        command: \"secret-tool\",\n        args: [\n          \"lookup\",\n          \"service\",\n          input.runtime.keychainServiceName,\n          \"account\",\n          input.providerHandle,\n        ],\n        operation: \"keychain.get\",\n        timeoutMs: KEYCHAIN_COMMAND_TIMEOUT_MS,\n      }).pipe(\n        Effect.flatMap((result) =>\n          ensureCommandSuccess({\n            result,\n            operation: \"keychain.get\",\n            message: \"Failed loading secret from desktop keyring\",\n          }),\n        ),\n        Effect.map((result) => result.stdout.trimEnd()),\n      );\n    default:\n      return Effect.fail(\n        runtimeEffectError(\"local/secret-material-providers\", `keychain.get: keychain provider is unsupported on platform '${process.platform}'`),\n      );\n  }\n};\n\nconst writeKeychainSecretValue = (input: {\n  providerHandle: string;\n  name?: string | null;\n  value: string;\n  runtime: SecretMaterialProviderRuntime;\n}) => {\n  const secretName = trimOrNull(input.name);\n\n  switch (process.platform) {\n    case \"darwin\":\n      return runCommand({\n        command: \"security\",\n        args: [\n          \"add-generic-password\",\n          \"-a\",\n          input.providerHandle,\n          \"-s\",\n          input.runtime.keychainServiceName,\n          \"-w\",\n          input.value,\n          ...(secretName ? [\"-l\", secretName] : []),\n          \"-U\",\n        ],\n        operation: \"keychain.put\",\n        timeoutMs: KEYCHAIN_COMMAND_TIMEOUT_MS,\n      }).pipe(\n        Effect.flatMap((result) =>\n          ensureCommandSuccess({\n            result,\n            operation: \"keychain.put\",\n            message: \"Failed storing secret in macOS keychain\",\n          }),\n        ),\n      );\n    case \"linux\":\n      return runCommand({\n        command: \"secret-tool\",\n        args: [\n          \"store\",\n          \"--label\",\n          secretName ?? input.runtime.keychainServiceName,\n          \"service\",\n          input.runtime.keychainServiceName,\n          \"account\",\n          input.providerHandle,\n        ],\n        stdin: input.value,\n        operation: \"keychain.put\",\n        timeoutMs: KEYCHAIN_COMMAND_TIMEOUT_MS,\n      }).pipe(\n        Effect.flatMap((result) =>\n          ensureCommandSuccess({\n            result,\n            operation: \"keychain.put\",\n            message: \"Failed storing secret in desktop keyring\",\n          }),\n        ),\n      );\n    default:\n      return Effect.fail(\n        runtimeEffectError(\"local/secret-material-providers\", `keychain.put: keychain provider is unsupported on platform '${process.platform}'`),\n      );\n  }\n};\n\nconst deleteKeychainSecretValue = (input: {\n  providerHandle: string;\n  runtime: SecretMaterialProviderRuntime;\n}) => {\n  switch (process.platform) {\n    case \"darwin\":\n      return runCommand({\n        command: \"security\",\n        args: [\n          \"delete-generic-password\",\n          \"-a\",\n          input.providerHandle,\n          \"-s\",\n          input.runtime.keychainServiceName,\n        ],\n        operation: \"keychain.delete\",\n        timeoutMs: KEYCHAIN_COMMAND_TIMEOUT_MS,\n      }).pipe(\n        Effect.map((result) => result.exitCode === 0),\n      );\n    case \"linux\":\n      return runCommand({\n        command: \"secret-tool\",\n        args: [\n          \"clear\",\n          \"service\",\n          input.runtime.keychainServiceName,\n          \"account\",\n          input.providerHandle,\n        ],\n        operation: \"keychain.delete\",\n        timeoutMs: KEYCHAIN_COMMAND_TIMEOUT_MS,\n      }).pipe(\n        Effect.map((result) => result.exitCode === 0),\n      );\n    default:\n      return Effect.fail(\n        runtimeEffectError(\"local/secret-material-providers\", `keychain.delete: keychain provider is unsupported on platform '${process.platform}'`),\n      );\n  }\n};\n\nconst createParamsSecretMaterialProvider = (): SecretMaterialProvider => ({\n  resolve: ({ ref, context }) => {\n    const value = ensureNonEmptyString(context.params?.[ref.handle]);\n    if (value === null) {\n      return Effect.fail(runtimeEffectError(\"local/secret-material-providers\", `Secret parameter ${ref.handle} is not set`));\n    }\n\n    return Effect.succeed(value);\n  },\n\n  remove: () => Effect.succeed(false),\n});\n\nconst createEnvSecretMaterialProvider = (): SecretMaterialProvider => ({\n  resolve: ({ ref, runtime }) => {\n    if (!runtime.dangerouslyAllowEnvSecrets) {\n      return Effect.fail(\n        runtimeEffectError(\"local/secret-material-providers\", \n          `Env-backed secrets are disabled. Set ${DANGEROUSLY_ALLOW_ENV_SECRETS_ENV}=true to allow provider '${ENV_SECRET_PROVIDER_ID}'.`,\n        ),\n      );\n    }\n\n    const value = ensureNonEmptyString(runtime.env[ref.handle]);\n    if (value === null) {\n      return Effect.fail(runtimeEffectError(\"local/secret-material-providers\", `Environment variable ${ref.handle} is not set`));\n    }\n\n    return Effect.succeed(value);\n  },\n\n  remove: () => Effect.succeed(false),\n});\n\nconst createLocalSecretMaterialProvider = (): SecretMaterialProvider => ({\n  resolve: ({ ref, runtime }) =>\n    Effect.gen(function* () {\n      const stored = yield* loadStoredSecretMaterial({\n        id: ref.handle,\n        runtime,\n        operation: \"local.get\",\n      });\n      if (stored.providerId !== LOCAL_SECRET_PROVIDER_ID) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", \n            `local.get: secret ${stored.id} is stored in provider '${stored.providerId}', not '${LOCAL_SECRET_PROVIDER_ID}'`,\n          );\n      }\n      if (stored.value === null) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", `local.get: secret ${stored.id} does not have a local value`);\n      }\n\n      return stored.value;\n    }),\n\n  store: ({ purpose, value, name, runtime }) =>\n    createSecretMaterialMetadata({\n      providerId: LOCAL_SECRET_PROVIDER_ID,\n      providerHandle: `local:${randomUUID()}`,\n      purpose,\n      value,\n      name,\n      runtime,\n    }),\n\n  update: ({ ref, name, value, runtime }) =>\n    Effect.gen(function* () {\n      const stored = yield* loadStoredSecretMaterial({\n        id: ref.handle,\n        runtime,\n        operation: \"local.update\",\n      });\n      if (stored.providerId !== LOCAL_SECRET_PROVIDER_ID) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", \n            `local.update: secret ${stored.id} is stored in provider '${stored.providerId}', not '${LOCAL_SECRET_PROVIDER_ID}'`,\n          );\n      }\n\n      if (name === undefined && value === undefined) {\n        return toSecretMaterialSummary(stored);\n      }\n\n      const updated = yield* runtime.rows.secretMaterials.updateById(\n        stored.id,\n        {\n          ...(name !== undefined ? { name } : {}),\n          ...(value !== undefined ? { value } : {}),\n        },\n      );\n      if (Option.isNone(updated)) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", `local.update: secret material not found: ${stored.id}`);\n      }\n\n      return {\n        id: updated.value.id,\n        providerId: updated.value.providerId,\n        name: updated.value.name,\n        purpose: updated.value.purpose,\n        createdAt: updated.value.createdAt,\n        updatedAt: updated.value.updatedAt,\n      } satisfies SecretMaterialSummary;\n    }),\n\n  remove: ({ ref, runtime }) =>\n    Effect.gen(function* () {\n      const materialId = SecretMaterialIdSchema.make(ref.handle);\n      return yield* runtime.rows.secretMaterials.removeById(materialId);\n    }),\n});\n\nconst createKeychainSecretMaterialProvider = (): SecretMaterialProvider => ({\n  resolve: ({ ref, runtime }) =>\n    Effect.gen(function* () {\n      const loaded = yield* loadManagedKeychainRef({\n        ref,\n        runtime,\n        operation: \"keychain.get\",\n      });\n\n      return yield* readKeychainSecretValue({\n        providerHandle: loaded.providerHandle,\n        runtime,\n      });\n    }),\n\n  store: ({ purpose, value, name, runtime }) =>\n    Effect.gen(function* () {\n      const providerHandle = randomUUID();\n      yield* writeKeychainSecretValue({\n        providerHandle,\n        name,\n        value,\n        runtime,\n      });\n\n      return yield* createSecretMaterialMetadata({\n        providerId: KEYCHAIN_SECRET_PROVIDER_ID,\n        providerHandle,\n        purpose,\n        value: null,\n        name,\n        runtime,\n      });\n    }),\n\n  update: ({ ref, name, value, runtime }) =>\n    Effect.gen(function* () {\n      const loaded = yield* loadManagedKeychainRef({\n        ref,\n        runtime,\n        operation: \"keychain.update\",\n      });\n\n      if (name === undefined && value === undefined) {\n        return toSecretMaterialSummary(loaded.material);\n      }\n\n      const nextName = name ?? loaded.material.name;\n      const nextValue = value\n        ?? (yield* readKeychainSecretValue({\n          providerHandle: loaded.providerHandle,\n          runtime,\n        }));\n\n      yield* writeKeychainSecretValue({\n        providerHandle: loaded.providerHandle,\n        name: nextName,\n        value: nextValue,\n        runtime,\n      });\n\n      const updated = yield* runtime.rows.secretMaterials.updateById(\n        loaded.material.id,\n        {\n          name: nextName,\n        },\n      );\n      if (Option.isNone(updated)) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", `keychain.update: secret material not found: ${loaded.material.id}`);\n      }\n\n      return {\n        id: updated.value.id,\n        providerId: updated.value.providerId,\n        name: updated.value.name,\n        purpose: updated.value.purpose,\n        createdAt: updated.value.createdAt,\n        updatedAt: updated.value.updatedAt,\n      } satisfies SecretMaterialSummary;\n    }),\n\n  remove: ({ ref, runtime }) =>\n    Effect.gen(function* () {\n      const loaded = yield* loadManagedKeychainRef({\n        ref,\n        runtime,\n        operation: \"keychain.delete\",\n      });\n      const deleted = yield* deleteKeychainSecretValue({\n        providerHandle: loaded.providerHandle,\n        runtime,\n      });\n\n      if (!deleted) {\n        return false;\n      }\n\n      return yield* runtime.rows.secretMaterials.removeById(loaded.material.id);\n    }),\n});\n\nconst createSecretMaterialProviderRegistry = (): SecretMaterialProviderRegistry =>\n  new Map([\n    [PARAMS_SECRET_PROVIDER_ID, createParamsSecretMaterialProvider()],\n    [ENV_SECRET_PROVIDER_ID, createEnvSecretMaterialProvider()],\n    [KEYCHAIN_SECRET_PROVIDER_ID, createKeychainSecretMaterialProvider()],\n    [LOCAL_SECRET_PROVIDER_ID, createLocalSecretMaterialProvider()],\n  ]);\n\nconst getSecretMaterialProvider = (input: {\n  providers: SecretMaterialProviderRegistry;\n  providerId: string;\n}): Effect.Effect<SecretMaterialProvider, Error, never> => {\n  const provider = input.providers.get(input.providerId);\n  if (provider) {\n    return Effect.succeed(provider);\n  }\n\n  return Effect.fail(runtimeEffectError(\"local/secret-material-providers\", `Unsupported secret provider: ${input.providerId}`));\n};\n\nconst createSecretMaterialProviderRuntime = (input: {\n  rows: ControlPlaneStoreShape;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n  localConfig?: LocalExecutorConfig | null;\n  workspaceRoot?: string | null;\n}): SecretMaterialProviderRuntime => ({\n  rows: input.rows,\n  env: process.env,\n  dangerouslyAllowEnvSecrets: resolveDangerouslyAllowEnvSecrets(input.dangerouslyAllowEnvSecrets),\n  keychainServiceName: resolveKeychainServiceName(input.keychainServiceName),\n  localConfig: input.localConfig ?? null,\n  workspaceRoot: input.workspaceRoot ?? null,\n});\n\nconst isRegularFilePath = (\n  path: string,\n  allowSymlink: boolean,\n): Effect.Effect<boolean, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const stat = yield* fs.stat(path).pipe(Effect.mapError(toError));\n    if (stat.type === \"SymbolicLink\") {\n      if (!allowSymlink) {\n        return false;\n      }\n\n      const resolvedPath = yield* fs.realPath(path).pipe(Effect.mapError(toError));\n      const targetStat = yield* fs.stat(resolvedPath).pipe(Effect.mapError(toError));\n      return targetStat.type === \"File\";\n    }\n\n    return stat.type === \"File\";\n  });\n\nconst ensureTrustedDir = (\n  path: string,\n  trustedDirs: readonly string[] | undefined,\n): Effect.Effect<boolean, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    if (!trustedDirs || trustedDirs.length === 0) {\n      return true;\n    }\n\n    const fs = yield* FileSystem.FileSystem;\n    const real = yield* fs.realPath(path).pipe(Effect.mapError(toError));\n\n    for (const dir of trustedDirs) {\n      const trusted = yield* fs.realPath(dir).pipe(Effect.mapError(toError));\n      if (real === trusted || real.startsWith(`${trusted}/`)) {\n        return true;\n      }\n    }\n\n    return false;\n  });\n\nconst readFileSecretValue = (input: {\n  provider: Extract<LocalConfigSecretProvider, { source: \"file\" }>;\n  ref: SecretRef;\n  workspaceRoot: string;\n}): Effect.Effect<string, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const resolvedPath = resolveConfigRelativePath({\n      path: input.provider.path,\n      workspaceRoot: input.workspaceRoot,\n    });\n    const raw = yield* fs.readFileString(resolvedPath, \"utf8\").pipe(\n      Effect.mapError(toError),\n    );\n    const mode = input.provider.mode ?? \"singleValue\";\n    if (mode === \"singleValue\") {\n      return raw.trim();\n    }\n\n    return yield* Effect.try({\n      try: () => {\n        const parsed = JSON.parse(raw) as unknown;\n        if (input.ref.handle.startsWith(\"/\")) {\n          const segments = input.ref.handle\n            .split(\"/\")\n            .slice(1)\n            .map((segment) => segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\"));\n          let current: unknown = parsed;\n          for (const segment of segments) {\n            if (typeof current !== \"object\" || current === null || !(segment in current)) {\n              throw new Error(`Secret path not found in ${resolvedPath}: ${input.ref.handle}`);\n            }\n            current = (current as Record<string, unknown>)[segment];\n          }\n          if (typeof current !== \"string\" || current.trim().length === 0) {\n            throw new Error(`Secret path did not resolve to a string: ${input.ref.handle}`);\n          }\n          return current;\n        }\n\n        if (typeof parsed !== \"object\" || parsed === null) {\n          throw new Error(`JSON secret provider must resolve to an object: ${resolvedPath}`);\n        }\n        const value = (parsed as Record<string, unknown>)[input.ref.handle];\n        if (typeof value !== \"string\" || value.trim().length === 0) {\n          throw new Error(`Secret key not found in ${resolvedPath}: ${input.ref.handle}`);\n        }\n        return value;\n      },\n      catch: toError,\n    });\n  });\n\nconst resolveConfiguredSecretProvider = (input: {\n  ref: SecretRef;\n  runtime: SecretMaterialProviderRuntime;\n}): Effect.Effect<string, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const providerAlias = fromConfigSecretProviderId(input.ref.providerId);\n    if (providerAlias === null) {\n      return yield* runtimeEffectError(\n        \"local/secret-material-providers\",\n        `Unsupported secret provider: ${input.ref.providerId}`,\n      );\n    }\n\n    const provider = input.runtime.localConfig?.secrets?.providers?.[providerAlias];\n    if (!provider) {\n      return yield* runtimeEffectError(\n        \"local/secret-material-providers\",\n        `Config secret provider \"${providerAlias}\" is not configured`,\n      );\n    }\n    if (input.runtime.workspaceRoot === null) {\n      return yield* runtimeEffectError(\n        \"local/secret-material-providers\",\n        `Config secret provider \"${providerAlias}\" requires a workspace root`,\n      );\n    }\n\n    if (provider.source === \"env\") {\n      const value = ensureNonEmptyString(input.runtime.env[input.ref.handle]);\n      if (value === null) {\n        return yield* runtimeEffectError(\n          \"local/secret-material-providers\",\n          `Environment variable ${input.ref.handle} is not set`,\n        );\n      }\n      return value;\n    }\n\n    if (provider.source === \"file\") {\n      return yield* readFileSecretValue({\n        provider,\n        ref: input.ref,\n        workspaceRoot: input.runtime.workspaceRoot,\n      });\n    }\n\n    const command = provider.command.trim();\n    if (!isAbsolute(command)) {\n      return yield* runtimeEffectError(\n        \"local/secret-material-providers\",\n        `Exec secret provider command must be absolute: ${command}`,\n      );\n    }\n    const isRegularCommand = yield* isRegularFilePath(\n      command,\n      provider.allowSymlinkCommand ?? false,\n    );\n    if (!isRegularCommand) {\n      return yield* runtimeEffectError(\n        \"local/secret-material-providers\",\n        `Exec secret provider command is not an allowed regular file: ${command}`,\n      );\n    }\n    const isTrustedCommand = yield* ensureTrustedDir(command, provider.trustedDirs);\n    if (!isTrustedCommand) {\n      return yield* runtimeEffectError(\n        \"local/secret-material-providers\",\n        `Exec secret provider command is outside trustedDirs: ${command}`,\n      );\n    }\n\n    return yield* runCommand({\n      command,\n      args: [...(provider.args ?? []), input.ref.handle],\n      env: {\n        ...input.runtime.env,\n        ...provider.env,\n      },\n      operation: `config-secret.get:${providerAlias}`,\n    }).pipe(\n      Effect.flatMap((result) =>\n        ensureCommandSuccess({\n          result,\n          operation: `config-secret.get:${providerAlias}`,\n          message: \"Failed resolving configured exec secret\",\n        }),\n      ),\n      Effect.map((result) => result.stdout.trimEnd()),\n    );\n  });\n\nexport const createDefaultSecretMaterialResolver = (input: {\n  rows: ControlPlaneStoreShape;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n  localConfig?: LocalExecutorConfig | null;\n  workspaceRoot?: string | null;\n}): ResolveSecretMaterial => {\n  const providers = createSecretMaterialProviderRegistry();\n  const runtime = createSecretMaterialProviderRuntime(input);\n\n  return ({ ref, context }) =>\n    Effect.gen(function* () {\n      const provider = yield* getSecretMaterialProvider({\n        providers,\n        providerId: ref.providerId,\n      }).pipe(\n        Effect.catchAll(() =>\n          fromConfigSecretProviderId(ref.providerId) !== null\n            ? Effect.succeed(null)\n            : Effect.fail(runtimeEffectError(\"local/secret-material-providers\", `Unsupported secret provider: ${ref.providerId}`)),\n        ),\n      );\n\n      if (provider === null) {\n        return yield* resolveConfiguredSecretProvider({\n          ref,\n          runtime,\n        });\n      }\n\n      return yield* provider.resolve({\n        ref,\n        context: context ?? {},\n        runtime,\n      });\n    }).pipe(Effect.provide(NodeFileSystem.layer));\n};\n\nexport const createDefaultSecretMaterialStorer = (input: {\n  rows: ControlPlaneStoreShape;\n  storeProviderId?: SecretStoreProviderId;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n}): StoreSecretMaterial => {\n  const providers = createSecretMaterialProviderRegistry();\n  const runtime = createSecretMaterialProviderRuntime(input);\n\n  return ({ purpose, value, name }) =>\n    Effect.gen(function* () {\n      const defaultStoreProviderId = yield* resolveDefaultSecretStoreProviderId({\n        storeProviderId: input.storeProviderId,\n        env: runtime.env,\n      });\n      const provider = yield* getSecretMaterialProvider({\n        providers,\n        providerId: defaultStoreProviderId,\n      });\n\n      if (!provider.store) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", `Secret provider ${defaultStoreProviderId} does not support storing secret material`);\n      }\n\n      return yield* provider.store({\n        purpose,\n        value,\n        name,\n        runtime,\n      });\n    });\n};\n\nexport const createDefaultSecretMaterialUpdater = (input: {\n  rows: ControlPlaneStoreShape;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n}): UpdateSecretMaterial => {\n  const providers = createSecretMaterialProviderRegistry();\n  const runtime = createSecretMaterialProviderRuntime(input);\n\n  return ({ ref, name, value }) =>\n    Effect.gen(function* () {\n      const provider = yield* getSecretMaterialProvider({\n        providers,\n        providerId: ref.providerId,\n      });\n\n      if (!provider.update) {\n        return yield* runtimeEffectError(\"local/secret-material-providers\", `Secret provider ${ref.providerId} does not support updating secret material`);\n      }\n\n      return yield* provider.update({\n        ref,\n        name,\n        value,\n        runtime,\n      });\n    });\n};\n\nexport const createDefaultSecretMaterialDeleter = (input: {\n  rows: ControlPlaneStoreShape;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n}): DeleteSecretMaterial => {\n  const providers = createSecretMaterialProviderRegistry();\n  const runtime = createSecretMaterialProviderRuntime(input);\n\n  return (ref) =>\n    Effect.gen(function* () {\n      const provider = yield* getSecretMaterialProvider({\n        providers,\n        providerId: ref.providerId,\n      });\n\n      if (!provider.remove) {\n        return false;\n      }\n\n      return yield* provider.remove({\n        ref,\n        runtime,\n      });\n    });\n};\n\nconst resolveRuntimeSecretMaterialConfig = (input: {\n  localConfig?: LocalExecutorConfig | null;\n  workspaceRoot?: string | null;\n}) =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* getRuntimeLocalWorkspaceOption();\n\n    return {\n      localConfig: input.localConfig\n        ?? runtimeLocalWorkspace?.loadedConfig.config\n        ?? null,\n      workspaceRoot: input.workspaceRoot\n        ?? runtimeLocalWorkspace?.context.workspaceRoot\n        ?? null,\n    };\n  });\n\nexport const SecretMaterialResolverLive = (input: {\n  resolveSecretMaterial?: ResolveSecretMaterial;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n  localConfig?: LocalExecutorConfig | null;\n  workspaceRoot?: string | null;\n} = {}) =>\n  input.resolveSecretMaterial\n    ? Layer.succeed(SecretMaterialResolverService, input.resolveSecretMaterial)\n    : Layer.effect(\n        SecretMaterialResolverService,\n        Effect.gen(function* () {\n          const rows = yield* ControlPlaneStore;\n          const runtimeConfig = yield* resolveRuntimeSecretMaterialConfig(input);\n\n          return createDefaultSecretMaterialResolver({\n            rows,\n            dangerouslyAllowEnvSecrets: input.dangerouslyAllowEnvSecrets,\n            keychainServiceName: input.keychainServiceName,\n            localConfig: runtimeConfig.localConfig,\n            workspaceRoot: runtimeConfig.workspaceRoot,\n          });\n        }),\n      );\n\nexport const SecretMaterialStorerLive = (input: {\n  storeProviderId?: SecretStoreProviderId;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n} = {}) =>\n  Layer.effect(\n    SecretMaterialStorerService,\n    Effect.gen(function* () {\n      const rows = yield* ControlPlaneStore;\n\n      return createDefaultSecretMaterialStorer({\n        rows,\n        storeProviderId: input.storeProviderId,\n        dangerouslyAllowEnvSecrets: input.dangerouslyAllowEnvSecrets,\n        keychainServiceName: input.keychainServiceName,\n      });\n    }),\n  );\n\nexport const SecretMaterialDeleterLive = (input: {\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n} = {}) =>\n  Layer.effect(\n    SecretMaterialDeleterService,\n    Effect.gen(function* () {\n      const rows = yield* ControlPlaneStore;\n\n      return createDefaultSecretMaterialDeleter({\n        rows,\n        dangerouslyAllowEnvSecrets: input.dangerouslyAllowEnvSecrets,\n        keychainServiceName: input.keychainServiceName,\n      });\n    }),\n  );\n\nexport const SecretMaterialUpdaterLive = (input: {\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n} = {}) =>\n  Layer.effect(\n    SecretMaterialUpdaterService,\n    Effect.gen(function* () {\n      const rows = yield* ControlPlaneStore;\n\n      return createDefaultSecretMaterialUpdater({\n        rows,\n        dangerouslyAllowEnvSecrets: input.dangerouslyAllowEnvSecrets,\n        keychainServiceName: input.keychainServiceName,\n      });\n    }),\n  );\n\nexport const SecretMaterialLive = (input: {\n  resolveSecretMaterial?: ResolveSecretMaterial;\n  storeProviderId?: SecretStoreProviderId;\n  dangerouslyAllowEnvSecrets?: boolean;\n  keychainServiceName?: string;\n  localConfig?: LocalExecutorConfig | null;\n  workspaceRoot?: string | null;\n} = {}) =>\n  Layer.mergeAll(\n    SecretMaterialResolverLive(input),\n    SecretMaterialStorerLive(input),\n    SecretMaterialDeleterLive(input),\n    SecretMaterialUpdaterLive(input),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/source-artifacts.test.ts",
    "content": "import { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport { SourceIdSchema, WorkspaceIdSchema, type Source } from \"#schema\";\n\nimport {\n  buildLocalSourceArtifact,\n  readLocalSourceArtifact,\n  writeLocalSourceArtifact,\n} from \"./source-artifacts\";\nimport { type ResolvedLocalWorkspaceContext } from \"./config\";\nimport { createCatalogImportMetadata } from \"@executor/source-core\";\nimport { createGraphqlCatalogFragment } from \"@executor/source-graphql\";\nimport { createOpenApiCatalogFragment } from \"@executor/source-openapi\";\nimport {\n  releaseWorkspaceFixtures,\n  resolveReleaseWorkspaceFixtureContext,\n} from \"./release-upgrade-fixtures\";\n\nconst makeContext = (): Effect.Effect<\n  ResolvedLocalWorkspaceContext,\n  never,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const workspaceRoot = yield* fs.makeTempDirectory({\n      directory: tmpdir(),\n      prefix: \"executor-artifacts-\",\n    }).pipe(Effect.orDie);\n\n    return {\n      cwd: workspaceRoot,\n      workspaceRoot,\n      workspaceName: \"executor-artifacts\",\n      configDirectory: join(workspaceRoot, \".executor\"),\n      projectConfigPath: join(workspaceRoot, \".executor\", \"executor.jsonc\"),\n      homeConfigPath: join(workspaceRoot, \".executor-home.jsonc\"),\n      homeStateDirectory: join(workspaceRoot, \".executor-home-state\"),\n      artifactsDirectory: join(workspaceRoot, \".executor\", \"artifacts\"),\n      stateDirectory: join(workspaceRoot, \".executor\", \"state\"),\n    };\n  });\n\nconst makeSource = (): Source => ({\n  id: SourceIdSchema.make(\"src_test\"),\n  workspaceId: WorkspaceIdSchema.make(\"ws_test\"),\n  name: \"Test Source\",\n  kind: \"openapi\",\n  endpoint: \"https://example.com/api\",\n  status: \"connected\",\n  enabled: true,\n  namespace: \"test\",\n  bindingVersion: 1,\n  binding: {\n    specUrl: \"https://example.com/openapi.json\",\n    defaultHeaders: null,\n  },\n  importAuthPolicy: \"none\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: \"hash_test\",\n  lastError: null,\n  createdAt: 0,\n  updatedAt: 0,\n});\n\nconst makeArtifact = () => {\n  const source = makeSource();\n  const fragment = createOpenApiCatalogFragment({\n    source,\n    documents: [\n      {\n        documentKind: \"openapi\",\n        documentKey: source.binding.specUrl,\n        contentText: '{\"openapi\":\"3.1.0\"}',\n        fetchedAt: 1,\n      },\n    ],\n    operations: [],\n  });\n\n  return buildLocalSourceArtifact({\n    source,\n    syncResult: {\n      fragment,\n      importMetadata: createCatalogImportMetadata({\n        source,\n        adapterKey: \"openapi\",\n      }),\n      sourceHash: source.sourceHash,\n    },\n  });\n};\n\nconst makeGraphqlArtifact = () => {\n  const source: Source = {\n    ...makeSource(),\n    kind: \"graphql\",\n    endpoint: \"https://example.com/graphql\",\n    binding: {\n      defaultHeaders: null,\n    },\n  };\n  const fragment = createGraphqlCatalogFragment({\n    source,\n    documents: [\n      {\n        documentKind: \"graphql_introspection\",\n        documentKey: source.endpoint,\n        contentText: '{\"__schema\":{}}',\n        fetchedAt: 1,\n      },\n    ],\n    operations: [\n      {\n        toolId: \"viewer\",\n        title: \"Viewer\",\n        description: \"Load the current viewer\",\n        effect: \"read\",\n        inputSchema: { type: \"object\", properties: {} },\n        outputSchema: {\n          type: \"object\",\n          properties: { login: { type: \"string\" } },\n        },\n        providerData: {\n          kind: \"graphql\",\n          toolKind: \"field\",\n          toolId: \"viewer\",\n          rawToolId: \"viewer\",\n          group: \"query\",\n          leaf: \"viewer\",\n          fieldName: \"viewer\",\n          operationType: \"query\",\n          operationName: \"ViewerQuery\",\n          operationDocument: \"query ViewerQuery { viewer { login } }\",\n          queryTypeName: \"Query\",\n          mutationTypeName: null,\n          subscriptionTypeName: null,\n        },\n      },\n    ],\n  });\n\n  return buildLocalSourceArtifact({\n    source,\n    syncResult: {\n      fragment,\n      importMetadata: createCatalogImportMetadata({\n        source,\n        adapterKey: \"graphql\",\n      }),\n      sourceHash: source.sourceHash,\n    },\n  });\n};\n\ndescribe(\"local-source-artifacts\", () => {\n  it.effect(\"writes canonical uncompressed artifacts and reads them back\", () =>\n    Effect.gen(function* () {\n      const fs = yield* FileSystem.FileSystem;\n      const context = yield* makeContext();\n      const artifact = makeArtifact();\n      const path = join(context.artifactsDirectory, \"sources\", \"src_test.json\");\n      const rawDocumentPath = join(\n        context.artifactsDirectory,\n        \"sources\",\n        \"src_test\",\n        \"documents\",\n        `${Object.keys(artifact.snapshot.catalog.documents)[0]}.txt`,\n      );\n\n      yield* writeLocalSourceArtifact({\n        context,\n        sourceId: \"src_test\",\n        artifact,\n      });\n\n      expect(yield* fs.exists(path)).toBe(true);\n      expect((yield* fs.readFileString(path, \"utf8\")).startsWith(\"{\")).toBe(true);\n      expect(yield* fs.exists(rawDocumentPath)).toBe(true);\n\n      const persistedArtifact = JSON.parse(yield* fs.readFileString(path, \"utf8\"));\n      const persistedDocument = Object.values(\n        persistedArtifact.snapshot.catalog.documents,\n      )[0] as {\n        native?: ReadonlyArray<{ kind?: string }>;\n        provenance?: unknown;\n      };\n      const persistedResource = Object.values(\n        persistedArtifact.snapshot.catalog.resources,\n      )[0] as {\n        provenance?: unknown;\n      };\n      expect(\n        persistedDocument.native?.some(\n          (blob) => blob.kind === \"source_document\",\n        ) ?? false,\n      ).toBe(false);\n      expect(persistedDocument.provenance).toBeUndefined();\n      expect(persistedResource.provenance).toBeDefined();\n      expect(\n        Object.keys(persistedArtifact.snapshot.catalog.diagnostics),\n      ).toHaveLength(0);\n\n      const decoded = yield* readLocalSourceArtifact({\n        context,\n        sourceId: \"src_test\",\n      });\n\n      expect(decoded?.snapshot.import.adapterKey).toBe(\"openapi\");\n      expect(decoded?.sourceId).toBe(\"src_test\");\n      expect(\n        (\n          Object.values(decoded?.snapshot.catalog.documents ?? {})[0] as {\n            native?: Array<{ value?: unknown }>;\n          }\n        )?.native?.[0]?.value,\n      ).toBe('{\"openapi\":\"3.1.0\"}');\n      expect(\n        (\n          Object.values(decoded?.snapshot.catalog.documents ?? {})[0] as {\n            provenance?: unknown;\n          }\n        ).provenance,\n      ).toBeUndefined();\n    }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n\n  it.effect(\n    \"preserves GraphQL execution metadata across a write/read round-trip\",\n    () =>\n      Effect.gen(function* () {\n        const context = yield* makeContext();\n        const artifact = makeGraphqlArtifact();\n\n        yield* writeLocalSourceArtifact({\n          context,\n          sourceId: artifact.sourceId,\n          artifact,\n        });\n\n        const decoded = yield* readLocalSourceArtifact({\n          context,\n          sourceId: artifact.sourceId,\n        });\n\n        const executable = Object.values(\n          decoded?.snapshot.catalog.executables ?? {},\n        )[0];\n        const binding = executable?.binding as\n          | {\n              kind?: string;\n              toolKind?: string | null;\n              operationName?: string | null;\n              operationDocument?: string | null;\n            }\n          | undefined;\n        expect(executable?.adapterKey).toBe(\"graphql\");\n        expect(executable?.display?.protocol).toBe(\"graphql\");\n        expect(binding?.toolKind ?? null).toBe(\"field\");\n        expect(binding?.operationName ?? null).toBe(\"ViewerQuery\");\n        expect(binding?.operationDocument ?? null).toBe(\n          \"query ViewerQuery { viewer { login } }\",\n        );\n      }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n\n  it.effect(\n    \"treats legacy protocol-shaped artifacts as missing cache entries\",\n    () =>\n      Effect.gen(function* () {\n        const fs = yield* FileSystem.FileSystem;\n        const context = yield* makeContext();\n        const artifact = makeGraphqlArtifact();\n        const [legacyExecutableId, legacyExecutable] = Object.entries(\n          artifact.snapshot.catalog.executables,\n        )[0]!;\n        const path = join(\n          context.artifactsDirectory,\n          \"sources\",\n          `${artifact.sourceId}.json`,\n        );\n\n        const legacyArtifact = {\n          ...artifact,\n          version: 3,\n          snapshot: {\n            ...artifact.snapshot,\n            catalog: {\n              ...artifact.snapshot.catalog,\n              executables: {\n                ...artifact.snapshot.catalog.executables,\n                [legacyExecutableId]: {\n                  id: legacyExecutable.id,\n                  protocol: \"graphql\",\n                  capabilityId: legacyExecutable.capabilityId,\n                  scopeId: legacyExecutable.scopeId,\n                  operationType: \"query\",\n                  operationName: \"ViewerQuery\",\n                  operationDocument: \"query ViewerQuery { viewer { login } }\",\n                  responseSetId: legacyExecutable.projection.responseSetId,\n                  synthetic: legacyExecutable.synthetic,\n                  provenance: legacyExecutable.provenance,\n                },\n              },\n            },\n          },\n        };\n\n        yield* fs.makeDirectory(join(context.artifactsDirectory, \"sources\"), {\n          recursive: true,\n        }).pipe(Effect.orDie);\n        yield* fs.writeFileString(\n          path,\n          `${JSON.stringify(legacyArtifact)}\\n`,\n        ).pipe(Effect.orDie);\n\n        const decoded = yield* readLocalSourceArtifact({\n          context,\n          sourceId: artifact.sourceId,\n        });\n\n        expect(decoded).toBeNull();\n      }).pipe(Effect.provide(NodeFileSystem.layer)),\n  );\n\n  for (const fixture of releaseWorkspaceFixtures) {\n    it.effect(\n      fixture.artifactExpectation === \"cache-miss\"\n        ? `treats the ${fixture.id} release fixture as a missing cache entry`\n        : `reads the ${fixture.id} release fixture`,\n      () =>\n        Effect.gen(function* () {\n          const context = yield* resolveReleaseWorkspaceFixtureContext(fixture);\n          const decoded = yield* readLocalSourceArtifact({\n            context,\n            sourceId: fixture.sourceId,\n          });\n\n          if (fixture.artifactExpectation === \"cache-miss\") {\n            expect(decoded).toBeNull();\n            return;\n          }\n\n          expect(decoded?.sourceId).toBe(fixture.sourceId);\n        }).pipe(Effect.provide(NodeFileSystem.layer)),\n    );\n  }\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/source-artifacts.ts",
    "content": "import { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\n\nimport {\n  SourceIdSchema,\n  SourceCatalogIdSchema,\n  StoredSourceCatalogRevisionRecordSchema,\n  TimestampMsSchema,\n  type Source,\n  type SourceCatalogId,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport { decodeCatalogSnapshotV1 } from \"@executor/ir/catalog\";\nimport {\n  CatalogSnapshotV1Schema,\n  type CatalogSnapshotV1,\n  type NativeBlob,\n  type SourceDocument,\n} from \"@executor/ir/model\";\nimport {\n  contentHash,\n  snapshotFromSourceCatalogSyncResult,\n  type SourceCatalogSyncResult,\n} from \"@executor/source-core\";\nimport type { ResolvedLocalWorkspaceContext } from \"./config\";\nimport {\n  LocalFileSystemError,\n  unknownLocalErrorDetails,\n} from \"./errors\";\nimport {\n  createSourceCatalogRevisionRecord,\n  stableSourceCatalogId,\n} from \"../sources/source-definitions\";\nconst LEGACY_LOCAL_SOURCE_ARTIFACT_VERSION = 3 as const;\nconst LOCAL_SOURCE_ARTIFACT_VERSION = 4 as const;\n\nconst LegacyLocalSourceArtifactSchema = Schema.Struct({\n  version: Schema.Literal(LEGACY_LOCAL_SOURCE_ARTIFACT_VERSION),\n  sourceId: SourceIdSchema,\n  catalogId: SourceCatalogIdSchema,\n  generatedAt: TimestampMsSchema,\n  revision: StoredSourceCatalogRevisionRecordSchema,\n  snapshot: CatalogSnapshotV1Schema,\n});\n\nexport const LocalSourceArtifactSchema = Schema.Struct({\n  version: Schema.Literal(LOCAL_SOURCE_ARTIFACT_VERSION),\n  sourceId: SourceIdSchema,\n  catalogId: SourceCatalogIdSchema,\n  generatedAt: TimestampMsSchema,\n  revision: StoredSourceCatalogRevisionRecordSchema,\n  snapshot: CatalogSnapshotV1Schema,\n});\n\nexport type LocalSourceArtifact = typeof LocalSourceArtifactSchema.Type;\ntype LegacyLocalSourceArtifact = typeof LegacyLocalSourceArtifactSchema.Type;\n\nconst ReadableLegacyLocalSourceArtifactSchema = Schema.Struct({\n  version: Schema.Literal(LEGACY_LOCAL_SOURCE_ARTIFACT_VERSION),\n  sourceId: SourceIdSchema,\n  catalogId: SourceCatalogIdSchema,\n  generatedAt: TimestampMsSchema,\n  revision: StoredSourceCatalogRevisionRecordSchema,\n  snapshot: Schema.Unknown,\n});\n\nconst ReadableLocalSourceArtifactSchema = Schema.Struct({\n  version: Schema.Literal(LOCAL_SOURCE_ARTIFACT_VERSION),\n  sourceId: SourceIdSchema,\n  catalogId: SourceCatalogIdSchema,\n  generatedAt: TimestampMsSchema,\n  revision: StoredSourceCatalogRevisionRecordSchema,\n  snapshot: Schema.Unknown,\n});\n\ntype ReadableLegacyLocalSourceArtifact =\n  typeof ReadableLegacyLocalSourceArtifactSchema.Type;\ntype ReadableLocalSourceArtifact =\n  typeof ReadableLocalSourceArtifactSchema.Type;\n\nconst decodeReadableLocalSourceArtifactOption = Schema.decodeUnknownOption(\n  Schema.parseJson(\n    Schema.Union(\n      ReadableLocalSourceArtifactSchema,\n      ReadableLegacyLocalSourceArtifactSchema,\n    ),\n  ),\n);\n\nconst normalizeLocalSourceArtifact = (\n  artifact: ReadableLocalSourceArtifact | ReadableLegacyLocalSourceArtifact,\n): Omit<LocalSourceArtifact, \"snapshot\"> & { snapshot: unknown } =>\n  artifact.version === LOCAL_SOURCE_ARTIFACT_VERSION\n    ? artifact\n    : {\n        ...artifact,\n        version: LOCAL_SOURCE_ARTIFACT_VERSION,\n      };\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  new LocalFileSystemError({\n    message: `Failed to ${action} ${path}: ${unknownLocalErrorDetails(cause)}`,\n    action,\n    path,\n    details: unknownLocalErrorDetails(cause),\n  });\n\nconst mutableRecord = <K extends string, V>(value: Readonly<Record<K, V>>): Record<K, V> =>\n  value as Record<K, V>;\n\nconst localSourceArtifactPath = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceId: string;\n}): string =>\n  join(\n    input.context.artifactsDirectory,\n    \"sources\",\n    `${input.sourceId}.json`,\n  );\n\nconst localSourceDocumentDirectory = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceId: string;\n}): string =>\n  join(input.context.artifactsDirectory, \"sources\", input.sourceId, \"documents\");\n\nconst localSourceDocumentPath = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceId: string;\n  documentId: string;\n}): string =>\n  join(localSourceDocumentDirectory(input), `${input.documentId}.txt`);\n\nconst splitArtifactSourceDocuments = (artifact: LocalSourceArtifact): {\n  artifact: LocalSourceArtifact;\n  rawDocuments: ReadonlyArray<{\n    documentId: string;\n    blob: NativeBlob;\n    content: string;\n  }>;\n} => {\n  const nextArtifact = structuredClone(artifact);\n  const rawDocuments: Array<{\n    documentId: string;\n    blob: NativeBlob;\n    content: string;\n  }> = [];\n\n  for (const [documentId, document] of Object.entries(nextArtifact.snapshot.catalog.documents)) {\n    const mutableDocument = document as SourceDocument & { native?: NativeBlob[] };\n    const sourceDocumentBlob = document.native?.find((blob) =>\n      blob.kind === \"source_document\" && typeof blob.value === \"string\"\n    );\n    if (!sourceDocumentBlob || typeof sourceDocumentBlob.value !== \"string\") {\n      continue;\n    }\n\n    rawDocuments.push({\n      documentId,\n      blob: sourceDocumentBlob,\n      content: sourceDocumentBlob.value,\n    });\n\n    const remainingBlobs = (document.native ?? []).filter((blob) => blob !== sourceDocumentBlob);\n    if (remainingBlobs.length > 0) {\n      mutableDocument.native = remainingBlobs;\n    } else {\n      delete mutableDocument.native;\n    }\n  }\n\n  return {\n    artifact: nextArtifact,\n    rawDocuments,\n  };\n};\n\nconst hydrateArtifactSourceDocuments = (input: {\n  artifact: LocalSourceArtifact;\n  rawDocuments: Readonly<Record<string, NativeBlob>>;\n}): LocalSourceArtifact => {\n  const nextArtifact = structuredClone(input.artifact);\n  const mutableDocuments = mutableRecord(nextArtifact.snapshot.catalog.documents);\n\n  for (const [documentId, rawDocument] of Object.entries(input.rawDocuments)) {\n    const document = mutableDocuments[documentId as keyof typeof mutableDocuments] as (SourceDocument & { native?: NativeBlob[] }) | undefined;\n    if (!document) {\n      continue;\n    }\n\n    const remainingBlobs = (document.native ?? []).filter((blob) => blob.kind !== \"source_document\");\n    document.native = [rawDocument, ...remainingBlobs];\n  }\n\n  return nextArtifact;\n};\n\nconst snapshotHash = (snapshot: CatalogSnapshotV1): string =>\n  contentHash(JSON.stringify(snapshot));\n\nconst importMetadataHash = (snapshot: { import: SourceCatalogSyncResult[\"importMetadata\"] }): string =>\n  contentHash(JSON.stringify(snapshot.import));\n\nconst decodeCatalogSnapshotV1Option = (\n  snapshot: unknown,\n): CatalogSnapshotV1 | null => {\n  try {\n    return decodeCatalogSnapshotV1(snapshot);\n  } catch {\n    return null;\n  }\n};\n\nexport const buildLocalSourceArtifact = (input: {\n  source: Source;\n  syncResult: SourceCatalogSyncResult;\n}): LocalSourceArtifact => {\n  const catalogId: SourceCatalogId = stableSourceCatalogId(input.source);\n  const generatedAt = Date.now();\n  const snapshot = snapshotFromSourceCatalogSyncResult(input.syncResult);\n  const importHash = importMetadataHash(snapshot);\n  const hash = snapshotHash(snapshot);\n  const revision = createSourceCatalogRevisionRecord({\n    source: input.source,\n    catalogId,\n    revisionNumber: 1,\n    importMetadataJson: JSON.stringify(snapshot.import),\n    importMetadataHash: importHash,\n    snapshotHash: hash,\n  });\n\n  return {\n    version: LOCAL_SOURCE_ARTIFACT_VERSION,\n    sourceId: input.source.id,\n    catalogId,\n    generatedAt,\n    revision,\n    snapshot,\n  };\n};\n\nexport const readLocalSourceArtifact = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceId: string;\n}): Effect.Effect<\n  LocalSourceArtifact | null,\n  LocalFileSystemError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const path = localSourceArtifactPath(input);\n    const exists = yield* fs.exists(path).pipe(\n      Effect.mapError(mapFileSystemError(path, \"check source artifact path\")),\n    );\n    if (!exists) {\n      return null;\n    }\n\n    const readPath = path;\n    const content = yield* fs.readFileString(readPath, \"utf8\").pipe(\n      Effect.mapError(mapFileSystemError(readPath, \"read source artifact\")),\n    );\n\n    const decodedArtifact = decodeReadableLocalSourceArtifactOption(content);\n    if (Option.isNone(decodedArtifact)) {\n      return null;\n    }\n\n    const artifact = normalizeLocalSourceArtifact(decodedArtifact.value);\n    const snapshot = decodeCatalogSnapshotV1Option(artifact.snapshot);\n    if (snapshot === null) {\n      return null;\n    }\n\n    const decodedSnapshotArtifact: LocalSourceArtifact = {\n      ...artifact,\n      snapshot,\n    };\n\n    const rawDocuments: Record<string, NativeBlob> = {};\n    for (const documentId of Object.keys(decodedSnapshotArtifact.snapshot.catalog.documents)) {\n      const sourceDocumentPath = localSourceDocumentPath({\n        context: input.context,\n        sourceId: input.sourceId,\n        documentId,\n      });\n      const sourceDocumentExists = yield* fs.exists(sourceDocumentPath).pipe(\n        Effect.mapError(mapFileSystemError(sourceDocumentPath, \"check source document path\")),\n      );\n      if (!sourceDocumentExists) {\n        continue;\n      }\n\n      const sourceContent = yield* fs.readFileString(sourceDocumentPath, \"utf8\").pipe(\n        Effect.mapError(mapFileSystemError(sourceDocumentPath, \"read source document\")),\n      );\n      rawDocuments[documentId] = {\n        sourceKind: decodedSnapshotArtifact.snapshot.import.sourceKind,\n        kind: \"source_document\",\n        value: sourceContent,\n      } satisfies NativeBlob;\n    }\n\n    const hydratedArtifact = Object.keys(rawDocuments).length > 0\n      ? hydrateArtifactSourceDocuments({\n          artifact: decodedSnapshotArtifact,\n          rawDocuments,\n        })\n      : decodedSnapshotArtifact;\n\n    return {\n      ...hydratedArtifact,\n      snapshot: hydratedArtifact.snapshot,\n    };\n  });\n\nexport const writeLocalSourceArtifact = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceId: string;\n  artifact: LocalSourceArtifact;\n}): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const directory = join(input.context.artifactsDirectory, \"sources\");\n    const path = localSourceArtifactPath(input);\n    const sourceDocumentDirectory = localSourceDocumentDirectory(input);\n    const split = splitArtifactSourceDocuments(input.artifact);\n    yield* fs.makeDirectory(directory, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(directory, \"create source artifact directory\")),\n    );\n    yield* fs.remove(sourceDocumentDirectory, { recursive: true, force: true }).pipe(\n      Effect.mapError(mapFileSystemError(sourceDocumentDirectory, \"remove source document directory\")),\n    );\n    if (split.rawDocuments.length > 0) {\n      yield* fs.makeDirectory(sourceDocumentDirectory, { recursive: true }).pipe(\n        Effect.mapError(mapFileSystemError(sourceDocumentDirectory, \"create source document directory\")),\n      );\n      for (const rawDocument of split.rawDocuments) {\n        const sourceDocumentPath = localSourceDocumentPath({\n          context: input.context,\n          sourceId: input.sourceId,\n          documentId: rawDocument.documentId,\n        });\n        yield* fs.writeFileString(sourceDocumentPath, rawDocument.content).pipe(\n          Effect.mapError(mapFileSystemError(sourceDocumentPath, \"write source document\")),\n        );\n      }\n    }\n    yield* fs.writeFileString(path, `${JSON.stringify(split.artifact)}\\n`).pipe(\n      Effect.mapError(mapFileSystemError(path, \"write source artifact\")),\n    );\n  });\n\nexport const removeLocalSourceArtifact = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceId: string;\n}): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const path = localSourceArtifactPath(input);\n    const exists = yield* fs.exists(path).pipe(\n      Effect.mapError(mapFileSystemError(path, \"check source artifact path\")),\n    );\n    if (exists) {\n      yield* fs.remove(path).pipe(\n        Effect.mapError(mapFileSystemError(path, \"remove source artifact\")),\n      );\n    }\n    const sourceDocumentDirectory = localSourceDocumentDirectory(input);\n    yield* fs.remove(sourceDocumentDirectory, { recursive: true, force: true }).pipe(\n      Effect.mapError(mapFileSystemError(sourceDocumentDirectory, \"remove source document directory\")),\n    );\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/storage.ts",
    "content": "import { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport type { LocalInstallation, LocalExecutorConfig } from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport type {\n  LoadedLocalExecutorConfig,\n  ResolvedLocalWorkspaceContext,\n} from \"./config\";\nimport {\n  loadLocalExecutorConfig,\n  resolveConfigRelativePath,\n  writeProjectLocalExecutorConfig,\n} from \"./config\";\nimport {\n  getOrProvisionLocalInstallation,\n  loadLocalInstallation,\n} from \"./installation\";\nimport type {\n  LocalSourceArtifact,\n} from \"./source-artifacts\";\nimport {\n  buildLocalSourceArtifact,\n  readLocalSourceArtifact,\n  removeLocalSourceArtifact,\n  writeLocalSourceArtifact,\n} from \"./source-artifacts\";\nimport type { LocalWorkspaceState } from \"./workspace-state\";\nimport {\n  loadLocalWorkspaceState,\n  writeLocalWorkspaceState,\n} from \"./workspace-state\";\nimport type { SourceCatalogSyncResult } from \"@executor/source-core\";\nimport type { Source } from \"#schema\";\n\nexport type InstallationStoreShape = {\n  load: (\n    context: ResolvedLocalWorkspaceContext,\n  ) => Effect.Effect<LocalInstallation, never, never>;\n  getOrProvision: (input: {\n    context: ResolvedLocalWorkspaceContext;\n  }) => Effect.Effect<LocalInstallation, never, never>;\n};\n\nexport class InstallationStore extends Context.Tag(\n  \"#runtime/InstallationStore\",\n)<InstallationStore, InstallationStoreShape>() {}\n\nexport type WorkspaceConfigStoreShape = {\n  load: (\n    context: ResolvedLocalWorkspaceContext,\n  ) => Effect.Effect<LoadedLocalExecutorConfig, Error, never>;\n  writeProject: (input: {\n    context: ResolvedLocalWorkspaceContext;\n    config: LocalExecutorConfig;\n  }) => Effect.Effect<void, Error, never>;\n  resolveRelativePath: (input: { path: string; workspaceRoot: string }) => string;\n};\n\nexport class WorkspaceConfigStore extends Context.Tag(\n  \"#runtime/WorkspaceConfigStore\",\n)<WorkspaceConfigStore, WorkspaceConfigStoreShape>() {}\n\nexport type WorkspaceStateStoreShape = {\n  load: (\n    context: ResolvedLocalWorkspaceContext,\n  ) => Effect.Effect<LocalWorkspaceState, Error, never>;\n  write: (input: {\n    context: ResolvedLocalWorkspaceContext;\n    state: LocalWorkspaceState;\n  }) => Effect.Effect<void, Error, never>;\n};\n\nexport class WorkspaceStateStore extends Context.Tag(\n  \"#runtime/WorkspaceStateStore\",\n)<WorkspaceStateStore, WorkspaceStateStoreShape>() {}\n\nexport type SourceArtifactStoreShape = {\n  build: (input: {\n    source: Source;\n    syncResult: SourceCatalogSyncResult;\n  }) => LocalSourceArtifact;\n  read: (input: {\n    context: ResolvedLocalWorkspaceContext;\n    sourceId: string;\n  }) => Effect.Effect<LocalSourceArtifact | null, Error, never>;\n  write: (input: {\n    context: ResolvedLocalWorkspaceContext;\n    sourceId: string;\n    artifact: LocalSourceArtifact;\n  }) => Effect.Effect<void, Error, never>;\n  remove: (input: {\n    context: ResolvedLocalWorkspaceContext;\n    sourceId: string;\n  }) => Effect.Effect<void, Error, never>;\n};\n\nexport class SourceArtifactStore extends Context.Tag(\n  \"#runtime/SourceArtifactStore\",\n)<SourceArtifactStore, SourceArtifactStoreShape>() {}\n\nexport type LocalStorageServices =\n  | InstallationStore\n  | WorkspaceConfigStore\n  | WorkspaceStateStore\n  | SourceArtifactStore;\n\nexport type WorkspaceStorageServices =\n  | WorkspaceConfigStore\n  | WorkspaceStateStore\n  | SourceArtifactStore;\n\nexport const LocalInstallationStore: InstallationStoreShape = {\n  load: loadLocalInstallation,\n  getOrProvision: getOrProvisionLocalInstallation,\n};\n\nexport const LocalInstallationStoreLive = Layer.succeed(\n  InstallationStore,\n  LocalInstallationStore,\n);\n\nconst bindFileSystem = <A, E>(\n  fileSystem: FileSystem.FileSystem,\n  effect: Effect.Effect<A, E, FileSystem.FileSystem>,\n): Effect.Effect<A, E, never> =>\n  effect.pipe(Effect.provideService(FileSystem.FileSystem, fileSystem));\n\nconst bindNodeFileSystem = <A, E>(\n  effect: Effect.Effect<A, E, FileSystem.FileSystem>,\n): Effect.Effect<A, E, never> =>\n  effect.pipe(Effect.provide(NodeFileSystem.layer));\n\nexport const LocalWorkspaceConfigStore: WorkspaceConfigStoreShape = {\n  load: (context) => bindNodeFileSystem(loadLocalExecutorConfig(context)),\n  writeProject: (input) => bindNodeFileSystem(writeProjectLocalExecutorConfig(input)),\n  resolveRelativePath: resolveConfigRelativePath,\n};\n\nexport const LocalWorkspaceConfigStoreLive = Layer.effect(\n  WorkspaceConfigStore,\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n\n    return WorkspaceConfigStore.of({\n      load: (context) => bindFileSystem(fileSystem, loadLocalExecutorConfig(context)),\n      writeProject: (input) =>\n        bindFileSystem(fileSystem, writeProjectLocalExecutorConfig(input)),\n      resolveRelativePath: resolveConfigRelativePath,\n    });\n  }),\n);\n\nexport const LocalWorkspaceStateStore: WorkspaceStateStoreShape = {\n  load: (context) => bindNodeFileSystem(loadLocalWorkspaceState(context)),\n  write: (input) => bindNodeFileSystem(writeLocalWorkspaceState(input)),\n};\n\nexport const LocalWorkspaceStateStoreLive = Layer.effect(\n  WorkspaceStateStore,\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n\n    return WorkspaceStateStore.of({\n      load: (context) => bindFileSystem(fileSystem, loadLocalWorkspaceState(context)),\n      write: (input) => bindFileSystem(fileSystem, writeLocalWorkspaceState(input)),\n    });\n  }),\n);\n\nexport const LocalSourceArtifactStore: SourceArtifactStoreShape = {\n  build: buildLocalSourceArtifact,\n  read: (input) => bindNodeFileSystem(readLocalSourceArtifact(input)),\n  write: (input) => bindNodeFileSystem(writeLocalSourceArtifact(input)),\n  remove: (input) => bindNodeFileSystem(removeLocalSourceArtifact(input)),\n};\n\nexport const LocalSourceArtifactStoreLive = Layer.effect(\n  SourceArtifactStore,\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n\n    return SourceArtifactStore.of({\n      build: buildLocalSourceArtifact,\n      read: (input) => bindFileSystem(fileSystem, readLocalSourceArtifact(input)),\n      write: (input) => bindFileSystem(fileSystem, writeLocalSourceArtifact(input)),\n      remove: (input) => bindFileSystem(fileSystem, removeLocalSourceArtifact(input)),\n    });\n  }),\n);\n\nexport const makeWorkspaceStorageLayer = (input: {\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n}) =>\n  Layer.mergeAll(\n    Layer.succeed(WorkspaceConfigStore, input.workspaceConfigStore),\n    Layer.succeed(WorkspaceStateStore, input.workspaceStateStore),\n    Layer.succeed(SourceArtifactStore, input.sourceArtifactStore),\n  );\n\nexport const makeLocalStorageLayer = (input: {\n  installationStore: InstallationStoreShape;\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n}) =>\n  Layer.mergeAll(\n    Layer.succeed(InstallationStore, input.installationStore),\n    makeWorkspaceStorageLayer(input),\n  );\n\nexport const WorkspaceStorageLive = Layer.mergeAll(\n  LocalWorkspaceConfigStoreLive,\n  LocalWorkspaceStateStoreLive,\n  LocalSourceArtifactStoreLive,\n);\n\nexport const LocalStorageLive = Layer.mergeAll(\n  LocalInstallationStoreLive,\n  WorkspaceStorageLive,\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/tools.ts",
    "content": "import { createHash } from \"node:crypto\";\nimport { dirname, extname, join, relative, resolve, sep } from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { FileSystem } from \"@effect/platform\";\nimport {\n  createToolCatalogFromTools,\n  makeToolInvokerFromTools,\n  type ExecutableTool,\n  type StandardSchema,\n  type ToolCatalog,\n  type ToolDefinition,\n  type ToolInput,\n  type ToolInvoker,\n  type ToolMap,\n  type ToolMetadata,\n  type ToolPath,\n} from \"@executor/codemode-core\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as ts from \"typescript\";\n\nimport type { ResolvedLocalWorkspaceContext } from \"./config\";\nimport {\n  LocalFileSystemError,\n  LocalToolDefinitionError,\n  LocalToolImportError,\n  LocalToolPathConflictError,\n  LocalToolTranspileError,\n  unknownLocalErrorDetails,\n} from \"./errors\";\n\nconst SUPPORTED_LOCAL_TOOL_EXTENSIONS = new Set([\".ts\", \".js\", \".mjs\"]);\nconst LOCAL_TOOLS_DIRECTORY = \"tools\";\nconst LOCAL_TOOLS_ARTIFACT_DIRECTORY = \"local-tools\";\nconst LOCAL_TOOLS_SOURCE_KEY_PREFIX = \"local.tool\";\nconst LOCAL_TOOL_SEGMENT_PATTERN = /^[A-Za-z0-9_-]+$/;\n\ntype Awaitable<T> = T | Promise<T>;\n\ntype ParsedStandardSchema<TSchema extends StandardSchema<any, any>> =\n  TSchema extends StandardSchema<any, infer Parsed> ? Parsed : never;\n\nexport type LocalTool<\n  TInputSchema extends StandardSchema<any, any> = StandardSchema<any, any>,\n  TOutputSchema extends StandardSchema<any, any> | undefined =\n    | StandardSchema<any, any>\n    | undefined,\n> = {\n  description?: string;\n  inputSchema: TInputSchema;\n  outputSchema?: TOutputSchema;\n  parameters?: TInputSchema;\n  execute: (\n    args: ParsedStandardSchema<TInputSchema>,\n  ) => Awaitable<\n    TOutputSchema extends StandardSchema<any, any>\n      ? ParsedStandardSchema<TOutputSchema>\n      : unknown\n  >;\n};\n\nexport type LocalToolWithMetadata<\n  TInputSchema extends StandardSchema<any, any> = StandardSchema<any, any>,\n  TOutputSchema extends StandardSchema<any, any> | undefined =\n    | StandardSchema<any, any>\n    | undefined,\n> = {\n  tool: LocalTool<TInputSchema, TOutputSchema>;\n  metadata?: Omit<ToolMetadata, \"sourceKey\">;\n};\n\nexport const defineLocalTool = <\n  TInputSchema extends StandardSchema<any, any>,\n  TOutputSchema extends StandardSchema<any, any> | undefined = undefined,\n>(\n  input:\n    | LocalTool<TInputSchema, TOutputSchema>\n    | LocalToolWithMetadata<TInputSchema, TOutputSchema>,\n): typeof input => input;\n\nexport type LocalToolRuntime = {\n  tools: ToolMap;\n  catalog: ToolCatalog;\n  toolInvoker: ToolInvoker;\n  toolPaths: Set<string>;\n};\n\nconst emptyLocalToolRuntime = (): LocalToolRuntime => {\n  const tools: ToolMap = {};\n  return {\n    tools,\n    catalog: createToolCatalogFromTools({ tools }),\n    toolInvoker: makeToolInvokerFromTools({ tools }),\n    toolPaths: new Set(),\n  };\n};\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  new LocalFileSystemError({\n    message: `Failed to ${action} ${path}: ${unknownLocalErrorDetails(cause)}`,\n    action,\n    path,\n    details: unknownLocalErrorDetails(cause),\n  });\n\nconst localToolsDirectory = (context: ResolvedLocalWorkspaceContext): string =>\n  join(context.configDirectory, LOCAL_TOOLS_DIRECTORY);\n\nconst localToolsArtifactDirectory = (\n  context: ResolvedLocalWorkspaceContext,\n): string => join(context.artifactsDirectory, LOCAL_TOOLS_ARTIFACT_DIRECTORY);\n\nconst isSupportedLocalToolFile = (path: string): boolean =>\n  SUPPORTED_LOCAL_TOOL_EXTENSIONS.has(extname(path));\n\nconst isIgnoredToolSegment = (segment: string): boolean =>\n  segment.startsWith(\".\") || segment.startsWith(\"_\");\n\nconst toArtifactRelativePath = (relativePath: string): string => {\n  const extension = extname(relativePath);\n  return `${relativePath.slice(0, -extension.length)}.js`;\n};\n\nconst toToolPath = (\n  relativePath: string,\n): Effect.Effect<ToolPath, LocalToolDefinitionError> =>\n  Effect.gen(function* () {\n    const withoutExtension = relativePath.slice(\n      0,\n      -extname(relativePath).length,\n    );\n    const rawSegments = withoutExtension.split(sep).filter(Boolean);\n    const segments =\n      rawSegments.at(-1) === \"index\" ? rawSegments.slice(0, -1) : rawSegments;\n\n    if (segments.length === 0) {\n      return yield* new LocalToolDefinitionError({\n          message: `Invalid local tool path ${relativePath}: root index files are not supported`,\n          path: relativePath,\n          details:\n            \"Root index files are not supported. Use a named file such as hello.ts or a nested index.ts.\",\n        });\n    }\n\n    for (const segment of segments) {\n      if (!LOCAL_TOOL_SEGMENT_PATTERN.test(segment)) {\n        return yield* new LocalToolDefinitionError({\n            message: `Invalid local tool path ${relativePath}: segment ${segment} contains unsupported characters`,\n            path: relativePath,\n            details: `Tool path segments may only contain letters, numbers, underscores, and hyphens. Invalid segment: ${segment}`,\n          });\n      }\n    }\n\n    return segments.join(\".\") as ToolPath;\n  });\n\nconst readDirectoryEntries = (path: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const entries = yield* fs\n      .readDirectory(path)\n      .pipe(\n        Effect.mapError(mapFileSystemError(path, \"read local tools directory\")),\n      );\n    return entries.sort((left, right) => left.localeCompare(right));\n  });\n\nconst collectLocalToolSourceFiles = (\n  root: string,\n): Effect.Effect<string[], LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const exists = yield* fs\n      .exists(root)\n      .pipe(\n        Effect.mapError(\n          mapFileSystemError(root, \"check local tools directory\"),\n        ),\n      );\n    if (!exists) {\n      return [];\n    }\n\n    const walk = (\n      directory: string,\n    ): Effect.Effect<string[], LocalFileSystemError, FileSystem.FileSystem> =>\n      Effect.gen(function* () {\n        const entries = yield* readDirectoryEntries(directory);\n        const files: string[] = [];\n\n        for (const entry of entries) {\n          const fullPath = join(directory, entry);\n          const info = yield* fs\n            .stat(fullPath)\n            .pipe(\n              Effect.mapError(\n                mapFileSystemError(fullPath, \"stat local tool path\"),\n              ),\n            );\n\n          if (info.type === \"Directory\") {\n            files.push(...(yield* walk(fullPath)));\n            continue;\n          }\n\n          if (info.type === \"File\" && isSupportedLocalToolFile(fullPath)) {\n            files.push(fullPath);\n          }\n        }\n\n        return files;\n      });\n\n    return yield* walk(root);\n  });\n\nconst toolCandidateFiles = (root: string, files: readonly string[]): string[] =>\n  files.filter((path) =>\n    relative(root, path)\n      .split(sep)\n      .every((segment) => !isIgnoredToolSegment(segment)),\n  );\n\nconst resolveCompilerDiagnostics = (\n  sourcePath: string,\n  diagnostics: readonly ts.Diagnostic[] | undefined,\n): LocalToolTranspileError | null => {\n  const issues = (diagnostics ?? [])\n    .filter((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error)\n    .map((diagnostic) => {\n      const message = ts.flattenDiagnosticMessageText(\n        diagnostic.messageText,\n        \"\\n\",\n      );\n      if (!diagnostic.file || diagnostic.start === undefined) {\n        return message;\n      }\n      const position = diagnostic.file.getLineAndCharacterOfPosition(\n        diagnostic.start,\n      );\n      return `${position.line + 1}:${position.character + 1} ${message}`;\n    });\n\n  if (issues.length === 0) {\n    return null;\n  }\n\n  return new LocalToolTranspileError({\n    message: `Failed to transpile local tool ${sourcePath}`,\n    path: sourcePath,\n    details: issues.join(\"\\n\"),\n  });\n};\n\nconst normalizeRelativeImportSpecifier = (specifier: string): string => {\n  if (!specifier.startsWith(\"./\") && !specifier.startsWith(\"../\")) {\n    return specifier;\n  }\n\n  const match = specifier.match(/^(.*?)(\\?.*|#.*)?$/);\n  const pathname = match?.[1] ?? specifier;\n  const suffix = match?.[2] ?? \"\";\n  const extension = extname(pathname);\n\n  if (extension === \".js\") {\n    return specifier;\n  }\n\n  if ([\".ts\", \".mjs\"].includes(extension)) {\n    return `${pathname.slice(0, -extension.length)}.js${suffix}`;\n  }\n\n  if (extension.length > 0) {\n    return specifier;\n  }\n\n  return `${pathname}.js${suffix}`;\n};\n\nconst rewriteRelativeImportSpecifiers = (code: string): string =>\n  code\n    .replace(\n      /(from\\s+[\"'])(\\.{1,2}\\/[^\"']+)([\"'])/g,\n      (_match, prefix: string, specifier: string, suffix: string) =>\n        `${prefix}${normalizeRelativeImportSpecifier(specifier)}${suffix}`,\n    )\n    .replace(\n      /(import\\s+[\"'])(\\.{1,2}\\/[^\"']+)([\"'])/g,\n      (_match, prefix: string, specifier: string, suffix: string) =>\n        `${prefix}${normalizeRelativeImportSpecifier(specifier)}${suffix}`,\n    )\n    .replace(\n      /(import\\(\\s*[\"'])(\\.{1,2}\\/[^\"']+)([\"']\\s*\\))/g,\n      (_match, prefix: string, specifier: string, suffix: string) =>\n        `${prefix}${normalizeRelativeImportSpecifier(specifier)}${suffix}`,\n    );\n\nconst transpileSourceFile = (input: {\n  sourcePath: string;\n  content: string;\n}): Effect.Effect<string, LocalToolTranspileError> =>\n  Effect.gen(function* () {\n    if (extname(input.sourcePath) !== \".ts\") {\n      return rewriteRelativeImportSpecifiers(input.content);\n    }\n\n    const transpiled = ts.transpileModule(input.content, {\n      fileName: input.sourcePath,\n      compilerOptions: {\n        module: ts.ModuleKind.ESNext,\n        moduleResolution: ts.ModuleResolutionKind.Bundler,\n        target: ts.ScriptTarget.ES2022,\n        sourceMap: false,\n        inlineSourceMap: false,\n        inlineSources: false,\n      },\n      reportDiagnostics: true,\n    });\n\n    const diagnosticError = resolveCompilerDiagnostics(\n      input.sourcePath,\n      transpiled.diagnostics,\n    );\n    if (diagnosticError) {\n      return yield* diagnosticError;\n    }\n\n    return rewriteRelativeImportSpecifiers(transpiled.outputText);\n  });\n\nconst resolveExecutorNodeModulesDirectory = (): Effect.Effect<\n  string | null,\n  LocalFileSystemError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    let current = dirname(fileURLToPath(import.meta.url));\n\n    while (true) {\n      const candidate = join(current, \"node_modules\");\n      const exists = yield* fs\n        .exists(candidate)\n        .pipe(\n          Effect.mapError(\n            mapFileSystemError(\n              candidate,\n              \"check executor node_modules directory\",\n            ),\n          ),\n        );\n      if (exists) {\n        return candidate;\n      }\n\n      const parent = dirname(current);\n      if (parent === current) {\n        return null;\n      }\n      current = parent;\n    }\n  });\n\nconst ensureArtifactNodeModulesLink = (artifactRoot: string) =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const linkPath = join(artifactRoot, \"node_modules\");\n    const executorNodeModulesDirectory = yield* resolveExecutorNodeModulesDirectory();\n    const exists = yield* fs\n      .exists(linkPath)\n      .pipe(\n        Effect.mapError(\n          mapFileSystemError(linkPath, \"check local tool node_modules link\"),\n        ),\n      );\n    if (exists) {\n      return;\n    }\n\n    if (executorNodeModulesDirectory === null) {\n      return;\n    }\n\n    yield* fs\n      .symlink(executorNodeModulesDirectory, linkPath)\n      .pipe(\n        Effect.mapError(\n          mapFileSystemError(linkPath, \"create local tool node_modules link\"),\n        ),\n      );\n  });\n\nconst buildLocalToolArtifacts = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  sourceDirectory: string;\n  sourceFiles: readonly string[];\n}): Effect.Effect<\n  Map<string, string>,\n  LocalFileSystemError | LocalToolTranspileError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const sources = yield* Effect.forEach(input.sourceFiles, (sourcePath) =>\n      Effect.gen(function* () {\n        const content = yield* fs\n          .readFileString(sourcePath, \"utf8\")\n          .pipe(\n            Effect.mapError(\n              mapFileSystemError(sourcePath, \"read local tool source\"),\n            ),\n          );\n        const relativePath = relative(input.sourceDirectory, sourcePath);\n        const contentHash = createHash(\"sha256\")\n          .update(relativePath)\n          .update(\"\\0\")\n          .update(content)\n          .digest(\"hex\")\n          .slice(0, 12);\n        return {\n          sourcePath,\n          relativePath,\n          content,\n          contentHash,\n        };\n      }),\n    );\n\n    const buildHash = createHash(\"sha256\")\n      .update(\n        JSON.stringify(\n          sources.map((source) => [source.relativePath, source.contentHash]),\n        ),\n      )\n      .digest(\"hex\")\n      .slice(0, 16);\n    const artifactRoot = join(\n      localToolsArtifactDirectory(input.context),\n      buildHash,\n    );\n\n    yield* fs\n      .makeDirectory(artifactRoot, { recursive: true })\n      .pipe(\n        Effect.mapError(\n          mapFileSystemError(\n            artifactRoot,\n            \"create local tool artifact directory\",\n          ),\n        ),\n      );\n    yield* ensureArtifactNodeModulesLink(artifactRoot);\n\n    const output = new Map<string, string>();\n\n    for (const source of sources) {\n      const artifactRelativePath = toArtifactRelativePath(source.relativePath);\n      const artifactPath = join(artifactRoot, artifactRelativePath);\n      const artifactDirectory = dirname(artifactPath);\n      const transpiled = yield* transpileSourceFile({\n        sourcePath: source.sourcePath,\n        content: source.content,\n      });\n\n      yield* fs\n        .makeDirectory(artifactDirectory, { recursive: true })\n        .pipe(\n          Effect.mapError(\n            mapFileSystemError(\n              artifactDirectory,\n              \"create local tool artifact parent directory\",\n            ),\n          ),\n        );\n      yield* fs\n        .writeFileString(artifactPath, transpiled)\n        .pipe(\n          Effect.mapError(\n            mapFileSystemError(artifactPath, \"write local tool artifact\"),\n          ),\n        );\n\n      output.set(source.sourcePath, artifactPath);\n    }\n\n    return output;\n  });\n\nconst isExecutableTool = (value: unknown): value is ExecutableTool =>\n  typeof value === \"object\" &&\n  value !== null &&\n  \"inputSchema\" in value &&\n  typeof (value as { execute?: unknown }).execute === \"function\";\n\nconst isToolDefinition = (value: unknown): value is ToolDefinition =>\n  typeof value === \"object\" &&\n  value !== null &&\n  \"tool\" in value &&\n  isExecutableTool((value as { tool?: unknown }).tool);\n\nconst normalizeToolExport = (input: {\n  toolPath: ToolPath;\n  sourcePath: string;\n  exported: unknown;\n}): Effect.Effect<ToolInput, LocalToolDefinitionError> => {\n  const sourceKey = `${LOCAL_TOOLS_SOURCE_KEY_PREFIX}.${input.toolPath}`;\n\n  if (isToolDefinition(input.exported)) {\n    const definition = input.exported;\n    return Effect.succeed({\n      ...definition,\n      metadata: {\n        ...definition.metadata,\n        sourceKey,\n      },\n    });\n  }\n\n  if (isExecutableTool(input.exported)) {\n    const tool = input.exported;\n    return Effect.succeed({\n      tool,\n      metadata: {\n        sourceKey,\n      },\n    });\n  }\n\n  return Effect.fail(\n    new LocalToolDefinitionError({\n      message: `Invalid local tool export in ${input.sourcePath}`,\n      path: input.sourcePath,\n      details:\n        \"Local tool files must export a default value or named `tool` export containing either an executable tool or a `{ tool, metadata? }` definition.\",\n    }),\n  );\n};\n\nconst importLocalToolModule = (input: {\n  sourcePath: string;\n  artifactPath: string;\n  toolPath: ToolPath;\n}): Effect.Effect<ToolInput, LocalToolImportError | LocalToolDefinitionError> =>\n  Effect.tryPromise({\n    try: () => import(/* @vite-ignore */ pathToFileURL(resolve(input.artifactPath)).href),\n    catch: (cause) =>\n      new LocalToolImportError({\n        message: `Failed to import local tool ${input.sourcePath}`,\n        path: input.sourcePath,\n        details: unknownLocalErrorDetails(cause),\n      }),\n  }).pipe(\n    Effect.flatMap((mod) => {\n      const hasDefault = mod.default !== undefined;\n      const hasNamedTool = mod.tool !== undefined;\n\n      if (hasDefault && hasNamedTool) {\n        return Effect.fail(\n          new LocalToolDefinitionError({\n            message: `Invalid local tool export in ${input.sourcePath}`,\n            path: input.sourcePath,\n            details:\n              \"Export either a default tool or a named `tool` export, but not both.\",\n          }),\n        );\n      }\n\n      if (!hasDefault && !hasNamedTool) {\n        return Effect.fail(\n          new LocalToolDefinitionError({\n            message: `Missing local tool export in ${input.sourcePath}`,\n            path: input.sourcePath,\n            details: \"Expected a default export or named `tool` export.\",\n          }),\n        );\n      }\n\n      return normalizeToolExport({\n        toolPath: input.toolPath,\n        sourcePath: input.sourcePath,\n        exported: hasDefault ? mod.default : mod.tool,\n      });\n    }),\n  );\n\nexport const loadLocalToolRuntime = (\n  context: ResolvedLocalWorkspaceContext,\n): Effect.Effect<\n  LocalToolRuntime,\n  | LocalFileSystemError\n  | LocalToolDefinitionError\n  | LocalToolImportError\n  | LocalToolPathConflictError\n  | LocalToolTranspileError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const sourceDirectory = localToolsDirectory(context);\n    const sourceFiles = yield* collectLocalToolSourceFiles(sourceDirectory);\n\n    if (sourceFiles.length === 0) {\n      return emptyLocalToolRuntime();\n    }\n\n    const artifactPaths = yield* buildLocalToolArtifacts({\n      context,\n      sourceDirectory,\n      sourceFiles,\n    });\n    const candidateFiles = toolCandidateFiles(sourceDirectory, sourceFiles);\n    const tools: ToolMap = {};\n    const seenToolPaths = new Map<string, string>();\n\n    for (const sourcePath of candidateFiles) {\n      const relativePath = relative(sourceDirectory, sourcePath);\n      const toolPath = yield* toToolPath(relativePath);\n      const existing = seenToolPaths.get(toolPath);\n      if (existing) {\n        return yield* new LocalToolPathConflictError({\n            message: `Local tool path conflict for ${toolPath}`,\n            path: sourcePath,\n            otherPath: existing,\n            toolPath,\n          });\n      }\n\n      const artifactPath = artifactPaths.get(sourcePath);\n      if (!artifactPath) {\n        return yield* new LocalToolImportError({\n            message: `Missing compiled artifact for local tool ${sourcePath}`,\n            path: sourcePath,\n            details:\n              \"Expected a compiled local tool artifact, but none was produced.\",\n          });\n      }\n\n      tools[toolPath] = yield* importLocalToolModule({\n        sourcePath,\n        artifactPath,\n        toolPath,\n      });\n      seenToolPaths.set(toolPath, sourcePath);\n    }\n\n    return {\n      tools,\n      catalog: createToolCatalogFromTools({ tools }),\n      toolInvoker: makeToolInvokerFromTools({ tools }),\n      toolPaths: new Set(Object.keys(tools)),\n    } satisfies LocalToolRuntime;\n  });\n\nexport type LocalToolRuntimeLoaderShape = {\n  load: (\n    context: ResolvedLocalWorkspaceContext,\n  ) => Effect.Effect<\n    LocalToolRuntime,\n    | LocalFileSystemError\n    | LocalToolDefinitionError\n    | LocalToolImportError\n    | LocalToolPathConflictError\n    | LocalToolTranspileError,\n    never\n  >;\n};\n\nexport class LocalToolRuntimeLoaderService extends Context.Tag(\n  \"#runtime/LocalToolRuntimeLoaderService\",\n)<LocalToolRuntimeLoaderService, LocalToolRuntimeLoaderShape>() {}\n\nexport const LocalToolRuntimeLoaderLive = Layer.effect(\n  LocalToolRuntimeLoaderService,\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n\n    return LocalToolRuntimeLoaderService.of({\n      load: (context) =>\n        loadLocalToolRuntime(context).pipe(\n          Effect.provideService(FileSystem.FileSystem, fileSystem),\n        ),\n    });\n  }),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/workspace-state.ts",
    "content": "import { join } from \"node:path\";\nimport { FileSystem } from \"@effect/platform\";\n\nimport {\n  PolicyIdSchema,\n  SourceStatusSchema,\n  TimestampMsSchema,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ResolvedLocalWorkspaceContext } from \"./config\";\nimport {\n  LocalFileSystemError,\n  LocalWorkspaceStateDecodeError,\n  unknownLocalErrorDetails,\n} from \"./errors\";\n\nconst WORKSPACE_STATE_BASENAME = \"workspace-state.json\";\n\nconst LocalWorkspaceSourceStateSchema = Schema.Struct({\n  status: SourceStatusSchema,\n  lastError: Schema.NullOr(Schema.String),\n  sourceHash: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nconst LocalWorkspacePolicyStateSchema = Schema.Struct({\n  id: PolicyIdSchema,\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const LocalWorkspaceStateSchema = Schema.Struct({\n  version: Schema.Literal(1),\n  sources: Schema.Record({\n    key: Schema.String,\n    value: LocalWorkspaceSourceStateSchema,\n  }),\n  policies: Schema.Record({\n    key: Schema.String,\n    value: LocalWorkspacePolicyStateSchema,\n  }),\n});\n\nexport type LocalWorkspaceSourceState = typeof LocalWorkspaceSourceStateSchema.Type;\nexport type LocalWorkspacePolicyState = typeof LocalWorkspacePolicyStateSchema.Type;\nexport type LocalWorkspaceState = typeof LocalWorkspaceStateSchema.Type;\n\nconst decodeLocalWorkspaceState = Schema.decodeUnknownSync(LocalWorkspaceStateSchema);\n\nconst mapFileSystemError = (path: string, action: string) => (cause: unknown) =>\n  new LocalFileSystemError({\n    message: `Failed to ${action} ${path}: ${unknownLocalErrorDetails(cause)}`,\n    action,\n    path,\n    details: unknownLocalErrorDetails(cause),\n  });\n\nconst defaultLocalWorkspaceState = (): LocalWorkspaceState => ({\n  version: 1,\n  sources: {},\n  policies: {},\n});\n\nexport const localWorkspaceStatePath = (\n  context: ResolvedLocalWorkspaceContext,\n): string => join(context.stateDirectory, WORKSPACE_STATE_BASENAME);\n\nexport const loadLocalWorkspaceState = (\n  context: ResolvedLocalWorkspaceContext,\n): Effect.Effect<\n  LocalWorkspaceState,\n  LocalFileSystemError | LocalWorkspaceStateDecodeError,\n  FileSystem.FileSystem\n> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    const path = localWorkspaceStatePath(context);\n    const exists = yield* fs.exists(path).pipe(\n      Effect.mapError(mapFileSystemError(path, \"check workspace state path\")),\n    );\n    if (!exists) {\n      return defaultLocalWorkspaceState();\n    }\n\n    const content = yield* fs.readFileString(path, \"utf8\").pipe(\n      Effect.mapError(mapFileSystemError(path, \"read workspace state\")),\n    );\n    return yield* Effect.try({\n      try: () => decodeLocalWorkspaceState(JSON.parse(content) as unknown),\n      catch: (cause) => {\n        return new LocalWorkspaceStateDecodeError({\n          message: `Invalid local workspace state at ${path}: ${unknownLocalErrorDetails(cause)}`,\n          path,\n          details: unknownLocalErrorDetails(cause),\n        });\n      },\n    });\n  });\n\nexport const writeLocalWorkspaceState = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  state: LocalWorkspaceState;\n}): Effect.Effect<void, LocalFileSystemError, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const fs = yield* FileSystem.FileSystem;\n    yield* fs.makeDirectory(input.context.stateDirectory, { recursive: true }).pipe(\n      Effect.mapError(mapFileSystemError(input.context.stateDirectory, \"create state directory\")),\n    );\n    yield* fs.writeFileString(\n      localWorkspaceStatePath(input.context),\n      `${JSON.stringify(input.state, null, 2)}\\n`,\n    ).pipe(\n      Effect.mapError(mapFileSystemError(localWorkspaceStatePath(input.context), \"write workspace state\")),\n    );\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/local/workspace-sync.ts",
    "content": "import { FileSystem } from \"@effect/platform\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  type LoadedLocalExecutorConfig,\n  type ResolvedLocalWorkspaceContext,\n} from \"./config\";\nimport {\n  loadLocalWorkspaceState,\n  writeLocalWorkspaceState,\n  type LocalWorkspaceState,\n} from \"./workspace-state\";\n\nconst trimOrNull = (value: string | null | undefined): string | null => {\n  if (value == null) {\n    return null;\n  }\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nexport const derivePolicyConfigKey = (\n  policy: {\n    resourcePattern: string;\n    effect: \"allow\" | \"deny\";\n    approvalMode: \"auto\" | \"required\";\n  },\n  used: Set<string>,\n): string => {\n  const base =\n    trimOrNull(policy.resourcePattern)\n    ?? `${policy.effect}-${policy.approvalMode}`;\n  let candidate = base;\n  let counter = 2;\n  while (used.has(candidate)) {\n    candidate = `${base}-${counter}`;\n    counter += 1;\n  }\n  used.add(candidate);\n  return candidate;\n};\n\nconst pruneLocalWorkspaceState = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  loadedConfig: LoadedLocalExecutorConfig;\n}): Effect.Effect<LocalWorkspaceState, Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    const currentState = yield* loadLocalWorkspaceState(input.context);\n\n    const configuredSourceIds = new Set(\n      Object.keys(input.loadedConfig.config?.sources ?? {}),\n    );\n    const configuredPolicyKeys = new Set(\n      Object.keys(input.loadedConfig.config?.policies ?? {}),\n    );\n\n    const nextState: LocalWorkspaceState = {\n      ...currentState,\n      sources: Object.fromEntries(\n        Object.entries(currentState.sources).filter(([sourceId]) =>\n          configuredSourceIds.has(sourceId)\n        ),\n      ),\n      policies: Object.fromEntries(\n        Object.entries(currentState.policies).filter(([policyKey]) =>\n          configuredPolicyKeys.has(policyKey)\n        ),\n      ),\n    };\n\n    if (JSON.stringify(nextState) === JSON.stringify(currentState)) {\n      return currentState;\n    }\n\n    yield* writeLocalWorkspaceState({\n      context: input.context,\n      state: nextState,\n    });\n\n    return nextState;\n  });\n\nexport const synchronizeLocalWorkspaceState = (input: {\n  context: ResolvedLocalWorkspaceContext;\n  loadedConfig: LoadedLocalExecutorConfig;\n}): Effect.Effect<LoadedLocalExecutorConfig[\"config\"], Error, FileSystem.FileSystem> =>\n  Effect.gen(function* () {\n    yield* pruneLocalWorkspaceState({\n      context: input.context,\n      loadedConfig: input.loadedConfig,\n    });\n\n    return input.loadedConfig.config;\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/policy/invocation-policy-engine.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\n\nimport type { LocalWorkspacePolicy } from \"#schema\";\nimport {\n  PolicyIdSchema,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\n\nimport {\n  evaluateInvocationPolicy,\n  type InvocationDescriptor,\n} from \"./invocation-policy-engine\";\n\nconst workspaceId = WorkspaceIdSchema.make(\"ws_policy_engine\");\nconst sourceId = SourceIdSchema.make(\"src_policy_engine\");\n\nconst now = 1_700_000_000_000;\n\nconst baseDescriptor: InvocationDescriptor = {\n  toolPath: \"vercel.api.dns.createRecord\",\n  sourceId,\n  sourceName: \"Vercel\",\n  sourceKind: \"openapi\",\n  sourceNamespace: \"vercel.api.dns\",\n  operationKind: \"write\",\n  interaction: \"required\",\n  approvalLabel: \"POST /v10/domains/{domain}/records\",\n};\n\nconst basePolicy = (\n  patch: Partial<LocalWorkspacePolicy> = {},\n): LocalWorkspacePolicy => ({\n  id: PolicyIdSchema.make(`pol_${Math.random().toString(36).slice(2, 8)}`),\n  key: \"vercel-dns\",\n  workspaceId,\n  resourcePattern: \"vercel.api.dns.createRecord\",\n  effect: \"allow\",\n  approvalMode: \"auto\",\n  priority: 0,\n  enabled: true,\n  createdAt: now,\n  updatedAt: now,\n  ...patch,\n});\n\ndescribe(\"invocation-policy-engine\", () => {\n  it(\"allows read requests by default\", () => {\n    const decision = evaluateInvocationPolicy({\n      descriptor: {\n        ...baseDescriptor,\n        toolPath: \"vercel.api.dns.getRecords\",\n        operationKind: \"read\",\n        interaction: \"auto\",\n        approvalLabel: \"GET /v4/domains/{domain}/records\",\n      },\n      args: {},\n      policies: [],\n      context: {\n        workspaceId,\n      },\n    });\n\n    expect(decision.kind).toBe(\"allow\");\n  });\n\n  it(\"requires interaction for mutating requests by default\", () => {\n    const decision = evaluateInvocationPolicy({\n      descriptor: baseDescriptor,\n      args: { domain: \"testing.executor.sh\" },\n      policies: [],\n      context: {\n        workspaceId,\n      },\n    });\n\n    expect(decision.kind).toBe(\"require_interaction\");\n  });\n\n  it(\"allows a mutating request when a matching policy exists\", () => {\n    const decision = evaluateInvocationPolicy({\n      descriptor: baseDescriptor,\n      args: { domain: \"testing.executor.sh\" },\n      policies: [basePolicy({\n        id: PolicyIdSchema.make(\"pol_allow\"),\n      })],\n      context: {\n        workspaceId,\n      },\n    });\n\n    expect(decision.kind).toBe(\"allow\");\n    expect(decision.matchedPolicyId).toBe(\"pol_allow\");\n  });\n\n  it(\"prefers a more specific deny over a broad allow\", () => {\n    const decision = evaluateInvocationPolicy({\n      descriptor: baseDescriptor,\n      args: { domain: \"testing.executor.sh\" },\n      policies: [\n        basePolicy({\n          id: PolicyIdSchema.make(\"pol_allow_all_vercel\"),\n          key: \"allow-all-vercel\",\n          resourcePattern: \"vercel.api.*\",\n          effect: \"allow\",\n          priority: 0,\n        }),\n        basePolicy({\n          id: PolicyIdSchema.make(\"pol_deny_create_record\"),\n          key: \"deny-create-record\",\n          effect: \"deny\",\n          priority: 1,\n        }),\n      ],\n      context: {\n        workspaceId,\n      },\n    });\n\n    expect(decision.kind).toBe(\"deny\");\n    expect(decision.matchedPolicyId).toBe(\"pol_deny_create_record\");\n  });\n\n  it(\"ignores disabled policies\", () => {\n    const decision = evaluateInvocationPolicy({\n      descriptor: baseDescriptor,\n      args: { domain: \"testing.executor.sh\" },\n      policies: [basePolicy({\n        id: PolicyIdSchema.make(\"pol_disabled\"),\n        enabled: false,\n      })],\n      context: {\n        workspaceId,\n      },\n    });\n\n    expect(decision.kind).toBe(\"require_interaction\");\n    expect(decision.matchedPolicyId).toBeNull();\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/policy/invocation-policy-engine.ts",
    "content": "import type {\n  LocalWorkspacePolicy,\n  Source,\n} from \"#schema\";\n\nexport type InvocationOperationKind =\n  | \"read\"\n  | \"write\"\n  | \"delete\"\n  | \"execute\"\n  | \"unknown\";\n\nexport type InvocationDescriptor = {\n  toolPath: string;\n  sourceId: Source[\"id\"];\n  sourceName: Source[\"name\"];\n  sourceKind: Source[\"kind\"];\n  sourceNamespace: string | null;\n  operationKind: InvocationOperationKind;\n  interaction: \"auto\" | \"required\";\n  approvalLabel: string | null;\n};\n\nexport type InvocationPolicyContext = {\n  workspaceId: LocalWorkspacePolicy[\"workspaceId\"];\n};\n\nexport type InvocationAuthorizationDecision = {\n  kind: \"allow\" | \"deny\" | \"require_interaction\";\n  reason: string;\n  matchedPolicyId: LocalWorkspacePolicy[\"id\"] | null;\n};\n\nconst matchesGlob = (pattern: string, value: string): boolean => {\n  const escaped = pattern\n    .replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n    .replace(/\\*/g, \".*\");\n  return new RegExp(`^${escaped}$`).test(value);\n};\n\nconst policySpecificity = (policy: LocalWorkspacePolicy): number =>\n  policy.priority + Math.max(1, policy.resourcePattern.replace(/\\*/g, \"\").length);\n\nconst defaultDecisionForInvocation = (\n  descriptor: InvocationDescriptor,\n): InvocationAuthorizationDecision => {\n  if (descriptor.interaction === \"auto\") {\n    return {\n      kind: \"allow\",\n      reason: `${descriptor.approvalLabel ?? descriptor.toolPath} defaults to allow`,\n      matchedPolicyId: null,\n    };\n  }\n\n  return {\n    kind: \"require_interaction\",\n    reason: `${descriptor.approvalLabel ?? descriptor.toolPath} defaults to approval`,\n    matchedPolicyId: null,\n  };\n};\n\nconst resolvePolicyDecision = (\n  policy: LocalWorkspacePolicy,\n): InvocationAuthorizationDecision => {\n  if (policy.effect === \"deny\") {\n    return {\n      kind: \"deny\",\n      reason: `Denied by policy ${policy.id}`,\n      matchedPolicyId: policy.id,\n    };\n  }\n\n  if (policy.approvalMode === \"required\") {\n    return {\n      kind: \"require_interaction\",\n      reason: `Approval required by policy ${policy.id}`,\n      matchedPolicyId: policy.id,\n    };\n  }\n\n  return {\n    kind: \"allow\",\n    reason: `Allowed by policy ${policy.id}`,\n    matchedPolicyId: policy.id,\n  };\n};\n\nexport const evaluateInvocationPolicy = (input: {\n  descriptor: InvocationDescriptor;\n  args: unknown;\n  policies: ReadonlyArray<LocalWorkspacePolicy>;\n  context: InvocationPolicyContext;\n}): InvocationAuthorizationDecision => {\n  const matchingPolicies = input.policies\n    .filter((policy) =>\n      policy.enabled\n      && policy.workspaceId === input.context.workspaceId\n      && matchesGlob(policy.resourcePattern, input.descriptor.toolPath))\n    .sort((left, right) =>\n      policySpecificity(right) - policySpecificity(left)\n      || left.updatedAt - right.updatedAt,\n    );\n\n  const matched = matchingPolicies[0];\n  return matched ? resolvePolicyDecision(matched) : defaultDecisionForInvocation(input.descriptor);\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/policy/operation-errors.ts",
    "content": "import {\n  ControlPlaneBadRequestError,\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n} from \"../../api/errors\";\nimport * as Effect from \"effect/Effect\";\n\nexport type OperationErrors<TOperation extends string = string> = {\n  readonly operation: TOperation;\n  readonly child: <TSuffix extends string>(\n    suffix: TSuffix,\n  ) => OperationErrors<`${TOperation}.${TSuffix}`>;\n  readonly badRequest: (\n    message: string,\n    details: string,\n  ) => ControlPlaneBadRequestError;\n  readonly notFound: (\n    message: string,\n    details: string,\n  ) => ControlPlaneNotFoundError;\n  readonly storage: (\n    error: Error,\n  ) => ControlPlaneStorageError;\n  readonly unknownStorage: (\n    cause: unknown,\n    details: string,\n  ) => ControlPlaneStorageError;\n  readonly mapStorage: <A, E extends Error>(\n    effect: Effect.Effect<A, E>,\n  ) => Effect.Effect<A, ControlPlaneStorageError>;\n};\n\nexport type OperationErrorsLike = OperationErrors | string;\n\nexport const operationErrors = <TOperation extends string>(\n  operation: TOperation,\n): OperationErrors<TOperation> => {\n  const self: OperationErrors<TOperation> = {\n    operation,\n    child: (suffix) =>\n      operationErrors(`${operation}.${suffix}` as `${TOperation}.${typeof suffix}`),\n    badRequest: (message, details) =>\n      new ControlPlaneBadRequestError({\n        operation,\n        message,\n        details,\n      }),\n    notFound: (message, details) =>\n      new ControlPlaneNotFoundError({\n        operation,\n        message,\n        details,\n      }),\n    storage: (error) =>\n      new ControlPlaneStorageError({\n        operation,\n        message: error.message,\n        details: error.message,\n      }),\n    unknownStorage: (cause, details) =>\n      self.storage(\n        cause instanceof Error\n          ? new Error(`${cause.message}: ${details}`)\n          : new Error(details),\n      ),\n    mapStorage: (effect) =>\n      effect.pipe(\n        Effect.mapError((error) => self.storage(error)),\n      ),\n  };\n\n  return self;\n};\n\nexport const asOperationErrors = (\n  errors: OperationErrorsLike,\n): OperationErrors =>\n  typeof errors === \"string\"\n    ? operationErrors(errors)\n    : errors;\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/policy/operations-shared.ts",
    "content": "import {\n  ControlPlaneBadRequestError,\n  ControlPlaneStorageError,\n} from \"../../api/errors\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  asOperationErrors,\n  type OperationErrorsLike,\n} from \"./operation-errors\";\nexport type Mutable<T> = { -readonly [K in keyof T]: T[K] };\n\nexport const mapPersistenceError = <A, R>(\n  operation: OperationErrorsLike,\n  effect: Effect.Effect<A, Error, R>,\n): Effect.Effect<A, ControlPlaneBadRequestError | ControlPlaneStorageError, R> =>\n  effect.pipe(\n    Effect.mapError((error) => {\n      const errors = asOperationErrors(operation);\n      return errors.storage(error);\n    }),\n  );\n\nexport const parseJsonString = (\n  operation: OperationErrorsLike,\n  fieldName: string,\n  value: string,\n): Effect.Effect<string, ControlPlaneBadRequestError> =>\n  Effect.try({\n    try: () => {\n      JSON.parse(value);\n      return value;\n    },\n    catch: () => {\n      const errors = asOperationErrors(operation);\n      return errors.badRequest(\n        `Invalid ${fieldName}`,\n        `${fieldName} must be valid JSON`,\n      );\n    },\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/policy/policies-operations.ts",
    "content": "import { createHash } from \"node:crypto\";\n\nimport type {\n  CreatePolicyPayload,\n  UpdatePolicyPayload,\n} from \"../../api/policies/api\";\nimport {\n  PolicyIdSchema,\n  type LocalExecutorConfig,\n  type LocalWorkspacePolicy,\n  type PolicyId,\n  type WorkspaceId,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  requireRuntimeLocalWorkspace,\n} from \"../local/runtime-context\";\nimport type {\n  WorkspaceConfigStoreShape,\n  WorkspaceStateStoreShape,\n} from \"../local/storage\";\nimport {\n  WorkspaceConfigStore,\n  WorkspaceStateStore,\n} from \"../local/storage\";\nimport type { ResolvedLocalWorkspaceContext } from \"../local/config\";\nimport {\n  type LocalWorkspaceState,\n} from \"../local/workspace-state\";\nimport {\n  derivePolicyConfigKey,\n} from \"../local/workspace-sync\";\nimport {\n  type OperationErrors,\n  operationErrors,\n} from \"./operation-errors\";\n\nconst policyOps = {\n  list: operationErrors(\"policies.list\"),\n  create: operationErrors(\"policies.create\"),\n  get: operationErrors(\"policies.get\"),\n  update: operationErrors(\"policies.update\"),\n  remove: operationErrors(\"policies.remove\"),\n} as const;\n\nconst cloneJson = <T>(value: T): T =>\n  JSON.parse(JSON.stringify(value)) as T;\n\nconst localPolicyIdForKey = (input: {\n  workspaceRoot: string;\n  key: string;\n}): PolicyId =>\n  PolicyIdSchema.make(\n    `pol_local_${createHash(\"sha256\").update(`${input.workspaceRoot}:${input.key}`).digest(\"hex\").slice(0, 16)}`,\n  );\n\nconst toLocalWorkspacePolicy = (input: {\n  workspaceId: WorkspaceId;\n  workspaceRoot: string;\n  key: string;\n  policyConfig: NonNullable<LocalExecutorConfig[\"policies\"]>[string];\n  state: LocalWorkspaceState[\"policies\"][string] | undefined;\n}): LocalWorkspacePolicy => ({\n  id: input.state?.id ?? localPolicyIdForKey({\n    workspaceRoot: input.workspaceRoot,\n    key: input.key,\n  }),\n  key: input.key,\n  workspaceId: input.workspaceId,\n  resourcePattern: input.policyConfig.match.trim(),\n  effect: input.policyConfig.action,\n  approvalMode: input.policyConfig.approval === \"manual\" ? \"required\" : \"auto\",\n  priority: input.policyConfig.priority ?? 0,\n  enabled: input.policyConfig.enabled ?? true,\n  createdAt: input.state?.createdAt ?? Date.now(),\n  updatedAt: input.state?.updatedAt ?? Date.now(),\n});\n\nexport const loadRuntimeLocalWorkspacePolicies = (workspaceId: WorkspaceId) =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* requireRuntimeLocalWorkspace(workspaceId);\n    const workspaceConfigStore = yield* WorkspaceConfigStore;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const loadedConfig = yield* workspaceConfigStore.load(\n      runtimeLocalWorkspace.context,\n    );\n    const workspaceState = yield* workspaceStateStore.load(\n      runtimeLocalWorkspace.context,\n    );\n\n    const policies = Object.entries(loadedConfig.config?.policies ?? {}).map(([key, policyConfig]) =>\n      toLocalWorkspacePolicy({\n        workspaceId,\n        workspaceRoot: runtimeLocalWorkspace.context.workspaceRoot,\n        key,\n        policyConfig,\n        state: workspaceState.policies[key],\n      }));\n\n    return {\n      runtimeLocalWorkspace,\n      loadedConfig,\n      workspaceState,\n      policies,\n    };\n  });\n\nconst writeLocalPolicyFiles = (input: {\n  operation: OperationErrors;\n  context: ResolvedLocalWorkspaceContext;\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  projectConfig: LocalExecutorConfig;\n  workspaceState: LocalWorkspaceState;\n}) =>\n  Effect.all([\n    input.workspaceConfigStore.writeProject({\n      context: input.context,\n      config: input.projectConfig,\n    }),\n    input.workspaceStateStore.write({\n      context: input.context,\n      state: input.workspaceState,\n    }),\n  ], { discard: true }).pipe(\n    Effect.mapError((cause) =>\n      input.operation.unknownStorage(\n        cause,\n        \"Failed writing local workspace policy files\",\n      ),\n    ),\n  );\n\nconst loadWorkspacePolicyContext = (\n  operation: OperationErrors,\n  workspaceId: WorkspaceId,\n) =>\n  requireRuntimeLocalWorkspace(workspaceId).pipe(\n    Effect.mapError((cause) =>\n      operation.notFound(\n        \"Workspace not found\",\n        cause instanceof Error ? cause.message : String(cause),\n      ),\n    ),\n  );\n\nexport const listPolicies = (workspaceId: WorkspaceId) =>\n  Effect.gen(function* () {\n    yield* loadWorkspacePolicyContext(policyOps.list, workspaceId);\n    const localWorkspace = yield* loadRuntimeLocalWorkspacePolicies(workspaceId).pipe(\n      Effect.mapError((cause) =>\n        policyOps.list.unknownStorage(\n          cause,\n          \"Failed loading local workspace policies\",\n        ),\n      ),\n    );\n    return localWorkspace.policies;\n  });\n\nexport const createPolicy = (input: {\n  workspaceId: WorkspaceId;\n  payload: CreatePolicyPayload;\n}) =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* loadWorkspacePolicyContext(policyOps.create, input.workspaceId);\n    const workspaceConfigStore = yield* WorkspaceConfigStore;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const localWorkspace = yield* loadRuntimeLocalWorkspacePolicies(input.workspaceId).pipe(\n      Effect.mapError((cause) =>\n        policyOps.create.unknownStorage(\n          cause,\n          \"Failed loading local workspace policies\",\n        ),\n      ),\n    );\n    const now = Date.now();\n    const projectConfig = cloneJson(localWorkspace.loadedConfig.projectConfig ?? {});\n    const policies = { ...projectConfig.policies };\n    const key = derivePolicyConfigKey(\n      {\n        resourcePattern: input.payload.resourcePattern ?? \"*\",\n        effect: input.payload.effect ?? \"allow\",\n        approvalMode: input.payload.approvalMode ?? \"auto\",\n      },\n      new Set(Object.keys(policies)),\n    );\n\n    policies[key] = {\n      match: input.payload.resourcePattern ?? \"*\",\n      action: input.payload.effect ?? \"allow\",\n      approval: (input.payload.approvalMode ?? \"auto\") === \"required\" ? \"manual\" : \"auto\",\n      ...(input.payload.enabled === false ? { enabled: false } : {}),\n      ...((input.payload.priority ?? 0) !== 0 ? { priority: input.payload.priority ?? 0 } : {}),\n    };\n\n    const existingState = localWorkspace.workspaceState.policies[key];\n    const workspaceState: LocalWorkspaceState = {\n      ...localWorkspace.workspaceState,\n      policies: {\n        ...localWorkspace.workspaceState.policies,\n        [key]: {\n          id: existingState?.id ?? localPolicyIdForKey({\n            workspaceRoot: runtimeLocalWorkspace.context.workspaceRoot,\n            key,\n          }),\n          createdAt: existingState?.createdAt ?? now,\n          updatedAt: now,\n        },\n      },\n    };\n\n    yield* writeLocalPolicyFiles({\n      operation: policyOps.create,\n      context: runtimeLocalWorkspace.context,\n      workspaceConfigStore,\n      workspaceStateStore,\n      projectConfig: {\n        ...projectConfig,\n        policies,\n      },\n      workspaceState,\n    });\n\n    return toLocalWorkspacePolicy({\n      workspaceId: input.workspaceId,\n      workspaceRoot: runtimeLocalWorkspace.context.workspaceRoot,\n      key,\n      policyConfig: policies[key]!,\n      state: workspaceState.policies[key],\n    });\n  });\n\nexport const getPolicy = (input: {\n  workspaceId: WorkspaceId;\n  policyId: PolicyId;\n}) =>\n  Effect.gen(function* () {\n    yield* loadWorkspacePolicyContext(policyOps.get, input.workspaceId);\n    const localWorkspace = yield* loadRuntimeLocalWorkspacePolicies(input.workspaceId).pipe(\n      Effect.mapError((cause) =>\n        policyOps.get.unknownStorage(\n          cause,\n          \"Failed loading local workspace policies\",\n        ),\n      ),\n    );\n    const policy = localWorkspace.policies.find((candidate) => candidate.id === input.policyId) ?? null;\n    if (policy === null) {\n      return yield* policyOps.get.notFound(\n          \"Policy not found\",\n          `workspaceId=${input.workspaceId} policyId=${input.policyId}`,\n        );\n    }\n    return policy;\n  });\n\nexport const updatePolicy = (input: {\n  workspaceId: WorkspaceId;\n  policyId: PolicyId;\n  payload: UpdatePolicyPayload;\n}) =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* loadWorkspacePolicyContext(policyOps.update, input.workspaceId);\n    const workspaceConfigStore = yield* WorkspaceConfigStore;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const localWorkspace = yield* loadRuntimeLocalWorkspacePolicies(input.workspaceId).pipe(\n      Effect.mapError((cause) =>\n        policyOps.update.unknownStorage(\n          cause,\n          \"Failed loading local workspace policies\",\n        ),\n      ),\n    );\n    const existing = localWorkspace.policies.find((candidate) => candidate.id === input.policyId) ?? null;\n    if (existing === null) {\n      return yield* policyOps.update.notFound(\n          \"Policy not found\",\n          `workspaceId=${input.workspaceId} policyId=${input.policyId}`,\n        );\n    }\n\n    const projectConfig = cloneJson(localWorkspace.loadedConfig.projectConfig ?? {});\n    const policies = { ...projectConfig.policies };\n    const existingConfig = policies[existing.key]!;\n\n    policies[existing.key] = {\n      ...existingConfig,\n      ...(input.payload.resourcePattern !== undefined ? { match: input.payload.resourcePattern } : {}),\n      ...(input.payload.effect !== undefined ? { action: input.payload.effect } : {}),\n      ...(input.payload.approvalMode !== undefined\n        ? { approval: input.payload.approvalMode === \"required\" ? \"manual\" : \"auto\" }\n        : {}),\n      ...(input.payload.enabled !== undefined ? { enabled: input.payload.enabled } : {}),\n      ...(input.payload.priority !== undefined ? { priority: input.payload.priority } : {}),\n    };\n\n    const updatedAt = Date.now();\n    const existingState = localWorkspace.workspaceState.policies[existing.key];\n    const workspaceState: LocalWorkspaceState = {\n      ...localWorkspace.workspaceState,\n      policies: {\n        ...localWorkspace.workspaceState.policies,\n        [existing.key]: {\n          id: existing.id,\n          createdAt: existingState?.createdAt ?? existing.createdAt,\n          updatedAt,\n        },\n      },\n    };\n\n    yield* writeLocalPolicyFiles({\n      operation: policyOps.update,\n      context: runtimeLocalWorkspace.context,\n      workspaceConfigStore,\n      workspaceStateStore,\n      projectConfig: {\n        ...projectConfig,\n        policies,\n      },\n      workspaceState,\n    });\n\n    return toLocalWorkspacePolicy({\n      workspaceId: input.workspaceId,\n      workspaceRoot: runtimeLocalWorkspace.context.workspaceRoot,\n      key: existing.key,\n      policyConfig: policies[existing.key]!,\n      state: workspaceState.policies[existing.key],\n    });\n  });\n\nexport const removePolicy = (input: {\n  workspaceId: WorkspaceId;\n  policyId: PolicyId;\n}) =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* loadWorkspacePolicyContext(policyOps.remove, input.workspaceId);\n    const workspaceConfigStore = yield* WorkspaceConfigStore;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const localWorkspace = yield* loadRuntimeLocalWorkspacePolicies(input.workspaceId).pipe(\n      Effect.mapError((cause) =>\n        policyOps.remove.unknownStorage(\n          cause,\n          \"Failed loading local workspace policies\",\n        ),\n      ),\n    );\n    const existing = localWorkspace.policies.find((candidate) => candidate.id === input.policyId) ?? null;\n    if (existing === null) {\n      return { removed: false };\n    }\n\n    const projectConfig = cloneJson(localWorkspace.loadedConfig.projectConfig ?? {});\n    const policies = { ...projectConfig.policies };\n    delete policies[existing.key];\n\n    const { [existing.key]: _removedPolicy, ...remainingPolicies } = localWorkspace.workspaceState.policies;\n    yield* writeLocalPolicyFiles({\n      operation: policyOps.remove,\n      context: runtimeLocalWorkspace.context,\n      workspaceConfigStore,\n      workspaceStateStore,\n      projectConfig: {\n        ...projectConfig,\n        policies,\n      },\n      workspaceState: {\n        ...localWorkspace.workspaceState,\n        policies: remainingPolicies,\n      },\n    });\n\n    return { removed: true };\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/catalog-sync-result.ts",
    "content": "export * from \"@executor/source-core\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/executor-tools.ts",
    "content": "import {\n  type ElicitationResponse,\n  type OnElicitation,\n  type ToolInvocationContext,\n  type ToolMetadata,\n  toTool,\n  type ToolMap,\n  type ToolPath,\n} from \"@executor/codemode-core\";\nimport {\n  type AccountId,\n  ExecutionIdSchema,\n  ExecutionInteractionIdSchema,\n  SourceSchema,\n  type Source,\n  type WorkspaceId,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport * as Cause from \"effect/Cause\";\nimport * as Exit from \"effect/Exit\";\nimport * as Schema from \"effect/Schema\";\nimport type { RuntimeLocalWorkspaceState } from \"../local/runtime-context\";\nimport {\n  type LocalStorageServices,\n  LocalInstallationStore,\n  LocalSourceArtifactStore,\n  LocalWorkspaceConfigStore,\n  LocalWorkspaceStateStore,\n  makeLocalStorageLayer,\n} from \"../local/storage\";\nimport { provideOptionalRuntimeLocalWorkspace } from \"../local/runtime-context\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\n/** Run an Effect as a Promise, preserving the original error (not FiberFailure). */\nconst runEffect = async <A>(\n  effect: Effect.Effect<A, unknown, LocalStorageServices>,\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState | null = null,\n): Promise<A> => {\n  const baseLayer = makeLocalStorageLayer({\n    installationStore: LocalInstallationStore,\n    workspaceConfigStore: LocalWorkspaceConfigStore,\n    workspaceStateStore: LocalWorkspaceStateStore,\n    sourceArtifactStore: LocalSourceArtifactStore,\n  });\n  const exit = await Effect.runPromiseExit(\n    provideOptionalRuntimeLocalWorkspace(\n      effect.pipe(Effect.provide(baseLayer)),\n      runtimeLocalWorkspace,\n    ),\n  );\n  if (Exit.isSuccess(exit)) return exit.value;\n  throw Cause.squash(exit.cause);\n};\n\nimport {\n  type ExecutorAddSourceInput,\n  type ExecutorCredentialManagedSourceInput,\n  type ExecutorHttpSourceAuthInput,\n  type ExecutorMcpSourceInput,\n  type RuntimeSourceAuthService,\n} from \"./source-auth-service\";\nimport {\n  deriveSchemaJson,\n  deriveSchemaTypeSignature,\n} from \"../catalog/schema-type-signature\";\nimport {\n  ExecutorAddSourceInputSchema,\n  executorAddableSourceAdapters,\n  sourceAdapterRequiresInteractiveConnect,\n} from \"./source-adapters\";\nimport { decodeSourceCredentialSelectionContent } from \"./source-credential-interactions\";\n\nconst ExecutorSourcesAddInputSchema = Schema.standardSchemaV1(\n  ExecutorAddSourceInputSchema,\n);\n\nconst ExecutorSourcesAddOutputSchema = Schema.standardSchemaV1(SourceSchema);\n\nexport const EXECUTOR_SOURCES_ADD_INPUT_HINT = deriveSchemaTypeSignature(\n  ExecutorAddSourceInputSchema,\n  320,\n);\n\nexport const EXECUTOR_SOURCES_ADD_OUTPUT_SIGNATURE = deriveSchemaTypeSignature(\n  SourceSchema,\n  260,\n);\n\nexport const EXECUTOR_SOURCES_ADD_INPUT_SCHEMA = deriveSchemaJson(\n  ExecutorAddSourceInputSchema,\n) ?? {};\n\nexport const EXECUTOR_SOURCES_ADD_OUTPUT_SCHEMA = deriveSchemaJson(\n  SourceSchema,\n) ?? {};\n\nexport const EXECUTOR_SOURCES_ADD_HELP_LINES = [\n  \"Source add input shapes:\",\n  ...executorAddableSourceAdapters.flatMap((adapter) =>\n    adapter.executorAddInputSchema\n    && adapter.executorAddInputSignatureWidth !== null\n    && adapter.executorAddHelpText\n      ? [\n          `- ${adapter.displayName}: ${deriveSchemaTypeSignature(adapter.executorAddInputSchema, adapter.executorAddInputSignatureWidth)}`,\n          ...adapter.executorAddHelpText.map((line) => `  ${line}`),\n        ]\n      : [],\n  ),\n  \"  executor handles the credential setup for you.\",\n] as const;\n\nexport const buildExecutorSourcesAddDescription = (): string =>\n  [\n    \"Add an MCP, OpenAPI, or GraphQL source to the current workspace.\",\n    ...EXECUTOR_SOURCES_ADD_HELP_LINES,\n  ].join(\"\\n\");\n\nconst toExecutionId = (value: unknown) => {\n  if (typeof value !== \"string\" || value.trim().length === 0) {\n    throw new Error(\"Missing execution run id for executor.sources.add\");\n  }\n\n  return ExecutionIdSchema.make(value);\n};\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst toSerializableValue = <A>(value: A): A =>\n  JSON.parse(JSON.stringify(value)) as A;\n\ntype ExecutorSourcesAddToolArgs =\n  | Omit<ExecutorMcpSourceInput, \"workspaceId\" | \"actorAccountId\" | \"executionId\" | \"interactionId\">\n  | Omit<\n      ExecutorCredentialManagedSourceInput,\n      \"workspaceId\" | \"actorAccountId\" | \"executionId\" | \"interactionId\"\n    >;\n\ntype ExecutorGoogleDiscoveryToolArgs = Omit<\n  Extract<ExecutorCredentialManagedSourceInput, { service: string; version: string }>,\n  \"workspaceId\" | \"actorAccountId\" | \"executionId\" | \"interactionId\"\n>;\n\ntype ExecutorOpenApiToolArgs = Omit<\n  Extract<ExecutorCredentialManagedSourceInput, { specUrl: string }>,\n  \"workspaceId\" | \"actorAccountId\" | \"executionId\" | \"interactionId\"\n>;\n\ntype ExecutorGraphqlToolArgs = Omit<\n  Extract<ExecutorCredentialManagedSourceInput, { kind: \"graphql\" }>,\n  \"workspaceId\" | \"actorAccountId\" | \"executionId\" | \"interactionId\"\n>;\n\ntype ExecutorCredentialPromptArgs = {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  kind: ExecutorCredentialManagedSourceInput[\"kind\"];\n  endpoint?: string;\n  specUrl?: string;\n  service?: string;\n  version?: string;\n  discoveryUrl?: string | null;\n  name?: string | null;\n  namespace?: string | null;\n};\n\nconst isExecutorMcpToolArgs = (\n  args: ExecutorSourcesAddToolArgs,\n): args is Omit<ExecutorMcpSourceInput, \"workspaceId\" | \"actorAccountId\" | \"executionId\" | \"interactionId\"> =>\n  args.kind === undefined || sourceAdapterRequiresInteractiveConnect(args.kind);\n\nconst isExecutorCredentialManagedSourceInput = (\n  input: ExecutorAddSourceInput,\n): input is ExecutorCredentialManagedSourceInput =>\n  typeof input.kind === \"string\";\n\nconst prepareExecutorAddSourceInput = (input: {\n  args: ExecutorSourcesAddToolArgs;\n  workspaceId: WorkspaceId;\n  accountId: AccountId;\n  executionId: ReturnType<typeof toExecutionId>;\n  interactionId: ReturnType<typeof ExecutionInteractionIdSchema.make>;\n}): ExecutorAddSourceInput => {\n  if (isExecutorMcpToolArgs(input.args)) {\n    return {\n      kind: input.args.kind,\n      endpoint: input.args.endpoint,\n      name: input.args.name ?? null,\n      namespace: input.args.namespace ?? null,\n      transport: input.args.transport ?? null,\n      queryParams: input.args.queryParams ?? null,\n      headers: input.args.headers ?? null,\n      command: input.args.command ?? null,\n      args: input.args.args ?? null,\n      env: input.args.env ?? null,\n      cwd: input.args.cwd ?? null,\n      workspaceId: input.workspaceId,\n      actorAccountId: input.accountId,\n      executionId: input.executionId,\n      interactionId: input.interactionId,\n    } satisfies ExecutorMcpSourceInput;\n  }\n\n  if (\"service\" in input.args) {\n    const args = input.args as ExecutorGoogleDiscoveryToolArgs;\n    return {\n      ...args,\n      workspaceId: input.workspaceId,\n      actorAccountId: input.accountId,\n      executionId: input.executionId,\n      interactionId: input.interactionId,\n    } satisfies Extract<ExecutorCredentialManagedSourceInput, { service: string; version: string }>;\n  }\n\n  if (\"specUrl\" in input.args) {\n    const args = input.args as ExecutorOpenApiToolArgs;\n    return {\n      ...args,\n      workspaceId: input.workspaceId,\n      actorAccountId: input.accountId,\n      executionId: input.executionId,\n      interactionId: input.interactionId,\n    } satisfies Extract<ExecutorCredentialManagedSourceInput, { specUrl: string }>;\n  }\n\n  const args = input.args as ExecutorGraphqlToolArgs;\n  return {\n    ...args,\n    workspaceId: input.workspaceId,\n    actorAccountId: input.accountId,\n    executionId: input.executionId,\n    interactionId: input.interactionId,\n  } satisfies Extract<ExecutorCredentialManagedSourceInput, { kind: \"graphql\" }>;\n};\n\nconst resolveLocalCredentialUrl = (input: {\n  baseUrl: string;\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  executionId: string;\n  interactionId: string;\n}): string =>\n  new URL(\n    `/v1/workspaces/${encodeURIComponent(input.workspaceId)}/sources/${encodeURIComponent(input.sourceId)}/credentials?interactionId=${encodeURIComponent(`${input.executionId}:${input.interactionId}`)}`,\n    input.baseUrl,\n  ).toString();\n\nconst promptForSourceCredentialSelection = (input: {\n  args: ExecutorCredentialPromptArgs;\n  credentialSlot: \"runtime\" | \"import\";\n  source: Source;\n  executionId: string;\n  interactionId: string;\n  path: ToolPath;\n  sourceKey: string;\n  localServerBaseUrl: string | null;\n  metadata?: ToolMetadata;\n  invocation?: ToolInvocationContext;\n  onElicitation?: OnElicitation;\n}) =>\n  Effect.gen(function* () {\n    if (!input.onElicitation) {\n      return yield* runtimeEffectError(\"sources/executor-tools\", \"executor.sources.add requires an elicitation-capable host\");\n    }\n\n    if (input.localServerBaseUrl === null) {\n      return yield* runtimeEffectError(\"sources/executor-tools\", \"executor.sources.add requires a local server base URL for credential capture\");\n    }\n\n    const response: ElicitationResponse = yield* input.onElicitation({\n      interactionId: input.interactionId,\n      path: input.path,\n      sourceKey: input.sourceKey,\n      args: input.args,\n      metadata: input.metadata,\n      context: input.invocation,\n      elicitation: {\n        mode: \"url\",\n        message:\n          input.credentialSlot === \"import\"\n            ? `Open the secure credential page to configure import access for ${input.source.name}`\n            : `Open the secure credential page to connect ${input.source.name}`,\n        url: resolveLocalCredentialUrl({\n          baseUrl: input.localServerBaseUrl,\n          workspaceId: input.args.workspaceId,\n          sourceId: input.args.sourceId,\n          executionId: input.executionId,\n          interactionId: input.interactionId,\n        }),\n        elicitationId: input.interactionId,\n      },\n    }).pipe(Effect.mapError((cause) => cause instanceof Error ? cause : new Error(String(cause))));\n\n    if (response.action !== \"accept\") {\n      return yield* runtimeEffectError(\"sources/executor-tools\", `Source credential setup was not completed for ${input.source.name}`);\n    }\n\n    const content = yield* Effect.try({\n      try: () => decodeSourceCredentialSelectionContent(response.content),\n      catch: () =>\n        new Error(\"Credential capture did not return a valid source auth choice for executor.sources.add\"),\n    });\n\n    if (content.authKind === \"none\") {\n      return { kind: \"none\" } satisfies ExecutorHttpSourceAuthInput;\n    }\n\n    return {\n      kind: \"bearer\",\n      tokenRef: content.tokenRef,\n    } satisfies ExecutorHttpSourceAuthInput;\n  });\n\nexport const createExecutorToolMap = (input: {\n  workspaceId: WorkspaceId;\n  accountId: AccountId;\n  sourceAuthService: RuntimeSourceAuthService;\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState | null;\n}): ToolMap => ({\n  \"executor.sources.add\": toTool({\n    tool: {\n      description: buildExecutorSourcesAddDescription(),\n      inputSchema: ExecutorSourcesAddInputSchema,\n      outputSchema: ExecutorSourcesAddOutputSchema,\n      execute: async (args: ExecutorSourcesAddToolArgs, context): Promise<Source> => {\n        const executionId = toExecutionId(context?.invocation?.runId);\n        const interactionId = ExecutionInteractionIdSchema.make(\n          `executor.sources.add:${crypto.randomUUID()}`,\n        );\n        const preparedArgs = prepareExecutorAddSourceInput({\n          args,\n          workspaceId: input.workspaceId,\n          accountId: input.accountId,\n          executionId,\n          interactionId,\n        });\n        let result = await runEffect(\n          input.sourceAuthService.addExecutorSource(\n            preparedArgs,\n            context?.onElicitation\n              ? {\n                mcpDiscoveryElicitation: {\n                  onElicitation: context.onElicitation,\n                  path: context.path ?? asToolPath(\"executor.sources.add\"),\n                  sourceKey: context.sourceKey,\n                  args,\n                  metadata: context.metadata,\n                  invocation: context.invocation,\n                },\n              }\n              : undefined,\n          ),\n          input.runtimeLocalWorkspace,\n        );\n\n        if (result.kind === \"connected\") {\n          return toSerializableValue(result.source);\n        }\n\n        if (result.kind === \"credential_required\") {\n          let pendingResult = result;\n          if (!isExecutorCredentialManagedSourceInput(preparedArgs)) {\n            throw new Error(\"Credential-managed source setup expected a named adapter kind\");\n          }\n          let pendingArgs: ExecutorCredentialManagedSourceInput = preparedArgs;\n\n          while (pendingResult.kind === \"credential_required\") {\n            const selectedAuth = await runEffect(\n              promptForSourceCredentialSelection({\n                args: {\n                  ...pendingArgs,\n                  workspaceId: input.workspaceId,\n                  sourceId: pendingResult.source.id,\n                },\n                credentialSlot: pendingResult.credentialSlot,\n                source: pendingResult.source,\n                executionId,\n                interactionId,\n                path: context?.path ?? asToolPath(\"executor.sources.add\"),\n                sourceKey: context?.sourceKey ?? \"executor\",\n                localServerBaseUrl: input.sourceAuthService.getLocalServerBaseUrl(),\n                metadata: context?.metadata,\n                invocation: context?.invocation,\n                onElicitation: context?.onElicitation,\n              }),\n              input.runtimeLocalWorkspace,\n            );\n\n            pendingArgs = pendingResult.credentialSlot === \"import\"\n              && pendingArgs.importAuthPolicy === \"separate\"\n              ? {\n                  ...pendingArgs,\n                  importAuth: selectedAuth,\n                }\n              : {\n                  ...pendingArgs,\n                  auth: selectedAuth,\n                };\n\n            const completed = await runEffect(\n              input.sourceAuthService.addExecutorSource(\n                pendingArgs,\n                context?.onElicitation\n                  ? {\n                    mcpDiscoveryElicitation: {\n                      onElicitation: context.onElicitation,\n                      path: context.path ?? asToolPath(\"executor.sources.add\"),\n                      sourceKey: context.sourceKey,\n                      args,\n                      metadata: context.metadata,\n                      invocation: context.invocation,\n                    },\n                  }\n                  : undefined,\n              ),\n              input.runtimeLocalWorkspace,\n            );\n\n            if (completed.kind === \"connected\") {\n              return toSerializableValue(completed.source);\n            }\n\n            if (completed.kind === \"credential_required\") {\n              pendingResult = completed;\n              continue;\n            }\n\n            result = completed;\n            break;\n          }\n\n          if (pendingResult.kind === \"credential_required\") {\n            result = pendingResult;\n          }\n        }\n\n        if (!context?.onElicitation) {\n          throw new Error(\"executor.sources.add requires an elicitation-capable host\");\n        }\n\n        if (result.kind !== \"oauth_required\") {\n          throw new Error(`Source add did not reach OAuth continuation for ${result.source.id}`);\n        }\n\n        const response: ElicitationResponse = await runEffect(\n          context.onElicitation({\n            interactionId,\n            path: context.path ?? asToolPath(\"executor.sources.add\"),\n            sourceKey: context.sourceKey,\n            args: preparedArgs,\n            metadata: context.metadata,\n            context: context.invocation,\n            elicitation: {\n              mode: \"url\",\n              message: `Open the provider sign-in page to connect ${result.source.name}`,\n              url: result.authorizationUrl,\n              elicitationId: result.sessionId,\n            },\n          }),\n          input.runtimeLocalWorkspace,\n        );\n\n        if (response.action !== \"accept\") {\n          throw new Error(`Source add was not completed for ${result.source.id}`);\n        }\n\n        const connected = await runEffect(\n          input.sourceAuthService.getSourceById({\n            workspaceId: input.workspaceId,\n            sourceId: result.source.id,\n            actorAccountId: input.accountId,\n          }),\n          input.runtimeLocalWorkspace,\n        );\n        return toSerializableValue(connected);\n      },\n    },\n    metadata: {\n      contract: {\n        inputTypePreview: EXECUTOR_SOURCES_ADD_INPUT_HINT,\n        outputTypePreview: EXECUTOR_SOURCES_ADD_OUTPUT_SIGNATURE,\n        inputSchema: EXECUTOR_SOURCES_ADD_INPUT_SCHEMA,\n        outputSchema: EXECUTOR_SOURCES_ADD_OUTPUT_SCHEMA,\n      },\n      sourceKey: \"executor\",\n      interaction: \"auto\",\n    },\n  }),\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/graphql-tools.test.ts",
    "content": "import { createServer, type IncomingMessage } from \"node:http\";\n\nimport { afterEach, describe, expect, it } from \"@effect/vitest\";\n\nimport { createGraphqlToolFromPersistedOperation } from \"./graphql-tools\";\n\ntype CapturedRequest = {\n  path: string;\n  query: string;\n  headers: Record<string, string>;\n  body: string;\n};\n\nconst requestHeadersFromNode = (\n  request: IncomingMessage,\n): Record<string, string> =>\n  Object.fromEntries(\n    Object.entries(request.headers).flatMap(([key, value]) =>\n      value === undefined\n        ? []\n        : [[key, Array.isArray(value) ? value.join(\",\") : value]]),\n  );\n\nconst makeServer = async () => {\n  const requests: CapturedRequest[] = [];\n  const server = createServer((request, response) => {\n    const url = new URL(\n      request.url ?? \"/\",\n      `http://${request.headers.host ?? \"127.0.0.1\"}`,\n    );\n    let body = \"\";\n\n    request.setEncoding(\"utf8\");\n    request.on(\"data\", (chunk) => {\n      body += chunk;\n    });\n    request.on(\"end\", () => {\n      requests.push({\n        path: url.pathname,\n        query: url.search,\n        headers: requestHeadersFromNode(request),\n        body,\n      });\n      response.statusCode = 200;\n      response.setHeader(\"content-type\", \"application/json\");\n      response.end(JSON.stringify({ data: { viewer: { id: \"usr_123\" } } }));\n    });\n  });\n\n  await new Promise<void>((resolve, reject) => {\n    server.once(\"error\", reject);\n    server.listen(0, \"127.0.0.1\", () => resolve());\n  });\n\n  const address = server.address();\n  if (!address || typeof address === \"string\") {\n    throw new Error(\"failed to resolve server address\");\n  }\n\n  return {\n    baseUrl: `http://127.0.0.1:${address.port}/graphql`,\n    requests,\n    close: async () => {\n      await new Promise<void>((resolve, reject) => {\n        server.close((error) => {\n          if (error) {\n            reject(error);\n            return;\n          }\n          resolve();\n        });\n      });\n    },\n  };\n};\n\ndescribe(\"graphql-tools\", () => {\n  const resources: Array<Awaited<ReturnType<typeof makeServer>>> = [];\n\n  afterEach(async () => {\n    while (resources.length > 0) {\n      await resources.pop()?.close();\n    }\n  });\n\n  it(\"applies credential placements for query params, cookies, and body values\", async () => {\n    const server = await makeServer();\n    resources.push(server);\n\n    const toolInput = createGraphqlToolFromPersistedOperation({\n      path: \"source.graphql.raw\",\n      sourceKey: \"src_graphql\",\n      endpoint: server.baseUrl,\n      providerData: {\n        kind: \"graphql\",\n        toolKind: \"request\",\n        toolId: \"raw\",\n        rawToolId: null,\n        group: null,\n        leaf: null,\n        fieldName: null,\n        operationType: \"query\",\n        operationName: null,\n        operationDocument: null,\n        queryTypeName: \"Query\",\n        mutationTypeName: \"Mutation\",\n        subscriptionTypeName: null,\n      },\n      credentialPlacements: {\n        headers: {\n          authorization: \"Token top-secret\",\n        },\n        queryParams: {\n          tenant: \"acme\",\n        },\n        cookies: {\n          session: \"abc123\",\n        },\n        bodyValues: {\n          \"extensions.clientVersion\": \"v1.0.0\",\n        },\n      },\n    });\n    const execute =\n      typeof toolInput === \"object\" && toolInput !== null && \"tool\" in toolInput\n        ? toolInput.tool.execute\n        : (() => {\n            throw new Error(\"Expected GraphQL tool definition\");\n          });\n\n    const result = await Promise.resolve(\n      execute({\n        query: \"query Viewer { viewer { id } }\",\n      }),\n    );\n\n    expect(result).toEqual({\n      status: 200,\n      headers: expect.any(Object),\n      body: { data: { viewer: { id: \"usr_123\" } } },\n      isError: false,\n    });\n    expect(server.requests).toHaveLength(1);\n    expect(server.requests[0]?.query).toContain(\"tenant=acme\");\n    expect(server.requests[0]?.headers.authorization).toBe(\"Token top-secret\");\n    expect(server.requests[0]?.headers.cookie).toContain(\"session=abc123\");\n    expect(JSON.parse(server.requests[0]?.body ?? \"{}\")).toEqual({\n      query: \"query Viewer { viewer { id } }\",\n      extensions: {\n        clientVersion: \"v1.0.0\",\n      },\n    });\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/graphql-tools.ts",
    "content": "export * from \"@executor/source-graphql\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/slug.ts",
    "content": "const slugifyRegex = /[^a-z0-9]+/g;\n\nexport const slugify = (value: string): string =>\n  value\n    .trim()\n    .toLowerCase()\n    .replace(slugifyRegex, \"-\")\n    .replace(/^-+/, \"\")\n    .replace(/-+$/, \"\");\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapter-fixture-matrix.test.ts",
    "content": "import { createServer } from \"node:http\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n  FileSystem,\n  HttpApi,\n  HttpApiEndpoint,\n  HttpApiGroup,\n  HttpApiSchema,\n  OpenApi,\n} from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport {\n  buildOpenApiToolPresentation,\n  compileOpenApiToolDefinitions,\n  extractOpenApiManifest,\n  type OpenApiJsonObject,\n} from \"@executor/source-openapi\";\nimport {\n  buildGoogleDiscoveryToolPresentation,\n  compileGoogleDiscoveryToolDefinitions,\n  extractGoogleDiscoveryManifest,\n} from \"@executor/source-google-discovery\";\nimport { describe, expect, it } from \"@effect/vitest\";\n\nimport type {\n  Source,\n  StoredSourceCatalogRevisionRecord,\n  StoredSourceRecord,\n} from \"#schema\";\nimport {\n  SourceCatalogIdSchema,\n  SourceCatalogRevisionIdSchema,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport { Schema } from \"effect\";\n\nimport { projectCatalogForAgentSdk } from \"@executor/ir/catalog\";\nimport type { CatalogSnapshotV1 } from \"@executor/ir/model\";\nimport {\n  createCatalogTypeProjector,\n  projectedCatalogTypeRoots,\n} from \"../catalog/catalog-typescript\";\nimport {\n  buildGraphqlToolPresentation,\n  compileGraphqlToolDefinitions,\n  extractGraphqlManifest,\n} from \"./graphql-tools\";\nimport {\n  expandCatalogToolByPath,\n  type LoadedSourceCatalog,\n} from \"../catalog/source/runtime\";\nimport { invokeIrTool } from \"../execution/ir-execution\";\nimport { createGoogleDiscoveryCatalogSnapshot } from \"@executor/source-google-discovery\";\nimport { createGraphqlCatalogSnapshot } from \"@executor/source-graphql\";\nimport { createOpenApiCatalogSnapshot } from \"@executor/source-openapi\";\n\nconst FIXTURE_WORKSPACE_ID = WorkspaceIdSchema.make(\"ws_source_fixture_matrix\");\n\nconst readFixture = (name: string) =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) =>\n      fs.readFileString(\n        fileURLToPath(new URL(`../fixtures/${name}`, import.meta.url)),\n        \"utf8\",\n      )\n    ),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst makeSource = (input: {\n  id: string;\n  name: string;\n  kind: Source[\"kind\"];\n  endpoint: string;\n  namespace: string;\n  binding: Source[\"binding\"];\n}): Source => ({\n  id: SourceIdSchema.make(input.id),\n  workspaceId: FIXTURE_WORKSPACE_ID,\n  name: input.name,\n  kind: input.kind,\n  endpoint: input.endpoint,\n  status: \"connected\",\n  enabled: true,\n  namespace: input.namespace,\n  bindingVersion: 1,\n  binding: input.binding,\n  importAuthPolicy: \"none\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: `hash_${input.id}`,\n  lastError: null,\n  createdAt: 1,\n  updatedAt: 1,\n});\n\nconst makeLoadedCatalog = (input: {\n  source: Source;\n  snapshot: CatalogSnapshotV1;\n}): LoadedSourceCatalog => {\n  const catalogId = SourceCatalogIdSchema.make(`catalog_${input.source.id}`);\n  const revisionId = SourceCatalogRevisionIdSchema.make(\n    `catalog_revision_${input.source.id}`,\n  );\n  const sourceRecord = {\n    id: input.source.id,\n    workspaceId: input.source.workspaceId,\n    catalogId,\n    catalogRevisionId: revisionId,\n    name: input.source.name,\n    kind: input.source.kind,\n    endpoint: input.source.endpoint,\n    status: input.source.status,\n    enabled: input.source.enabled,\n    namespace: input.source.namespace,\n    importAuthPolicy: input.source.importAuthPolicy,\n    bindingConfigJson: JSON.stringify(input.source.binding),\n    sourceHash: input.source.sourceHash,\n    lastError: input.source.lastError,\n    createdAt: input.source.createdAt,\n    updatedAt: input.source.updatedAt,\n  } satisfies StoredSourceRecord;\n  const revision = {\n    id: revisionId,\n    catalogId,\n    revisionNumber: 1,\n    sourceConfigJson: JSON.stringify({\n      kind: input.source.kind,\n      endpoint: input.source.endpoint,\n      binding: input.source.binding,\n    }),\n    importMetadataJson: JSON.stringify(input.snapshot.import),\n    importMetadataHash: \"hash_import\",\n    snapshotHash: \"hash_snapshot\",\n    createdAt: 1,\n    updatedAt: 1,\n  } satisfies StoredSourceCatalogRevisionRecord;\n  const projected = projectCatalogForAgentSdk({\n    catalog: input.snapshot.catalog,\n  });\n\n  return {\n    source: input.source,\n    sourceRecord,\n    revision,\n    snapshot: input.snapshot,\n    catalog: input.snapshot.catalog,\n    projected,\n    typeProjector: createCatalogTypeProjector({\n      catalog: projected.catalog,\n      roots: projectedCatalogTypeRoots(projected),\n    }),\n    importMetadata: input.snapshot.import,\n  };\n};\n\nconst unresolvedDiagnosticsForPrefix = (\n  snapshot: CatalogSnapshotV1,\n  prefix: string,\n) =>\n  Object.values(snapshot.catalog.diagnostics).filter(\n    (diagnostic) =>\n      diagnostic.code === \"unresolved_ref\" &&\n      diagnostic.provenance.some((entry) => entry.pointer?.startsWith(prefix)),\n  );\n\nconst openApiSnapshotFromFixture = (input: {\n  source: Source;\n  specText: string;\n  documentKey: string;\n}) =>\n  Effect.gen(function* () {\n    const spec = JSON.parse(input.specText) as OpenApiJsonObject;\n    const manifest = yield* extractOpenApiManifest(input.source.name, spec);\n    const definitions = compileOpenApiToolDefinitions(manifest);\n\n    const snapshot = createOpenApiCatalogSnapshot({\n      source: input.source,\n      documents: [\n        {\n          documentKind: \"openapi\",\n          documentKey: input.documentKey,\n          contentText: input.specText,\n          fetchedAt: 1,\n        },\n      ],\n      operations: definitions.map((definition) => {\n        const presentation = buildOpenApiToolPresentation({\n          definition,\n          refHintTable: manifest.refHintTable,\n        });\n        const method = definition.method.toUpperCase();\n\n        return {\n          toolId: definition.toolId,\n          title: definition.name,\n          description: definition.description,\n          effect:\n            method === \"GET\" || method === \"HEAD\"\n              ? \"read\"\n              : method === \"DELETE\"\n                ? \"delete\"\n                : \"write\",\n          inputSchema: presentation.inputSchema,\n          outputSchema: presentation.outputSchema,\n          providerData: presentation.providerData,\n        };\n      }),\n    });\n\n    return {\n      manifest,\n      snapshot,\n    };\n  });\n\nconst googleDiscoverySnapshotFromFixture = (input: {\n  source: Source;\n  documentText: string;\n  documentKey: string;\n}) =>\n  Effect.gen(function* () {\n    const manifest = yield* extractGoogleDiscoveryManifest(\n      input.source.name,\n      input.documentText,\n    );\n    const definitions = compileGoogleDiscoveryToolDefinitions(manifest);\n\n    const snapshot = createGoogleDiscoveryCatalogSnapshot({\n      source: input.source,\n      documents: [\n        {\n          documentKind: \"google_discovery\",\n          documentKey: input.documentKey,\n          contentText: input.documentText,\n          fetchedAt: 1,\n        },\n      ],\n      operations: definitions.map((definition) => {\n        const presentation = buildGoogleDiscoveryToolPresentation({\n          manifest,\n          definition,\n        });\n\n        return {\n          toolId: definition.toolId,\n          title: definition.name,\n          description: definition.description,\n          effect:\n            definition.method === \"get\" || definition.method === \"head\"\n              ? \"read\"\n              : definition.method === \"delete\"\n                ? \"delete\"\n                : \"write\",\n          inputSchema: presentation.inputSchema,\n          outputSchema: presentation.outputSchema,\n          providerData: presentation.providerData,\n        };\n      }),\n    });\n\n    return {\n      manifest,\n      snapshot,\n    };\n  });\n\nconst graphqlSnapshotFromFixture = (input: {\n  source: Source;\n  documentText: string;\n}) =>\n  Effect.gen(function* () {\n    const manifest = yield* extractGraphqlManifest(\n      input.source.name,\n      input.documentText,\n    );\n    const definitions = compileGraphqlToolDefinitions(manifest);\n\n    const snapshot = createGraphqlCatalogSnapshot({\n      source: input.source,\n      documents: [\n        {\n          documentKind: \"graphql_introspection\",\n          documentKey: input.source.endpoint,\n          contentText: input.documentText,\n          fetchedAt: 1,\n        },\n      ],\n      operations: definitions.map((definition) => {\n        const presentation = buildGraphqlToolPresentation({\n          manifest,\n          definition,\n        });\n\n        return {\n          toolId: definition.toolId,\n          title: definition.name,\n          description: definition.description,\n          effect: definition.operationType === \"query\" ? \"read\" : \"write\",\n          inputSchema: presentation.inputSchema,\n          outputSchema: presentation.outputSchema,\n          providerData: presentation.providerData,\n        };\n      }),\n    });\n\n    return {\n      manifest,\n      snapshot,\n    };\n  });\n\nconst binaryReportIdParam = HttpApiSchema.param(\"reportId\", Schema.String);\n\nclass BinaryExecutionReportsApi extends HttpApiGroup.make(\"reports\").add(\n  HttpApiEndpoint.get(\n    \"getContent\",\n  )`/reports/${binaryReportIdParam}/content`.addSuccess(\n    HttpApiSchema.Uint8Array(),\n  ),\n) {}\n\nclass BinaryExecutionApi extends HttpApi.make(\"binaryExecution\").add(\n  BinaryExecutionReportsApi,\n) {}\n\nconst binaryExecutionOpenApiSpec = OpenApi.fromApi(BinaryExecutionApi);\n\ndescribe(\"source adapter fixture matrix\", () => {\n  it.effect(\n    \"imports the raw recorded Vercel OpenAPI spec into IR and discover projections\",\n    () =>\n      Effect.gen(function* () {\n        const specText = yield* readFixture(\"vercel-openapi.json\");\n        const source = makeSource({\n          id: \"src_vercel_fixture\",\n          name: \"Vercel\",\n          kind: \"openapi\",\n          endpoint: \"https://api.vercel.com\",\n          namespace: \"vercel\",\n          binding: {\n            specUrl: \"https://openapi.vercel.sh/\",\n            defaultHeaders: null,\n          },\n        });\n        const { manifest, snapshot } = yield* openApiSnapshotFromFixture({\n          source,\n          specText,\n          documentKey: \"https://openapi.vercel.sh/\",\n        });\n        const tool = yield* expandCatalogToolByPath({\n          catalogs: [makeLoadedCatalog({ source, snapshot })],\n          path: \"vercel.projects.addProjectDomain\",\n          includeSchemas: true,\n        });\n\n        expect(manifest.tools.length).toBeGreaterThan(250);\n        expect(\n          Object.keys(snapshot.catalog.capabilities).length,\n        ).toBeGreaterThan(250);\n        expect(tool).toBeDefined();\n        expect(tool?.descriptor.contract?.inputTypePreview).not.toContain(\"unknown\");\n        expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"data:\");\n        expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"status:\");\n        expect(tool?.descriptor.contract?.inputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            idOrName: {\n              type: \"string\",\n            },\n            body: {\n              type: \"object\",\n            },\n          },\n        });\n        expect(\n          unresolvedDiagnosticsForPrefix(\n            snapshot,\n            \"#/openapi/addProjectDomain\",\n          ),\n        ).toEqual([]);\n        expect(\n          Object.values(snapshot.catalog.capabilities).some(\n            (capability) => capability.auth.kind !== \"none\",\n          ),\n        ).toBe(true);\n        expect(\n          Object.values(snapshot.catalog.responseSets).some((responseSet) =>\n            responseSet.variants.some(\n              (variant) =>\n                variant.match.kind === \"exact\" && variant.match.status >= 400,\n            ),\n          ),\n        ).toBe(true);\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"imports the raw recorded Neon OpenAPI spec into IR with resolved request body schemas\",\n    () =>\n      Effect.gen(function* () {\n        const specText = yield* readFixture(\"neon-openapi.json\");\n        const source = makeSource({\n          id: \"src_neon_fixture\",\n          name: \"Neon API\",\n          kind: \"openapi\",\n          endpoint: \"https://console.neon.tech/api/v2\",\n          namespace: \"neon\",\n          binding: {\n            specUrl: \"https://neon.com/api_spec/release/v2.json\",\n            defaultHeaders: null,\n          },\n        });\n        const { manifest, snapshot } = yield* openApiSnapshotFromFixture({\n          source,\n          specText,\n          documentKey: \"https://neon.com/api_spec/release/v2.json\",\n        });\n        const tool = yield* expandCatalogToolByPath({\n          catalogs: [makeLoadedCatalog({ source, snapshot })],\n          path: \"neon.apiKey.createApiKey\",\n          includeSchemas: true,\n        });\n\n        expect(manifest.tools.length).toBeGreaterThan(50);\n        expect(tool).toBeDefined();\n        expect(tool?.descriptor.contract?.inputTypePreview).toContain(\"key_name\");\n        expect(tool?.descriptor.contract?.inputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            body: {\n              type: \"object\",\n              properties: {\n                key_name: {\n                  type: \"string\",\n                },\n              },\n              required: [\"key_name\"],\n            },\n          },\n          required: [\"body\"],\n        });\n        expect(tool?.descriptor.contract?.outputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            data: {\n              anyOf: expect.any(Array),\n            },\n          },\n        });\n        const outputSchema = tool?.descriptor.contract?.outputSchema;\n        const dataVariants =\n          outputSchema && typeof outputSchema === \"object\"\n            ? (\n                outputSchema as {\n                  properties?: {\n                    data?: { anyOf?: Array<Record<string, unknown>> };\n                  };\n                }\n              ).properties?.data?.anyOf ?? []\n            : [];\n        const objectDataVariant = dataVariants.find(\n          (variant) => variant.type === \"object\",\n        );\n        expect(objectDataVariant).toMatchObject({\n          properties: {\n            id: {\n              type: \"integer\",\n            },\n            key: {\n              type: \"string\",\n            },\n            name: {\n              type: \"string\",\n            },\n          },\n        });\n        expect(\n          unresolvedDiagnosticsForPrefix(\n            snapshot,\n            \"#/openapi/apiKey.createApiKey\",\n          ),\n        ).toEqual([]);\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"executes imported OpenAPI tools with scoped servers and serialized parameters\",\n    () =>\n      Effect.tryPromise({\n        try: async () => {\n          const requests: Array<{\n            method: string;\n            path: string;\n            query: string;\n            headers: Record<string, string | string[] | undefined>;\n            body: string;\n          }> = [];\n\n          const server = createServer((request, response) => {\n            let body = \"\";\n            request.setEncoding(\"utf8\");\n            request.on(\"data\", (chunk) => {\n              body += chunk;\n            });\n            request.on(\"end\", () => {\n              const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n              requests.push({\n                method: request.method ?? \"GET\",\n                path: url.pathname,\n                query: url.search,\n                headers: request.headers,\n                body,\n              });\n              response.statusCode = 200;\n              response.setHeader(\"content-type\", \"application/json\");\n              response.setHeader(\n                \"x-request-id\",\n                `req_${String(requests.length)}`,\n              );\n              response.end(JSON.stringify({ ok: true }));\n            });\n          });\n\n          await new Promise<void>((resolve, reject) => {\n            server.listen(0, \"127.0.0.1\", (error?: Error) => {\n              if (error) {\n                reject(error);\n                return;\n              }\n              resolve();\n            });\n          });\n\n          try {\n            const address = server.address();\n            if (!address || typeof address === \"string\") {\n              throw new Error(\"Failed to resolve execution fixture server\");\n            }\n\n            const baseUrl = `http://127.0.0.1:${address.port}`;\n            const source = makeSource({\n              id: \"src_openapi_execution_fixture\",\n              name: \"Serialized API\",\n              kind: \"openapi\",\n              endpoint: baseUrl,\n              namespace: \"serialized\",\n              binding: {\n                specUrl: `${baseUrl}/openapi.json`,\n                defaultHeaders: null,\n              },\n            });\n            const specText = JSON.stringify({\n              openapi: \"3.1.0\",\n              info: {\n                title: \"Serialized API\",\n                version: \"1.0.0\",\n              },\n              servers: [\n                {\n                  url: \"/v1\",\n                },\n              ],\n              paths: {\n                \"/items/{itemId}\": {\n                  get: {\n                    operationId: \"items.getItem\",\n                    servers: [\n                      {\n                        url: \"/v2\",\n                      },\n                    ],\n                    parameters: [\n                      {\n                        name: \"itemId\",\n                        in: \"path\",\n                        required: true,\n                        style: \"label\",\n                        explode: true,\n                        schema: {\n                          type: \"array\",\n                          items: {\n                            type: \"string\",\n                          },\n                        },\n                      },\n                      {\n                        name: \"filter\",\n                        in: \"query\",\n                        style: \"deepObject\",\n                        explode: true,\n                        schema: {\n                          type: \"object\",\n                          additionalProperties: {\n                            type: \"string\",\n                          },\n                        },\n                      },\n                      {\n                        name: \"search\",\n                        in: \"query\",\n                        allowReserved: true,\n                        schema: {\n                          type: \"string\",\n                        },\n                      },\n                      {\n                        name: \"X-Trace\",\n                        in: \"header\",\n                        schema: {\n                          type: \"array\",\n                          items: {\n                            type: \"string\",\n                          },\n                        },\n                      },\n                    ],\n                    responses: {\n                      \"200\": {\n                        description: \"ok\",\n                        content: {\n                          \"application/json\": {\n                            schema: {\n                              type: \"object\",\n                              properties: {\n                                ok: {\n                                  type: \"boolean\",\n                                },\n                              },\n                            },\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n                \"/forms\": {\n                  post: {\n                    operationId: \"forms.submit\",\n                    requestBody: {\n                      required: true,\n                      content: {\n                        \"application/x-www-form-urlencoded\": {\n                          schema: {\n                            type: \"object\",\n                            properties: {\n                              title: {\n                                type: \"string\",\n                              },\n                              state: {\n                                type: \"string\",\n                              },\n                            },\n                            required: [\"title\"],\n                          },\n                        },\n                      },\n                    },\n                    responses: {\n                      \"200\": {\n                        description: \"ok\",\n                        content: {\n                          \"application/json\": {\n                            schema: {\n                              type: \"object\",\n                              properties: {\n                                ok: {\n                                  type: \"boolean\",\n                                },\n                              },\n                            },\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n              },\n            });\n\n            const { snapshot } = await Effect.runPromise(\n              openApiSnapshotFromFixture({\n                source,\n                specText,\n                documentKey: `${baseUrl}/openapi.json`,\n              }),\n            );\n            const loadedCatalog = makeLoadedCatalog({\n              source,\n              snapshot,\n            });\n            const getItemTool = await Effect.runPromise(\n              expandCatalogToolByPath({\n                catalogs: [loadedCatalog],\n                path: \"serialized.items.getItem\",\n              }),\n            );\n            const submitFormTool = await Effect.runPromise(\n              expandCatalogToolByPath({\n                catalogs: [loadedCatalog],\n                path: \"serialized.forms.submit\",\n              }),\n            );\n\n            if (!getItemTool || !submitFormTool) {\n              throw new Error(\n                \"Expected OpenAPI execution fixture tools to resolve\",\n              );\n            }\n\n            const auth = {\n              placements: [],\n              headers: {},\n              queryParams: {},\n              cookies: {},\n              bodyValues: {},\n              expiresAt: null,\n              refreshAfter: null,\n            } as const;\n\n            const getItemResult = await Effect.runPromise(\n              invokeIrTool({\n                workspaceId: source.workspaceId,\n                accountId: \"acct_fixture\" as any,\n                tool: getItemTool,\n                auth,\n                args: {\n                  itemId: [\"alpha\", \"beta\"],\n                  filter: {\n                    status: \"open\",\n                  },\n                  search: \"refs/heads/main?draft=true\",\n                  \"X-Trace\": [\"a\", \"b\"],\n                },\n              }),\n            );\n            const submitFormResult = await Effect.runPromise(\n              invokeIrTool({\n                workspaceId: source.workspaceId,\n                accountId: \"acct_fixture\" as any,\n                tool: submitFormTool,\n                auth,\n                args: {\n                  body: {\n                    title: \"Bug report\",\n                    state: \"open\",\n                  },\n                },\n              }),\n            );\n\n            expect(getItemResult).toMatchObject({\n              data: { ok: true },\n              error: null,\n              status: 200,\n              headers: {\n                \"content-type\": \"application/json\",\n                \"x-request-id\": \"req_1\",\n              },\n            });\n            expect(submitFormResult).toMatchObject({\n              data: { ok: true },\n              error: null,\n              status: 200,\n              headers: {\n                \"content-type\": \"application/json\",\n                \"x-request-id\": \"req_2\",\n              },\n            });\n            expect(requests).toHaveLength(2);\n            expect(requests[0]?.path).toBe(\"/v2/items/.alpha.beta\");\n            expect(requests[0]?.query).toContain(\"filter%5Bstatus%5D=open\");\n            expect(requests[0]?.query).toContain(\n              \"search=refs/heads/main?draft=true\",\n            );\n            expect(requests[0]?.headers[\"x-trace\"]).toBe(\"a,b\");\n            expect(requests[1]?.path).toBe(\"/v1/forms\");\n            expect(String(requests[1]?.headers[\"content-type\"])).toContain(\n              \"application/x-www-form-urlencoded\",\n            );\n            expect(requests[1]?.body).toContain(\"title=Bug+report\");\n            expect(requests[1]?.body).toContain(\"state=open\");\n          } finally {\n            await new Promise<void>((resolve, reject) => {\n              server.close((error) => {\n                if (error) {\n                  reject(error);\n                  return;\n                }\n                resolve();\n              });\n            });\n          }\n        },\n        catch: (cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"executes imported HTTP tools and preserves binary responses as bytes\",\n    () =>\n      Effect.tryPromise({\n        try: async () => {\n          const binaryResponse = Uint8Array.from([0x00, 0x7f, 0x80, 0xff]);\n          const requests: Array<{\n            method: string;\n            path: string;\n            query: string;\n            headers: Record<string, string | string[] | undefined>;\n          }> = [];\n\n          const server = createServer((request, response) => {\n            const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n            requests.push({\n              method: request.method ?? \"GET\",\n              path: url.pathname,\n              query: url.search,\n              headers: request.headers,\n            });\n            response.statusCode = 200;\n            response.setHeader(\"content-type\", \"application/octet-stream\");\n            response.setHeader(\"x-request-id\", \"req_binary_1\");\n            response.end(Buffer.from(binaryResponse));\n          });\n\n          await new Promise<void>((resolve, reject) => {\n            server.listen(0, \"127.0.0.1\", (error?: Error) => {\n              if (error) {\n                reject(error);\n                return;\n              }\n              resolve();\n            });\n          });\n\n          try {\n            const address = server.address();\n            if (!address || typeof address === \"string\") {\n              throw new Error(\n                \"Failed to resolve binary execution fixture server\",\n              );\n            }\n\n            const baseUrl = `http://127.0.0.1:${address.port}`;\n            const source = makeSource({\n              id: \"src_openapi_binary_execution_fixture\",\n              name: \"Binary API\",\n              kind: \"openapi\",\n              endpoint: baseUrl,\n              namespace: \"binaryfixture\",\n              binding: {\n                specUrl: `${baseUrl}/openapi.json`,\n                defaultHeaders: null,\n              },\n            });\n            const specText = JSON.stringify(binaryExecutionOpenApiSpec);\n\n            const { snapshot } = await Effect.runPromise(\n              openApiSnapshotFromFixture({\n                source,\n                specText,\n                documentKey: `${baseUrl}/openapi.json`,\n              }),\n            );\n            const loadedCatalog = makeLoadedCatalog({\n              source,\n              snapshot,\n            });\n            const tool = await Effect.runPromise(\n              expandCatalogToolByPath({\n                catalogs: [loadedCatalog],\n                path: \"binaryfixture.reports.getContent\",\n              }),\n            );\n\n            if (!tool) {\n              throw new Error(\n                \"Expected binary execution fixture tool to resolve\",\n              );\n            }\n\n            const auth = {\n              placements: [],\n              headers: {},\n              queryParams: {},\n              cookies: {},\n              bodyValues: {},\n              expiresAt: null,\n              refreshAfter: null,\n            } as const;\n\n            const result = await Effect.runPromise(\n              invokeIrTool({\n                workspaceId: source.workspaceId,\n                accountId: \"acct_fixture\" as any,\n                tool,\n                auth,\n                args: {\n                  reportId: \"report-123\",\n                },\n              }),\n            );\n\n            expect(result).toMatchObject({\n              error: null,\n              status: 200,\n              headers: {\n                \"content-type\": \"application/octet-stream\",\n                \"x-request-id\": \"req_binary_1\",\n              },\n            });\n            expect(result.data).toBeInstanceOf(Uint8Array);\n            expect(Array.from(result.data as Uint8Array)).toEqual(\n              Array.from(binaryResponse),\n            );\n            expect(requests).toHaveLength(1);\n            expect(requests[0]?.method).toBe(\"GET\");\n            expect(requests[0]?.path).toBe(\"/reports/report-123/content\");\n          } finally {\n            await new Promise<void>((resolve, reject) => {\n              server.close((error) => {\n                if (error) {\n                  reject(error);\n                  return;\n                }\n                resolve();\n              });\n            });\n          }\n        },\n        catch: (cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"imports the raw recorded Google Sheets discovery document into IR and discover projections\",\n    () =>\n      Effect.gen(function* () {\n        const documentText = yield* readFixture(\"google-sheets-discovery.json\");\n        const source = makeSource({\n          id: \"src_google_sheets_fixture\",\n          name: \"Google Sheets\",\n          kind: \"google_discovery\",\n          endpoint: \"https://sheets.googleapis.com/\",\n          namespace: \"google.sheets\",\n          binding: {\n            service: \"sheets\",\n            version: \"v4\",\n            discoveryUrl:\n              \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n            defaultHeaders: null,\n            scopes: [],\n          },\n        });\n        const { manifest, snapshot } =\n          yield* googleDiscoverySnapshotFromFixture({\n            source,\n            documentText,\n            documentKey:\n              \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n          });\n        const tool = yield* expandCatalogToolByPath({\n          catalogs: [makeLoadedCatalog({ source, snapshot })],\n          path: \"google.sheets.spreadsheets.sheets.copyTo\",\n          includeSchemas: true,\n        });\n\n        expect(manifest.service).toBe(\"sheets\");\n        expect(\n          Object.keys(snapshot.catalog.capabilities).length,\n        ).toBeGreaterThan(10);\n        expect(tool).toBeDefined();\n        expect(tool?.descriptor.contract?.inputTypePreview).not.toContain(\"unknown\");\n        expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"data:\");\n        expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"status:\");\n        expect(tool?.descriptor.contract?.inputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            spreadsheetId: {\n              type: \"string\",\n            },\n            sheetId: {\n              type: \"integer\",\n            },\n            body: {\n              type: \"object\",\n              properties: {\n                destinationSpreadsheetId: {\n                  type: \"string\",\n                },\n              },\n            },\n          },\n        });\n        expect(JSON.stringify(tool?.descriptor.contract?.outputSchema)).toContain(\n          '\"gridProperties\"',\n        );\n        expect(\n          unresolvedDiagnosticsForPrefix(\n            snapshot,\n            \"#/googleDiscovery/spreadsheets.sheets.copyTo\",\n          ),\n        ).toEqual([]);\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"projects every raw recorded Google Sheets discovery method into schemas and capabilities\",\n    () =>\n      Effect.gen(function* () {\n        const documentText = yield* readFixture(\"google-sheets-discovery.json\");\n        const source = makeSource({\n          id: \"src_google_sheets_coverage\",\n          name: \"Google Sheets\",\n          kind: \"google_discovery\",\n          endpoint: \"https://sheets.googleapis.com/\",\n          namespace: \"google.sheets\",\n          binding: {\n            service: \"sheets\",\n            version: \"v4\",\n            discoveryUrl:\n              \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n            defaultHeaders: null,\n            scopes: [],\n          },\n        });\n        const { manifest, snapshot } =\n          yield* googleDiscoverySnapshotFromFixture({\n            source,\n            documentText,\n            documentKey:\n              \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n          });\n\n        const mismatches = compileGoogleDiscoveryToolDefinitions(\n          manifest,\n        ).flatMap((definition) => {\n          const presentation = buildGoogleDiscoveryToolPresentation({\n            manifest,\n            definition,\n          });\n          const issues: string[] = [];\n\n          if (\n            (definition.parameters.length > 0 || definition.requestSchemaId) &&\n            presentation.inputSchema === undefined\n          ) {\n            issues.push(`${definition.toolId}: missing input schema`);\n          }\n          if (\n            definition.responseSchemaId &&\n            presentation.outputSchema === undefined\n          ) {\n            issues.push(`${definition.toolId}: missing output schema`);\n          }\n\n          return issues;\n        });\n\n        expect(manifest.methods.length).toBeGreaterThan(10);\n        expect(Object.keys(snapshot.catalog.capabilities).length).toBe(\n          manifest.methods.length,\n        );\n        expect(mismatches).toEqual([]);\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"imports the raw recorded Linear GraphQL introspection dump into IR and resolves nested input refs\",\n    () =>\n      Effect.gen(function* () {\n        const documentText = yield* readFixture(\"linear-introspection.json\");\n        const source = makeSource({\n          id: \"src_linear_fixture\",\n          name: \"Linear GraphQL\",\n          kind: \"graphql\",\n          endpoint: \"https://api.linear.app/graphql\",\n          namespace: \"linear\",\n          binding: {\n            defaultHeaders: null,\n          },\n        });\n        const { manifest, snapshot } = yield* graphqlSnapshotFromFixture({\n          source,\n          documentText,\n        });\n        const tool = yield* expandCatalogToolByPath({\n          catalogs: [makeLoadedCatalog({ source, snapshot })],\n          path: \"linear.agentActivityCreatePrompt\",\n          includeSchemas: true,\n        });\n\n        expect(manifest.tools.length).toBeGreaterThan(100);\n        expect(\n          Object.keys(snapshot.catalog.capabilities).length,\n        ).toBeGreaterThan(100);\n        expect(\n          Object.values(snapshot.catalog.diagnostics).filter(\n            (diagnostic) => diagnostic.code === \"unresolved_ref\",\n          ),\n        ).toEqual([]);\n        expect(tool).toBeDefined();\n        expect(tool?.descriptor.contract?.inputTypePreview).toContain(\"{\");\n        expect(tool?.descriptor.contract?.inputTypePreview).toContain(\"input: {\");\n        expect(tool?.descriptor.contract?.outputTypePreview).toContain(\"data:\");\n        expect(tool?.descriptor.contract?.outputTypePreview).not.toContain(\"unknown[]\");\n        expect(tool?.descriptor.contract?.inputSchema).toMatchObject({\n          type: \"object\",\n          required: [\"input\"],\n          properties: {\n            input: {\n              type: \"object\",\n              required: [\"agentSessionId\", \"content\"],\n              properties: {\n                agentSessionId: {\n                  type: \"string\",\n                },\n                content: {\n                  type: \"object\",\n                  properties: {\n                    body: {\n                      type: \"string\",\n                    },\n                  },\n                },\n                sourceCommentId: {\n                  type: \"string\",\n                },\n              },\n            },\n            headers: {\n              type: \"object\",\n            },\n          },\n        });\n        expect(\n          unresolvedDiagnosticsForPrefix(\n            snapshot,\n            \"#/graphql/agentActivityCreatePrompt\",\n          ),\n        ).toEqual([]);\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"executes persisted GraphQL field tools with normalized response envelopes\",\n    () =>\n      Effect.gen(function* () {\n        const requests: Array<{\n          body: string;\n          headers: Record<string, string | string[] | undefined>;\n          path: string;\n        }> = [];\n\n        const server = createServer((request, response) => {\n          let body = \"\";\n          request.setEncoding(\"utf8\");\n          request.on(\"data\", (chunk) => {\n            body += chunk;\n          });\n          request.on(\"end\", () => {\n            requests.push({\n              body,\n              headers: request.headers,\n              path: request.url ?? \"/\",\n            });\n            response.statusCode = 200;\n            response.setHeader(\"content-type\", \"application/json\");\n            response.setHeader(\"x-request-id\", \"req_graphql_1\");\n            response.end(\n              JSON.stringify({\n                data: {\n                  viewer: {\n                    login: \"alice\",\n                  },\n                },\n              }),\n            );\n          });\n        });\n\n        yield* Effect.tryPromise({\n          try: () =>\n            new Promise<void>((resolve, reject) => {\n              server.listen(0, \"127.0.0.1\", (error?: Error) => {\n                if (error) {\n                  reject(error);\n                  return;\n                }\n                resolve();\n              });\n            }),\n          catch: (cause) =>\n            cause instanceof Error ? cause : new Error(String(cause)),\n        });\n\n        try {\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            throw new Error(\n              \"Failed to resolve GraphQL execution fixture server\",\n            );\n          }\n\n          const baseUrl = `http://127.0.0.1:${address.port}`;\n          const source = makeSource({\n            id: \"src_graphql_execution_fixture\",\n            name: \"GraphQL Fixture\",\n            kind: \"graphql\",\n            endpoint: `${baseUrl}/graphql`,\n            namespace: \"gqlfixture\",\n            binding: {\n              defaultHeaders: null,\n            },\n          });\n          const snapshot = createGraphqlCatalogSnapshot({\n            source,\n            documents: [\n              {\n                documentKind: \"graphql_introspection\",\n                documentKey: `${baseUrl}/graphql`,\n                contentText: \"{}\",\n                fetchedAt: 1,\n              },\n            ],\n            operations: [\n              {\n                toolId: \"viewer\",\n                title: \"Viewer\",\n                description: \"Fetch the current viewer.\",\n                effect: \"read\",\n                inputSchema: {\n                  type: \"object\",\n                  additionalProperties: false,\n                },\n                outputSchema: {\n                  type: \"object\",\n                  properties: {\n                    data: {\n                      type: \"object\",\n                      properties: {\n                        login: {\n                          type: \"string\",\n                        },\n                      },\n                      required: [\"login\"],\n                      additionalProperties: false,\n                    },\n                    errors: {\n                      type: \"array\",\n                      items: {},\n                    },\n                    isError: {\n                      type: \"boolean\",\n                    },\n                  },\n                  required: [\"data\", \"errors\", \"isError\"],\n                  additionalProperties: false,\n                },\n                providerData: {\n                  kind: \"graphql\",\n                  toolKind: \"field\",\n                  toolId: \"viewer\",\n                  rawToolId: \"viewer\",\n                  group: \"query\",\n                  leaf: \"viewer\",\n                  fieldName: \"viewer\",\n                  operationType: \"query\",\n                  operationName: \"ViewerQuery\",\n                  operationDocument: \"query ViewerQuery { viewer { login } }\",\n                  queryTypeName: \"Query\",\n                  mutationTypeName: null,\n                  subscriptionTypeName: null,\n                },\n              },\n            ],\n          });\n          const loadedCatalog = makeLoadedCatalog({\n            source,\n            snapshot,\n          });\n          const tool = yield* expandCatalogToolByPath({\n            catalogs: [loadedCatalog],\n            path: \"gqlfixture.viewer\",\n            includeSchemas: true,\n          });\n\n          if (!tool) {\n            throw new Error(\n              \"Expected GraphQL execution fixture tool to resolve\",\n            );\n          }\n\n          expect(tool.descriptor.contract?.outputSchema).toMatchObject({\n            type: \"object\",\n            properties: {\n              data: {\n                anyOf: expect.arrayContaining([\n                  expect.objectContaining({\n                    type: \"object\",\n                    properties: {\n                      login: {\n                        type: \"string\",\n                      },\n                    },\n                  }),\n                ]),\n              },\n            },\n          });\n\n          const auth = {\n            placements: [],\n            headers: {},\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n            refreshAfter: null,\n          } as const;\n\n          const result = yield* invokeIrTool({\n            workspaceId: source.workspaceId,\n            accountId: \"acct_fixture\" as any,\n            tool,\n            auth,\n            args: {},\n          });\n\n          expect(result).toMatchObject({\n            data: {\n              login: \"alice\",\n            },\n            error: null,\n            status: 200,\n            headers: {\n              \"content-type\": \"application/json\",\n              \"x-request-id\": \"req_graphql_1\",\n            },\n          });\n          expect(requests).toHaveLength(1);\n          expect(requests[0]?.path).toBe(\"/graphql\");\n          expect(JSON.parse(requests[0]?.body ?? \"{}\")).toMatchObject({\n            query: \"query ViewerQuery { viewer { login } }\",\n            variables: {},\n            operationName: \"ViewerQuery\",\n          });\n        } finally {\n          yield* Effect.tryPromise({\n            try: () =>\n              new Promise<void>((resolve, reject) => {\n                server.close((error) => {\n                  if (error) {\n                    reject(error);\n                    return;\n                  }\n                  resolve();\n                });\n              }),\n            catch: (cause) =>\n              cause instanceof Error ? cause : new Error(String(cause)),\n          });\n        }\n      }),\n  );\n\n  it.effect(\n    \"projects every raw recorded Linear GraphQL tool into schemas and capabilities\",\n    () =>\n      Effect.gen(function* () {\n        const documentText = yield* readFixture(\"linear-introspection.json\");\n        const source = makeSource({\n          id: \"src_linear_coverage\",\n          name: \"Linear GraphQL\",\n          kind: \"graphql\",\n          endpoint: \"https://api.linear.app/graphql\",\n          namespace: \"linear\",\n          binding: {\n            defaultHeaders: null,\n          },\n        });\n        const { manifest, snapshot } = yield* graphqlSnapshotFromFixture({\n          source,\n          documentText,\n        });\n\n        const mismatches = compileGraphqlToolDefinitions(manifest).flatMap(\n          (definition) => {\n            const presentation = buildGraphqlToolPresentation({\n              manifest,\n              definition,\n            });\n            const issues: string[] = [];\n\n            if (\n              definition.operationType &&\n              presentation.outputSchema === undefined\n            ) {\n              issues.push(`${definition.toolId}: missing output schema`);\n            }\n            if (\n              JSON.stringify(presentation.inputSchema ?? {}).includes(\"shape_\")\n            ) {\n              issues.push(\n                `${definition.toolId}: leaked internal shape id in input schema`,\n              );\n            }\n            if (\n              JSON.stringify(presentation.outputSchema ?? {}).includes(\"shape_\")\n            ) {\n              issues.push(\n                `${definition.toolId}: leaked internal shape id in output schema`,\n              );\n            }\n\n            return issues;\n          },\n        );\n\n        expect(manifest.tools.length).toBeGreaterThan(100);\n        expect(Object.keys(snapshot.catalog.capabilities).length).toBe(\n          manifest.tools.length,\n        );\n        expect(\n          Object.values(snapshot.catalog.diagnostics).filter(\n            (diagnostic) => diagnostic.code === \"unresolved_ref\",\n          ),\n        ).toEqual([]);\n        expect(mismatches).toEqual([]);\n      }),\n    120_000,\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/google-discovery.test.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { SourceIdSchema } from \"#schema\";\n\nimport * as Effect from \"effect/Effect\";\n\nimport { googleDiscoverySourceAdapter } from \"./google-discovery\";\nimport { snapshotFromSourceCatalogSyncResult } from \"../catalog-sync-result\";\nimport { createSourceFromPayload } from \"../source-definitions\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\nconst fetchLiveDiscoveryDocument = async (): Promise<string> => {\n  const response = await fetch(\"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\", {\n    signal: AbortSignal.timeout(20_000),\n  });\n  if (!response.ok) {\n    throw new Error(`Failed to fetch Sheets discovery doc: ${response.status}`);\n  }\n\n  return response.text();\n};\n\nconst withStaticServer = async <T>(content: string, handler: (baseUrl: string) => Promise<T>): Promise<T> => {\n  const server = createServer((_, response) => {\n    response.statusCode = 200;\n    response.setHeader(\"content-type\", \"application/json\");\n    response.end(content);\n  });\n\n  await new Promise<void>((resolve, reject) => {\n    server.listen(0, \"127.0.0.1\", (error?: Error) => {\n      if (error) {\n        reject(error);\n        return;\n      }\n      resolve();\n    });\n  });\n\n  try {\n    const address = server.address();\n    if (!address || typeof address === \"string\") {\n      throw new Error(\"Failed to resolve static server address\");\n    }\n    return await handler(`http://127.0.0.1:${address.port}/sheets.discovery.json`);\n  } finally {\n    await new Promise<void>((resolve, reject) => {\n      server.close((error) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve();\n      });\n    });\n  }\n};\n\ndescribe(\"google discovery source adapter\", () => {\n  it(\"syncs a real Google Sheets discovery doc into snapshot content\", () =>\n    Effect.tryPromise({\n      try: async () => {\n        const discoveryDocument = await fetchLiveDiscoveryDocument();\n\n        await withStaticServer(discoveryDocument, async (discoveryUrl) => {\n          const source = await Effect.runPromise(\n            createSourceFromPayload({\n              workspaceId: \"ws_test\" as any,\n              sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n              payload: {\n                name: \"Google Sheets\",\n                kind: \"google_discovery\",\n                endpoint: discoveryUrl,\n                namespace: \"google.sheets\",\n                binding: {\n                  service: \"sheets\",\n                  version: \"v4\",\n                  discoveryUrl,\n                },\n                importAuthPolicy: \"reuse_runtime\",\n                importAuth: { kind: \"none\" },\n                auth: { kind: \"none\" },\n                status: \"connected\",\n                enabled: true,\n              },\n              now: Date.now(),\n            }),\n          );\n\n          const syncResult = await Effect.runPromise(\n            googleDiscoverySourceAdapter.syncCatalog({\n              source,\n              resolveSecretMaterial: () => Effect.fail(runtimeEffectError(\"sources/source-adapters/google-discovery.test\", \"unexpected secret lookup\")),\n              resolveAuthMaterialForSlot: () =>\n                Effect.succeed({\n                  placements: [],\n                  headers: {},\n                  queryParams: {},\n                  cookies: {},\n                  bodyValues: {},\n                  expiresAt: null,\n                  refreshAfter: null,\n                }),\n            }),\n          );\n          const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n\n          expect(syncResult.fragment.version).toBe(\"ir.v1.fragment\");\n          expect(Object.values(snapshot.catalog.documents)[0]?.kind).toBe(\"google-discovery\");\n          expect(Object.keys(snapshot.catalog.resources)).not.toHaveLength(0);\n          expect(Object.keys(snapshot.catalog.capabilities).length).toBeGreaterThan(50);\n          expect(\n            Object.values(snapshot.catalog.capabilities).some((capability) =>\n              capability.surface.toolPath.join(\".\") === \"google.sheets.spreadsheets.values.get\"\n            ),\n          ).toBe(true);\n        });\n      },\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    }));\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/google-discovery.ts",
    "content": "export * from \"@executor/source-google-discovery\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/graphql.test.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { SourceIdSchema } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\nimport { vi } from \"vitest\";\n\nimport { createSourceFromPayload } from \"../source-definitions\";\nimport { graphqlSourceAdapter } from \"./graphql\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst makeHungGraphqlServer = Effect.acquireRelease(\n  Effect.tryPromise({\n    try: () =>\n      new Promise<{\n        endpoint: string;\n        server: ReturnType<typeof createServer>;\n        sockets: Set<import(\"node:net\").Socket>;\n      }>((resolve, reject) => {\n        const server = createServer((request) => {\n          if (request.method === \"POST\" && request.url === \"/graphql\") {\n            return;\n          }\n        });\n        const sockets = new Set<import(\"node:net\").Socket>();\n\n        server.on(\"connection\", (socket) => {\n          sockets.add(socket);\n          socket.on(\"close\", () => {\n            sockets.delete(socket);\n          });\n        });\n\n        server.listen(0, \"127.0.0.1\", (error?: Error) => {\n          if (error) {\n            reject(error);\n            return;\n          }\n\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            reject(\n              new Error(\n                \"Failed to resolve GraphQL adapter test server address\",\n              ),\n            );\n            return;\n          }\n\n          resolve({\n            endpoint: `http://127.0.0.1:${address.port}/graphql`,\n            server,\n            sockets,\n          });\n        });\n      }),\n    catch: toError,\n  }),\n  ({ server, sockets }) =>\n    Effect.tryPromise({\n      try: () =>\n        new Promise<void>((resolve, reject) => {\n          server.closeAllConnections?.();\n          sockets.forEach((socket) => socket.destroy());\n          server.close((error) => {\n            if (error) {\n              reject(error);\n              return;\n            }\n            resolve();\n          });\n        }),\n      catch: toError,\n    }),\n);\n\ndescribe(\"graphql source adapter\", () => {\n  it.scoped(\"fails sync when introspection never responds\", () =>\n    Effect.gen(function* () {\n      const { endpoint } = yield* makeHungGraphqlServer;\n      const originalAbortSignalTimeout = AbortSignal.timeout.bind(AbortSignal);\n      const timeoutSpy = yield* Effect.acquireRelease(\n        Effect.sync(() =>\n          vi\n            .spyOn(AbortSignal, \"timeout\")\n            .mockImplementation(() => originalAbortSignalTimeout(25)),\n        ),\n        (spy) => Effect.sync(() => spy.mockRestore()),\n      );\n\n      const source = yield* createSourceFromPayload({\n        workspaceId: \"ws_test\" as any,\n        sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n        payload: {\n          name: \"GraphQL Timeout\",\n          kind: \"graphql\",\n          endpoint,\n          namespace: \"graphql.timeout\",\n          binding: {\n            defaultHeaders: null,\n          },\n          importAuthPolicy: \"reuse_runtime\",\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n          status: \"connected\",\n          enabled: true,\n        },\n        now: Date.now(),\n      });\n\n      const failure = yield* Effect.flip(\n        graphqlSourceAdapter.syncCatalog({\n          source,\n          resolveSecretMaterial: () =>\n            Effect.fail(\n              runtimeEffectError(\n                \"sources/source-adapters/graphql.test\",\n                \"unexpected secret lookup\",\n              ),\n            ),\n          resolveAuthMaterialForSlot: () =>\n            Effect.succeed({\n              placements: [],\n              headers: {},\n              queryParams: {},\n              cookies: {},\n              bodyValues: {},\n              expiresAt: null,\n              refreshAfter: null,\n            }),\n        }),\n      );\n\n      expect(timeoutSpy).toBeDefined();\n      expect(failure.message).toMatch(/timed out/i);\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/graphql.ts",
    "content": "export * from \"@executor/source-graphql\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/index.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport {\n  createSourceAdapterComposition,\n  type SourceAdapter,\n} from \"@executor/source-core\";\nimport { externalSourceAdapters } from \"@executor/source-builtins\";\n\nimport { internalSourceAdapter } from \"./internal\";\n\nexport type * from \"@executor/source-core\";\n\nexport const builtInSourceAdapters = [\n  ...externalSourceAdapters,\n  internalSourceAdapter,\n] as const satisfies readonly SourceAdapter[];\nconst composition = createSourceAdapterComposition(builtInSourceAdapters);\n\nexport const connectableSourceAdapters = composition.connectableSourceAdapters;\nexport const ConnectSourcePayloadSchema =\n  composition.connectPayloadSchema as Schema.Schema<\n    typeof composition.connectPayloadSchema.Type,\n    any,\n    never\n  >;\nexport type ConnectSourcePayload = typeof ConnectSourcePayloadSchema.Type;\n\nexport const executorAddableSourceAdapters = composition.executorAddableSourceAdapters;\nexport const ExecutorAddSourceInputSchema =\n  composition.executorAddInputSchema as Schema.Schema<\n    typeof composition.executorAddInputSchema.Type,\n    any,\n    never\n  >;\nexport type ExecutorAddSourceInput = typeof ExecutorAddSourceInputSchema.Type;\n\nexport const localConfigurableSourceAdapters = composition.localConfigurableSourceAdapters;\n\nexport const getSourceAdapter = composition.getSourceAdapter;\nexport const getSourceAdapterForSource = composition.getSourceAdapterForSource;\nexport const findSourceAdapterByProviderKey = composition.findSourceAdapterByProviderKey;\nexport const sourceBindingStateFromSource = composition.sourceBindingStateFromSource;\nexport const sourceAdapterCatalogKind = composition.sourceAdapterCatalogKind;\nexport const sourceAdapterRequiresInteractiveConnect =\n  composition.sourceAdapterRequiresInteractiveConnect;\nexport const sourceAdapterUsesCredentialManagedAuth =\n  composition.sourceAdapterUsesCredentialManagedAuth;\nexport const isInternalSourceAdapter = composition.isInternalSourceAdapter;\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/internal.ts",
    "content": "import * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport {\n  createSourceCatalogSyncResult,\n  createCatalogImportMetadata,\n  decodeBindingConfig,\n  decodeSourceBindingPayload,\n  emptySourceBindingState,\n  encodeBindingConfig,\n  type Source,\n  type SourceAdapter,\n} from \"@executor/source-core\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\nconst InternalBindingConfigSchema = Schema.Struct({});\n\nconst INTERNAL_BINDING_CONFIG_VERSION = 1;\n\nconst bindingHasAnyField = (\n  value: unknown,\n  fields: readonly string[],\n): boolean =>\n  value !== null &&\n  typeof value === \"object\" &&\n  !Array.isArray(value) &&\n  fields.some((field) => Object.prototype.hasOwnProperty.call(value, field));\n\nconst internalBindingConfigFromSource = (\n  source: Pick<Source, \"id\" | \"bindingVersion\" | \"binding\">,\n) =>\n  Effect.gen(function* () {\n    if (\n      bindingHasAnyField(source.binding, [\n        \"specUrl\",\n        \"defaultHeaders\",\n        \"transport\",\n        \"queryParams\",\n        \"headers\",\n      ])\n    ) {\n      return yield* runtimeEffectError(\"sources/source-adapters/internal\", \"internal sources cannot define HTTP source settings\");\n    }\n\n    return yield* decodeSourceBindingPayload({\n      sourceId: source.id,\n      label: \"internal\",\n      version: source.bindingVersion,\n      expectedVersion: INTERNAL_BINDING_CONFIG_VERSION,\n      schema: InternalBindingConfigSchema,\n      value: source.binding,\n      allowedKeys: [],\n    });\n  });\n\nexport const internalSourceAdapter = {\n  key: \"internal\",\n  displayName: \"Internal\",\n  catalogKind: \"internal\",\n  connectStrategy: \"none\",\n  credentialStrategy: \"none\",\n  bindingConfigVersion: INTERNAL_BINDING_CONFIG_VERSION,\n  providerKey: \"generic_internal\",\n  defaultImportAuthPolicy: \"none\",\n  connectPayloadSchema: null,\n  executorAddInputSchema: null,\n  executorAddHelpText: null,\n  executorAddInputSignatureWidth: null,\n  localConfigBindingSchema: null,\n  localConfigBindingFromSource: () => null,\n  serializeBindingConfig: (source) =>\n    encodeBindingConfig({\n      adapterKey: source.kind,\n      version: INTERNAL_BINDING_CONFIG_VERSION,\n      payloadSchema: InternalBindingConfigSchema,\n      payload: Effect.runSync(internalBindingConfigFromSource(source)),\n    }),\n  deserializeBindingConfig: ({ id, bindingConfigJson }) =>\n    Effect.map(\n      decodeBindingConfig({\n        sourceId: id,\n        label: \"internal\",\n        adapterKey: \"internal\",\n        version: INTERNAL_BINDING_CONFIG_VERSION,\n        payloadSchema: InternalBindingConfigSchema,\n        value: bindingConfigJson,\n      }),\n      ({ version, payload }) => ({\n        version,\n        payload,\n      }),\n    ),\n  bindingStateFromSource: () => Effect.succeed(emptySourceBindingState),\n  sourceConfigFromSource: (source) => ({\n    kind: \"internal\",\n    endpoint: source.endpoint,\n  }),\n  validateSource: (source) =>\n    Effect.gen(function* () {\n      yield* internalBindingConfigFromSource(source);\n\n      return {\n        ...source,\n        bindingVersion: INTERNAL_BINDING_CONFIG_VERSION,\n        binding: {},\n      };\n    }),\n  shouldAutoProbe: () => false,\n  syncCatalog: ({ source }) =>\n    Effect.succeed(\n      createSourceCatalogSyncResult({\n        fragment: {\n          version: \"ir.v1.fragment\",\n        },\n        importMetadata: {\n          ...createCatalogImportMetadata({\n            source,\n            adapterKey: \"internal\",\n          }),\n          importerVersion: \"ir.v1.internal\",\n          sourceConfigHash: \"internal\",\n        },\n        sourceHash: null,\n      }),\n    ),\n  invoke: () =>\n    Effect.fail(\n      runtimeEffectError(\"sources/source-adapters/internal\", \"Internal sources do not support persisted adapter invocation\"),\n    ),\n} satisfies SourceAdapter;\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/mcp.test.ts",
    "content": "import { randomUUID } from \"node:crypto\";\n\nimport { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport {\n  SourceCatalogIdSchema,\n  SourceCatalogRevisionIdSchema,\n  SourceIdSchema,\n} from \"#schema\";\nimport type {\n  Source,\n  StoredSourceCatalogRevisionRecord,\n  StoredSourceRecord,\n} from \"#schema\";\n\nimport * as Effect from \"effect/Effect\";\nimport { z } from \"zod/v4\";\n\nimport { projectCatalogForAgentSdk } from \"@executor/ir/catalog\";\nimport type { CatalogSnapshotV1 } from \"@executor/ir/model\";\nimport { createCatalogTypeProjector, projectedCatalogTypeRoots } from \"../../catalog/catalog-typescript\";\nimport { invokeIrTool } from \"../../execution/ir-execution\";\nimport {\n  expandCatalogToolByPath,\n  type LoadedSourceCatalog,\n} from \"../../catalog/source/runtime\";\nimport { snapshotFromSourceCatalogSyncResult } from \"../catalog-sync-result\";\nimport { createSourceFromPayload } from \"../source-definitions\";\nimport { mcpSourceAdapter } from \"./mcp\";\nimport { runtimeEffectError } from \"../../effect-errors\";\n\ntype RealMcpServer = {\n  endpoint: string;\n  close: () => Promise<void>;\n};\n\nconst makeLoadedCatalog = (input: {\n  source: Source;\n  snapshot: CatalogSnapshotV1;\n}): LoadedSourceCatalog => {\n  const catalogId = SourceCatalogIdSchema.make(`catalog_${input.source.id}`);\n  const revisionId = SourceCatalogRevisionIdSchema.make(\n    `catalog_revision_${input.source.id}`,\n  );\n  const sourceRecord = {\n    id: input.source.id,\n    workspaceId: input.source.workspaceId,\n    catalogId,\n    catalogRevisionId: revisionId,\n    name: input.source.name,\n    kind: input.source.kind,\n    endpoint: input.source.endpoint,\n    status: input.source.status,\n    enabled: input.source.enabled,\n    namespace: input.source.namespace,\n    importAuthPolicy: input.source.importAuthPolicy,\n    bindingConfigJson: JSON.stringify(input.source.binding),\n    sourceHash: input.source.sourceHash,\n    lastError: input.source.lastError,\n    createdAt: input.source.createdAt,\n    updatedAt: input.source.updatedAt,\n  } satisfies StoredSourceRecord;\n  const revision = {\n    id: revisionId,\n    catalogId,\n    revisionNumber: 1,\n    sourceConfigJson: JSON.stringify({\n      kind: input.source.kind,\n      endpoint: input.source.endpoint,\n      binding: input.source.binding,\n    }),\n    importMetadataJson: JSON.stringify(input.snapshot.import),\n    importMetadataHash: \"hash_import\",\n    snapshotHash: \"hash_snapshot\",\n    createdAt: 1,\n    updatedAt: 1,\n  } satisfies StoredSourceCatalogRevisionRecord;\n  const projected = projectCatalogForAgentSdk({\n    catalog: input.snapshot.catalog,\n  });\n\n  return {\n    source: input.source,\n    sourceRecord,\n    revision,\n    snapshot: input.snapshot,\n    catalog: input.snapshot.catalog,\n    projected,\n    typeProjector: createCatalogTypeProjector({\n      catalog: projected.catalog,\n      roots: projectedCatalogTypeRoots(projected),\n    }),\n    importMetadata: input.snapshot.import,\n  };\n};\n\nconst makeRealMcpServer = Effect.acquireRelease(\n  Effect.promise<RealMcpServer>(\n    () =>\n      new Promise<RealMcpServer>((resolve, reject) => {\n        const createServerForRequest = () => {\n          const mcp = new McpServer(\n            {\n              name: \"mcp-adapter-test-server\",\n              version: \"1.0.0\",\n              title: \"Adapter Test Server\",\n              description: \"Server for MCP adapter tests\",\n              websiteUrl: \"https://example.test/mcp\",\n            },\n            {\n              capabilities: {\n                tools: {\n                  listChanged: true,\n                },\n                logging: {},\n              },\n            },\n          );\n\n          mcp.registerTool(\n            \"read_file\",\n            {\n              title: \"Read File\",\n              description: \"Read a file from memory\",\n              inputSchema: {\n                path: z.string(),\n              },\n              annotations: {\n                title: \"Read File (Annotated)\",\n                readOnlyHint: true,\n                destructiveHint: false,\n                idempotentHint: true,\n                openWorldHint: false,\n              },\n              _meta: {\n                category: \"filesystem\",\n              },\n            },\n            async ({ path }: { path: string }) => ({\n              content: [{\n                type: \"text\",\n                text: `read:${path}`,\n              }],\n            }),\n          );\n\n          const transport = new StreamableHTTPServerTransport({\n            sessionIdGenerator: undefined,\n          });\n\n          return {\n            mcp,\n            transport,\n          };\n        };\n\n        const app = createMcpExpressApp({ host: \"127.0.0.1\" });\n\n        const handle = async (req: any, res: any, parsedBody?: unknown) => {\n          const { mcp, transport } = createServerForRequest();\n\n          try {\n            await mcp.connect(transport);\n            await transport.handleRequest(req, res, parsedBody);\n          } finally {\n            await transport.close().catch(() => undefined);\n            await mcp.close().catch(() => undefined);\n          }\n        };\n\n        app.post(\"/mcp\", async (req: any, res: any) => {\n          await handle(req, res, req.body);\n        });\n\n        app.get(\"/mcp\", async (req: any, res: any) => {\n          await handle(req, res);\n        });\n\n        app.delete(\"/mcp\", async (req: any, res: any) => {\n          await handle(req, res, req.body);\n        });\n\n        const listener = app.listen(0, \"127.0.0.1\", () => {\n          const address = listener.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"failed to resolve MCP adapter test server address\"));\n            return;\n          }\n\n          resolve({\n            endpoint: `http://127.0.0.1:${address.port}/mcp`,\n            close: async () => {\n              await new Promise<void>((closeResolve, closeReject) => {\n                listener.close((error: Error | undefined) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n                  closeResolve();\n                });\n              });\n            },\n          });\n        });\n\n        listener.once(\"error\", reject);\n      }),\n  ),\n  (server: RealMcpServer) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\nconst makeAuthenticatedMcpServer = (expectedAuthorization: string) =>\n  Effect.acquireRelease(\n    Effect.promise<RealMcpServer>(\n      () =>\n        new Promise<RealMcpServer>((resolve, reject) => {\n          const createServerForRequest = () => {\n            const mcp = new McpServer(\n              {\n                name: \"mcp-auth-adapter-test-server\",\n                version: \"1.0.0\",\n              },\n              {\n                capabilities: {\n                  tools: {\n                    listChanged: true,\n                  },\n                },\n              },\n            );\n\n            mcp.registerTool(\n              \"secure_echo\",\n              {\n                title: \"Secure Echo\",\n                description: \"Echoes a string after auth succeeds\",\n                inputSchema: {\n                  value: z.string(),\n                },\n              },\n              async ({ value }: { value: string }) => ({\n                content: [{\n                  type: \"text\",\n                  text: `secure:${value}`,\n                }],\n              }),\n            );\n\n            const transport = new StreamableHTTPServerTransport({\n              sessionIdGenerator: undefined,\n            });\n\n            return {\n              mcp,\n              transport,\n            };\n          };\n\n          const app = createMcpExpressApp({ host: \"127.0.0.1\" });\n\n          const handle = async (req: any, res: any, parsedBody?: unknown) => {\n            if (req.headers.authorization !== expectedAuthorization) {\n              res.status(401).json({\n                jsonrpc: \"2.0\",\n                error: {\n                  code: -32001,\n                  message: \"Unauthorized\",\n                },\n                id: null,\n              });\n              return;\n            }\n\n            const { mcp, transport } = createServerForRequest();\n            try {\n              await mcp.connect(transport);\n              await transport.handleRequest(req, res, parsedBody);\n            } finally {\n              await transport.close().catch(() => undefined);\n              await mcp.close().catch(() => undefined);\n            }\n          };\n\n          app.post(\"/mcp\", async (req: any, res: any) => {\n            await handle(req, res, req.body);\n          });\n\n          app.get(\"/mcp\", async (req: any, res: any) => {\n            await handle(req, res);\n          });\n\n          app.delete(\"/mcp\", async (req: any, res: any) => {\n            await handle(req, res, req.body);\n          });\n\n          const listener = app.listen(0, \"127.0.0.1\", () => {\n            const address = listener.address();\n            if (!address || typeof address === \"string\") {\n              reject(new Error(\"failed to resolve authenticated MCP test server address\"));\n              return;\n            }\n\n            resolve({\n              endpoint: `http://127.0.0.1:${address.port}/mcp`,\n              close: async () => {\n                await new Promise<void>((closeResolve, closeReject) => {\n                  listener.close((error: Error | undefined) => {\n                    if (error) {\n                      closeReject(error);\n                      return;\n                    }\n                    closeResolve();\n                  });\n                });\n              },\n            });\n          });\n\n          listener.once(\"error\", reject);\n        }),\n    ),\n    (server: RealMcpServer) =>\n      Effect.tryPromise({\n        try: () => server.close(),\n        catch: (error: unknown) =>\n          error instanceof Error ? error : new Error(String(error)),\n      }).pipe(Effect.orDie),\n  );\n\nconst makeStatefulMcpServer = Effect.acquireRelease(\n  Effect.promise<RealMcpServer>(\n    () =>\n      new Promise<RealMcpServer>((resolve, reject) => {\n        const transports: Record<string, StreamableHTTPServerTransport> = {};\n        const servers: Record<string, McpServer> = {};\n\n        const createServer = () => {\n          let counter = 0;\n          const mcp = new McpServer(\n            {\n              name: \"mcp-stateful-test-server\",\n              version: \"1.0.0\",\n            },\n            {\n              capabilities: {\n                tools: {\n                  listChanged: true,\n                },\n              },\n            },\n          );\n\n          mcp.registerTool(\n            \"increment_session\",\n            {\n              title: \"Increment Session\",\n              description: \"Increment session state\",\n              inputSchema: {},\n            },\n            async () => {\n              counter += 1;\n              return {\n                content: [{\n                  type: \"text\",\n                  text: String(counter),\n                }],\n              };\n            },\n          );\n\n          mcp.registerTool(\n            \"read_session\",\n            {\n              title: \"Read Session\",\n              description: \"Read current session state\",\n              inputSchema: {},\n            },\n            async () => ({\n              content: [{\n                type: \"text\",\n                text: String(counter),\n              }],\n            }),\n          );\n\n          return mcp;\n        };\n\n        const app = createMcpExpressApp({ host: \"127.0.0.1\" });\n\n        app.post(\"/mcp\", async (req: any, res: any) => {\n          const sessionIdHeader = req.headers[\"mcp-session-id\"];\n          const sessionId =\n            typeof sessionIdHeader === \"string\"\n              ? sessionIdHeader\n              : Array.isArray(sessionIdHeader)\n                ? sessionIdHeader[0]\n                : undefined;\n\n          try {\n            let transport: StreamableHTTPServerTransport;\n\n            if (sessionId && transports[sessionId]) {\n              transport = transports[sessionId];\n            } else {\n              transport = new StreamableHTTPServerTransport({\n                sessionIdGenerator: () => randomUUID(),\n                onsessioninitialized: (newSessionId) => {\n                  transports[newSessionId] = transport;\n                },\n              });\n\n              transport.onclose = () => {\n                const closedSessionId = transport.sessionId;\n                if (closedSessionId && transports[closedSessionId]) {\n                  delete transports[closedSessionId];\n                }\n                if (closedSessionId && servers[closedSessionId]) {\n                  void servers[closedSessionId].close().catch(() => undefined);\n                  delete servers[closedSessionId];\n                }\n              };\n\n              const server = createServer();\n              await server.connect(transport);\n              const newSessionId = transport.sessionId;\n              if (newSessionId) {\n                servers[newSessionId] = server;\n              }\n            }\n\n            await transport.handleRequest(req, res, req.body);\n          } catch (error) {\n            if (!res.headersSent) {\n              res.status(500).json({\n                jsonrpc: \"2.0\",\n                error: {\n                  code: -32603,\n                  message: error instanceof Error ? error.message : \"Internal server error\",\n                },\n                id: null,\n              });\n            }\n          }\n        });\n\n        app.get(\"/mcp\", async (req: any, res: any) => {\n          const sessionIdHeader = req.headers[\"mcp-session-id\"];\n          const sessionId =\n            typeof sessionIdHeader === \"string\"\n              ? sessionIdHeader\n              : Array.isArray(sessionIdHeader)\n                ? sessionIdHeader[0]\n                : undefined;\n\n          if (!sessionId || !transports[sessionId]) {\n            res.status(400).send(\"Invalid or missing session ID\");\n            return;\n          }\n\n          await transports[sessionId].handleRequest(req, res);\n        });\n\n        app.delete(\"/mcp\", async (req: any, res: any) => {\n          const sessionIdHeader = req.headers[\"mcp-session-id\"];\n          const sessionId =\n            typeof sessionIdHeader === \"string\"\n              ? sessionIdHeader\n              : Array.isArray(sessionIdHeader)\n                ? sessionIdHeader[0]\n                : undefined;\n\n          if (!sessionId || !transports[sessionId]) {\n            res.status(400).send(\"Invalid or missing session ID\");\n            return;\n          }\n\n          const transport = transports[sessionId];\n          await transport.handleRequest(req, res, req.body);\n          await transport.close();\n          delete transports[sessionId];\n\n          if (servers[sessionId]) {\n            await servers[sessionId].close().catch(() => undefined);\n            delete servers[sessionId];\n          }\n        });\n\n        const listener = app.listen(0, \"127.0.0.1\", () => {\n          const address = listener.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"failed to resolve stateful MCP test server address\"));\n            return;\n          }\n\n          resolve({\n            endpoint: `http://127.0.0.1:${address.port}/mcp`,\n            close: async () => {\n              for (const transport of Object.values(transports)) {\n                await transport.close().catch(() => undefined);\n              }\n              for (const server of Object.values(servers)) {\n                await server.close().catch(() => undefined);\n              }\n              await new Promise<void>((closeResolve, closeReject) => {\n                listener.close((error: Error | undefined) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n                  closeResolve();\n                });\n              });\n            },\n          });\n        });\n\n        listener.once(\"error\", reject);\n      }),\n  ),\n  (server: RealMcpServer) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\nconst STDIO_TEST_SERVER_SCRIPT = `\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { z } from \"zod/v4\";\n\nconst server = new McpServer(\n  { name: \"mcp-stdio-test-server\", version: \"1.0.0\" },\n  { capabilities: { tools: { listChanged: true } } },\n);\n\nserver.registerTool(\n  \"echo_stdio\",\n  {\n    title: \"Echo Stdio\",\n    description: \"Echo a value over stdio\",\n    inputSchema: {\n      value: z.string(),\n    },\n  },\n  async ({ value }) => ({\n    content: [{ type: \"text\", text: \"stdio:\" + value }],\n  }),\n);\n\nconst transport = new StdioServerTransport();\nawait server.connect(transport);\n`;\n\nconst makeStaticAuthProvider = (accessToken: string): OAuthClientProvider => ({\n  get redirectUrl() {\n    return \"http://127.0.0.1/oauth/callback\";\n  },\n  get clientMetadata() {\n    return {\n      redirect_uris: [\"http://127.0.0.1/oauth/callback\"],\n      grant_types: [\"authorization_code\", \"refresh_token\"],\n      response_types: [\"code\"],\n      token_endpoint_auth_method: \"none\",\n      client_name: \"Executor MCP Test\",\n    };\n  },\n  clientInformation: () => undefined,\n  saveClientInformation: async () => undefined,\n  tokens: async () => ({\n    access_token: accessToken,\n    token_type: \"Bearer\",\n  }),\n  saveTokens: async () => undefined,\n  redirectToAuthorization: async () => undefined,\n  saveCodeVerifier: () => undefined,\n  codeVerifier: () => \"unused\",\n  saveDiscoveryState: async () => undefined,\n  discoveryState: () => undefined,\n});\n\ndescribe(\"mcp source adapter\", () => {\n  it.scoped(\"syncs MCP annotations and introspection metadata into snapshot\", () =>\n    Effect.gen(function* () {\n      const realServer = yield* makeRealMcpServer;\n      const source = yield* createSourceFromPayload({\n        workspaceId: \"ws_test\" as any,\n        sourceId: SourceIdSchema.make(`src_${randomUUID()}`),\n        payload: {\n          name: \"MCP Demo\",\n          kind: \"mcp\",\n          endpoint: realServer.endpoint,\n          namespace: \"mcp.demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          importAuthPolicy: \"reuse_runtime\",\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n          status: \"connected\",\n          enabled: true,\n        },\n        now: Date.now(),\n      });\n\n      const syncResult = yield* mcpSourceAdapter.syncCatalog({\n        source,\n        resolveSecretMaterial: () =>\n          Effect.fail(runtimeEffectError(\"sources/source-adapters/mcp.test\", \"unexpected secret lookup\")),\n        resolveAuthMaterialForSlot: () =>\n          Effect.succeed({\n            placements: [],\n            headers: {},\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n          refreshAfter: null,\n        }),\n      });\n      const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n\n      const capability = Object.values(snapshot.catalog.capabilities)[0]!;\n      const executable = Object.values(snapshot.catalog.executables)[0]!;\n      const document = Object.values(snapshot.catalog.documents)[0]!;\n      const rawManifest = document.native?.[0]?.value;\n\n      expect(capability.surface.title).toBe(\"Read File\");\n      expect(capability.semantics).toMatchObject({\n        effect: \"read\",\n        safe: true,\n        idempotent: true,\n        destructive: false,\n      });\n      expect(capability.native).toBeUndefined();\n      expect(executable.native).toBeUndefined();\n\n      expect(typeof rawManifest).toBe(\"string\");\n      const manifest = JSON.parse(rawManifest as string) as {\n        server?: {\n          info?: {\n            name?: string;\n          };\n        };\n        tools?: Array<Record<string, unknown>>;\n        listTools?: {\n          rawResult?: {\n            tools?: Array<Record<string, unknown>>;\n          };\n        };\n      };\n\n      expect(manifest.server?.info?.name).toBe(\"mcp-adapter-test-server\");\n      expect(manifest.tools?.[0]).toMatchObject({\n        displayTitle: \"Read File\",\n        annotations: {\n          readOnlyHint: true,\n        },\n      });\n      expect(manifest.listTools?.rawResult?.tools?.[0]).toMatchObject({\n        title: \"Read File\",\n        _meta: {\n          category: \"filesystem\",\n        },\n      });\n    }),\n  );\n\n  it.scoped(\"executes persisted MCP tools with normalized response envelopes\", () =>\n    Effect.gen(function* () {\n      const realServer = yield* makeRealMcpServer;\n      const source = yield* createSourceFromPayload({\n        workspaceId: \"ws_test\" as any,\n        sourceId: SourceIdSchema.make(`src_${randomUUID()}`),\n        payload: {\n          name: \"MCP Demo\",\n          kind: \"mcp\",\n          endpoint: realServer.endpoint,\n          namespace: \"mcp.demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          importAuthPolicy: \"reuse_runtime\",\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n          status: \"connected\",\n          enabled: true,\n        },\n        now: Date.now(),\n      });\n\n      const syncResult = yield* mcpSourceAdapter.syncCatalog({\n        source,\n        resolveSecretMaterial: () =>\n          Effect.fail(runtimeEffectError(\"sources/source-adapters/mcp.test\", \"unexpected secret lookup\")),\n        resolveAuthMaterialForSlot: () =>\n          Effect.succeed({\n            placements: [],\n            headers: {},\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n          refreshAfter: null,\n        }),\n      });\n      const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n\n      const tool = yield* expandCatalogToolByPath({\n        catalogs: [makeLoadedCatalog({\n          source,\n          snapshot,\n        })],\n        path: \"mcp.demo.read_file\",\n      });\n\n      if (!tool) {\n        throw new Error(\"Expected MCP persisted tool to resolve\");\n      }\n\n      const result = yield* invokeIrTool({\n        workspaceId: source.workspaceId,\n        accountId: \"acct_test\" as any,\n        tool,\n        auth: {\n          placements: [],\n          headers: {},\n          queryParams: {},\n          cookies: {},\n          bodyValues: {},\n          expiresAt: null,\n          refreshAfter: null,\n        },\n        args: {\n          path: \"/tmp/demo.txt\",\n        },\n      });\n\n      expect(result).toEqual({\n        data: {\n          content: [{\n            type: \"text\",\n            text: \"read:/tmp/demo.txt\",\n          }],\n        },\n        error: null,\n        headers: {},\n        status: null,\n      });\n    }),\n  );\n\n  it.scoped(\"passes OAuth client providers through MCP sync and execution reconnects\", () =>\n    Effect.gen(function* () {\n      const realServer = yield* makeAuthenticatedMcpServer(\"Bearer mcp-auth-token\");\n      const authProvider = makeStaticAuthProvider(\"mcp-auth-token\");\n      const source = yield* createSourceFromPayload({\n        workspaceId: \"ws_test\" as any,\n        sourceId: SourceIdSchema.make(`src_${randomUUID()}`),\n        payload: {\n          name: \"Authenticated MCP Demo\",\n          kind: \"mcp\",\n          endpoint: realServer.endpoint,\n          namespace: \"mcp.auth.demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          importAuthPolicy: \"reuse_runtime\",\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n          status: \"connected\",\n          enabled: true,\n        },\n        now: Date.now(),\n      });\n\n      const resolvedAuth = {\n        placements: [],\n        headers: {},\n        queryParams: {},\n        cookies: {},\n        bodyValues: {},\n        expiresAt: null,\n        refreshAfter: null,\n        authProvider,\n      } as const;\n\n      const syncResult = yield* mcpSourceAdapter.syncCatalog({\n        source,\n        resolveSecretMaterial: () =>\n          Effect.fail(runtimeEffectError(\"sources/source-adapters/mcp.test\", \"unexpected secret lookup\")),\n        resolveAuthMaterialForSlot: () => Effect.succeed(resolvedAuth),\n      });\n      const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n\n      const tool = yield* expandCatalogToolByPath({\n        catalogs: [makeLoadedCatalog({\n          source,\n          snapshot,\n        })],\n        path: \"mcp.auth.demo.secure_echo\",\n      });\n\n      if (!tool) {\n        throw new Error(\"Expected authenticated MCP tool to resolve\");\n      }\n\n      const result = yield* invokeIrTool({\n        workspaceId: source.workspaceId,\n        accountId: \"acct_test\" as any,\n        tool,\n        auth: resolvedAuth,\n        args: {\n          value: \"ok\",\n        },\n      });\n\n      expect(result).toEqual({\n        data: {\n          content: [{\n            type: \"text\",\n            text: \"secure:ok\",\n          }],\n        },\n        error: null,\n        headers: {},\n        status: null,\n      });\n    }),\n  );\n\n  it.scoped(\"reuses a stateful MCP session across invocations in the same run\", () =>\n    Effect.gen(function* () {\n      const realServer = yield* makeStatefulMcpServer;\n      const source = yield* createSourceFromPayload({\n        workspaceId: \"ws_test\" as any,\n        sourceId: SourceIdSchema.make(`src_${randomUUID()}`),\n        payload: {\n          name: \"Stateful MCP Demo\",\n          kind: \"mcp\",\n          endpoint: realServer.endpoint,\n          namespace: \"mcp.stateful.demo\",\n          binding: {\n            transport: \"streamable-http\",\n            queryParams: null,\n            headers: null,\n          },\n          importAuthPolicy: \"reuse_runtime\",\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n          status: \"connected\",\n          enabled: true,\n        },\n        now: Date.now(),\n      });\n\n      const syncResult = yield* mcpSourceAdapter.syncCatalog({\n        source,\n        resolveSecretMaterial: () =>\n          Effect.fail(runtimeEffectError(\"sources/source-adapters/mcp.test\", \"unexpected secret lookup\")),\n        resolveAuthMaterialForSlot: () =>\n          Effect.succeed({\n            placements: [],\n            headers: {},\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n            refreshAfter: null,\n          }),\n      });\n      const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n      const catalog = makeLoadedCatalog({\n        source,\n        snapshot,\n      });\n\n      const incrementTool = yield* expandCatalogToolByPath({\n        catalogs: [catalog],\n        path: \"mcp.stateful.demo.increment_session\",\n      });\n      const readTool = yield* expandCatalogToolByPath({\n        catalogs: [catalog],\n        path: \"mcp.stateful.demo.read_session\",\n      });\n\n      if (!incrementTool || !readTool) {\n        throw new Error(\"Expected stateful MCP tools to resolve\");\n      }\n\n      const incrementResult = yield* invokeIrTool({\n        workspaceId: source.workspaceId,\n        accountId: \"acct_test\" as any,\n        tool: incrementTool,\n        auth: {\n          placements: [],\n          headers: {},\n          queryParams: {},\n          cookies: {},\n          bodyValues: {},\n          expiresAt: null,\n          refreshAfter: null,\n        },\n        args: {},\n        context: {\n          runId: \"exec_mcp_stateful\",\n        },\n      });\n\n      const readResult = yield* invokeIrTool({\n        workspaceId: source.workspaceId,\n        accountId: \"acct_test\" as any,\n        tool: readTool,\n        auth: {\n          placements: [],\n          headers: {},\n          queryParams: {},\n          cookies: {},\n          bodyValues: {},\n          expiresAt: null,\n          refreshAfter: null,\n        },\n        args: {},\n        context: {\n          runId: \"exec_mcp_stateful\",\n        },\n      });\n\n      expect(incrementResult).toEqual({\n        data: {\n          content: [{\n            type: \"text\",\n            text: \"1\",\n          }],\n        },\n        error: null,\n        headers: {},\n        status: null,\n      });\n      expect(readResult).toEqual({\n        data: {\n          content: [{\n            type: \"text\",\n            text: \"1\",\n          }],\n        },\n        error: null,\n        headers: {},\n        status: null,\n      });\n    }),\n  );\n\n  it.scoped(\"supports stdio MCP sources\", () =>\n    Effect.gen(function* () {\n      const source = yield* createSourceFromPayload({\n        workspaceId: \"ws_test\" as any,\n        sourceId: SourceIdSchema.make(`src_${randomUUID()}`),\n        payload: {\n          name: \"Stdio MCP Demo\",\n          kind: \"mcp\",\n          endpoint: \"stdio://local/mcp-stdio-demo\",\n          namespace: \"mcp.stdio.demo\",\n          binding: {\n            transport: \"stdio\",\n            queryParams: null,\n            headers: null,\n            command: \"node\",\n            args: [\"--input-type=module\", \"-e\", STDIO_TEST_SERVER_SCRIPT],\n            env: null,\n            cwd: process.cwd(),\n          },\n          importAuthPolicy: \"reuse_runtime\",\n          importAuth: { kind: \"none\" },\n          auth: { kind: \"none\" },\n          status: \"connected\",\n          enabled: true,\n        },\n        now: Date.now(),\n      });\n\n      const syncResult = yield* mcpSourceAdapter.syncCatalog({\n        source,\n        resolveSecretMaterial: () =>\n          Effect.fail(runtimeEffectError(\"sources/source-adapters/mcp.test\", \"unexpected secret lookup\")),\n        resolveAuthMaterialForSlot: () =>\n          Effect.succeed({\n            placements: [],\n            headers: {},\n            queryParams: {},\n            cookies: {},\n            bodyValues: {},\n            expiresAt: null,\n            refreshAfter: null,\n          }),\n      });\n      const snapshot = snapshotFromSourceCatalogSyncResult(syncResult);\n\n      const tool = yield* expandCatalogToolByPath({\n        catalogs: [makeLoadedCatalog({\n          source,\n          snapshot,\n        })],\n        path: \"mcp.stdio.demo.echo_stdio\",\n      });\n\n      if (!tool) {\n        throw new Error(\"Expected stdio MCP tool to resolve\");\n      }\n\n      const result = yield* invokeIrTool({\n        workspaceId: source.workspaceId,\n        accountId: \"acct_test\" as any,\n        tool,\n        auth: {\n          placements: [],\n          headers: {},\n          queryParams: {},\n          cookies: {},\n          bodyValues: {},\n          expiresAt: null,\n          refreshAfter: null,\n        },\n        args: {\n          value: \"ok\",\n        },\n        context: {\n          runId: \"exec_mcp_stdio\",\n        },\n      });\n\n      expect(result).toEqual({\n        data: {\n          content: [{\n            type: \"text\",\n            text: \"stdio:ok\",\n          }],\n        },\n        error: null,\n        headers: {},\n        status: null,\n      });\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/mcp.ts",
    "content": "export * from \"@executor/source-mcp\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/openapi.ts",
    "content": "export * from \"@executor/source-openapi\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/shared.ts",
    "content": "export * from \"@executor/source-core\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-adapters/types.ts",
    "content": "export type * from \"@executor/source-core\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-auth-service.ts",
    "content": "import {\n  createSdkMcpConnector,\n  discoverMcpToolsFromConnector,\n  isMcpStdioTransport,\n  type McpDiscoveryElicitationContext,\n} from \"@executor/source-mcp\";\nimport {\n  isSourceCredentialRequiredError,\n  type SourceAdapterOauth2SetupConfig,\n} from \"@executor/source-core\";\nimport {\n  AccountId,\n  type CredentialSlot,\n  McpSourceAuthSessionDataJsonSchema,\n  type McpSourceAuthSessionData,\n  OAuth2PkceSourceAuthSessionDataJsonSchema,\n  type OAuth2PkceSourceAuthSessionData,\n  type ProviderAuthGrant,\n  ProviderAuthGrantIdSchema,\n  ProviderOauthBatchSourceAuthSessionDataJsonSchema,\n  type ProviderOauthBatchSourceAuthSessionData,\n  type SecretMaterialPurpose,\n  Source,\n  type SourceImportAuthPolicy,\n  type SourceTransport,\n  SourceAuthSession,\n  SourceAuthSessionIdSchema,\n  SourceIdSchema,\n  type SourceOauthClientInput,\n  SourceSchema,\n  type SecretRef,\n  type StringMap,\n  WorkspaceOauthClientIdSchema,\n  WorkspaceSourceOauthClientIdSchema,\n  WorkspaceSourceOauthClientMetadataJsonSchema,\n  type WorkspaceOauthClient,\n  type WorkspaceSourceOauthClientRedirectMode,\n  type WorkspaceId,\n} from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Option from \"effect/Option\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  LiveExecutionManagerService,\n  sanitizePersistedElicitationResponse,\n  type LiveExecutionManager,\n} from \"../execution/live\";\nimport {\n  getRuntimeLocalWorkspaceOption,\n  provideOptionalRuntimeLocalWorkspace,\n  type RuntimeLocalWorkspaceState,\n} from \"../local/runtime-context\";\nimport {\n  exchangeMcpOAuthAuthorizationCode,\n  startMcpOAuthAuthorization,\n} from \"../auth/mcp-oauth\";\nimport { createPersistedMcpOAuthSourceAuth } from \"../auth/mcp-auth-provider\";\nimport {\n  createSourceFromPayload,\n  updateSourceFromPayload,\n} from \"./source-definitions\";\nimport {\n  findSourceAdapterByProviderKey,\n  getSourceAdapter,\n  getSourceAdapterForSource,\n  sourceAdapterRequiresInteractiveConnect,\n  sourceAdapterUsesCredentialManagedAuth,\n  sourceBindingStateFromSource,\n} from \"./source-adapters\";\nimport {\n  createDefaultSecretMaterialDeleter,\n  type ResolveSecretMaterial,\n  SecretMaterialResolverService,\n  SecretMaterialStorerService,\n  type StoreSecretMaterial,\n} from \"../local/secret-material-providers\";\nimport {\n  removeAuthLeaseAndSecrets,\n  upsertOauth2AuthorizedUserLeaseFromTokenResponse,\n} from \"../auth/auth-leases\";\nimport {\n  listProviderGrantRefArtifacts,\n  removeProviderAuthGrantSecret,\n} from \"../auth/provider-grant-lifecycle\";\nimport {\n  RuntimeSourceCatalogSyncService,\n  type RuntimeSourceCatalogSyncShape,\n} from \"../catalog/source/sync\";\nimport {\n  buildOAuth2AuthorizationUrl,\n  createPkceCodeVerifier,\n  exchangeOAuth2AuthorizationCode,\n} from \"../auth/oauth2-pkce\";\nimport { startOauthLoopbackRedirectServer } from \"../auth/oauth-loopback\";\nimport {\n  type RuntimeSourceStore,\n  RuntimeSourceStoreService,\n} from \"./source-store\";\nimport type { WorkspaceStorageServices } from \"../local/storage\";\nimport { ControlPlaneStore, type ControlPlaneStoreShape } from \"../store\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nconst trimOrNull = (value: string | null | undefined): string | null => {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nconst defaultSourceNameFromEndpoint = (endpoint: string): string => {\n  const url = new URL(endpoint);\n  return url.hostname;\n};\n\nconst defaultNamespaceFromName = (name: string): string => {\n  const normalized = name\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \".\")\n    .replace(/^\\.+|\\.+$/g, \"\");\n\n  return normalized.length > 0 ? normalized : \"source\";\n};\n\nconst defaultSourceNameFromCommand = (command: string): string => {\n  const segments = command\n    .split(/[\\\\/]+/)\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\n  return segments[segments.length - 1] ?? command;\n};\n\nconst normalizeStringArray = (\n  value: ReadonlyArray<string> | null | undefined,\n): string[] | null => {\n  if (!value || value.length === 0) {\n    return null;\n  }\n\n  const normalized = value\n    .map((entry) => entry.trim())\n    .filter((entry) => entry.length > 0);\n\n  return normalized.length > 0 ? normalized : null;\n};\n\nconst slugifySourceLabel = (value: string): string => {\n  const normalized = value\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"-\")\n    .replace(/^-+|-+$/g, \"\");\n\n  return normalized.length > 0 ? normalized : \"mcp\";\n};\n\nconst createSyntheticMcpStdioEndpoint = (input: {\n  endpoint?: string | null;\n  name?: string | null;\n  command?: string | null;\n}): string => {\n  const label =\n    trimOrNull(input.name) ??\n    trimOrNull(input.endpoint) ??\n    trimOrNull(input.command) ??\n    \"mcp\";\n\n  return `stdio://local/${slugifySourceLabel(label)}`;\n};\n\nconst normalizeMcpEndpoint = (input: {\n  endpoint?: string | null;\n  transport?: SourceTransport | null;\n  command?: string | null;\n  name?: string | null;\n}): string => {\n  if (isMcpStdioTransport({ transport: input.transport ?? undefined, command: input.command ?? undefined })) {\n    return normalizeEndpoint(\n      trimOrNull(input.endpoint) ?? createSyntheticMcpStdioEndpoint(input),\n    );\n  }\n\n  const endpoint = trimOrNull(input.endpoint);\n  if (endpoint === null) {\n    throw new Error(\"Endpoint is required.\");\n  }\n\n  return normalizeEndpoint(endpoint);\n};\n\nconst resolveSourceCredentialOauthCompleteUrl = (input: {\n  baseUrl: string;\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n}): string =>\n  new URL(\n    `/v1/workspaces/${encodeURIComponent(input.workspaceId)}/sources/${encodeURIComponent(input.sourceId)}/credentials/oauth/complete`,\n    input.baseUrl,\n  ).toString();\n\nconst resolveSourceOAuthCallbackUrl = (input: {\n  baseUrl: string;\n}): string =>\n  new URL(\n    \"/v1/oauth/source-auth/callback\",\n    input.baseUrl,\n  ).toString();\n\nconst resolveWorkspaceProviderOauthCompleteUrl = (input: {\n  baseUrl: string;\n  workspaceId: WorkspaceId;\n}): string =>\n  new URL(\n    `/v1/workspaces/${encodeURIComponent(input.workspaceId)}/oauth/provider/callback`,\n    input.baseUrl,\n  ).toString();\n\nfunction normalizeEndpoint(endpoint: string): string {\n  const url = new URL(endpoint.trim());\n  return url.toString();\n}\n\nconst defaultGoogleDiscoveryUrl = (service: string, version: string): string =>\n  `https://www.googleapis.com/discovery/v1/apis/${encodeURIComponent(service)}/${encodeURIComponent(version)}/rest`;\n\nconst defaultGoogleDiscoverySourceName = (service: string, version: string): string => {\n  const titleService = service\n    .split(/[^a-zA-Z0-9]+/)\n    .filter(Boolean)\n    .map((segment) => segment[0]?.toUpperCase() + segment.slice(1))\n    .join(\" \");\n\n  return `Google ${titleService || service} ${version}`;\n};\n\nconst defaultGoogleDiscoveryNamespace = (service: string): string =>\n  `google.${service.trim().toLowerCase().replace(/[^a-z0-9]+/g, \".\").replace(/^\\.+|\\.+$/g, \"\")}`;\n\nconst SourceOAuthSessionStatePayloadSchema = Schema.Struct({\n  kind: Schema.Literal(\"source_oauth\"),\n  nonce: Schema.String,\n  displayName: Schema.NullOr(Schema.String),\n});\n\nconst encodeSourceOAuthSessionStatePayload = Schema.encodeSync(\n  Schema.parseJson(SourceOAuthSessionStatePayloadSchema),\n);\n\nconst decodeSourceOAuthSessionStatePayloadOption = Schema.decodeUnknownOption(\n  Schema.parseJson(SourceOAuthSessionStatePayloadSchema),\n);\n\nconst createSourceOAuthSessionState = (input: {\n  displayName?: string | null;\n}): string =>\n  encodeSourceOAuthSessionStatePayload({\n    kind: \"source_oauth\",\n    nonce: crypto.randomUUID(),\n    displayName: trimOrNull(input.displayName),\n  });\n\nconst readSourceOAuthSessionDisplayName = (state: string): string | null => {\n  const decoded = decodeSourceOAuthSessionStatePayloadOption(state);\n  return Option.isSome(decoded) ? trimOrNull(decoded.value.displayName) : null;\n};\n\nconst resolveSourceOAuthSecretName = (input: {\n  displayName?: string | null;\n  endpoint: string;\n}): string => {\n  const sourceName = trimOrNull(input.displayName) ?? defaultSourceNameFromEndpoint(input.endpoint);\n  return /\\boauth\\b/i.test(sourceName) ? sourceName : `${sourceName} OAuth`;\n};\n\nconst probeMcpSourceWithoutAuth = (\n  source: Source,\n  mcpDiscoveryElicitation?: McpDiscoveryElicitationContext,\n) =>\n  Effect.gen(function* () {\n    if (!sourceAdapterRequiresInteractiveConnect(source.kind)) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", `Expected MCP source, received ${source.kind}`);\n    }\n    const bindingState = yield* sourceBindingStateFromSource(source);\n\n    const connector = createSdkMcpConnector({\n      endpoint: source.endpoint,\n      transport: bindingState.transport ?? undefined,\n      queryParams: bindingState.queryParams ?? undefined,\n      headers: bindingState.headers ?? undefined,\n      command: bindingState.command ?? undefined,\n      args: bindingState.args ?? undefined,\n      env: bindingState.env ?? undefined,\n      cwd: bindingState.cwd ?? undefined,\n    });\n\n    return yield* discoverMcpToolsFromConnector({\n      connect: connector,\n      namespace: source.namespace ?? defaultNamespaceFromName(source.name),\n      sourceKey: source.id,\n      mcpDiscoveryElicitation,\n    });\n  });\n\nexport const createTerminalSourceAuthSessionPatch = (input: {\n  sessionDataJson: string;\n  status: Extract<SourceAuthSession[\"status\"], \"completed\" | \"failed\" | \"cancelled\">;\n  now: number;\n  errorText: string | null;\n}) => ({\n  status: input.status,\n  errorText: input.errorText,\n  completedAt: input.now,\n  updatedAt: input.now,\n  sessionDataJson: input.sessionDataJson,\n}) satisfies Partial<SourceAuthSession>;\n\nconst encodeMcpSourceAuthSessionData = (\n  sessionData: McpSourceAuthSessionData,\n): string => Schema.encodeSync(McpSourceAuthSessionDataJsonSchema)(sessionData);\n\nconst decodeMcpSourceAuthSessionDataJson = Schema.decodeUnknownEither(\n  McpSourceAuthSessionDataJsonSchema,\n);\n\nconst decodeMcpSourceAuthSessionData = (\n  session: Pick<SourceAuthSession, \"id\" | \"providerKind\" | \"sessionDataJson\">,\n): McpSourceAuthSessionData => {\n  if (session.providerKind !== \"mcp_oauth\") {\n    throw new Error(`Unsupported source auth provider for session ${session.id}`);\n  }\n\n  const decoded = decodeMcpSourceAuthSessionDataJson(session.sessionDataJson);\n  if (Either.isLeft(decoded)) {\n    throw new Error(\n      `Invalid source auth session data for ${session.id}: ${ParseResult.TreeFormatter.formatErrorSync(decoded.left)}`,\n    );\n  }\n\n  return decoded.right;\n};\n\nconst mergeMcpSourceAuthSessionData = (input: {\n  session: Pick<SourceAuthSession, \"id\" | \"providerKind\" | \"sessionDataJson\">;\n  patch: Partial<McpSourceAuthSessionData>;\n}): string => {\n  const existing = decodeMcpSourceAuthSessionData(input.session);\n  return encodeMcpSourceAuthSessionData({\n    ...existing,\n    ...input.patch,\n  });\n};\n\nconst encodeOauth2PkceSourceAuthSessionData = (\n  sessionData: OAuth2PkceSourceAuthSessionData,\n): string => Schema.encodeSync(OAuth2PkceSourceAuthSessionDataJsonSchema)(sessionData);\n\nconst decodeOauth2PkceSourceAuthSessionDataJson = Schema.decodeUnknownEither(\n  OAuth2PkceSourceAuthSessionDataJsonSchema,\n);\n\nconst decodeOauth2PkceSourceAuthSessionData = (\n  session: Pick<SourceAuthSession, \"id\" | \"providerKind\" | \"sessionDataJson\">,\n): OAuth2PkceSourceAuthSessionData => {\n  if (session.providerKind !== \"oauth2_pkce\") {\n    throw new Error(`Unsupported source auth provider for session ${session.id}`);\n  }\n\n  const decoded = decodeOauth2PkceSourceAuthSessionDataJson(session.sessionDataJson);\n  if (Either.isLeft(decoded)) {\n    throw new Error(\n      `Invalid source auth session data for ${session.id}: ${ParseResult.TreeFormatter.formatErrorSync(decoded.left)}`,\n    );\n  }\n\n  return decoded.right;\n};\n\nconst mergeOauth2PkceSourceAuthSessionData = (input: {\n  session: Pick<SourceAuthSession, \"id\" | \"providerKind\" | \"sessionDataJson\">;\n  patch: Partial<OAuth2PkceSourceAuthSessionData>;\n}): string => {\n  const existing = decodeOauth2PkceSourceAuthSessionData(input.session);\n  return encodeOauth2PkceSourceAuthSessionData({\n    ...existing,\n    ...input.patch,\n  });\n};\n\nconst encodeProviderOauthBatchSourceAuthSessionData = (\n  sessionData: ProviderOauthBatchSourceAuthSessionData,\n): string => Schema.encodeSync(ProviderOauthBatchSourceAuthSessionDataJsonSchema)(sessionData);\n\nconst decodeProviderOauthBatchSourceAuthSessionDataJson = Schema.decodeUnknownEither(\n  ProviderOauthBatchSourceAuthSessionDataJsonSchema,\n);\n\nconst decodeProviderOauthBatchSourceAuthSessionData = (\n  session: Pick<SourceAuthSession, \"id\" | \"providerKind\" | \"sessionDataJson\">,\n): ProviderOauthBatchSourceAuthSessionData => {\n  if (session.providerKind !== \"oauth2_provider_batch\") {\n    throw new Error(`Unsupported source auth provider for session ${session.id}`);\n  }\n\n  const decoded = decodeProviderOauthBatchSourceAuthSessionDataJson(session.sessionDataJson);\n  if (Either.isLeft(decoded)) {\n    throw new Error(\n      `Invalid source auth session data for ${session.id}: ${ParseResult.TreeFormatter.formatErrorSync(decoded.left)}`,\n    );\n  }\n\n  return decoded.right;\n};\n\nconst mergeProviderOauthBatchSourceAuthSessionData = (input: {\n  session: Pick<SourceAuthSession, \"id\" | \"providerKind\" | \"sessionDataJson\">;\n  patch: Partial<ProviderOauthBatchSourceAuthSessionData>;\n}): string => {\n  const existing = decodeProviderOauthBatchSourceAuthSessionData(input.session);\n  return encodeProviderOauthBatchSourceAuthSessionData({\n    ...existing,\n    ...input.patch,\n  });\n};\n\n\nconst completeLiveInteraction = (input: {\n  rows: ControlPlaneStoreShape;\n  liveExecutionManager: LiveExecutionManager;\n  session: SourceAuthSession;\n  response: {\n    action: \"accept\" | \"cancel\";\n    reason?: string;\n  };\n}) =>\n  Effect.gen(function* () {\n    if (input.session.executionId === null) {\n      return;\n    }\n\n    const response =\n      input.response.action === \"accept\"\n        ? { action: \"accept\" as const }\n        : {\n            action: \"cancel\" as const,\n            ...(input.response.reason\n              ? {\n                  content: {\n                    reason: input.response.reason,\n                  },\n                }\n              : {}),\n          };\n\n    const resumed = yield* input.liveExecutionManager.resolveInteraction({\n      executionId: input.session.executionId,\n      response,\n    });\n\n    if (!resumed) {\n      const pendingInteraction = yield* input.rows.executionInteractions\n        .getPendingByExecutionId(input.session.executionId);\n\n      if (Option.isSome(pendingInteraction)) {\n        yield* input.rows.executionInteractions.update(pendingInteraction.value.id, {\n          status: response.action === \"cancel\" ? \"cancelled\" : \"resolved\",\n          responseJson: serializeJson(\n            sanitizePersistedElicitationResponse(response),\n          ),\n          responsePrivateJson: serializeJson(response),\n          updatedAt: Date.now(),\n        });\n      }\n    }\n  });\n\nconst serializeJson = (value: unknown): string | null => {\n  if (value === undefined) {\n    return null;\n  }\n\n  return JSON.stringify(value);\n};\n\nconst updateSourceStatus = Effect.fn(\"source.status.update\")((sourceStore: RuntimeSourceStore, source: Source, input: {\n  actorAccountId?: AccountId | null;\n  status: Source[\"status\"];\n  lastError?: string | null;\n  auth?: Source[\"auth\"];\n  importAuth?: Source[\"importAuth\"];\n}) =>\n  Effect.gen(function* () {\n    const latest = yield* sourceStore.loadSourceById({\n      workspaceId: source.workspaceId,\n      sourceId: source.id,\n      actorAccountId: input.actorAccountId,\n    });\n\n    return yield* sourceStore.persistSource({\n      ...latest,\n      status: input.status,\n      lastError: input.lastError ?? null,\n      auth: input.auth ?? latest.auth,\n      importAuth: input.importAuth ?? latest.importAuth,\n      updatedAt: Date.now(),\n    }, {\n      actorAccountId: input.actorAccountId,\n    });\n  }).pipe(\n    Effect.withSpan(\"source.status.update\", {\n      attributes: {\n        \"executor.source.id\": source.id,\n        \"executor.source.status\": input.status,\n      },\n    }),\n  ));\n\nexport type ExecutorSourceAddResult =\n  | {\n      kind: \"connected\";\n      source: Source;\n    }\n  | {\n      kind: \"credential_required\";\n      source: Source;\n      credentialSlot: CredentialSlot;\n    }\n  | {\n      kind: \"oauth_required\";\n      source: Source;\n      sessionId: SourceAuthSession[\"id\"];\n      authorizationUrl: string;\n    };\n\nexport type ExecutorHttpSourceAuthInput =\n  | {\n      kind: \"none\";\n    }\n  | {\n      kind: \"bearer\";\n      headerName?: string | null;\n      prefix?: string | null;\n      token?: string | null;\n      tokenRef?: SecretRef | null;\n    }\n  | {\n      kind: \"oauth2\";\n      headerName?: string | null;\n      prefix?: string | null;\n      accessToken?: string | null;\n      accessTokenRef?: SecretRef | null;\n      refreshToken?: string | null;\n      refreshTokenRef?: SecretRef | null;\n    };\n\nexport type ExecutorAddSourceInput =\n  | {\n      kind?: \"mcp\";\n      workspaceId: WorkspaceId;\n      actorAccountId?: AccountId | null;\n      executionId: SourceAuthSession[\"executionId\"];\n      interactionId: SourceAuthSession[\"interactionId\"];\n      endpoint?: string | null;\n      name?: string | null;\n      namespace?: string | null;\n      transport?: SourceTransport | null;\n      queryParams?: StringMap | null;\n      headers?: StringMap | null;\n      command?: string | null;\n      args?: ReadonlyArray<string> | null;\n      env?: StringMap | null;\n      cwd?: string | null;\n    }\n  | {\n      kind: \"openapi\";\n      workspaceId: WorkspaceId;\n      actorAccountId?: AccountId | null;\n      executionId: SourceAuthSession[\"executionId\"];\n      interactionId: SourceAuthSession[\"interactionId\"];\n      endpoint: string;\n      specUrl: string;\n      name?: string | null;\n      namespace?: string | null;\n      importAuthPolicy?: SourceImportAuthPolicy | null;\n      importAuth?: ExecutorHttpSourceAuthInput | null;\n      auth?: ExecutorHttpSourceAuthInput | null;\n    }\n  | {\n      kind: \"graphql\";\n      workspaceId: WorkspaceId;\n      actorAccountId?: AccountId | null;\n      executionId: SourceAuthSession[\"executionId\"];\n      interactionId: SourceAuthSession[\"interactionId\"];\n      endpoint: string;\n      name?: string | null;\n      namespace?: string | null;\n      importAuthPolicy?: SourceImportAuthPolicy | null;\n      importAuth?: ExecutorHttpSourceAuthInput | null;\n      auth?: ExecutorHttpSourceAuthInput | null;\n    }\n  | {\n      kind: \"google_discovery\";\n      workspaceId: WorkspaceId;\n      actorAccountId?: AccountId | null;\n      executionId: SourceAuthSession[\"executionId\"];\n      interactionId: SourceAuthSession[\"interactionId\"];\n      service: string;\n      version: string;\n      discoveryUrl?: string | null;\n      scopes?: ReadonlyArray<string> | null;\n      workspaceOauthClientId?: WorkspaceOauthClient[\"id\"] | null;\n      oauthClient?: SourceOauthClientInput | null;\n      name?: string | null;\n      namespace?: string | null;\n      importAuthPolicy?: SourceImportAuthPolicy | null;\n      importAuth?: ExecutorHttpSourceAuthInput | null;\n      auth?: ExecutorHttpSourceAuthInput | null;\n    };\n\nexport type ExecutorCredentialManagedSourceInput = Extract<\n  ExecutorAddSourceInput,\n  { kind: string }\n>;\n\nexport type ExecutorHttpEndpointSourceInput = Extract<\n  ExecutorCredentialManagedSourceInput,\n  { endpoint: string }\n>;\n\nexport type ExecutorMcpSourceInput = Exclude<\n  ExecutorAddSourceInput,\n  ExecutorCredentialManagedSourceInput\n>;\n\nexport type ConnectMcpSourceInput = {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  sourceId?: Source[\"id\"] | null;\n  endpoint?: string | null;\n  name?: string | null;\n  namespace?: string | null;\n  enabled?: boolean;\n  transport?: SourceTransport | null;\n  queryParams?: StringMap | null;\n  headers?: StringMap | null;\n  command?: string | null;\n  args?: ReadonlyArray<string> | null;\n  env?: StringMap | null;\n  cwd?: string | null;\n  baseUrl?: string | null;\n};\n\nexport type ConnectGoogleDiscoveryBatchInput = {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  executionId: SourceAuthSession[\"executionId\"];\n  interactionId: SourceAuthSession[\"interactionId\"];\n  workspaceOauthClientId: WorkspaceOauthClient[\"id\"];\n  sources: ReadonlyArray<{\n    service: string;\n    version: string;\n    discoveryUrl?: string | null;\n    scopes?: ReadonlyArray<string> | null;\n    name?: string | null;\n    namespace?: string | null;\n  }>;\n  baseUrl?: string | null;\n};\n\nexport type ConnectGoogleDiscoveryBatchResult = {\n  results: ReadonlyArray<{\n    source: Source;\n    status: \"connected\" | \"pending_oauth\";\n  }>;\n  providerOauthSession: {\n    sessionId: SourceAuthSession[\"id\"];\n    authorizationUrl: string;\n    sourceIds: ReadonlyArray<Source[\"id\"]>;\n  } | null;\n};\n\nexport type CreateWorkspaceOauthClientInput = {\n  workspaceId: WorkspaceId;\n  providerKey: string;\n  label?: string | null;\n  oauthClient: SourceOauthClientInput;\n};\n\nexport type McpSourceConnectResult = Extract<ExecutorSourceAddResult, {\n  kind: \"connected\" | \"oauth_required\";\n}>;\n\nexport type SourceOAuthProviderInput = {\n  kind: \"mcp\";\n  endpoint: string;\n  transport?: SourceTransport;\n  queryParams?: StringMap | null;\n  headers?: StringMap | null;\n};\n\nexport type StartSourceOAuthSessionInput = {\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  provider: SourceOAuthProviderInput;\n  baseUrl?: string | null;\n  displayName?: string | null;\n};\n\nconst isExecutorCredentialManagedSourceInput = (\n  input: ExecutorAddSourceInput,\n): input is ExecutorCredentialManagedSourceInput =>\n  typeof input.kind === \"string\";\n\nconst isExecutorGoogleDiscoverySourceInput = (\n  input: ExecutorAddSourceInput,\n): input is Extract<ExecutorCredentialManagedSourceInput, { kind: \"google_discovery\" }> =>\n  isExecutorCredentialManagedSourceInput(input) && input.kind === \"google_discovery\";\n\nconst isExecutorHttpEndpointSourceInput = (\n  input: ExecutorAddSourceInput,\n): input is ExecutorHttpEndpointSourceInput =>\n  isExecutorCredentialManagedSourceInput(input)\n  && \"endpoint\" in input\n  && sourceAdapterUsesCredentialManagedAuth(input.kind);\n\nconst isExecutorMcpSourceInput = (\n  input: ExecutorAddSourceInput,\n): input is ExecutorMcpSourceInput =>\n  input.kind === undefined || sourceAdapterRequiresInteractiveConnect(input.kind);\n\nexport type StartSourceOAuthSessionResult = {\n  sessionId: SourceAuthSession[\"id\"];\n  authorizationUrl: string;\n};\n\nexport type CompleteSourceOAuthSessionResult = {\n  sessionId: SourceAuthSession[\"id\"];\n  auth: Extract<Source[\"auth\"], { kind: \"oauth2\" }>;\n};\n\nexport type CompleteSourceCredentialSetupResult = {\n  sessionId: SourceAuthSession[\"id\"];\n  source: Source;\n};\n\nexport type CompleteProviderOauthCallbackResult = {\n  sessionId: SourceAuthSession[\"id\"];\n  sources: ReadonlyArray<Source>;\n};\n\nconst materializeSecretRefInput = (input: {\n  rawValue?: string | null;\n  ref?: SecretRef | null;\n  storeSecretMaterial: StoreSecretMaterial;\n}): Effect.Effect<SecretRef | null, Error, never> =>\n  Effect.gen(function* () {\n    const rawValue = trimOrNull(input.rawValue);\n    if (rawValue !== null) {\n      return yield* input.storeSecretMaterial({\n        purpose: \"auth_material\",\n        value: rawValue,\n      });\n    }\n\n    const providerId = trimOrNull(input.ref?.providerId);\n    const handle = trimOrNull(input.ref?.handle);\n    if (providerId === null || handle === null) {\n      return null;\n    }\n\n    return {\n      providerId,\n      handle,\n    } satisfies SecretRef;\n  });\n\nconst materializeExecutorHttpAuth = (input: {\n  existing?: Source;\n  auth?: ExecutorHttpSourceAuthInput | null;\n  storeSecretMaterial: StoreSecretMaterial;\n}): Effect.Effect<Source[\"auth\"], Error, never> =>\n  Effect.gen(function* () {\n    const existing = input.existing;\n\n    if (input.auth === undefined && existing && sourceAdapterUsesCredentialManagedAuth(existing.kind)) {\n      return existing.auth;\n    }\n\n    const auth = input.auth ?? { kind: \"none\" } satisfies ExecutorHttpSourceAuthInput;\n    if (auth.kind === \"none\") {\n      return { kind: \"none\" } satisfies Source[\"auth\"];\n    }\n\n    const headerName = trimOrNull(auth.headerName) ?? \"Authorization\";\n    const prefix = auth.prefix ?? \"Bearer \";\n\n    if (auth.kind === \"bearer\") {\n      const token = trimOrNull(auth.token);\n      const tokenRefInput = auth.tokenRef ?? null;\n\n      if (\n        token === null\n        && tokenRefInput === null\n        && existing\n        && sourceAdapterUsesCredentialManagedAuth(existing.kind)\n        && existing.auth.kind === \"bearer\"\n      ) {\n        return existing.auth;\n      }\n\n      const tokenRef = yield* materializeSecretRefInput({\n        rawValue: token,\n        ref: tokenRefInput,\n        storeSecretMaterial: input.storeSecretMaterial,\n      });\n      if (tokenRef === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"Bearer auth requires token or tokenRef\");\n      }\n\n      return {\n        kind: \"bearer\",\n        headerName,\n        prefix,\n        token: tokenRef,\n      } satisfies Source[\"auth\"];\n    }\n\n    if (\n      trimOrNull(auth.accessToken) === null\n      && auth.accessTokenRef == null\n      && trimOrNull(auth.refreshToken) === null\n      && auth.refreshTokenRef == null\n      && existing\n      && sourceAdapterUsesCredentialManagedAuth(existing.kind)\n      && existing.auth.kind === \"oauth2\"\n    ) {\n      return existing.auth;\n    }\n\n    const accessTokenRef = yield* materializeSecretRefInput({\n      rawValue: auth.accessToken,\n      ref: auth.accessTokenRef ?? null,\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n    if (accessTokenRef === null) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", \"OAuth2 auth requires accessToken or accessTokenRef\");\n    }\n\n    const refreshTokenRef = yield* materializeSecretRefInput({\n      rawValue: auth.refreshToken,\n      ref: auth.refreshTokenRef ?? null,\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n\n    return {\n      kind: \"oauth2\",\n      headerName,\n      prefix,\n      accessToken: accessTokenRef,\n      refreshToken: refreshTokenRef,\n    } satisfies Source[\"auth\"];\n  });\n\nconst materializeExecutorHttpImportAuth = (input: {\n  sourceKind: Source[\"kind\"];\n  existing?: Source;\n  importAuthPolicy?: SourceImportAuthPolicy | null;\n  importAuth?: ExecutorHttpSourceAuthInput | null;\n  storeSecretMaterial: StoreSecretMaterial;\n}): Effect.Effect<{\n  importAuthPolicy: SourceImportAuthPolicy;\n  importAuth: Source[\"importAuth\"];\n}, Error, never> =>\n  Effect.gen(function* () {\n    const adapterDefault = sourceAdapterUsesCredentialManagedAuth(input.sourceKind)\n      ? \"reuse_runtime\"\n      : \"none\";\n    const importAuthPolicy = input.importAuthPolicy ?? input.existing?.importAuthPolicy ?? adapterDefault;\n\n    if (importAuthPolicy === \"none\" || importAuthPolicy === \"reuse_runtime\") {\n      return {\n        importAuthPolicy,\n        importAuth: { kind: \"none\" } satisfies Source[\"importAuth\"],\n      };\n    }\n\n    if (\n      input.importAuth === undefined\n      && input.existing\n      && input.existing.importAuthPolicy === \"separate\"\n    ) {\n      return {\n        importAuthPolicy,\n        importAuth: input.existing.importAuth,\n      };\n    }\n\n    const importAuth = yield* materializeExecutorHttpAuth({\n      existing: undefined,\n      auth: input.importAuth ?? { kind: \"none\" },\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n\n    return {\n      importAuthPolicy,\n      importAuth,\n    };\n  });\n\nconst shouldPromptForExecutorHttpRuntimeCredentialSetup = (input: {\n  existing?: Source;\n  explicitAuthProvided: boolean;\n  auth: Source[\"auth\"];\n}): boolean =>\n  !input.explicitAuthProvided\n  && input.auth.kind === \"none\"\n  && (input.existing?.auth.kind ?? \"none\") === \"none\";\n\ntype ResolvedSourceOauthClient = {\n  providerKey: string;\n  clientId: string;\n  clientSecret: SecretRef | null;\n  redirectMode: WorkspaceSourceOauthClientRedirectMode;\n};\n\ntype ResolvedWorkspaceOauthClient = ResolvedSourceOauthClient & {\n  id: WorkspaceOauthClient[\"id\"];\n  label: string | null;\n};\n\ntype RuntimeProviderAuthTarget = {\n  source: Source;\n  requiredScopes: ReadonlyArray<string>;\n  setupConfig: SourceAdapterOauth2SetupConfig;\n};\n\ntype RuntimeProviderAuthResult =\n  | {\n      kind: \"connected\";\n      sources: ReadonlyArray<Source>;\n    }\n  | {\n      kind: \"oauth_required\";\n      sources: ReadonlyArray<Source>;\n      sessionId: SourceAuthSession[\"id\"];\n      authorizationUrl: string;\n    };\n\nconst decodeWorkspaceSourceOauthClientMetadataOption = Schema.decodeUnknownOption(\n  WorkspaceSourceOauthClientMetadataJsonSchema,\n);\n\nconst encodeWorkspaceSourceOauthClientMetadataJson = Schema.encodeSync(\n  WorkspaceSourceOauthClientMetadataJsonSchema,\n);\n\nconst sourceOauthClientRedirectMode = (client: {\n  clientMetadataJson: string | null;\n}): WorkspaceSourceOauthClientRedirectMode => {\n  if (client.clientMetadataJson === null) {\n    return \"app_callback\";\n  }\n\n  const decoded = decodeWorkspaceSourceOauthClientMetadataOption(\n    client.clientMetadataJson,\n  );\n  if (Option.isNone(decoded)) {\n    return \"app_callback\";\n  }\n\n  return decoded.value.redirectMode ?? \"app_callback\";\n};\n\nconst sourceOauthClientSecretRef = (client: {\n  clientSecretProviderId: string | null;\n  clientSecretHandle: string | null;\n}): SecretRef | null =>\n  client.clientSecretProviderId && client.clientSecretHandle\n    ? {\n        providerId: client.clientSecretProviderId,\n        handle: client.clientSecretHandle,\n      }\n    : null;\n\nconst upsertSourceOauthClient = (input: {\n  rows: ControlPlaneStoreShape;\n  source: Source;\n  oauthClient: SourceOauthClientInput;\n  storeSecretMaterial: StoreSecretMaterial;\n}): Effect.Effect<ResolvedSourceOauthClient, Error, never> =>\n  Effect.gen(function* () {\n    const adapter = getSourceAdapterForSource(input.source);\n    const setupConfig = adapter.getOauth2SetupConfig\n      ? yield* adapter.getOauth2SetupConfig({\n          source: input.source,\n          slot: \"runtime\",\n        })\n      : null;\n    if (setupConfig === null) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", `Source ${input.source.id} does not support OAuth client configuration`);\n    }\n\n    const existing = yield* input.rows.sourceOauthClients.getByWorkspaceSourceAndProvider({\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      providerKey: setupConfig.providerKey,\n    });\n    const normalizedOauthClient = adapter.normalizeOauthClientInput\n      ? yield* adapter.normalizeOauthClientInput(input.oauthClient)\n      : input.oauthClient;\n    const previousClientSecretRef = Option.isSome(existing)\n      ? sourceOauthClientSecretRef(existing.value)\n      : null;\n    const clientSecretRef = normalizedOauthClient.clientSecret\n      ? yield* input.storeSecretMaterial({\n          purpose: \"oauth_client_info\",\n          value: normalizedOauthClient.clientSecret,\n        })\n      : null;\n    const now = Date.now();\n    const clientId = Option.isSome(existing)\n      ? existing.value.id\n      : WorkspaceSourceOauthClientIdSchema.make(\n          `src_oauth_client_${crypto.randomUUID()}`,\n        );\n    yield* input.rows.sourceOauthClients.upsert({\n      id: clientId,\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      providerKey: setupConfig.providerKey,\n      clientId: normalizedOauthClient.clientId,\n      clientSecretProviderId: clientSecretRef?.providerId ?? null,\n      clientSecretHandle: clientSecretRef?.handle ?? null,\n      clientMetadataJson: encodeWorkspaceSourceOauthClientMetadataJson({\n        redirectMode: normalizedOauthClient.redirectMode ?? \"app_callback\",\n      }),\n      createdAt: Option.isSome(existing) ? existing.value.createdAt : now,\n      updatedAt: now,\n    });\n    if (\n      previousClientSecretRef\n      && (\n        clientSecretRef === null\n        || previousClientSecretRef.providerId !== clientSecretRef.providerId\n        || previousClientSecretRef.handle !== clientSecretRef.handle\n      )\n    ) {\n      const deleteSecretMaterial = createDefaultSecretMaterialDeleter({\n        rows: input.rows,\n      });\n      yield* deleteSecretMaterial(previousClientSecretRef).pipe(\n        Effect.either,\n        Effect.ignore,\n      );\n    }\n\n    return {\n      providerKey: setupConfig.providerKey,\n      clientId: normalizedOauthClient.clientId,\n      clientSecret: clientSecretRef,\n      redirectMode: normalizedOauthClient.redirectMode ?? \"app_callback\",\n    };\n  });\n\nconst resolveExistingSourceOauthClient = (input: {\n  rows: ControlPlaneStoreShape;\n  source: Source;\n}): Effect.Effect<ResolvedSourceOauthClient | null, Error, never> =>\n  Effect.gen(function* () {\n    const adapter = getSourceAdapterForSource(input.source);\n    const setupConfig = adapter.getOauth2SetupConfig\n      ? yield* adapter.getOauth2SetupConfig({\n          source: input.source,\n          slot: \"runtime\",\n        })\n      : null;\n    if (setupConfig === null) {\n      return null;\n    }\n\n    const existing = yield* input.rows.sourceOauthClients.getByWorkspaceSourceAndProvider({\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n      providerKey: setupConfig.providerKey,\n    });\n    if (Option.isNone(existing)) {\n      return null;\n    }\n\n    return {\n      providerKey: existing.value.providerKey,\n      clientId: existing.value.clientId,\n      clientSecret: sourceOauthClientSecretRef(existing.value),\n      redirectMode: sourceOauthClientRedirectMode(existing.value),\n    };\n  });\n\nconst createWorkspaceOauthClient = (input: {\n  rows: ControlPlaneStoreShape;\n  workspaceId: WorkspaceId;\n  providerKey: string;\n  oauthClient: SourceOauthClientInput;\n  label?: string | null;\n  normalizeOauthClient?: (\n    input: SourceOauthClientInput,\n  ) => Effect.Effect<SourceOauthClientInput, Error, never>;\n  storeSecretMaterial: StoreSecretMaterial;\n}): Effect.Effect<ResolvedWorkspaceOauthClient, Error, never> =>\n  Effect.gen(function* () {\n    const normalizedOauthClient = input.normalizeOauthClient\n      ? yield* input.normalizeOauthClient(input.oauthClient)\n      : input.oauthClient;\n    const clientSecretRef = normalizedOauthClient.clientSecret\n      ? yield* input.storeSecretMaterial({\n          purpose: \"oauth_client_info\",\n          value: normalizedOauthClient.clientSecret,\n        })\n      : null;\n    const now = Date.now();\n    const id = WorkspaceOauthClientIdSchema.make(\n      `ws_oauth_client_${crypto.randomUUID()}`,\n    );\n\n    yield* input.rows.workspaceOauthClients.upsert({\n      id,\n      workspaceId: input.workspaceId,\n      providerKey: input.providerKey,\n      label: trimOrNull(input.label) ?? null,\n      clientId: normalizedOauthClient.clientId,\n      clientSecretProviderId: clientSecretRef?.providerId ?? null,\n      clientSecretHandle: clientSecretRef?.handle ?? null,\n      clientMetadataJson: encodeWorkspaceSourceOauthClientMetadataJson({\n        redirectMode: normalizedOauthClient.redirectMode ?? \"app_callback\",\n      }),\n      createdAt: now,\n      updatedAt: now,\n    });\n\n    return {\n      id,\n      providerKey: input.providerKey,\n      label: trimOrNull(input.label) ?? null,\n      clientId: normalizedOauthClient.clientId,\n      clientSecret: clientSecretRef,\n      redirectMode: normalizedOauthClient.redirectMode ?? \"app_callback\",\n    };\n  });\n\nconst resolveWorkspaceOauthClientById = (input: {\n  rows: ControlPlaneStoreShape;\n  workspaceId: WorkspaceId;\n  oauthClientId: WorkspaceOauthClient[\"id\"];\n  providerKey: string;\n}): Effect.Effect<ResolvedWorkspaceOauthClient | null, Error, never> =>\n  Effect.gen(function* () {\n    const existing = yield* input.rows.workspaceOauthClients.getById(input.oauthClientId);\n    if (Option.isNone(existing)) {\n      return null;\n    }\n\n    if (\n      existing.value.workspaceId !== input.workspaceId\n      || existing.value.providerKey !== input.providerKey\n    ) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", `Workspace OAuth client ${input.oauthClientId} is not valid for ${input.providerKey}`);\n    }\n\n    return {\n      id: existing.value.id,\n      providerKey: existing.value.providerKey,\n      label: existing.value.label,\n      clientId: existing.value.clientId,\n      clientSecret: sourceOauthClientSecretRef(existing.value),\n      redirectMode: sourceOauthClientRedirectMode(existing.value),\n    };\n  });\n\nconst providerGrantCoversScopes = (\n  grantedScopes: ReadonlyArray<string>,\n  requiredScopes: ReadonlyArray<string>,\n): boolean => {\n  const granted = new Set(grantedScopes);\n  return requiredScopes.every((scope) => granted.has(scope));\n};\n\nconst normalizeScopes = (scopes: ReadonlyArray<string>): ReadonlyArray<string> =>\n  [...new Set(scopes.map((scope) => scope.trim()).filter((scope) => scope.length > 0))];\n\nconst authorizationParamsMatch = (\n  left: SourceAdapterOauth2SetupConfig[\"authorizationParams\"],\n  right: SourceAdapterOauth2SetupConfig[\"authorizationParams\"],\n): boolean => {\n  const leftEntries = Object.entries(left ?? {}).sort(([leftKey], [rightKey]) =>\n    leftKey.localeCompare(rightKey),\n  );\n  const rightEntries = Object.entries(right ?? {}).sort(([leftKey], [rightKey]) =>\n    leftKey.localeCompare(rightKey),\n  );\n\n  return leftEntries.length === rightEntries.length\n    && leftEntries.every(([key, value], index) => {\n      const otherEntry = rightEntries[index];\n      return otherEntry !== undefined\n        && otherEntry[0] === key\n        && otherEntry[1] === value;\n    });\n};\n\nconst providerOauthSetupConfigMatches = (\n  left: SourceAdapterOauth2SetupConfig,\n  right: SourceAdapterOauth2SetupConfig,\n): boolean =>\n  left.providerKey === right.providerKey\n  && left.authorizationEndpoint === right.authorizationEndpoint\n  && left.tokenEndpoint === right.tokenEndpoint\n  && left.headerName === right.headerName\n  && left.prefix === right.prefix\n  && left.clientAuthentication === right.clientAuthentication\n  && authorizationParamsMatch(left.authorizationParams, right.authorizationParams);\n\nconst resolveRuntimeProviderAuthTarget = (\n  source: Source,\n): Effect.Effect<RuntimeProviderAuthTarget | null, Error, never> =>\n  Effect.gen(function* () {\n    const adapter = getSourceAdapterForSource(source);\n    const setupConfig = adapter.getOauth2SetupConfig\n      ? yield* adapter.getOauth2SetupConfig({\n          source,\n          slot: \"runtime\",\n        })\n      : null;\n    if (setupConfig === null) {\n      return null;\n    }\n\n    return {\n      source,\n      requiredScopes: normalizeScopes(setupConfig.scopes),\n      setupConfig,\n    } satisfies RuntimeProviderAuthTarget;\n  });\n\nconst mergeRuntimeProviderAuthSetupConfig = (\n  targets: ReadonlyArray<RuntimeProviderAuthTarget>,\n): Effect.Effect<SourceAdapterOauth2SetupConfig, Error, never> =>\n  Effect.gen(function* () {\n    if (targets.length === 0) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", \"Provider auth setup requires at least one target source\");\n    }\n\n    const baseSetupConfig = targets[0]!.setupConfig;\n    for (const target of targets.slice(1)) {\n      if (!providerOauthSetupConfigMatches(baseSetupConfig, target.setupConfig)) {\n        return yield* runtimeEffectError(\n          \"sources/source-auth-service\",\n          `Provider auth setup for ${baseSetupConfig.providerKey} requires compatible source OAuth configuration`,\n        );\n      }\n    }\n\n    return {\n      ...baseSetupConfig,\n      scopes: normalizeScopes(targets.flatMap((target) => [...target.requiredScopes])),\n    };\n  });\n\nconst findReusableProviderGrant = (input: {\n  rows: ControlPlaneStoreShape;\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  providerKey: string;\n  oauthClientId: WorkspaceOauthClient[\"id\"];\n  requiredScopes: ReadonlyArray<string>;\n}): Effect.Effect<import(\"effect/Option\").Option<import(\"#schema\").ProviderAuthGrant>, Error, never> =>\n  Effect.map(\n    input.rows.providerAuthGrants.listByWorkspaceActorAndProvider({\n      workspaceId: input.workspaceId,\n      actorAccountId: input.actorAccountId ?? null,\n      providerKey: input.providerKey,\n    }),\n    (grants) =>\n      Option.fromNullable(\n        grants.find(\n          (grant) =>\n            grant.oauthClientId === input.oauthClientId\n            && providerGrantCoversScopes(grant.grantedScopes, input.requiredScopes),\n        ),\n      ),\n  );\n\nconst upsertProviderAuthGrant = (input: {\n  rows: ControlPlaneStoreShape;\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  providerKey: string;\n  oauthClientId: WorkspaceOauthClient[\"id\"];\n  tokenEndpoint: string;\n  clientAuthentication: \"none\" | \"client_secret_post\";\n  headerName: string;\n  prefix: string;\n  grantedScopes: ReadonlyArray<string>;\n  refreshToken: string | null;\n  storeSecretMaterial: StoreSecretMaterial;\n  existingGrant?: import(\"#schema\").ProviderAuthGrant | null;\n}): Effect.Effect<import(\"#schema\").ProviderAuthGrant, Error, never> =>\n  Effect.gen(function* () {\n    const existingGrant = input.existingGrant ?? null;\n    let refreshTokenRef = existingGrant?.refreshToken ?? null;\n    if (input.refreshToken !== null) {\n      refreshTokenRef = yield* input.storeSecretMaterial({\n        purpose: \"oauth_refresh_token\",\n        value: input.refreshToken,\n        name: `${input.providerKey} Refresh`,\n      });\n    }\n\n    if (refreshTokenRef === null) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", `Provider auth grant for ${input.providerKey} is missing a refresh token`);\n    }\n\n    const now = Date.now();\n    const nextGrant = {\n      id: existingGrant?.id ?? ProviderAuthGrantIdSchema.make(`provider_grant_${crypto.randomUUID()}`),\n      workspaceId: input.workspaceId,\n      actorAccountId: input.actorAccountId ?? null,\n      providerKey: input.providerKey,\n      oauthClientId: input.oauthClientId,\n      tokenEndpoint: input.tokenEndpoint,\n      clientAuthentication: input.clientAuthentication,\n      headerName: input.headerName,\n      prefix: input.prefix,\n      refreshToken: refreshTokenRef,\n      grantedScopes: [...normalizeScopes([\n        ...(existingGrant?.grantedScopes ?? []),\n        ...input.grantedScopes,\n      ])],\n      lastRefreshedAt: existingGrant?.lastRefreshedAt ?? null,\n      orphanedAt: null,\n      createdAt: existingGrant?.createdAt ?? now,\n      updatedAt: now,\n    } satisfies import(\"#schema\").ProviderAuthGrant;\n\n    yield* input.rows.providerAuthGrants.upsert(nextGrant);\n\n    if (\n      existingGrant?.refreshToken\n      && (\n        existingGrant.refreshToken.providerId !== refreshTokenRef.providerId\n        || existingGrant.refreshToken.handle !== refreshTokenRef.handle\n      )\n    ) {\n      const deleteSecretMaterial = createDefaultSecretMaterialDeleter({\n        rows: input.rows,\n      });\n      yield* deleteSecretMaterial(existingGrant.refreshToken).pipe(\n        Effect.either,\n        Effect.ignore,\n      );\n    }\n\n    return nextGrant;\n  });\n\nconst startOauth2PkceSourceCredentialSetup = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  source: Source;\n  actorAccountId?: AccountId | null;\n  executionId?: SourceAuthSession[\"executionId\"];\n  interactionId?: SourceAuthSession[\"interactionId\"];\n  baseUrl: string;\n  redirectModeOverride?: WorkspaceSourceOauthClientRedirectMode;\n  storeSecretMaterial: StoreSecretMaterial;\n}): Effect.Effect<\n  Extract<ExecutorSourceAddResult, { kind: \"oauth_required\" }> | null,\n  Error,\n  WorkspaceStorageServices\n> =>\n  Effect.gen(function* () {\n    const adapter = getSourceAdapterForSource(input.source);\n    const setupConfig = adapter.getOauth2SetupConfig\n      ? yield* adapter.getOauth2SetupConfig({\n          source: input.source,\n          slot: \"runtime\",\n        })\n      : null;\n    if (setupConfig === null) {\n      return null;\n    }\n\n    const oauthClient = yield* resolveExistingSourceOauthClient({\n      rows: input.rows,\n      source: input.source,\n    });\n    if (oauthClient === null) {\n      return null;\n    }\n\n    const sessionId = SourceAuthSessionIdSchema.make(`src_auth_${crypto.randomUUID()}`);\n    const state = crypto.randomUUID();\n    const completionUrl = resolveSourceCredentialOauthCompleteUrl({\n      baseUrl: input.baseUrl,\n      workspaceId: input.source.workspaceId,\n      sourceId: input.source.id,\n    });\n    const redirectMode = input.redirectModeOverride ?? oauthClient.redirectMode;\n    const redirectServer = redirectMode === \"loopback\"\n      ? yield* startOauthLoopbackRedirectServer({\n          completionUrl,\n        })\n      : null;\n    const redirectUri = redirectServer?.redirectUri ?? completionUrl;\n    const codeVerifier = createPkceCodeVerifier();\n    return yield* Effect.gen(function* () {\n      const authorizationUrl = buildOAuth2AuthorizationUrl({\n        authorizationEndpoint: setupConfig.authorizationEndpoint,\n        clientId: oauthClient.clientId,\n        redirectUri,\n        scopes: [...setupConfig.scopes],\n        state,\n        codeVerifier,\n        extraParams: setupConfig.authorizationParams,\n      });\n      const now = Date.now();\n\n      yield* input.rows.sourceAuthSessions.upsert({\n        id: sessionId,\n        workspaceId: input.source.workspaceId,\n        sourceId: input.source.id,\n        actorAccountId: input.actorAccountId ?? null,\n        credentialSlot: \"runtime\",\n        executionId: input.executionId ?? null,\n        interactionId: input.interactionId ?? null,\n        providerKind: \"oauth2_pkce\",\n        status: \"pending\",\n        state,\n        sessionDataJson: encodeOauth2PkceSourceAuthSessionData({\n          kind: \"oauth2_pkce\",\n          providerKey: setupConfig.providerKey,\n          authorizationEndpoint: setupConfig.authorizationEndpoint,\n          tokenEndpoint: setupConfig.tokenEndpoint,\n          redirectUri,\n          clientId: oauthClient.clientId,\n          clientAuthentication: setupConfig.clientAuthentication,\n          clientSecret: oauthClient.clientSecret,\n          scopes: [...setupConfig.scopes],\n          headerName: setupConfig.headerName,\n          prefix: setupConfig.prefix,\n          authorizationParams: {\n            ...setupConfig.authorizationParams,\n          },\n          codeVerifier,\n          authorizationUrl,\n        }),\n        errorText: null,\n        completedAt: null,\n        createdAt: now,\n        updatedAt: now,\n      });\n\n      const authRequiredSource = yield* updateSourceStatus(input.sourceStore, input.source, {\n        actorAccountId: input.actorAccountId,\n        status: \"auth_required\",\n        lastError: null,\n      });\n\n      return {\n        kind: \"oauth_required\",\n        source: authRequiredSource,\n        sessionId,\n        authorizationUrl,\n      } satisfies Extract<ExecutorSourceAddResult, { kind: \"oauth_required\" }>;\n    }).pipe(\n      Effect.onError(() =>\n        redirectServer\n          ? redirectServer.close.pipe(Effect.orDie)\n          : Effect.void\n      ),\n    );\n  });\n\nconst startProviderOauthBatchCredentialSetup = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  executionId?: SourceAuthSession[\"executionId\"];\n  interactionId?: SourceAuthSession[\"interactionId\"];\n  baseUrl: string;\n  redirectModeOverride?: WorkspaceSourceOauthClientRedirectMode;\n  workspaceOauthClient: ResolvedWorkspaceOauthClient;\n  setupConfig: SourceAdapterOauth2SetupConfig;\n  targetSources: ReadonlyArray<{\n    source: Source;\n    requiredScopes: ReadonlyArray<string>;\n  }>;\n}): Effect.Effect<{\n  sessionId: SourceAuthSession[\"id\"];\n  authorizationUrl: string;\n  source: Source;\n}, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    if (input.targetSources.length === 0) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", \"Provider OAuth setup requires at least one target source\");\n    }\n\n    const sessionId = SourceAuthSessionIdSchema.make(`src_auth_${crypto.randomUUID()}`);\n    const state = crypto.randomUUID();\n    const completionUrl = resolveWorkspaceProviderOauthCompleteUrl({\n      baseUrl: input.baseUrl,\n      workspaceId: input.workspaceId,\n    });\n    const redirectMode = input.redirectModeOverride ?? input.workspaceOauthClient.redirectMode;\n    const redirectServer = redirectMode === \"loopback\"\n      ? yield* startOauthLoopbackRedirectServer({\n          completionUrl,\n        })\n      : null;\n    const redirectUri = redirectServer?.redirectUri ?? completionUrl;\n    const codeVerifier = createPkceCodeVerifier();\n\n    return yield* Effect.gen(function* () {\n      const authorizationUrl = buildOAuth2AuthorizationUrl({\n        authorizationEndpoint: input.setupConfig.authorizationEndpoint,\n        clientId: input.workspaceOauthClient.clientId,\n        redirectUri,\n        scopes: [...normalizeScopes(input.setupConfig.scopes)],\n        state,\n        codeVerifier,\n        extraParams: input.setupConfig.authorizationParams,\n      });\n      const now = Date.now();\n\n      yield* input.rows.sourceAuthSessions.upsert({\n        id: sessionId,\n        workspaceId: input.workspaceId,\n        sourceId: SourceIdSchema.make(`oauth_provider_${crypto.randomUUID()}`),\n        actorAccountId: input.actorAccountId ?? null,\n        credentialSlot: \"runtime\",\n        executionId: input.executionId ?? null,\n        interactionId: input.interactionId ?? null,\n        providerKind: \"oauth2_provider_batch\",\n        status: \"pending\",\n        state,\n        sessionDataJson: encodeProviderOauthBatchSourceAuthSessionData({\n          kind: \"provider_oauth_batch\",\n          providerKey: input.setupConfig.providerKey,\n          authorizationEndpoint: input.setupConfig.authorizationEndpoint,\n          tokenEndpoint: input.setupConfig.tokenEndpoint,\n          redirectUri,\n          oauthClientId: input.workspaceOauthClient.id,\n          clientAuthentication: input.setupConfig.clientAuthentication,\n          scopes: [...normalizeScopes(input.setupConfig.scopes)],\n          headerName: input.setupConfig.headerName,\n          prefix: input.setupConfig.prefix,\n          authorizationParams: {\n            ...input.setupConfig.authorizationParams,\n          },\n          targetSources: input.targetSources.map((target) => ({\n            sourceId: target.source.id,\n            requiredScopes: [...normalizeScopes(target.requiredScopes)],\n          })),\n          codeVerifier,\n          authorizationUrl,\n        }),\n        errorText: null,\n        completedAt: null,\n        createdAt: now,\n        updatedAt: now,\n      });\n\n      const primarySource = yield* updateSourceStatus(\n        input.sourceStore,\n        input.targetSources[0]!.source,\n        {\n          actorAccountId: input.actorAccountId,\n          status: \"auth_required\",\n          lastError: null,\n        },\n      );\n\n      yield* Effect.forEach(\n        input.targetSources.slice(1),\n        (target) =>\n          updateSourceStatus(input.sourceStore, target.source, {\n            actorAccountId: input.actorAccountId,\n            status: \"auth_required\",\n            lastError: null,\n          }).pipe(Effect.asVoid),\n        { discard: true },\n      );\n\n      return {\n        sessionId,\n        authorizationUrl,\n        source: primarySource,\n      };\n    }).pipe(\n      Effect.onError(() =>\n        redirectServer\n          ? redirectServer.close.pipe(Effect.orDie)\n          : Effect.void\n      ),\n    );\n  });\n\nconst connectSourcesWithProviderRuntimeAuth = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  executionId?: SourceAuthSession[\"executionId\"];\n  interactionId?: SourceAuthSession[\"interactionId\"];\n  baseUrl?: string | null;\n  getLocalServerBaseUrl?: () => string | undefined;\n  workspaceOauthClient: ResolvedWorkspaceOauthClient;\n  targets: ReadonlyArray<RuntimeProviderAuthTarget>;\n}): Effect.Effect<RuntimeProviderAuthResult, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    const setupConfig = yield* mergeRuntimeProviderAuthSetupConfig(input.targets);\n    const reusableGrant = yield* findReusableProviderGrant({\n      rows: input.rows,\n      workspaceId: input.workspaceId,\n      actorAccountId: input.actorAccountId,\n      providerKey: setupConfig.providerKey,\n      oauthClientId: input.workspaceOauthClient.id,\n      requiredScopes: setupConfig.scopes,\n    });\n\n    if (Option.isSome(reusableGrant)) {\n      const connectedSources = yield* attachProviderGrantToSources({\n        sourceStore: input.sourceStore,\n        sourceCatalogSync: input.sourceCatalogSync,\n        actorAccountId: input.actorAccountId,\n        grantId: reusableGrant.value.id,\n        providerKey: reusableGrant.value.providerKey,\n        headerName: reusableGrant.value.headerName,\n        prefix: reusableGrant.value.prefix,\n        targets: input.targets.map((target) => ({\n          source: target.source,\n          requiredScopes: target.requiredScopes,\n        })),\n      });\n\n      return {\n        kind: \"connected\",\n        sources: connectedSources,\n      } satisfies RuntimeProviderAuthResult;\n    }\n\n    const requestBaseUrl = trimOrNull(input.baseUrl);\n    const baseUrl = requestBaseUrl ?? input.getLocalServerBaseUrl?.() ?? null;\n    if (baseUrl === null) {\n      return yield* runtimeEffectError(\n        \"sources/source-auth-service\",\n        `Local executor server base URL is unavailable for ${setupConfig.providerKey} OAuth setup`,\n      );\n    }\n\n    const oauthRequired = yield* startProviderOauthBatchCredentialSetup({\n      rows: input.rows,\n      sourceStore: input.sourceStore,\n      workspaceId: input.workspaceId,\n      actorAccountId: input.actorAccountId,\n      executionId: input.executionId,\n      interactionId: input.interactionId,\n      baseUrl,\n      redirectModeOverride: requestBaseUrl ? \"app_callback\" : undefined,\n      workspaceOauthClient: input.workspaceOauthClient,\n      setupConfig,\n      targetSources: input.targets.map((target) => ({\n        source: target.source,\n        requiredScopes: target.requiredScopes,\n      })),\n    });\n\n    const pendingSources = yield* Effect.forEach(\n      input.targets,\n      (target) =>\n        input.sourceStore.loadSourceById({\n          workspaceId: target.source.workspaceId,\n          sourceId: target.source.id,\n          actorAccountId: input.actorAccountId,\n        }),\n      { discard: false },\n    );\n\n    return {\n      kind: \"oauth_required\",\n      sources: pendingSources,\n      sessionId: oauthRequired.sessionId,\n      authorizationUrl: oauthRequired.authorizationUrl,\n    } satisfies RuntimeProviderAuthResult;\n  });\n\nconst attachProviderGrantToSources = (input: {\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  actorAccountId?: AccountId | null;\n  grantId: ProviderAuthGrant[\"id\"];\n  providerKey: string;\n  headerName: string;\n  prefix: string;\n  targets: ReadonlyArray<{\n    source: Source;\n    requiredScopes: ReadonlyArray<string>;\n  }>;\n}): Effect.Effect<ReadonlyArray<Source>, Error, WorkspaceStorageServices> =>\n  Effect.forEach(\n    input.targets,\n    (target) =>\n      Effect.gen(function* () {\n        const connectedSource = yield* updateSourceStatus(input.sourceStore, target.source, {\n          actorAccountId: input.actorAccountId,\n          status: \"connected\",\n          lastError: null,\n          auth: {\n            kind: \"provider_grant_ref\",\n            grantId: input.grantId,\n            providerKey: input.providerKey,\n            requiredScopes: [...normalizeScopes(target.requiredScopes)],\n            headerName: input.headerName,\n            prefix: input.prefix,\n          },\n        });\n\n        yield* input.sourceCatalogSync.sync({\n          source: connectedSource,\n          actorAccountId: input.actorAccountId,\n        });\n\n        return connectedSource;\n      }),\n    { discard: false },\n  );\n\nconst removeProviderAuthGrantInternal = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  workspaceId: WorkspaceId;\n  grantId: ProviderAuthGrant[\"id\"];\n}): Effect.Effect<boolean, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    const grantOption = yield* input.rows.providerAuthGrants.getById(input.grantId);\n    if (Option.isNone(grantOption) || grantOption.value.workspaceId !== input.workspaceId) {\n      return false;\n    }\n\n    const references = yield* listProviderGrantRefArtifacts(input.rows, {\n      workspaceId: input.workspaceId,\n      grantId: input.grantId,\n    });\n\n    yield* Effect.forEach(\n      references,\n      (artifact) =>\n        Effect.gen(function* () {\n          const latestSource = yield* input.sourceStore.loadSourceById({\n            workspaceId: artifact.workspaceId,\n            sourceId: artifact.sourceId,\n            actorAccountId: artifact.actorAccountId,\n          }).pipe(\n            Effect.catchAll(() => Effect.succeed(null)),\n          );\n\n          if (latestSource === null) {\n            yield* removeAuthLeaseAndSecrets(input.rows, {\n              authArtifactId: artifact.id,\n            });\n            yield* input.rows.authArtifacts.removeByWorkspaceSourceAndActor({\n              workspaceId: artifact.workspaceId,\n              sourceId: artifact.sourceId,\n              actorAccountId: artifact.actorAccountId,\n              slot: artifact.slot,\n            });\n            return;\n          }\n\n          yield* input.sourceStore.persistSource({\n            ...latestSource,\n            status: \"auth_required\",\n            lastError: null,\n            auth: artifact.slot === \"runtime\" ? { kind: \"none\" } : latestSource.auth,\n            importAuth: artifact.slot === \"import\" ? { kind: \"none\" } : latestSource.importAuth,\n            updatedAt: Date.now(),\n          }, {\n            actorAccountId: artifact.actorAccountId,\n          }).pipe(Effect.asVoid);\n        }),\n      { discard: true },\n    );\n\n    yield* removeProviderAuthGrantSecret(input.rows, {\n      grant: grantOption.value,\n    });\n    yield* input.rows.providerAuthGrants.removeById(input.grantId);\n    return true;\n  });\n\nconst connectMcpSourceInternal = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  getLocalServerBaseUrl?: () => string | undefined;\n  baseUrl?: string | null;\n  workspaceId: WorkspaceId;\n  actorAccountId?: AccountId | null;\n  sourceId?: Source[\"id\"] | null;\n  executionId?: SourceAuthSession[\"executionId\"];\n  interactionId?: SourceAuthSession[\"interactionId\"];\n  endpoint?: string | null;\n  name?: string | null;\n  namespace?: string | null;\n  enabled?: boolean;\n  transport?: SourceTransport | null;\n  queryParams?: StringMap | null;\n  headers?: StringMap | null;\n  command?: string | null;\n  args?: ReadonlyArray<string> | null;\n  env?: StringMap | null;\n  cwd?: string | null;\n  mcpDiscoveryElicitation?: McpDiscoveryElicitationContext;\n  resolveSecretMaterial: ResolveSecretMaterial;\n}): Effect.Effect<McpSourceConnectResult, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    const lookupEndpoint = input.sourceId\n      ? null\n      : normalizeMcpEndpoint({\n          endpoint: input.endpoint ?? null,\n          transport: input.transport ?? null,\n          command: input.command ?? null,\n          name: input.name ?? null,\n        });\n    const existing = yield* (\n      input.sourceId\n        ? input.sourceStore.loadSourceById({\n            workspaceId: input.workspaceId,\n            sourceId: input.sourceId,\n            actorAccountId: input.actorAccountId,\n          }).pipe(\n            Effect.flatMap((source) =>\n              sourceAdapterRequiresInteractiveConnect(source.kind)\n                ? Effect.succeed(source)\n                : Effect.fail(runtimeEffectError(\"sources/source-auth-service\", `Expected MCP source, received ${source.kind}`)),\n            ),\n          )\n        : input.sourceStore.loadSourcesInWorkspace(input.workspaceId, {\n            actorAccountId: input.actorAccountId,\n          }).pipe(\n            Effect.map((sources) =>\n              sources.find(\n                (source) =>\n                  sourceAdapterRequiresInteractiveConnect(source.kind)\n                  && lookupEndpoint !== null\n                  && normalizeEndpoint(source.endpoint) === lookupEndpoint,\n              ),\n            ),\n          )\n    );\n\n    const existingBinding = existing\n      ? yield* sourceBindingStateFromSource(existing)\n      : null;\n    const chosenCommand =\n      input.command !== undefined ? trimOrNull(input.command) : (existingBinding?.command ?? null);\n    const chosenTransport = input.transport !== undefined && input.transport !== null\n      ? input.transport\n      : isMcpStdioTransport({\n        transport: existingBinding?.transport ?? undefined,\n        command: chosenCommand ?? undefined,\n      })\n      ? \"stdio\"\n      : (existingBinding?.transport ?? \"auto\");\n    if (chosenTransport === \"stdio\" && chosenCommand === null) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", \"MCP stdio transport requires a command\");\n    }\n    const normalizedEndpoint = normalizeMcpEndpoint({\n      endpoint: input.endpoint ?? existing?.endpoint ?? null,\n      transport: chosenTransport,\n      command: chosenCommand,\n      name: input.name ?? existing?.name ?? null,\n    });\n    const chosenName =\n      trimOrNull(input.name)\n      ?? existing?.name\n      ?? (chosenTransport === \"stdio\" && chosenCommand !== null\n        ? defaultSourceNameFromCommand(chosenCommand)\n        : defaultSourceNameFromEndpoint(normalizedEndpoint));\n    const chosenNamespace =\n      trimOrNull(input.namespace)\n      ?? existing?.namespace\n      ?? defaultNamespaceFromName(chosenName);\n    const chosenEnabled = input.enabled ?? existing?.enabled ?? true;\n    const chosenQueryParams =\n      chosenTransport === \"stdio\"\n        ? null\n        : input.queryParams !== undefined\n        ? input.queryParams\n        : (existingBinding?.queryParams ?? null);\n    const chosenHeaders =\n      chosenTransport === \"stdio\"\n        ? null\n        : input.headers !== undefined\n        ? input.headers\n        : (existingBinding?.headers ?? null);\n    const chosenArgs =\n      input.args !== undefined ? normalizeStringArray(input.args) : (existingBinding?.args ?? null);\n    const chosenEnv =\n      input.env !== undefined ? input.env : (existingBinding?.env ?? null);\n    const chosenCwd =\n      input.cwd !== undefined ? trimOrNull(input.cwd) : (existingBinding?.cwd ?? null);\n    const now = Date.now();\n\n    const draftSource = existing\n      ? yield* updateSourceFromPayload({\n          source: existing,\n          payload: {\n            name: chosenName,\n            endpoint: normalizedEndpoint,\n            namespace: chosenNamespace,\n            status: \"probing\",\n            enabled: chosenEnabled,\n            binding: {\n              transport: chosenTransport,\n              queryParams: chosenQueryParams,\n              headers: chosenHeaders,\n              command: chosenCommand,\n              args: chosenArgs,\n              env: chosenEnv,\n              cwd: chosenCwd,\n            },\n            importAuthPolicy: \"reuse_runtime\",\n            importAuth: { kind: \"none\" },\n            auth: { kind: \"none\" },\n            lastError: null,\n          },\n          now,\n        })\n      : yield* createSourceFromPayload({\n          workspaceId: input.workspaceId,\n          sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n          payload: {\n            name: chosenName,\n            kind: \"mcp\",\n            endpoint: normalizedEndpoint,\n            namespace: chosenNamespace,\n            status: \"probing\",\n            enabled: chosenEnabled,\n            binding: {\n              transport: chosenTransport,\n              queryParams: chosenQueryParams,\n              headers: chosenHeaders,\n              command: chosenCommand,\n              args: chosenArgs,\n              env: chosenEnv,\n              cwd: chosenCwd,\n            },\n            importAuthPolicy: \"reuse_runtime\",\n            importAuth: { kind: \"none\" },\n            auth: { kind: \"none\" },\n          },\n          now,\n        });\n\n    const persistedDraft = yield* input.sourceStore.persistSource(draftSource, {\n      actorAccountId: input.actorAccountId,\n    });\n    yield* input.sourceCatalogSync.sync({\n      source: persistedDraft,\n      actorAccountId: input.actorAccountId,\n    });\n\n    const discovered = yield* Effect.either(\n      probeMcpSourceWithoutAuth(\n        persistedDraft,\n        input.mcpDiscoveryElicitation,\n      ),\n    );\n\n    const connectedResult = yield* Either.match(discovered, {\n      onLeft: () => Effect.succeed(null),\n      onRight: (result) =>\n        Effect.gen(function* () {\n          const connected = yield* updateSourceStatus(input.sourceStore, persistedDraft, {\n            actorAccountId: input.actorAccountId,\n            status: \"connected\",\n            lastError: null,\n            auth: { kind: \"none\" },\n          });\n          const indexed = yield* Effect.either(\n            input.sourceCatalogSync.persistMcpCatalogSnapshotFromManifest({\n              source: connected,\n              manifest: result.manifest,\n            }),\n          );\n\n          return yield* Either.match(indexed, {\n            onLeft: (error) =>\n              updateSourceStatus(input.sourceStore, connected, {\n                actorAccountId: input.actorAccountId,\n                status: \"error\",\n                lastError: error.message,\n              }).pipe(\n                Effect.zipRight(Effect.fail(error)),\n              ),\n            onRight: () =>\n              Effect.succeed({\n                kind: \"connected\",\n                source: connected,\n              } satisfies McpSourceConnectResult),\n          });\n        }),\n    });\n\n    if (connectedResult) {\n      return connectedResult;\n    }\n\n    const localServerBaseUrl = trimOrNull(input.baseUrl) ?? input.getLocalServerBaseUrl?.() ?? null;\n    if (!localServerBaseUrl) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", \"Local executor server base URL is unavailable for source credential setup\");\n    }\n\n    const sessionId = SourceAuthSessionIdSchema.make(`src_auth_${crypto.randomUUID()}`);\n    const state = crypto.randomUUID();\n    const redirectUrl = resolveSourceCredentialOauthCompleteUrl({\n      baseUrl: localServerBaseUrl,\n      workspaceId: input.workspaceId,\n      sourceId: persistedDraft.id,\n    });\n    const oauthStart = yield* startMcpOAuthAuthorization({\n      endpoint: normalizedEndpoint,\n      redirectUrl,\n      state,\n    });\n\n    const authRequiredSource = yield* updateSourceStatus(input.sourceStore, persistedDraft, {\n      actorAccountId: input.actorAccountId,\n      status: \"auth_required\",\n      lastError: null,\n    });\n\n    const sessionNow = Date.now();\n    yield* input.rows.sourceAuthSessions.upsert({\n      id: sessionId,\n      workspaceId: input.workspaceId,\n      sourceId: authRequiredSource.id,\n      actorAccountId: input.actorAccountId ?? null,\n      credentialSlot: \"runtime\",\n      executionId: input.executionId ?? null,\n      interactionId: input.interactionId ?? null,\n      providerKind: \"mcp_oauth\",\n      status: \"pending\",\n      state,\n      sessionDataJson: encodeMcpSourceAuthSessionData({\n        kind: \"mcp_oauth\",\n        endpoint: normalizedEndpoint,\n        redirectUri: redirectUrl,\n        scope: null,\n        resourceMetadataUrl: oauthStart.resourceMetadataUrl,\n        authorizationServerUrl: oauthStart.authorizationServerUrl,\n        resourceMetadata: oauthStart.resourceMetadata,\n        authorizationServerMetadata: oauthStart.authorizationServerMetadata,\n        clientInformation: oauthStart.clientInformation,\n        codeVerifier: oauthStart.codeVerifier,\n        authorizationUrl: oauthStart.authorizationUrl,\n      }),\n      errorText: null,\n      completedAt: null,\n      createdAt: sessionNow,\n      updatedAt: sessionNow,\n    });\n\n    return {\n      kind: \"oauth_required\",\n      source: authRequiredSource,\n      sessionId,\n      authorizationUrl: oauthStart.authorizationUrl,\n    } satisfies McpSourceConnectResult;\n  });\n\nconst addExecutorHttpSource = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  sourceInput: ExecutorHttpEndpointSourceInput;\n  storeSecretMaterial: StoreSecretMaterial;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  getLocalServerBaseUrl?: () => string | undefined;\n  baseUrl?: string | null;\n}): Effect.Effect<ExecutorSourceAddResult, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    const normalizedEndpoint = normalizeEndpoint(input.sourceInput.endpoint);\n    const normalizedSpecUrl = input.sourceInput.kind === \"openapi\"\n      ? normalizeEndpoint(input.sourceInput.specUrl)\n      : null;\n    const existingSources = yield* input.sourceStore.loadSourcesInWorkspace(\n      input.sourceInput.workspaceId,\n      {\n        actorAccountId: input.sourceInput.actorAccountId,\n      },\n    );\n    const existing = existingSources.find((source) => {\n      if (source.kind !== input.sourceInput.kind) {\n        return false;\n      }\n\n      if (normalizeEndpoint(source.endpoint) !== normalizedEndpoint) {\n        return false;\n      }\n\n      if (input.sourceInput.kind === \"openapi\") {\n        const bindingState = Effect.runSync(sourceBindingStateFromSource(source));\n        return trimOrNull(bindingState.specUrl) === normalizedSpecUrl;\n      }\n\n      return true;\n    });\n\n    const chosenName =\n      trimOrNull(input.sourceInput.name)\n      ?? existing?.name\n      ?? defaultSourceNameFromEndpoint(normalizedEndpoint);\n    const chosenNamespace =\n      trimOrNull(input.sourceInput.namespace)\n      ?? existing?.namespace\n      ?? defaultNamespaceFromName(chosenName);\n    const existingBinding = existing\n      ? yield* sourceBindingStateFromSource(existing)\n      : null;\n    const now = Date.now();\n\n    const auth = yield* materializeExecutorHttpAuth({\n      existing,\n      auth: input.sourceInput.auth,\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n    const importAuth = yield* materializeExecutorHttpImportAuth({\n      sourceKind: input.sourceInput.kind,\n      existing,\n      importAuthPolicy: input.sourceInput.importAuthPolicy ?? null,\n      importAuth: input.sourceInput.importAuth ?? null,\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n\n    const draftSource = existing\n      ? yield* updateSourceFromPayload({\n          source: existing,\n          payload: {\n            name: chosenName,\n            endpoint: normalizedEndpoint,\n            namespace: chosenNamespace,\n            status: \"probing\",\n            enabled: true,\n            binding: input.sourceInput.kind === \"openapi\"\n              ? {\n                  specUrl: normalizedSpecUrl,\n                  defaultHeaders: existingBinding?.defaultHeaders ?? null,\n                }\n              : {\n                  defaultHeaders: existingBinding?.defaultHeaders ?? null,\n                },\n            importAuthPolicy: importAuth.importAuthPolicy,\n            importAuth: importAuth.importAuth,\n            auth,\n            lastError: null,\n          },\n          now,\n        })\n      : yield* createSourceFromPayload({\n          workspaceId: input.sourceInput.workspaceId,\n          sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n          payload: {\n            name: chosenName,\n            kind: input.sourceInput.kind,\n            endpoint: normalizedEndpoint,\n            namespace: chosenNamespace,\n            status: \"probing\",\n            enabled: true,\n            binding: input.sourceInput.kind === \"openapi\"\n              ? {\n                  specUrl: normalizedSpecUrl,\n                  defaultHeaders: existingBinding?.defaultHeaders ?? null,\n                }\n              : {\n                  defaultHeaders: existingBinding?.defaultHeaders ?? null,\n                },\n            importAuthPolicy: importAuth.importAuthPolicy,\n            importAuth: importAuth.importAuth,\n            auth,\n          },\n          now,\n        });\n\n    const persistedDraft = yield* input.sourceStore.persistSource(draftSource, {\n      actorAccountId: input.sourceInput.actorAccountId,\n    });\n\n    if (shouldPromptForExecutorHttpRuntimeCredentialSetup({\n      existing,\n      explicitAuthProvided: input.sourceInput.auth !== undefined,\n      auth: persistedDraft.auth,\n    })) {\n      const requestBaseUrl = trimOrNull(input.baseUrl);\n      const baseUrl = requestBaseUrl ?? input.getLocalServerBaseUrl?.() ?? null;\n      if (baseUrl) {\n        const oauthRequired = yield* startOauth2PkceSourceCredentialSetup({\n          rows: input.rows,\n          sourceStore: input.sourceStore,\n          source: persistedDraft,\n          actorAccountId: input.sourceInput.actorAccountId,\n          executionId: input.sourceInput.executionId,\n          interactionId: input.sourceInput.interactionId,\n          baseUrl,\n          redirectModeOverride: requestBaseUrl ? \"app_callback\" : undefined,\n          storeSecretMaterial: input.storeSecretMaterial,\n        });\n        if (oauthRequired) {\n          return oauthRequired;\n        }\n      }\n\n      const authRequiredSource = yield* updateSourceStatus(input.sourceStore, persistedDraft, {\n        actorAccountId: input.sourceInput.actorAccountId,\n        status: \"auth_required\",\n        lastError: null,\n      });\n\n      return {\n        kind: \"credential_required\",\n        source: authRequiredSource,\n        credentialSlot: \"runtime\",\n      } satisfies ExecutorSourceAddResult;\n    }\n\n    const synced = yield* Effect.either(\n      input.sourceCatalogSync.sync({\n        source: {\n          ...persistedDraft,\n          status: \"connected\",\n        },\n        actorAccountId: input.sourceInput.actorAccountId,\n      }),\n    );\n\n    return yield* Either.match(synced, {\n      onLeft: (error) =>\n        isSourceCredentialRequiredError(error)\n          ? updateSourceStatus(input.sourceStore, persistedDraft, {\n              actorAccountId: input.sourceInput.actorAccountId,\n              status: \"auth_required\",\n              lastError: null,\n            }).pipe(\n              Effect.map((source) =>\n                ({\n                  kind: \"credential_required\",\n                  source,\n                  credentialSlot: error.slot,\n                } satisfies ExecutorSourceAddResult)\n              ),\n            )\n          : updateSourceStatus(input.sourceStore, persistedDraft, {\n              actorAccountId: input.sourceInput.actorAccountId,\n              status: \"error\",\n              lastError: error.message,\n            }).pipe(\n              Effect.zipRight(Effect.fail(error)),\n            ),\n      onRight: () =>\n        updateSourceStatus(input.sourceStore, persistedDraft, {\n          actorAccountId: input.sourceInput.actorAccountId,\n          status: \"connected\",\n          lastError: null,\n        }).pipe(\n          Effect.map((source) =>\n            ({\n              kind: \"connected\",\n              source,\n            } satisfies ExecutorSourceAddResult)\n          ),\n        ),\n    });\n  }).pipe(\n    Effect.withSpan(\"source.connect.http\", {\n      attributes: {\n        \"executor.source.kind\": input.sourceInput.kind,\n        \"executor.source.endpoint\": input.sourceInput.endpoint,\n        ...(input.sourceInput.namespace ? { \"executor.source.namespace\": input.sourceInput.namespace } : {}),\n        ...(input.sourceInput.name ? { \"executor.source.name\": input.sourceInput.name } : {}),\n      },\n    }),\n  );\n\nconst addExecutorGoogleDiscoverySource = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  sourceInput: Extract<ExecutorAddSourceInput, { kind: \"google_discovery\" }>;\n  storeSecretMaterial: StoreSecretMaterial;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  getLocalServerBaseUrl?: () => string | undefined;\n  baseUrl?: string | null;\n}): Effect.Effect<ExecutorSourceAddResult, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    const normalizedService = input.sourceInput.service.trim();\n    const normalizedVersion = input.sourceInput.version.trim();\n    const normalizedDiscoveryUrl = normalizeEndpoint(\n      trimOrNull(input.sourceInput.discoveryUrl)\n        ?? defaultGoogleDiscoveryUrl(normalizedService, normalizedVersion),\n    );\n    const existingSources = yield* input.sourceStore.loadSourcesInWorkspace(\n      input.sourceInput.workspaceId,\n      {\n        actorAccountId: input.sourceInput.actorAccountId,\n      },\n    );\n    const existing = existingSources.find((source) => {\n      if (source.kind !== \"google_discovery\") {\n        return false;\n      }\n\n      const binding = source.binding;\n      if (typeof binding.service !== \"string\" || typeof binding.version !== \"string\") {\n        return false;\n      }\n\n      // Match on service + version only. Different discovery URL formats\n      // (e.g. host-scoped \"https://tasks.googleapis.com/$discovery/rest?version=v1\"\n      // vs directory \"https://www.googleapis.com/discovery/v1/apis/tasks/v1/rest\")\n      // can refer to the same API, so requiring an exact URL match causes\n      // duplicate sources.\n      return binding.service.trim() === normalizedService\n        && binding.version.trim() === normalizedVersion;\n    });\n\n    const chosenName =\n      trimOrNull(input.sourceInput.name)\n      ?? existing?.name\n      ?? defaultGoogleDiscoverySourceName(normalizedService, normalizedVersion);\n    const chosenNamespace =\n      trimOrNull(input.sourceInput.namespace)\n      ?? existing?.namespace\n      ?? defaultGoogleDiscoveryNamespace(normalizedService);\n    const existingScopes = Array.isArray(existing?.binding?.scopes)\n      ? existing.binding.scopes as ReadonlyArray<string>\n      : [];\n    const chosenScopes = (input.sourceInput.scopes ?? existingScopes)\n      .map((scope) => scope.trim())\n      .filter((scope) => scope.length > 0);\n    const existingBinding = existing\n      ? yield* sourceBindingStateFromSource(existing)\n      : null;\n    const now = Date.now();\n\n    const auth = yield* materializeExecutorHttpAuth({\n      existing,\n      auth: input.sourceInput.auth,\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n    const importAuth = yield* materializeExecutorHttpImportAuth({\n      sourceKind: input.sourceInput.kind,\n      existing,\n      importAuthPolicy: input.sourceInput.importAuthPolicy ?? null,\n      importAuth: input.sourceInput.importAuth ?? null,\n      storeSecretMaterial: input.storeSecretMaterial,\n    });\n\n    const draftSource = existing\n      ? yield* updateSourceFromPayload({\n          source: existing,\n          payload: {\n            name: chosenName,\n            endpoint: normalizedDiscoveryUrl,\n            namespace: chosenNamespace,\n            status: \"probing\",\n            enabled: true,\n            binding: {\n              service: normalizedService,\n              version: normalizedVersion,\n              discoveryUrl: normalizedDiscoveryUrl,\n              defaultHeaders: existingBinding?.defaultHeaders ?? null,\n              scopes: [...chosenScopes],\n            },\n            importAuthPolicy: importAuth.importAuthPolicy,\n            importAuth: importAuth.importAuth,\n            auth,\n            lastError: null,\n          },\n          now,\n        })\n      : yield* createSourceFromPayload({\n          workspaceId: input.sourceInput.workspaceId,\n          sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n          payload: {\n            name: chosenName,\n            kind: \"google_discovery\",\n            endpoint: normalizedDiscoveryUrl,\n            namespace: chosenNamespace,\n            status: \"probing\",\n            enabled: true,\n            binding: {\n              service: normalizedService,\n              version: normalizedVersion,\n              discoveryUrl: normalizedDiscoveryUrl,\n              defaultHeaders: existingBinding?.defaultHeaders ?? null,\n              scopes: [...chosenScopes],\n            },\n            importAuthPolicy: importAuth.importAuthPolicy,\n            importAuth: importAuth.importAuth,\n            auth,\n          },\n          now,\n        });\n\n    const persistedDraft = yield* input.sourceStore.persistSource(draftSource, {\n      actorAccountId: input.sourceInput.actorAccountId,\n    });\n    const googleAdapter = getSourceAdapterForSource(persistedDraft);\n    const providerAuthTarget = yield* resolveRuntimeProviderAuthTarget(persistedDraft);\n\n    if (\n      providerAuthTarget !== null\n      && input.sourceInput.auth === undefined\n      && persistedDraft.auth.kind === \"none\"\n    ) {\n      let workspaceOauthClient: ResolvedWorkspaceOauthClient | null = null;\n      if (input.sourceInput.workspaceOauthClientId) {\n        workspaceOauthClient = yield* resolveWorkspaceOauthClientById({\n          rows: input.rows,\n          workspaceId: persistedDraft.workspaceId,\n          oauthClientId: input.sourceInput.workspaceOauthClientId,\n          providerKey: providerAuthTarget.setupConfig.providerKey,\n        });\n      } else if (input.sourceInput.oauthClient) {\n        workspaceOauthClient = yield* createWorkspaceOauthClient({\n          rows: input.rows,\n          workspaceId: persistedDraft.workspaceId,\n          providerKey: providerAuthTarget.setupConfig.providerKey,\n          oauthClient: input.sourceInput.oauthClient,\n          label: `${chosenName} OAuth Client`,\n          normalizeOauthClient: googleAdapter.normalizeOauthClientInput,\n          storeSecretMaterial: input.storeSecretMaterial,\n        });\n      }\n\n      if (workspaceOauthClient === null) {\n        return yield* runtimeEffectError(\n          \"sources/source-auth-service\",\n          `${providerAuthTarget.setupConfig.providerKey} shared auth requires a workspace OAuth client`,\n        );\n      }\n\n      const providerAuthResult = yield* connectSourcesWithProviderRuntimeAuth({\n        rows: input.rows,\n        sourceStore: input.sourceStore,\n        sourceCatalogSync: input.sourceCatalogSync,\n        workspaceId: persistedDraft.workspaceId,\n        actorAccountId: input.sourceInput.actorAccountId,\n        executionId: input.sourceInput.executionId,\n        interactionId: input.sourceInput.interactionId,\n        baseUrl: input.baseUrl,\n        getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n        workspaceOauthClient,\n        targets: [providerAuthTarget],\n      });\n\n      return providerAuthResult.kind === \"connected\"\n        ? {\n            kind: \"connected\",\n            source: providerAuthResult.sources[0]!,\n          } satisfies ExecutorSourceAddResult\n        : {\n            kind: \"oauth_required\",\n            source: providerAuthResult.sources[0]!,\n            sessionId: providerAuthResult.sessionId,\n            authorizationUrl: providerAuthResult.authorizationUrl,\n          } satisfies ExecutorSourceAddResult;\n    }\n\n    if (input.sourceInput.oauthClient) {\n      yield* upsertSourceOauthClient({\n        rows: input.rows,\n        source: persistedDraft,\n        oauthClient: input.sourceInput.oauthClient,\n        storeSecretMaterial: input.storeSecretMaterial,\n      });\n    }\n\n    if (shouldPromptForExecutorHttpRuntimeCredentialSetup({\n      existing,\n      explicitAuthProvided: input.sourceInput.auth !== undefined,\n      auth: persistedDraft.auth,\n    })) {\n      const requestBaseUrl = trimOrNull(input.baseUrl);\n      const baseUrl = requestBaseUrl ?? input.getLocalServerBaseUrl?.() ?? null;\n      if (baseUrl) {\n        const oauthRequired = yield* startOauth2PkceSourceCredentialSetup({\n          rows: input.rows,\n          sourceStore: input.sourceStore,\n          source: persistedDraft,\n          actorAccountId: input.sourceInput.actorAccountId,\n          executionId: input.sourceInput.executionId,\n          interactionId: input.sourceInput.interactionId,\n          baseUrl,\n          redirectModeOverride: requestBaseUrl ? \"app_callback\" : undefined,\n          storeSecretMaterial: input.storeSecretMaterial,\n        });\n        if (oauthRequired) {\n          return oauthRequired;\n        }\n      }\n\n      const authRequiredSource = yield* updateSourceStatus(input.sourceStore, persistedDraft, {\n        actorAccountId: input.sourceInput.actorAccountId,\n        status: \"auth_required\",\n        lastError: null,\n      });\n\n      return {\n        kind: \"credential_required\",\n        source: authRequiredSource,\n        credentialSlot: \"runtime\",\n      } satisfies ExecutorSourceAddResult;\n    }\n\n    const synced = yield* Effect.either(\n      input.sourceCatalogSync.sync({\n        source: {\n          ...persistedDraft,\n          status: \"connected\",\n        },\n        actorAccountId: input.sourceInput.actorAccountId,\n      }),\n    );\n\n    return yield* Either.match(synced, {\n      onLeft: (error) =>\n        isSourceCredentialRequiredError(error)\n          ? updateSourceStatus(input.sourceStore, persistedDraft, {\n              actorAccountId: input.sourceInput.actorAccountId,\n              status: \"auth_required\",\n              lastError: null,\n            }).pipe(\n              Effect.map((source) =>\n                ({\n                  kind: \"credential_required\",\n                  source,\n                  credentialSlot: error.slot,\n                } satisfies ExecutorSourceAddResult)\n              ),\n            )\n          : updateSourceStatus(input.sourceStore, persistedDraft, {\n              actorAccountId: input.sourceInput.actorAccountId,\n              status: \"error\",\n              lastError: error.message,\n            }).pipe(\n              Effect.zipRight(Effect.fail(error)),\n            ),\n      onRight: () =>\n        updateSourceStatus(input.sourceStore, persistedDraft, {\n          actorAccountId: input.sourceInput.actorAccountId,\n          status: \"connected\",\n          lastError: null,\n        }).pipe(\n          Effect.map((source) =>\n            ({\n              kind: \"connected\",\n              source,\n            } satisfies ExecutorSourceAddResult)\n          ),\n        ),\n    });\n  });\n\nconst connectGoogleDiscoveryBatchInternal = (input: {\n  rows: ControlPlaneStoreShape;\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  sourceInput: ConnectGoogleDiscoveryBatchInput;\n  getLocalServerBaseUrl?: () => string | undefined;\n}): Effect.Effect<ConnectGoogleDiscoveryBatchResult, Error, WorkspaceStorageServices> =>\n  Effect.gen(function* () {\n    if (input.sourceInput.sources.length === 0) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", \"Google batch connect requires at least one source\");\n    }\n\n    const existingSources = yield* input.sourceStore.loadSourcesInWorkspace(\n      input.sourceInput.workspaceId,\n      {\n        actorAccountId: input.sourceInput.actorAccountId,\n      },\n    );\n\n    const persistedTargets = yield* Effect.forEach(\n      input.sourceInput.sources,\n      (sourceInput) =>\n        Effect.gen(function* () {\n          const normalizedService = sourceInput.service.trim();\n          const normalizedVersion = sourceInput.version.trim();\n          const normalizedDiscoveryUrl = normalizeEndpoint(\n            trimOrNull(sourceInput.discoveryUrl)\n              ?? defaultGoogleDiscoveryUrl(normalizedService, normalizedVersion),\n          );\n          const existing = existingSources.find((source) => {\n            if (source.kind !== \"google_discovery\") {\n              return false;\n            }\n\n            const binding = source.binding;\n            return typeof binding.service === \"string\"\n              && typeof binding.version === \"string\"\n              && binding.service.trim() === normalizedService\n              && binding.version.trim() === normalizedVersion;\n          });\n          const chosenName =\n            trimOrNull(sourceInput.name)\n            ?? existing?.name\n            ?? defaultGoogleDiscoverySourceName(normalizedService, normalizedVersion);\n          const chosenNamespace =\n            trimOrNull(sourceInput.namespace)\n            ?? existing?.namespace\n            ?? defaultGoogleDiscoveryNamespace(normalizedService);\n          const chosenScopes = normalizeScopes(\n            sourceInput.scopes\n              ?? (Array.isArray(existing?.binding.scopes)\n                ? existing?.binding.scopes as ReadonlyArray<string>\n                : []),\n          );\n          const existingBinding = existing\n            ? yield* sourceBindingStateFromSource(existing)\n            : null;\n          const now = Date.now();\n\n          const draftSource = existing\n            ? yield* updateSourceFromPayload({\n                source: existing,\n                payload: {\n                  name: chosenName,\n                  endpoint: normalizedDiscoveryUrl,\n                  namespace: chosenNamespace,\n                  status: \"probing\",\n                  enabled: true,\n                  binding: {\n                    service: normalizedService,\n                    version: normalizedVersion,\n                    discoveryUrl: normalizedDiscoveryUrl,\n                    defaultHeaders: existingBinding?.defaultHeaders ?? null,\n                    scopes: [...chosenScopes],\n                  },\n                  importAuthPolicy: \"reuse_runtime\",\n                  importAuth: { kind: \"none\" },\n                  auth: existing.auth.kind === \"provider_grant_ref\" ? existing.auth : { kind: \"none\" },\n                  lastError: null,\n                },\n                now,\n              })\n            : yield* createSourceFromPayload({\n                workspaceId: input.sourceInput.workspaceId,\n                sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n                payload: {\n                  name: chosenName,\n                  kind: \"google_discovery\",\n                  endpoint: normalizedDiscoveryUrl,\n                  namespace: chosenNamespace,\n                  status: \"probing\",\n                  enabled: true,\n                  binding: {\n                    service: normalizedService,\n                    version: normalizedVersion,\n                    discoveryUrl: normalizedDiscoveryUrl,\n                    defaultHeaders: existingBinding?.defaultHeaders ?? null,\n                    scopes: [...chosenScopes],\n                  },\n                  importAuthPolicy: \"reuse_runtime\",\n                  importAuth: { kind: \"none\" },\n                  auth: { kind: \"none\" },\n                },\n                now,\n              });\n\n          const persistedDraft = yield* input.sourceStore.persistSource(draftSource, {\n            actorAccountId: input.sourceInput.actorAccountId,\n          });\n          const providerAuthTarget = yield* resolveRuntimeProviderAuthTarget(persistedDraft);\n          if (providerAuthTarget === null) {\n            return yield* runtimeEffectError(\"sources/source-auth-service\", `Source ${persistedDraft.id} does not support Google shared auth`);\n          }\n\n          return providerAuthTarget;\n        }),\n      { discard: false },\n    );\n\n    const workspaceOauthClient = yield* resolveWorkspaceOauthClientById({\n      rows: input.rows,\n      workspaceId: input.sourceInput.workspaceId,\n      oauthClientId: input.sourceInput.workspaceOauthClientId,\n      providerKey: persistedTargets[0]!.setupConfig.providerKey,\n    });\n    if (workspaceOauthClient === null) {\n      return yield* runtimeEffectError(\"sources/source-auth-service\", `Workspace OAuth client not found: ${input.sourceInput.workspaceOauthClientId}`);\n    }\n\n    const providerAuthResult = yield* connectSourcesWithProviderRuntimeAuth({\n      rows: input.rows,\n      sourceStore: input.sourceStore,\n      sourceCatalogSync: input.sourceCatalogSync,\n      workspaceId: input.sourceInput.workspaceId,\n      actorAccountId: input.sourceInput.actorAccountId,\n      executionId: input.sourceInput.executionId,\n      interactionId: input.sourceInput.interactionId,\n      baseUrl: input.sourceInput.baseUrl,\n      getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n      workspaceOauthClient,\n      targets: persistedTargets,\n    });\n\n    if (providerAuthResult.kind === \"connected\") {\n      return {\n        results: providerAuthResult.sources.map((source) => ({\n          source,\n          status: \"connected\" as const,\n        })),\n        providerOauthSession: null,\n      };\n    }\n\n    return {\n      results: providerAuthResult.sources.map((source) => ({\n        source,\n        status: \"pending_oauth\" as const,\n      })),\n      providerOauthSession: {\n        sessionId: providerAuthResult.sessionId,\n        authorizationUrl: providerAuthResult.authorizationUrl,\n        sourceIds: providerAuthResult.sources.map((source) => source.id),\n      },\n    };\n  });\n\ntype RuntimeSourceAuthServiceShape = {\n  getSourceById: (input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n    actorAccountId?: AccountId | null;\n  }) => Effect.Effect<Source, Error, WorkspaceStorageServices>;\n  getLocalServerBaseUrl: () => string | null;\n  storeSecretMaterial: (input: {\n    purpose: SecretMaterialPurpose;\n    value: string;\n  }) => Effect.Effect<SecretRef, Error, never>;\n  addExecutorSource: (\n    input: ExecutorAddSourceInput,\n    options?: {\n      mcpDiscoveryElicitation?: McpDiscoveryElicitationContext;\n      baseUrl?: string | null;\n    },\n  ) => Effect.Effect<ExecutorSourceAddResult, Error, WorkspaceStorageServices>;\n  connectGoogleDiscoveryBatch: (\n    input: ConnectGoogleDiscoveryBatchInput,\n  ) => Effect.Effect<ConnectGoogleDiscoveryBatchResult, Error, WorkspaceStorageServices>;\n  connectMcpSource: (\n    input: ConnectMcpSourceInput,\n  ) => Effect.Effect<McpSourceConnectResult, Error, WorkspaceStorageServices>;\n  listWorkspaceOauthClients: (input: {\n    workspaceId: WorkspaceId;\n    providerKey: string;\n  }) => Effect.Effect<readonly WorkspaceOauthClient[], Error, WorkspaceStorageServices>;\n  createWorkspaceOauthClient: (\n    input: CreateWorkspaceOauthClientInput,\n  ) => Effect.Effect<WorkspaceOauthClient, Error, WorkspaceStorageServices>;\n  removeWorkspaceOauthClient: (input: {\n    workspaceId: WorkspaceId;\n    oauthClientId: WorkspaceOauthClient[\"id\"];\n  }) => Effect.Effect<boolean, Error, WorkspaceStorageServices>;\n  removeProviderAuthGrant: (input: {\n    workspaceId: WorkspaceId;\n    grantId: ProviderAuthGrant[\"id\"];\n  }) => Effect.Effect<boolean, Error, WorkspaceStorageServices>;\n  startSourceOAuthSession: (\n    input: StartSourceOAuthSessionInput,\n  ) => Effect.Effect<StartSourceOAuthSessionResult, Error, never>;\n  completeSourceOAuthSession: (input: {\n    state: string;\n    code?: string | null;\n    error?: string | null;\n    errorDescription?: string | null;\n  }) => Effect.Effect<CompleteSourceOAuthSessionResult, Error, WorkspaceStorageServices>;\n  completeProviderOauthCallback: (input: {\n    workspaceId: WorkspaceId;\n    actorAccountId?: AccountId | null;\n    state: string;\n    code?: string | null;\n    error?: string | null;\n    errorDescription?: string | null;\n  }) => Effect.Effect<CompleteProviderOauthCallbackResult, Error, WorkspaceStorageServices>;\n  completeSourceCredentialSetup: (input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n    actorAccountId?: AccountId | null;\n    state: string;\n    code?: string | null;\n    error?: string | null;\n    errorDescription?: string | null;\n  }) => Effect.Effect<CompleteSourceCredentialSetupResult, Error, WorkspaceStorageServices>;\n};\n\ntype RuntimeSourceAuthDependencies = {\n  rows: ControlPlaneStoreShape;\n  liveExecutionManager: LiveExecutionManager;\n  sourceStore: RuntimeSourceStore;\n  sourceCatalogSync: RuntimeSourceCatalogSyncShape;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  storeSecretMaterial: StoreSecretMaterial;\n  getLocalServerBaseUrl?: () => string | undefined;\n  localWorkspaceState?: RuntimeLocalWorkspaceState;\n};\n\ntype ProvideLocalWorkspace = <A, E, R>(\n  effect: Effect.Effect<A, E, R>,\n) => Effect.Effect<A, E, R>;\n\ntype RuntimeSourceConnectionServiceShape = Pick<\n  RuntimeSourceAuthServiceShape,\n  | \"getSourceById\"\n  | \"addExecutorSource\"\n  | \"connectGoogleDiscoveryBatch\"\n  | \"connectMcpSource\"\n  | \"listWorkspaceOauthClients\"\n  | \"createWorkspaceOauthClient\"\n  | \"removeWorkspaceOauthClient\"\n  | \"removeProviderAuthGrant\"\n>;\n\ntype RuntimeSourceOAuthSessionServiceShape = Pick<\n  RuntimeSourceAuthServiceShape,\n  | \"startSourceOAuthSession\"\n  | \"completeSourceOAuthSession\"\n  | \"completeProviderOauthCallback\"\n  | \"completeSourceCredentialSetup\"\n>;\n\nconst createRuntimeSourceConnectionService = (\n  input: RuntimeSourceAuthDependencies,\n  provideLocalWorkspace: ProvideLocalWorkspace,\n): RuntimeSourceConnectionServiceShape => {\n  const mirrorLocalSourceResult = (\n    result: ExecutorSourceAddResult,\n  ): Effect.Effect<ExecutorSourceAddResult, Error, WorkspaceStorageServices> =>\n    Effect.succeed(result);\n  const mirrorLocalMcpSourceResult = (\n    result: McpSourceConnectResult,\n  ): Effect.Effect<McpSourceConnectResult, Error, WorkspaceStorageServices> =>\n    Effect.succeed(result);\n\n  return {\n    getSourceById: ({ workspaceId, sourceId, actorAccountId }) =>\n      provideLocalWorkspace(\n        input.sourceStore.loadSourceById({\n          workspaceId,\n          sourceId,\n          actorAccountId,\n        }),\n      ),\n\n    addExecutorSource: (sourceInput, options = undefined) =>\n      provideLocalWorkspace(\n        (isExecutorGoogleDiscoverySourceInput(sourceInput)\n          ? addExecutorGoogleDiscoverySource({\n              rows: input.rows,\n              sourceStore: input.sourceStore,\n              sourceCatalogSync: input.sourceCatalogSync,\n              sourceInput,\n              storeSecretMaterial: input.storeSecretMaterial,\n              resolveSecretMaterial: input.resolveSecretMaterial,\n              getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n              baseUrl: options?.baseUrl,\n            })\n          : isExecutorHttpEndpointSourceInput(sourceInput)\n          ? addExecutorHttpSource({\n              rows: input.rows,\n              sourceStore: input.sourceStore,\n              sourceCatalogSync: input.sourceCatalogSync,\n              sourceInput,\n              storeSecretMaterial: input.storeSecretMaterial,\n              resolveSecretMaterial: input.resolveSecretMaterial,\n              getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n              baseUrl: options?.baseUrl,\n            })\n          : isExecutorMcpSourceInput(sourceInput)\n          ? connectMcpSourceInternal({\n              rows: input.rows,\n              sourceStore: input.sourceStore,\n              sourceCatalogSync: input.sourceCatalogSync,\n              getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n              workspaceId: sourceInput.workspaceId,\n              actorAccountId: sourceInput.actorAccountId,\n              executionId: sourceInput.executionId,\n              interactionId: sourceInput.interactionId,\n              endpoint: sourceInput.endpoint,\n              name: sourceInput.name,\n              namespace: sourceInput.namespace,\n              transport: sourceInput.transport,\n              queryParams: sourceInput.queryParams,\n              headers: sourceInput.headers,\n              command: sourceInput.command,\n              args: sourceInput.args,\n              env: sourceInput.env,\n              cwd: sourceInput.cwd,\n              mcpDiscoveryElicitation: options?.mcpDiscoveryElicitation,\n              baseUrl: options?.baseUrl,\n              resolveSecretMaterial: input.resolveSecretMaterial,\n            })\n          : Effect.fail(runtimeEffectError(\"sources/source-auth-service\", `Unsupported executor source input: ${JSON.stringify(sourceInput)}`))).pipe(\n              Effect.flatMap(mirrorLocalSourceResult),\n            ),\n      ),\n\n    connectGoogleDiscoveryBatch: (sourceInput) =>\n      provideLocalWorkspace(\n        connectGoogleDiscoveryBatchInternal({\n          rows: input.rows,\n          sourceStore: input.sourceStore,\n          sourceCatalogSync: input.sourceCatalogSync,\n          sourceInput,\n          getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n        }),\n      ),\n\n    connectMcpSource: (sourceInput) =>\n      provideLocalWorkspace(\n        connectMcpSourceInternal({\n          rows: input.rows,\n          sourceStore: input.sourceStore,\n          sourceCatalogSync: input.sourceCatalogSync,\n          getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n          workspaceId: sourceInput.workspaceId,\n          actorAccountId: sourceInput.actorAccountId,\n          sourceId: sourceInput.sourceId,\n          executionId: null,\n          interactionId: null,\n          endpoint: sourceInput.endpoint,\n          name: sourceInput.name,\n          namespace: sourceInput.namespace,\n          enabled: sourceInput.enabled,\n          transport: sourceInput.transport,\n          queryParams: sourceInput.queryParams,\n          headers: sourceInput.headers,\n          command: sourceInput.command,\n          args: sourceInput.args,\n          env: sourceInput.env,\n          cwd: sourceInput.cwd,\n          baseUrl: sourceInput.baseUrl,\n          resolveSecretMaterial: input.resolveSecretMaterial,\n        }).pipe(\n          Effect.flatMap(mirrorLocalMcpSourceResult),\n        ),\n      ),\n\n    listWorkspaceOauthClients: ({ workspaceId, providerKey }) =>\n      provideLocalWorkspace(\n        input.rows.workspaceOauthClients.listByWorkspaceAndProvider({\n          workspaceId,\n          providerKey,\n        }),\n      ),\n\n    createWorkspaceOauthClient: ({ workspaceId, providerKey, label, oauthClient }) =>\n      provideLocalWorkspace(\n        Effect.gen(function* () {\n          const sourceAdapter = findSourceAdapterByProviderKey(providerKey);\n          const created = yield* createWorkspaceOauthClient({\n            rows: input.rows,\n            workspaceId,\n            providerKey,\n            oauthClient,\n            label,\n            normalizeOauthClient: sourceAdapter?.normalizeOauthClientInput,\n            storeSecretMaterial: input.storeSecretMaterial,\n          });\n          const stored = yield* input.rows.workspaceOauthClients.getById(created.id);\n          if (Option.isNone(stored)) {\n            return yield* runtimeEffectError(\"sources/source-auth-service\", `Workspace OAuth client ${created.id} was not persisted`);\n          }\n\n          return stored.value;\n        }),\n      ),\n\n    removeWorkspaceOauthClient: ({ workspaceId, oauthClientId }) =>\n      provideLocalWorkspace(\n        Effect.gen(function* () {\n          const oauthClient = yield* input.rows.workspaceOauthClients.getById(oauthClientId);\n          if (Option.isNone(oauthClient) || oauthClient.value.workspaceId !== workspaceId) {\n            return false;\n          }\n\n          const grants = yield* input.rows.providerAuthGrants.listByWorkspaceId(workspaceId);\n          const dependentGrant = grants.find((grant) => grant.oauthClientId === oauthClientId);\n          if (dependentGrant) {\n            return yield* runtimeEffectError(\"sources/source-auth-service\", \n                `Workspace OAuth client ${oauthClientId} is still referenced by provider grant ${dependentGrant.id}`,\n              );\n          }\n\n          const secretRef = sourceOauthClientSecretRef(oauthClient.value);\n          const removed = yield* input.rows.workspaceOauthClients.removeById(oauthClientId);\n          if (removed && secretRef) {\n            const deleteSecretMaterial = createDefaultSecretMaterialDeleter({\n              rows: input.rows,\n            });\n            yield* deleteSecretMaterial(secretRef).pipe(\n              Effect.either,\n              Effect.ignore,\n            );\n          }\n\n          return removed;\n        }),\n      ),\n\n    removeProviderAuthGrant: ({ workspaceId, grantId }) =>\n      provideLocalWorkspace(\n        removeProviderAuthGrantInternal({\n          rows: input.rows,\n          sourceStore: input.sourceStore,\n          workspaceId,\n          grantId,\n        }),\n      ),\n  };\n};\n\nconst createRuntimeSourceOAuthSessionService = (\n  input: RuntimeSourceAuthDependencies,\n  provideLocalWorkspace: ProvideLocalWorkspace,\n): RuntimeSourceOAuthSessionServiceShape => ({\n  startSourceOAuthSession: (oauthInput) =>\n    Effect.gen(function* () {\n      const resolvedBaseUrl = trimOrNull(oauthInput.baseUrl) ?? input.getLocalServerBaseUrl?.() ?? null;\n      if (!resolvedBaseUrl) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"Local executor server base URL is unavailable for OAuth setup\");\n      }\n\n      const sessionId = SourceAuthSessionIdSchema.make(`src_auth_${crypto.randomUUID()}`);\n      const state = createSourceOAuthSessionState({\n        displayName: oauthInput.displayName,\n      });\n      const redirectUrl = resolveSourceOAuthCallbackUrl({\n        baseUrl: resolvedBaseUrl,\n      });\n      const endpoint = normalizeEndpoint(oauthInput.provider.endpoint);\n      const oauthStart = yield* startMcpOAuthAuthorization({\n        endpoint,\n        redirectUrl,\n        state,\n      });\n      const now = Date.now();\n\n      yield* input.rows.sourceAuthSessions.upsert({\n        id: sessionId,\n        workspaceId: oauthInput.workspaceId,\n        sourceId: SourceIdSchema.make(`oauth_draft_${crypto.randomUUID()}`),\n        actorAccountId: oauthInput.actorAccountId ?? null,\n        credentialSlot: \"runtime\",\n        executionId: null,\n        interactionId: null,\n        providerKind: \"mcp_oauth\",\n        status: \"pending\",\n        state,\n        sessionDataJson: encodeMcpSourceAuthSessionData({\n          kind: \"mcp_oauth\",\n          endpoint,\n          redirectUri: redirectUrl,\n          scope: oauthInput.provider.kind,\n          resourceMetadataUrl: oauthStart.resourceMetadataUrl,\n          authorizationServerUrl: oauthStart.authorizationServerUrl,\n          resourceMetadata: oauthStart.resourceMetadata,\n          authorizationServerMetadata: oauthStart.authorizationServerMetadata,\n          clientInformation: oauthStart.clientInformation,\n          codeVerifier: oauthStart.codeVerifier,\n          authorizationUrl: oauthStart.authorizationUrl,\n        }),\n        errorText: null,\n        completedAt: null,\n        createdAt: now,\n        updatedAt: now,\n      });\n\n      return {\n        sessionId,\n        authorizationUrl: oauthStart.authorizationUrl,\n      } satisfies StartSourceOAuthSessionResult;\n    }),\n\n  completeSourceOAuthSession: ({ state, code, error, errorDescription }) =>\n    provideLocalWorkspace(Effect.gen(function* () {\n      const sessionOption = yield* input.rows.sourceAuthSessions.getByState(state);\n      if (Option.isNone(sessionOption)) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session not found for state ${state}`);\n      }\n\n      const session = sessionOption.value;\n      const sessionData = decodeMcpSourceAuthSessionData(session);\n      if (session.status === \"completed\") {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} is already completed`);\n      }\n\n      if (session.status !== \"pending\") {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} is not pending`);\n      }\n\n      if (trimOrNull(error) !== null) {\n        const reason = trimOrNull(errorDescription) ?? trimOrNull(error) ?? \"OAuth authorization failed\";\n        const failedAt = Date.now();\n\n        yield* input.rows.sourceAuthSessions.update(\n          session.id,\n          createTerminalSourceAuthSessionPatch({\n            sessionDataJson: session.sessionDataJson,\n            status: \"failed\",\n            now: failedAt,\n            errorText: reason,\n          }),\n        );\n\n        return yield* runtimeEffectError(\"sources/source-auth-service\", reason);\n      }\n\n      const authorizationCode = trimOrNull(code);\n      if (authorizationCode === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"Missing OAuth authorization code\");\n      }\n\n      if (sessionData.codeVerifier === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"OAuth session is missing the PKCE code verifier\");\n      }\n\n      if (sessionData.scope !== null && sessionData.scope !== \"mcp\") {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Unsupported OAuth provider: ${sessionData.scope}`);\n      }\n\n      const exchanged = yield* exchangeMcpOAuthAuthorizationCode({\n        session: {\n          endpoint: sessionData.endpoint,\n          redirectUrl: sessionData.redirectUri,\n          codeVerifier: sessionData.codeVerifier,\n          resourceMetadataUrl: sessionData.resourceMetadataUrl,\n          authorizationServerUrl: sessionData.authorizationServerUrl,\n          resourceMetadata: sessionData.resourceMetadata,\n          authorizationServerMetadata: sessionData.authorizationServerMetadata,\n          clientInformation: sessionData.clientInformation,\n        },\n        code: authorizationCode,\n      });\n\n      const oauthSecretName = resolveSourceOAuthSecretName({\n        displayName: readSourceOAuthSessionDisplayName(session.state),\n        endpoint: sessionData.endpoint,\n      });\n      const accessTokenRef = yield* input.storeSecretMaterial({\n        purpose: \"oauth_access_token\",\n        value: exchanged.tokens.access_token,\n        name: oauthSecretName,\n      });\n      const refreshTokenRef = exchanged.tokens.refresh_token\n        ? yield* input.storeSecretMaterial({\n            purpose: \"oauth_refresh_token\",\n            value: exchanged.tokens.refresh_token,\n            name: `${oauthSecretName} Refresh`,\n          })\n        : null;\n\n      const auth = {\n        kind: \"oauth2\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        accessToken: accessTokenRef,\n        refreshToken: refreshTokenRef,\n      } satisfies Extract<Source[\"auth\"], { kind: \"oauth2\" }>;\n\n      yield* input.rows.sourceAuthSessions.update(\n        session.id,\n        createTerminalSourceAuthSessionPatch({\n          sessionDataJson: mergeMcpSourceAuthSessionData({\n            session,\n            patch: {\n              codeVerifier: null,\n              authorizationUrl: null,\n              resourceMetadataUrl: exchanged.resourceMetadataUrl,\n              authorizationServerUrl: exchanged.authorizationServerUrl,\n              resourceMetadata: exchanged.resourceMetadata,\n              authorizationServerMetadata: exchanged.authorizationServerMetadata,\n            },\n          }),\n          status: \"completed\",\n          now: Date.now(),\n          errorText: null,\n        }),\n      );\n\n      return {\n        sessionId: session.id,\n        auth,\n      } satisfies CompleteSourceOAuthSessionResult;\n    })),\n\n  completeProviderOauthCallback: ({ workspaceId, actorAccountId, state, code, error, errorDescription }) =>\n    provideLocalWorkspace(Effect.gen(function* () {\n      const sessionOption = yield* input.rows.sourceAuthSessions.getByState(state);\n      if (Option.isNone(sessionOption)) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session not found for state ${state}`);\n      }\n\n      const session = sessionOption.value;\n      if (session.workspaceId !== workspaceId) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} does not match workspaceId=${workspaceId}`);\n      }\n      if ((session.actorAccountId ?? null) !== (actorAccountId ?? null)) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} does not match the active account`);\n      }\n      if (session.providerKind !== \"oauth2_provider_batch\") {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} is not a provider batch OAuth session`);\n      }\n      if (session.status === \"completed\") {\n        const sessionData = decodeProviderOauthBatchSourceAuthSessionData(session);\n        const sources = yield* Effect.forEach(\n          sessionData.targetSources,\n          (target) =>\n            input.sourceStore.loadSourceById({\n              workspaceId,\n              sourceId: target.sourceId,\n              actorAccountId,\n            }),\n          { discard: false },\n        );\n        return {\n          sessionId: session.id,\n          sources,\n        } satisfies CompleteProviderOauthCallbackResult;\n      }\n      if (session.status !== \"pending\") {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} is not pending`);\n      }\n\n      const sessionData = decodeProviderOauthBatchSourceAuthSessionData(session);\n      if (trimOrNull(error) !== null) {\n        const reason = trimOrNull(errorDescription) ?? trimOrNull(error) ?? \"OAuth authorization failed\";\n        yield* input.rows.sourceAuthSessions.update(\n          session.id,\n          createTerminalSourceAuthSessionPatch({\n            sessionDataJson: session.sessionDataJson,\n            status: \"failed\",\n            now: Date.now(),\n            errorText: reason,\n          }),\n        );\n        return yield* runtimeEffectError(\"sources/source-auth-service\", reason);\n      }\n\n      const authorizationCode = trimOrNull(code);\n      if (authorizationCode === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"Missing OAuth authorization code\");\n      }\n      if (sessionData.codeVerifier === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"OAuth session is missing the PKCE code verifier\");\n      }\n\n      const oauthClient = yield* resolveWorkspaceOauthClientById({\n        rows: input.rows,\n        workspaceId,\n        oauthClientId: sessionData.oauthClientId,\n        providerKey: sessionData.providerKey,\n      });\n      if (oauthClient === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Workspace OAuth client not found: ${sessionData.oauthClientId}`);\n      }\n\n      let clientSecret: string | null = null;\n      if (oauthClient.clientSecret) {\n        clientSecret = yield* input.resolveSecretMaterial({\n          ref: oauthClient.clientSecret,\n        });\n      }\n\n      const exchanged = yield* exchangeOAuth2AuthorizationCode({\n        tokenEndpoint: sessionData.tokenEndpoint,\n        clientId: oauthClient.clientId,\n        clientAuthentication: sessionData.clientAuthentication,\n        clientSecret,\n        redirectUri: sessionData.redirectUri,\n        codeVerifier: sessionData.codeVerifier ?? \"\",\n        code: authorizationCode,\n      });\n\n      const availableGrants = yield* input.rows.providerAuthGrants.listByWorkspaceActorAndProvider({\n        workspaceId,\n        actorAccountId: actorAccountId ?? null,\n        providerKey: sessionData.providerKey,\n      });\n      const existingGrant = availableGrants.find(\n        (grant) => grant.oauthClientId === sessionData.oauthClientId,\n      ) ?? null;\n\n      const grantedScopes = normalizeScopes(\n        trimOrNull(exchanged.scope)\n          ? exchanged.scope!.split(/\\s+/)\n          : sessionData.scopes,\n      );\n      const nextGrant = yield* upsertProviderAuthGrant({\n        rows: input.rows,\n        workspaceId,\n        actorAccountId,\n        providerKey: sessionData.providerKey,\n        oauthClientId: sessionData.oauthClientId,\n        tokenEndpoint: sessionData.tokenEndpoint,\n        clientAuthentication: sessionData.clientAuthentication,\n        headerName: sessionData.headerName,\n        prefix: sessionData.prefix,\n        grantedScopes,\n        refreshToken: trimOrNull(exchanged.refresh_token),\n        existingGrant,\n        storeSecretMaterial: input.storeSecretMaterial,\n      });\n\n      const targets = yield* Effect.forEach(\n        sessionData.targetSources,\n        (target) =>\n          Effect.map(\n            input.sourceStore.loadSourceById({\n              workspaceId,\n              sourceId: target.sourceId,\n              actorAccountId,\n            }),\n            (source) => ({\n              source,\n              requiredScopes: target.requiredScopes,\n            }),\n          ),\n        { discard: false },\n      );\n\n      const connectedSources = yield* attachProviderGrantToSources({\n        sourceStore: input.sourceStore,\n        sourceCatalogSync: input.sourceCatalogSync,\n        actorAccountId,\n        grantId: nextGrant.id,\n        providerKey: nextGrant.providerKey,\n        headerName: nextGrant.headerName,\n        prefix: nextGrant.prefix,\n        targets,\n      });\n\n      yield* input.rows.sourceAuthSessions.update(\n        session.id,\n        createTerminalSourceAuthSessionPatch({\n          sessionDataJson: mergeProviderOauthBatchSourceAuthSessionData({\n            session,\n            patch: {\n              codeVerifier: null,\n              authorizationUrl: null,\n            },\n          }),\n          status: \"completed\",\n          now: Date.now(),\n          errorText: null,\n        }),\n      );\n\n      return {\n        sessionId: session.id,\n        sources: connectedSources,\n      } satisfies CompleteProviderOauthCallbackResult;\n    })),\n\n  completeSourceCredentialSetup: ({ workspaceId, sourceId, actorAccountId, state, code, error, errorDescription }) =>\n    provideLocalWorkspace(Effect.gen(function* () {\n      const sessionOption = yield* input.rows.sourceAuthSessions.getByState(state);\n      if (Option.isNone(sessionOption)) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session not found for state ${state}`);\n      }\n\n      const session = sessionOption.value;\n      if (session.workspaceId !== workspaceId || session.sourceId !== sourceId) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \n            `Source auth session ${session.id} does not match workspaceId=${workspaceId} sourceId=${sourceId}`,\n          );\n      }\n      if (\n        actorAccountId !== undefined\n        && (session.actorAccountId ?? null) !== (actorAccountId ?? null)\n      ) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} does not match the active account`);\n      }\n\n      const source = yield* input.sourceStore.loadSourceById({\n        workspaceId: session.workspaceId,\n        sourceId: session.sourceId,\n        actorAccountId: session.actorAccountId,\n      });\n\n      if (session.status === \"completed\") {\n        return {\n          sessionId: session.id,\n          source,\n        } satisfies CompleteSourceCredentialSetupResult;\n      }\n\n      if (session.status !== \"pending\") {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", `Source auth session ${session.id} is not pending`);\n      }\n\n      const sessionData = session.providerKind === \"oauth2_pkce\"\n        ? decodeOauth2PkceSourceAuthSessionData(session)\n        : decodeMcpSourceAuthSessionData(session);\n\n      if (trimOrNull(error) !== null) {\n        const reason = trimOrNull(errorDescription) ?? trimOrNull(error) ?? \"OAuth authorization failed\";\n        const failedAt = Date.now();\n\n        yield* input.rows.sourceAuthSessions.update(\n          session.id,\n          createTerminalSourceAuthSessionPatch({\n            sessionDataJson: session.sessionDataJson,\n            status: \"failed\",\n            now: failedAt,\n            errorText: reason,\n          }),\n        );\n        const failedSource = yield* updateSourceStatus(input.sourceStore, source, {\n          actorAccountId: session.actorAccountId,\n          status: \"error\",\n          lastError: reason,\n        });\n        yield* input.sourceCatalogSync.sync({\n          source: failedSource,\n          actorAccountId: session.actorAccountId,\n        });\n        yield* completeLiveInteraction({\n          rows: input.rows,\n          liveExecutionManager: input.liveExecutionManager,\n          session,\n          response: {\n            action: \"cancel\",\n            reason,\n          },\n        });\n\n        return yield* runtimeEffectError(\"sources/source-auth-service\", reason);\n      }\n\n      const authorizationCode = trimOrNull(code);\n      if (authorizationCode === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"Missing OAuth authorization code\");\n      }\n\n      if (sessionData.codeVerifier === null) {\n        return yield* runtimeEffectError(\"sources/source-auth-service\", \"OAuth session is missing the PKCE code verifier\");\n      }\n\n      const now = Date.now();\n      let connectedSource: Source;\n      if (session.providerKind === \"oauth2_pkce\") {\n        const oauthSessionData = decodeOauth2PkceSourceAuthSessionData(session);\n        let clientSecret: string | null = null;\n        if (oauthSessionData.clientSecret) {\n          clientSecret = yield* input.resolveSecretMaterial({\n            ref: oauthSessionData.clientSecret,\n          });\n        }\n\n        const exchanged = yield* exchangeOAuth2AuthorizationCode({\n          tokenEndpoint: oauthSessionData.tokenEndpoint,\n          clientId: oauthSessionData.clientId,\n          clientAuthentication: oauthSessionData.clientAuthentication,\n          clientSecret,\n          redirectUri: oauthSessionData.redirectUri,\n          codeVerifier: oauthSessionData.codeVerifier ?? \"\",\n          code: authorizationCode,\n        });\n        const refreshToken = trimOrNull(exchanged.refresh_token);\n        if (refreshToken === null) {\n          return yield* runtimeEffectError(\"sources/source-auth-service\", \"OAuth authorization did not return a refresh token\");\n        }\n\n        const refreshTokenRef = yield* input.storeSecretMaterial({\n          purpose: \"oauth_refresh_token\",\n          value: refreshToken,\n          name: `${source.name} Refresh`,\n        });\n        const grantedScopes = trimOrNull(exchanged.scope)\n          ? exchanged.scope!.split(/\\s+/).filter((scope) => scope.length > 0)\n          : [...oauthSessionData.scopes];\n        connectedSource = yield* updateSourceStatus(input.sourceStore, source, {\n          actorAccountId: session.actorAccountId,\n          status: \"connected\",\n          lastError: null,\n          auth: {\n            kind: \"oauth2_authorized_user\",\n            headerName: oauthSessionData.headerName,\n            prefix: oauthSessionData.prefix,\n            tokenEndpoint: oauthSessionData.tokenEndpoint,\n            clientId: oauthSessionData.clientId,\n            clientAuthentication: oauthSessionData.clientAuthentication,\n            clientSecret: oauthSessionData.clientSecret,\n            refreshToken: refreshTokenRef,\n            grantSet: grantedScopes,\n          },\n        });\n        const authArtifact = yield* input.rows.authArtifacts.getByWorkspaceSourceAndActor({\n          workspaceId: connectedSource.workspaceId,\n          sourceId: connectedSource.id,\n          actorAccountId: session.actorAccountId ?? null,\n          slot: \"runtime\",\n        });\n        if (Option.isSome(authArtifact)) {\n          yield* upsertOauth2AuthorizedUserLeaseFromTokenResponse({\n            rows: input.rows,\n            artifact: authArtifact.value,\n            tokenResponse: exchanged,\n          });\n        }\n\n        yield* input.rows.sourceAuthSessions.update(\n          session.id,\n          createTerminalSourceAuthSessionPatch({\n            sessionDataJson: mergeOauth2PkceSourceAuthSessionData({\n              session,\n              patch: {\n                codeVerifier: null,\n                authorizationUrl: null,\n              },\n            }),\n            status: \"completed\",\n            now,\n            errorText: null,\n          }),\n        );\n      } else {\n        const mcpSessionData = decodeMcpSourceAuthSessionData(session);\n        const exchanged = yield* exchangeMcpOAuthAuthorizationCode({\n          session: {\n            endpoint: mcpSessionData.endpoint,\n            redirectUrl: mcpSessionData.redirectUri,\n            codeVerifier: mcpSessionData.codeVerifier ?? \"\",\n            resourceMetadataUrl: mcpSessionData.resourceMetadataUrl,\n            authorizationServerUrl: mcpSessionData.authorizationServerUrl,\n            resourceMetadata: mcpSessionData.resourceMetadata,\n            authorizationServerMetadata: mcpSessionData.authorizationServerMetadata,\n            clientInformation: mcpSessionData.clientInformation,\n          },\n          code: authorizationCode,\n        });\n\n        const oauthSecretName = resolveSourceOAuthSecretName({\n          displayName: source.name,\n          endpoint: source.endpoint,\n        });\n        const accessTokenRef = yield* input.storeSecretMaterial({\n          purpose: \"oauth_access_token\",\n          value: exchanged.tokens.access_token,\n          name: oauthSecretName,\n        });\n        const refreshTokenRef = exchanged.tokens.refresh_token\n          ? yield* input.storeSecretMaterial({\n              purpose: \"oauth_refresh_token\",\n              value: exchanged.tokens.refresh_token,\n              name: `${oauthSecretName} Refresh`,\n            })\n          : null;\n\n        connectedSource = yield* updateSourceStatus(input.sourceStore, source, {\n          actorAccountId: session.actorAccountId,\n          status: \"connected\",\n          lastError: null,\n          auth: createPersistedMcpOAuthSourceAuth({\n            redirectUri: mcpSessionData.redirectUri,\n            accessToken: accessTokenRef,\n            refreshToken: refreshTokenRef,\n            tokenType: exchanged.tokens.token_type,\n            expiresIn:\n              typeof exchanged.tokens.expires_in === \"number\"\n              && Number.isFinite(exchanged.tokens.expires_in)\n                ? exchanged.tokens.expires_in\n                : null,\n            scope: exchanged.tokens.scope ?? null,\n            resourceMetadataUrl: exchanged.resourceMetadataUrl,\n            authorizationServerUrl: exchanged.authorizationServerUrl,\n            resourceMetadata: exchanged.resourceMetadata,\n            authorizationServerMetadata: exchanged.authorizationServerMetadata,\n            clientInformation: exchanged.clientInformation,\n          }),\n        });\n\n        yield* input.rows.sourceAuthSessions.update(\n          session.id,\n          createTerminalSourceAuthSessionPatch({\n            sessionDataJson: mergeMcpSourceAuthSessionData({\n              session,\n              patch: {\n                codeVerifier: null,\n                authorizationUrl: null,\n                resourceMetadataUrl: exchanged.resourceMetadataUrl,\n                authorizationServerUrl: exchanged.authorizationServerUrl,\n                resourceMetadata: exchanged.resourceMetadata,\n                authorizationServerMetadata: exchanged.authorizationServerMetadata,\n              },\n            }),\n            status: \"completed\",\n            now,\n            errorText: null,\n          }),\n        );\n      }\n      const indexed = yield* Effect.either(\n        input.sourceCatalogSync.sync({\n          source: connectedSource,\n          actorAccountId: session.actorAccountId,\n        }),\n      );\n      yield* Either.match(indexed, {\n        onLeft: (error) =>\n          updateSourceStatus(input.sourceStore, connectedSource, {\n            actorAccountId: session.actorAccountId,\n            status: \"error\",\n            lastError: error.message,\n          }).pipe(\n            Effect.zipRight(Effect.fail(error)),\n          ),\n        onRight: () => Effect.succeed(undefined),\n      });\n\n      yield* completeLiveInteraction({\n        rows: input.rows,\n        liveExecutionManager: input.liveExecutionManager,\n        session,\n        response: {\n          action: \"accept\",\n        },\n      });\n\n      return {\n        sessionId: session.id,\n        source: connectedSource,\n      } satisfies CompleteSourceCredentialSetupResult;\n    })),\n});\n\nexport const createRuntimeSourceAuthService = (input: RuntimeSourceAuthDependencies) => {\n  const provideLocalWorkspace: ProvideLocalWorkspace = (effect) =>\n    provideOptionalRuntimeLocalWorkspace(effect, input.localWorkspaceState);\n  const sourceConnection = createRuntimeSourceConnectionService(\n    input,\n    provideLocalWorkspace,\n  );\n  const sourceOAuthSessions = createRuntimeSourceOAuthSessionService(\n    input,\n    provideLocalWorkspace,\n  );\n\n  return {\n    getLocalServerBaseUrl: () => input.getLocalServerBaseUrl?.() ?? null,\n\n    storeSecretMaterial: ({ purpose, value }) =>\n      input.storeSecretMaterial({\n        purpose,\n        value,\n      }),\n\n    ...sourceConnection,\n    ...sourceOAuthSessions,\n  } satisfies RuntimeSourceAuthServiceShape;\n};\n\nexport type RuntimeSourceAuthService = RuntimeSourceAuthServiceShape;\n\nexport class RuntimeSourceAuthServiceTag extends Context.Tag(\n  \"#runtime/RuntimeSourceAuthServiceTag\",\n)<RuntimeSourceAuthServiceTag, RuntimeSourceAuthService>() {}\n\nexport const RuntimeSourceAuthServiceLive = (input: {\n  getLocalServerBaseUrl?: () => string | undefined;\n} = {}) =>\n  Layer.effect(\n    RuntimeSourceAuthServiceTag,\n    Effect.gen(function* () {\n      const rows = yield* ControlPlaneStore;\n      const liveExecutionManager = yield* LiveExecutionManagerService;\n      const sourceStore = yield* RuntimeSourceStoreService;\n      const sourceCatalogSync = yield* RuntimeSourceCatalogSyncService;\n      const resolveSecretMaterial = yield* SecretMaterialResolverService;\n      const storeSecretMaterial = yield* SecretMaterialStorerService;\n      const runtimeLocalWorkspace = yield* getRuntimeLocalWorkspaceOption();\n\n      return createRuntimeSourceAuthService({\n        rows,\n        liveExecutionManager,\n        sourceStore,\n        sourceCatalogSync,\n        resolveSecretMaterial,\n        storeSecretMaterial,\n        getLocalServerBaseUrl: input.getLocalServerBaseUrl,\n        localWorkspaceState: runtimeLocalWorkspace ?? undefined,\n      });\n    }),\n  );\n\nexport const ExecutorAddSourceResultSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"connected\"),\n    source: SourceSchema,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"credential_required\"),\n    source: SourceSchema,\n    credentialSlot: Schema.Literal(\"runtime\", \"import\"),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"oauth_required\"),\n    source: SourceSchema,\n    sessionId: SourceAuthSessionIdSchema,\n    authorizationUrl: Schema.String,\n  }),\n);\n\nexport type ExecutorAddSourceResult = typeof ExecutorAddSourceResultSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-credential-interactions.ts",
    "content": "import { SecretRefSchema, type SecretRef } from \"#schema\";\nimport * as Schema from \"effect/Schema\";\n\nexport const SourceCredentialSelectionContentSchema = Schema.Union(\n  Schema.Struct({\n    authKind: Schema.Literal(\"none\"),\n  }),\n  Schema.Struct({\n    authKind: Schema.Literal(\"bearer\"),\n    tokenRef: SecretRefSchema,\n  }),\n);\n\nexport type SourceCredentialSelectionContent =\n  typeof SourceCredentialSelectionContentSchema.Type;\n\nexport const decodeSourceCredentialSelectionContent = Schema.decodeUnknownSync(\n  SourceCredentialSelectionContentSchema,\n);\n\nexport const createSourceCredentialSelectionNoneContent =\n  (): SourceCredentialSelectionContent => ({\n    authKind: \"none\",\n  });\n\nexport const createSourceCredentialSelectionBearerContent = (\n  tokenRef: SecretRef,\n): SourceCredentialSelectionContent => ({\n  authKind: \"bearer\",\n  tokenRef,\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-definitions.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  CredentialIdSchema,\n  decodeBuiltInAuthArtifactConfig,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n  type Source,\n} from \"#schema\";\n\nimport {\n  createSourceFromPayload,\n  projectSourceFromStorage,\n  splitSourceForStorage,\n  stableSourceCatalogId,\n  stableSourceCatalogRevisionId,\n  updateSourceFromPayload,\n} from \"./source-definitions\";\nimport { namespaceFromSourceName } from \"./source-names\";\n\nconst openApiBinding = (\n  specUrl = \"https://api.github.com/openapi.json\",\n  defaultHeaders: Record<string, string> | null = null,\n) => ({\n  specUrl,\n  defaultHeaders,\n});\n\nconst graphqlBinding = (\n  defaultHeaders: Record<string, string> | null = null,\n) => ({\n  defaultHeaders,\n});\n\ntype McpRemoteBindingInput = {\n  transport?: \"auto\" | \"streamable-http\" | \"sse\" | null;\n  queryParams?: Record<string, string> | null;\n  headers?: Record<string, string> | null;\n  command?: never;\n  args?: never;\n  env?: never;\n  cwd?: never;\n};\n\ntype McpStdioBindingInput = {\n  transport: \"stdio\";\n  command?: string | null;\n  args?: ReadonlyArray<string> | null;\n  env?: Record<string, string> | null;\n  cwd?: string | null;\n  queryParams?: never;\n  headers?: never;\n};\n\nconst mcpBinding = (\n  input: McpRemoteBindingInput | McpStdioBindingInput = {},\n) => {\n  if (input.transport === \"stdio\") {\n    return {\n      transport: \"stdio\" as const,\n      queryParams: null,\n      headers: null,\n      command: input.command ?? null,\n      args: input.args ?? null,\n      env: input.env ?? null,\n      cwd: input.cwd ?? null,\n    };\n  }\n\n  return {\n    transport: input.transport ?? null,\n    queryParams: input.queryParams ?? null,\n    headers: input.headers ?? null,\n    command: null,\n    args: null,\n    env: null,\n    cwd: null,\n  };\n};\n\nconst makeSource = (overrides: Partial<Source> = {}): Source => ({\n  id: SourceIdSchema.make(\"src_source_definitions\"),\n  workspaceId: WorkspaceIdSchema.make(\"ws_source_definitions\"),\n  name: \"GitHub\",\n  kind: \"openapi\",\n  endpoint: \"https://api.github.com\",\n  status: \"connected\",\n  enabled: true,\n  namespace: \"github\",\n  bindingVersion: 1,\n  binding: openApiBinding(),\n  importAuthPolicy: \"reuse_runtime\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: null,\n  lastError: null,\n  createdAt: 1000,\n  updatedAt: 1000,\n  ...overrides,\n});\n\ndescribe(\"source-definitions\", () => {\n  describe(\"stable catalog ids\", () => {\n    it(\"is deterministic across calls and ignores source name/workspace\", () => {\n      const source = makeSource();\n      const renamed = makeSource({\n        name: \"Renamed GitHub\",\n      });\n      const differentWorkspace = makeSource({\n        workspaceId: WorkspaceIdSchema.make(\"ws_source_definitions_other\"),\n      });\n\n      expect(stableSourceCatalogId(source)).toBe(stableSourceCatalogId(source));\n      expect(stableSourceCatalogRevisionId(source)).toBe(\n        stableSourceCatalogRevisionId(source),\n      );\n      expect(stableSourceCatalogId(renamed)).toBe(\n        stableSourceCatalogId(source),\n      );\n      expect(stableSourceCatalogRevisionId(renamed)).toBe(\n        stableSourceCatalogRevisionId(source),\n      );\n      expect(stableSourceCatalogId(differentWorkspace)).toBe(\n        stableSourceCatalogId(source),\n      );\n      expect(stableSourceCatalogRevisionId(differentWorkspace)).toBe(\n        stableSourceCatalogRevisionId(source),\n      );\n    });\n\n    it(\"changes catalog and revision ids when the source config changes\", () => {\n      const source = makeSource();\n      const changedEndpoint = makeSource({\n        endpoint: \"https://example.com\",\n        binding: openApiBinding(\"https://example.com/openapi.json\"),\n      });\n\n      expect(stableSourceCatalogId(changedEndpoint)).not.toBe(\n        stableSourceCatalogId(source),\n      );\n      expect(stableSourceCatalogRevisionId(changedEndpoint)).not.toBe(\n        stableSourceCatalogRevisionId(source),\n      );\n    });\n  });\n\n  describe(\"payload normalization and validation\", () => {\n    it.effect(\n      \"defaults created sources to draft/enabled and trims fields\",\n      () =>\n        Effect.gen(function* () {\n          const source = yield* createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_create_defaults\"),\n            sourceId: SourceIdSchema.make(\"src_create_defaults\"),\n            payload: {\n              name: \"  GitHub  \",\n              kind: \"openapi\",\n              endpoint: \" https://api.github.com \",\n              binding: openApiBinding(\" https://api.github.com/openapi.json \"),\n            },\n            now: 1234,\n          });\n\n          expect(source.name).toBe(\"GitHub\");\n          expect(source.endpoint).toBe(\"https://api.github.com\");\n          expect(source.binding).toEqual(\n            openApiBinding(\"https://api.github.com/openapi.json\"),\n          );\n          expect(source.status).toBe(\"draft\");\n          expect(source.enabled).toBe(true);\n          expect(source.auth).toEqual({ kind: \"none\" });\n        }),\n    );\n\n    it.effect(\n      \"preserves existing values on partial update and keeps auth when undefined\",\n      () =>\n        Effect.gen(function* () {\n          const source = makeSource({\n            kind: \"graphql\",\n            endpoint: \"https://example.com/graphql\",\n            binding: graphqlBinding({ accept: \"application/json\" }),\n            auth: {\n              kind: \"bearer\",\n              headerName: \"Authorization\",\n              prefix: \"Bearer \",\n              token: {\n                providerId: \"local\",\n                handle: \"sec_token\",\n              },\n            },\n          });\n\n          const updated = yield* updateSourceFromPayload({\n            source,\n            payload: {\n              status: \"error\",\n              lastError: \"bad gateway\",\n            },\n            now: 2000,\n          });\n\n          expect(updated.name).toBe(source.name);\n          expect(updated.endpoint).toBe(source.endpoint);\n          expect(updated.binding).toEqual(source.binding);\n          expect(updated.auth).toEqual(source.auth);\n          expect(updated.status).toBe(\"error\");\n          expect(updated.lastError).toBe(\"bad gateway\");\n          expect(updated.updatedAt).toBe(2000);\n        }),\n    );\n\n    it.effect(\n      \"normalizes oauth2 auth defaults and allows null refresh tokens\",\n      () =>\n        Effect.gen(function* () {\n          const source = yield* createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_create_oauth_defaults\"),\n            sourceId: SourceIdSchema.make(\"src_create_oauth_defaults\"),\n            payload: {\n              name: \"GraphQL Demo\",\n              kind: \"graphql\",\n              endpoint: \"https://example.com/graphql\",\n              auth: {\n                kind: \"oauth2\",\n                headerName: \"   \",\n                prefix: undefined,\n                accessToken: {\n                  providerId: \" local \",\n                  handle: \" sec_access \",\n                },\n                refreshToken: null,\n              } as never,\n            },\n            now: 1234,\n          });\n\n          expect(source.auth).toEqual({\n            kind: \"oauth2\",\n            headerName: \"Authorization\",\n            prefix: \"Bearer \",\n            accessToken: {\n              providerId: \"local\",\n              handle: \"sec_access\",\n            },\n            refreshToken: null,\n          });\n        }),\n    );\n\n    it.effect(\"rejects invalid bearer and oauth2 secret refs\", () =>\n      Effect.gen(function* () {\n        const invalidBearer = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_bearer\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_bearer\"),\n            payload: {\n              name: \"Bad Bearer\",\n              kind: \"openapi\",\n              endpoint: \"https://example.com\",\n              binding: openApiBinding(\"https://example.com/openapi.json\"),\n              auth: {\n                kind: \"bearer\",\n                headerName: \"Authorization\",\n                prefix: \"Bearer \",\n                token: {\n                  providerId: \"   \",\n                  handle: \"sec_token\",\n                },\n              },\n            },\n            now: 1234,\n          }),\n        );\n        expect(invalidBearer.message).toContain(\n          \"Bearer auth requires a token secret ref\",\n        );\n\n        const invalidRefresh = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_refresh\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_refresh\"),\n            payload: {\n              name: \"Bad OAuth\",\n              kind: \"graphql\",\n              endpoint: \"https://example.com/graphql\",\n              binding: graphqlBinding(),\n              auth: {\n                kind: \"oauth2\",\n                headerName: \"Authorization\",\n                prefix: \"Bearer \",\n                accessToken: {\n                  providerId: \"local\",\n                  handle: \"sec_access\",\n                },\n                refreshToken: {\n                  providerId: \"local\",\n                  handle: \"   \",\n                },\n              } as never,\n            },\n            now: 1234,\n          }),\n        );\n        expect(invalidRefresh.message).toContain(\n          \"OAuth2 refresh token ref must include providerId and handle\",\n        );\n      }),\n    );\n\n    it.effect(\"rejects invalid source kind combinations\", () =>\n      Effect.gen(function* () {\n        const invalidMcp = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_mcp\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_mcp\"),\n            payload: {\n              name: \"MCP\",\n              kind: \"mcp\",\n              endpoint: \"https://example.com/mcp\",\n              binding: {\n                specUrl: \"https://example.com/openapi.json\",\n              },\n            } as never,\n            now: 1234,\n          }),\n        );\n        expect(invalidMcp.message).toContain(\n          \"MCP sources cannot define specUrl\",\n        );\n\n        const invalidOpenApiSpec = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_openapi_spec\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_openapi_spec\"),\n            payload: {\n              name: \"OpenAPI\",\n              kind: \"openapi\",\n              endpoint: \"https://example.com\",\n              binding: openApiBinding(\"   \"),\n            } as never,\n            now: 1234,\n          }),\n        );\n        expect(invalidOpenApiSpec.message).toContain(\n          \"OpenAPI sources require specUrl\",\n        );\n\n        const invalidOpenApiTransport = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_openapi_transport\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_openapi_transport\"),\n            payload: {\n              name: \"OpenAPI\",\n              kind: \"openapi\",\n              endpoint: \"https://example.com\",\n              binding: {\n                specUrl: \"https://example.com/openapi.json\",\n                transport: \"sse\",\n              },\n            } as never,\n            now: 1234,\n          }),\n        );\n        expect(invalidOpenApiTransport.message).toContain(\n          \"OpenAPI sources cannot define MCP transport settings\",\n        );\n\n        const invalidGraphql = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_graphql\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_graphql\"),\n            payload: {\n              name: \"GraphQL\",\n              kind: \"graphql\",\n              endpoint: \"https://example.com/graphql\",\n              binding: {\n                specUrl: \"https://example.com/openapi.json\",\n              },\n            } as never,\n            now: 1234,\n          }),\n        );\n        expect(invalidGraphql.message).toContain(\n          \"GraphQL sources cannot define specUrl\",\n        );\n\n        const invalidInternal = yield* Effect.flip(\n          createSourceFromPayload({\n            workspaceId: WorkspaceIdSchema.make(\"ws_invalid_internal\"),\n            sourceId: SourceIdSchema.make(\"src_invalid_internal\"),\n            payload: {\n              name: \"Internal\",\n              kind: \"internal\",\n              endpoint: \"internal://executor\",\n              binding: {\n                defaultHeaders: {\n                  accept: \"application/json\",\n                },\n              },\n            } as never,\n            now: 1234,\n          }),\n        );\n        expect(invalidInternal.message).toContain(\n          \"internal sources cannot define HTTP source settings\",\n        );\n      }),\n    );\n\n    it.effect(\"normalizes new auth during updates\", () =>\n      Effect.gen(function* () {\n        const updated = yield* updateSourceFromPayload({\n          source: makeSource({\n            auth: { kind: \"none\" },\n          }),\n          payload: {\n            auth: {\n              kind: \"bearer\",\n              headerName: \"  \",\n              prefix: \"Token \",\n              token: {\n                providerId: \" local \",\n                handle: \" sec_token \",\n              },\n            } as never,\n          },\n          now: 2000,\n        });\n\n        expect(updated.auth).toEqual({\n          kind: \"bearer\",\n          headerName: \"Authorization\",\n          prefix: \"Token \",\n          token: {\n            providerId: \"local\",\n            handle: \"sec_token\",\n          },\n        });\n      }),\n    );\n  });\n\n  describe(\"storage roundtrip\", () => {\n    it.effect(\"roundtrips bearer auth and serialized maps\", () =>\n      Effect.gen(function* () {\n        const source = makeSource({\n          kind: \"mcp\",\n          binding: mcpBinding({\n            transport: \"auto\",\n            queryParams: { page: \"1\" },\n            headers: { \"x-api-key\": \"secret\" },\n          }),\n          auth: {\n            kind: \"bearer\",\n            headerName: \"Authorization\",\n            prefix: \"Bearer \",\n            token: {\n              providerId: \"local\",\n              handle: \"sec_bearer\",\n            },\n          },\n        });\n        const catalogId = stableSourceCatalogId(source);\n        const catalogRevisionId = stableSourceCatalogRevisionId(source);\n        const existingCredentialId = CredentialIdSchema.make(\"cred_existing\");\n\n        const { sourceRecord, runtimeAuthArtifact } = splitSourceForStorage({\n          source,\n          catalogId,\n          catalogRevisionId,\n          existingRuntimeAuthArtifactId: existingCredentialId,\n        });\n\n        expect(runtimeAuthArtifact?.id).toBe(existingCredentialId);\n        const decoded = runtimeAuthArtifact\n          ? decodeBuiltInAuthArtifactConfig(runtimeAuthArtifact)\n          : null;\n        expect(decoded?.artifactKind).toBe(\"static_bearer\");\n        expect(JSON.parse(sourceRecord.bindingConfigJson ?? \"{}\")).toEqual({\n          adapterKey: \"mcp\",\n          version: 1,\n          payload: source.binding,\n        });\n\n        const projected = yield* projectSourceFromStorage({\n          sourceRecord,\n          runtimeAuthArtifact: runtimeAuthArtifact ?? null,\n          importAuthArtifact: null,\n        });\n\n        expect(projected).toEqual(source);\n      }),\n    );\n\n    it.effect(\"roundtrips oauth2 auth with and without refresh tokens\", () =>\n      Effect.gen(function* () {\n        const withRefresh = makeSource({\n          kind: \"graphql\",\n          endpoint: \"https://example.com/graphql\",\n          binding: graphqlBinding({ accept: \"application/json\" }),\n          auth: {\n            kind: \"oauth2\",\n            headerName: \"Authorization\",\n            prefix: \"Bearer \",\n            accessToken: {\n              providerId: \"local\",\n              handle: \"sec_access\",\n            },\n            refreshToken: {\n              providerId: \"local\",\n              handle: \"sec_refresh\",\n            },\n          },\n        });\n        const withoutRefresh = makeSource({\n          id: SourceIdSchema.make(\"src_source_definitions_no_refresh\"),\n          kind: \"graphql\",\n          endpoint: \"https://example.com/graphql\",\n          binding: graphqlBinding({ accept: \"application/json\" }),\n          auth: {\n            kind: \"oauth2\",\n            headerName: \"Authorization\",\n            prefix: \"Bearer \",\n            accessToken: {\n              providerId: \"local\",\n              handle: \"sec_access\",\n            },\n            refreshToken: null,\n          },\n        });\n\n        for (const source of [withRefresh, withoutRefresh]) {\n          const { sourceRecord, runtimeAuthArtifact } = splitSourceForStorage({\n            source,\n            catalogId: stableSourceCatalogId(source),\n            catalogRevisionId: stableSourceCatalogRevisionId(source),\n          });\n          const projected = yield* projectSourceFromStorage({\n            sourceRecord,\n            runtimeAuthArtifact: runtimeAuthArtifact ?? null,\n            importAuthArtifact: null,\n          });\n\n          expect(projected).toEqual(source);\n        }\n      }),\n    );\n\n    it.effect(\"roundtrips stdio MCP bindings without remote fields\", () =>\n      Effect.gen(function* () {\n        const source = makeSource({\n          kind: \"mcp\",\n          endpoint: \"stdio://local/chrome-devtools-mcp\",\n          binding: mcpBinding({\n            transport: \"stdio\",\n            command: \"npx\",\n            args: [\"-y\", \"chrome-devtools-mcp@latest\"],\n            env: {\n              CHROME_PATH:\n                \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\n            },\n            cwd: \"/tmp/chrome-devtools\",\n          }),\n          auth: { kind: \"none\" },\n        });\n\n        const { sourceRecord, runtimeAuthArtifact } = splitSourceForStorage({\n          source,\n          catalogId: stableSourceCatalogId(source),\n          catalogRevisionId: stableSourceCatalogRevisionId(source),\n        });\n\n        expect(runtimeAuthArtifact).toBeNull();\n        expect(JSON.parse(sourceRecord.bindingConfigJson ?? \"{}\")).toEqual({\n          adapterKey: \"mcp\",\n          version: 1,\n          payload: source.binding,\n        });\n\n        const projected = yield* projectSourceFromStorage({\n          sourceRecord,\n          runtimeAuthArtifact: null,\n          importAuthArtifact: null,\n        });\n\n        expect(projected).toEqual(source);\n      }),\n    );\n\n    it.effect(\n      \"stores no credential for auth.kind none and projects back correctly\",\n      () =>\n        Effect.gen(function* () {\n          const source = makeSource({\n            auth: { kind: \"none\" },\n          });\n          const { sourceRecord, runtimeAuthArtifact } = splitSourceForStorage({\n            source,\n            catalogId: stableSourceCatalogId(source),\n            catalogRevisionId: stableSourceCatalogRevisionId(source),\n          });\n\n          expect(runtimeAuthArtifact).toBeNull();\n\n          const projected = yield* projectSourceFromStorage({\n            sourceRecord,\n            runtimeAuthArtifact: null,\n            importAuthArtifact: null,\n          });\n\n          expect(projected.auth).toEqual({ kind: \"none\" });\n          expect(projected).toEqual(source);\n        }),\n    );\n  });\n\n  describe(\"namespaceFromSourceName\", () => {\n    it(\"normalizes names into namespace-safe dotted segments\", () => {\n      expect(namespaceFromSourceName(\"My API v2!\")).toBe(\"my.api.v2\");\n      expect(namespaceFromSourceName(\"   \")).toBe(\"source\");\n      expect(namespaceFromSourceName(\"!!!\")).toBe(\"source\");\n    });\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-definitions.ts",
    "content": "import { sha256Hex } from \"@executor/codemode-core\";\n\nimport type {\n  CreateSourcePayload,\n  UpdateSourcePayload,\n} from \"#api\";\nimport type {\n  AccountId,\n  AuthArtifact,\n  Source,\n  SourceAuth,\n  SourceImportAuthPolicy,\n  SourceCatalogAdapterKey,\n  SourceCatalogId,\n  SourceCatalogKind,\n  SourceCatalogRevisionId,\n  StoredSourceRecord,\n  StoredSourceCatalogRecord,\n  StoredSourceCatalogRevisionRecord,\n  WorkspaceId,\n} from \"#schema\";\nimport {\n  AuthArtifactIdSchema,\n  ProviderAuthGrantIdSchema,\n  SourceCatalogIdSchema,\n  SourceCatalogRevisionIdSchema,\n} from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n \nimport { getSourceAdapter, getSourceAdapterForSource } from \"./source-adapters\";\nimport {\n  authArtifactFromSourceAuth,\n  sourceAuthFromAuthArtifact,\n} from \"../auth/auth-artifacts\";\nimport { runtimeEffectError } from \"../effect-errors\";\n\nconst trimOrNull = (value: string | null | undefined): string | null => {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\ntype SourceCatalogSourceConfig = Record<string, unknown>;\n\nconst sourceConfigFromSource = (source: Source): SourceCatalogSourceConfig =>\n  getSourceAdapterForSource(source).sourceConfigFromSource(source);\n\nconst sourceCatalogKindFromSource = (source: Source): SourceCatalogKind => {\n  const adapter = getSourceAdapterForSource(source);\n  return adapter.catalogKind;\n};\n\nconst sourceCatalogAdapterKeyFromSource = (source: Source): SourceCatalogAdapterKey => {\n  return getSourceAdapterForSource(source).key;\n};\n\nconst sourceCatalogProviderKeyFromSource = (source: Source): string => {\n  return getSourceAdapterForSource(source).providerKey;\n};\n\nconst stableHash = (value: string): string =>\n  sha256Hex(value).slice(0, 24);\n\nconst sourceCatalogSignature = (source: Source): string =>\n  JSON.stringify({\n    catalogKind: sourceCatalogKindFromSource(source),\n    adapterKey: sourceCatalogAdapterKeyFromSource(source),\n    providerKey: sourceCatalogProviderKeyFromSource(source),\n    sourceConfig: sourceConfigFromSource(source),\n  });\n\nexport const sourceConfigSignature = (source: Source): string =>\n  JSON.stringify(sourceConfigFromSource(source));\n\nexport const stableSourceCatalogId = (source: Source): SourceCatalogId =>\n  SourceCatalogIdSchema.make(`src_catalog_${stableHash(sourceCatalogSignature(source))}`);\n\nexport const stableSourceCatalogRevisionId = (\n  source: Source,\n): SourceCatalogRevisionId =>\n  SourceCatalogRevisionIdSchema.make(`src_catalog_rev_${stableHash(sourceConfigSignature(source))}`);\n\nconst normalizeAuth = (\n  auth: SourceAuth | undefined,\n): Effect.Effect<SourceAuth, Error, never> =>\n  Effect.gen(function* () {\n    if (auth === undefined || auth.kind === \"none\") {\n      return { kind: \"none\" } satisfies SourceAuth;\n    }\n\n    if (auth.kind === \"bearer\") {\n      const headerName = trimOrNull(auth.headerName) ?? \"Authorization\";\n      const prefix = auth.prefix ?? \"Bearer \";\n      const providerId = trimOrNull(auth.token.providerId);\n      const handle = trimOrNull(auth.token.handle);\n      if (providerId === null || handle === null) {\n        return yield* runtimeEffectError(\"sources/source-definitions\", \"Bearer auth requires a token secret ref\");\n      }\n\n      return {\n        kind: \"bearer\",\n        headerName,\n        prefix,\n        token: {\n          providerId,\n          handle,\n        },\n      } satisfies SourceAuth;\n    }\n\n    if (auth.kind === \"oauth2_authorized_user\") {\n      const headerName = trimOrNull(auth.headerName) ?? \"Authorization\";\n      const prefix = auth.prefix ?? \"Bearer \";\n      const refreshProviderId = trimOrNull(auth.refreshToken.providerId);\n      const refreshHandle = trimOrNull(auth.refreshToken.handle);\n      if (refreshProviderId === null || refreshHandle === null) {\n        return yield* runtimeEffectError(\"sources/source-definitions\", \"OAuth2 authorized-user auth requires a refresh token secret ref\");\n      }\n\n      let clientSecret: { providerId: string; handle: string } | null = null;\n      if (auth.clientSecret !== null) {\n        const clientSecretProviderId = trimOrNull(auth.clientSecret.providerId);\n        const clientSecretHandle = trimOrNull(auth.clientSecret.handle);\n        if (clientSecretProviderId === null || clientSecretHandle === null) {\n          return yield* runtimeEffectError(\"sources/source-definitions\", \"OAuth2 authorized-user client secret ref must include providerId and handle\");\n        }\n        clientSecret = {\n          providerId: clientSecretProviderId,\n          handle: clientSecretHandle,\n        };\n      }\n\n      const tokenEndpoint = trimOrNull(auth.tokenEndpoint);\n      const clientId = trimOrNull(auth.clientId);\n      if (tokenEndpoint === null || clientId === null) {\n        return yield* runtimeEffectError(\"sources/source-definitions\", \"OAuth2 authorized-user auth requires tokenEndpoint and clientId\");\n      }\n\n      return {\n        kind: \"oauth2_authorized_user\",\n        headerName,\n        prefix,\n        tokenEndpoint,\n        clientId,\n        clientAuthentication: auth.clientAuthentication,\n        clientSecret,\n        refreshToken: {\n          providerId: refreshProviderId,\n          handle: refreshHandle,\n        },\n        grantSet: auth.grantSet ?? null,\n      } satisfies SourceAuth;\n    }\n\n    if (auth.kind === \"provider_grant_ref\") {\n      const headerName = trimOrNull(auth.headerName) ?? \"Authorization\";\n      const prefix = auth.prefix ?? \"Bearer \";\n      const grantId = trimOrNull(auth.grantId);\n      if (grantId === null) {\n        return yield* runtimeEffectError(\"sources/source-definitions\", \"Provider grant auth requires a grantId\");\n      }\n\n      return {\n        kind: \"provider_grant_ref\",\n        grantId: ProviderAuthGrantIdSchema.make(grantId),\n        providerKey: trimOrNull(auth.providerKey) ?? \"\",\n        requiredScopes: auth.requiredScopes\n          .map((scope) => scope.trim())\n          .filter((scope) => scope.length > 0),\n        headerName,\n        prefix,\n      } satisfies SourceAuth;\n    }\n\n    if (auth.kind === \"mcp_oauth\") {\n      const redirectUri = trimOrNull(auth.redirectUri);\n      const accessProviderId = trimOrNull(auth.accessToken.providerId);\n      const accessHandle = trimOrNull(auth.accessToken.handle);\n      if (redirectUri === null || accessProviderId === null || accessHandle === null) {\n        return yield* runtimeEffectError(\"sources/source-definitions\", \"MCP OAuth auth requires redirectUri and access token secret ref\");\n      }\n\n      let refreshToken: { providerId: string; handle: string } | null = null;\n      if (auth.refreshToken !== null) {\n        const refreshProviderId = trimOrNull(auth.refreshToken.providerId);\n        const refreshHandle = trimOrNull(auth.refreshToken.handle);\n        if (refreshProviderId === null || refreshHandle === null) {\n          return yield* runtimeEffectError(\"sources/source-definitions\", \"MCP OAuth refresh token ref must include providerId and handle\");\n        }\n\n        refreshToken = {\n          providerId: refreshProviderId,\n          handle: refreshHandle,\n        };\n      }\n\n      const tokenType = trimOrNull(auth.tokenType) ?? \"Bearer\";\n\n      return {\n        kind: \"mcp_oauth\",\n        redirectUri,\n        accessToken: {\n          providerId: accessProviderId,\n          handle: accessHandle,\n        },\n        refreshToken,\n        tokenType,\n        expiresIn: auth.expiresIn ?? null,\n        scope: trimOrNull(auth.scope),\n        resourceMetadataUrl: trimOrNull(auth.resourceMetadataUrl),\n        authorizationServerUrl: trimOrNull(auth.authorizationServerUrl),\n        resourceMetadataJson: trimOrNull(auth.resourceMetadataJson),\n        authorizationServerMetadataJson: trimOrNull(auth.authorizationServerMetadataJson),\n        clientInformationJson: trimOrNull(auth.clientInformationJson),\n      } satisfies SourceAuth;\n    }\n\n    const headerName = trimOrNull(auth.headerName) ?? \"Authorization\";\n    const prefix = auth.prefix ?? \"Bearer \";\n    const accessProviderId = trimOrNull(auth.accessToken.providerId);\n    const accessHandle = trimOrNull(auth.accessToken.handle);\n    if (accessProviderId === null || accessHandle === null) {\n      return yield* runtimeEffectError(\"sources/source-definitions\", \"OAuth2 auth requires an access token secret ref\");\n    }\n\n    let refreshToken: { providerId: string; handle: string } | null = null;\n    if (auth.refreshToken !== null) {\n      const refreshProviderId = trimOrNull(auth.refreshToken.providerId);\n      const refreshHandle = trimOrNull(auth.refreshToken.handle);\n      if (refreshProviderId === null || refreshHandle === null) {\n        return yield* runtimeEffectError(\"sources/source-definitions\", \"OAuth2 refresh token ref must include providerId and handle\");\n      }\n\n      refreshToken = {\n        providerId: refreshProviderId,\n        handle: refreshHandle,\n      };\n    }\n\n    return {\n      kind: \"oauth2\",\n      headerName,\n      prefix,\n      accessToken: {\n        providerId: accessProviderId,\n        handle: accessHandle,\n      },\n      refreshToken,\n    } satisfies SourceAuth;\n  });\n\nconst normalizeImportAuthPolicy = (\n  sourceKind: Source[\"kind\"],\n  policy: SourceImportAuthPolicy | undefined,\n): SourceImportAuthPolicy => policy ?? getSourceAdapter(sourceKind).defaultImportAuthPolicy;\n\nconst validateSourceImportAuth = (source: Source): Effect.Effect<Source, Error, never> =>\n  Effect.gen(function* () {\n    if (source.importAuthPolicy !== \"separate\" && source.importAuth.kind !== \"none\") {\n      return yield* runtimeEffectError(\"sources/source-definitions\", \"importAuth must be none unless importAuthPolicy is separate\");\n    }\n\n    return source;\n  });\n\nconst validateSourceByKind = (source: Source): Effect.Effect<Source, Error, never> =>\n  Effect.flatMap(\n    validateSourceImportAuth(source),\n    (validated) =>\n      Effect.map(\n        getSourceAdapterForSource(validated).validateSource(validated),\n        (result) => result as Source,\n      ),\n  );\n\nexport const createSourceFromPayload = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: Source[\"id\"];\n  payload: CreateSourcePayload;\n  now: number;\n}): Effect.Effect<Source, Error, never> =>\n  Effect.gen(function* () {\n    const auth = yield* normalizeAuth(input.payload.auth);\n    const importAuth = yield* normalizeAuth(input.payload.importAuth);\n    const importAuthPolicy = normalizeImportAuthPolicy(\n      input.payload.kind,\n      input.payload.importAuthPolicy,\n    );\n\n    return yield* validateSourceByKind({\n      id: input.sourceId,\n      workspaceId: input.workspaceId,\n      name: input.payload.name.trim(),\n      kind: input.payload.kind,\n      endpoint: input.payload.endpoint.trim(),\n      status: input.payload.status ?? \"draft\",\n      enabled: input.payload.enabled ?? true,\n      namespace: trimOrNull(input.payload.namespace),\n      bindingVersion: getSourceAdapter(input.payload.kind).bindingConfigVersion,\n      binding: input.payload.binding ?? {},\n      importAuthPolicy,\n      importAuth,\n      auth,\n      sourceHash: trimOrNull(input.payload.sourceHash),\n      lastError: trimOrNull(input.payload.lastError),\n      createdAt: input.now,\n      updatedAt: input.now,\n    });\n  });\n\nexport const updateSourceFromPayload = (input: {\n  source: Source;\n  payload: UpdateSourcePayload;\n  now: number;\n}): Effect.Effect<Source, Error, never> =>\n  Effect.gen(function* () {\n    const nextAuth = input.payload.auth === undefined\n      ? input.source.auth\n      : yield* normalizeAuth(input.payload.auth);\n    const nextImportAuth = input.payload.importAuth === undefined\n      ? input.source.importAuth\n      : yield* normalizeAuth(input.payload.importAuth);\n    const nextImportAuthPolicy = normalizeImportAuthPolicy(\n      input.source.kind,\n      input.payload.importAuthPolicy ?? input.source.importAuthPolicy,\n    );\n\n    return yield* validateSourceByKind({\n      ...input.source,\n      name: input.payload.name !== undefined ? input.payload.name.trim() : input.source.name,\n      endpoint:\n        input.payload.endpoint !== undefined\n          ? input.payload.endpoint.trim()\n          : input.source.endpoint,\n      status: input.payload.status ?? input.source.status,\n      enabled: input.payload.enabled ?? input.source.enabled,\n      namespace: input.payload.namespace !== undefined\n        ? trimOrNull(input.payload.namespace)\n        : input.source.namespace,\n      bindingVersion: input.payload.binding !== undefined\n        ? getSourceAdapter(input.source.kind).bindingConfigVersion\n        : input.source.bindingVersion,\n      binding: input.payload.binding !== undefined\n        ? input.payload.binding\n        : input.source.binding,\n      importAuthPolicy: nextImportAuthPolicy,\n      importAuth: nextImportAuth,\n      auth: nextAuth,\n      sourceHash: input.payload.sourceHash !== undefined\n        ? trimOrNull(input.payload.sourceHash)\n        : input.source.sourceHash,\n      lastError: input.payload.lastError !== undefined\n        ? trimOrNull(input.payload.lastError)\n        : input.source.lastError,\n      updatedAt: input.now,\n    });\n  });\n\nexport const createSourceCatalogRecord = (input: {\n  source: Source;\n  catalogId?: SourceCatalogId | null;\n  latestRevisionId: SourceCatalogRevisionId;\n}): StoredSourceCatalogRecord => ({\n  id: input.catalogId ?? stableSourceCatalogId(input.source),\n  kind: sourceCatalogKindFromSource(input.source),\n  adapterKey: sourceCatalogAdapterKeyFromSource(input.source),\n  providerKey: sourceCatalogProviderKeyFromSource(input.source),\n  name: input.source.name,\n  summary: null,\n  visibility: \"workspace\",\n  latestRevisionId: input.latestRevisionId,\n  createdAt: input.source.createdAt,\n  updatedAt: input.source.updatedAt,\n});\n\nexport const createSourceCatalogRevisionRecord = (input: {\n  source: Source;\n  catalogId: SourceCatalogId;\n  catalogRevisionId?: SourceCatalogRevisionId | null;\n  revisionNumber: number;\n  importMetadataJson?: string | null;\n  importMetadataHash?: string | null;\n  snapshotHash?: string | null;\n}): StoredSourceCatalogRevisionRecord => ({\n  id:\n    input.catalogRevisionId\n    ?? stableSourceCatalogRevisionId(input.source),\n  catalogId: input.catalogId,\n  revisionNumber: input.revisionNumber,\n  sourceConfigJson: sourceConfigSignature(input.source),\n  importMetadataJson: input.importMetadataJson ?? null,\n  importMetadataHash: input.importMetadataHash ?? null,\n  snapshotHash: input.snapshotHash ?? null,\n  createdAt: input.source.createdAt,\n  updatedAt: input.source.updatedAt,\n});\n\nexport const splitSourceForStorage = (input: {\n  source: Source;\n  catalogId: SourceCatalogId;\n  catalogRevisionId: SourceCatalogRevisionId;\n  actorAccountId?: AccountId | null;\n  existingRuntimeAuthArtifactId?: AuthArtifact[\"id\"] | null;\n  existingImportAuthArtifactId?: AuthArtifact[\"id\"] | null;\n}): {\n  sourceRecord: StoredSourceRecord;\n  runtimeAuthArtifact: AuthArtifact | null;\n  importAuthArtifact: AuthArtifact | null;\n} => {\n  const sourceRecord: StoredSourceRecord = {\n    id: input.source.id,\n    workspaceId: input.source.workspaceId,\n    catalogId: input.catalogId,\n    catalogRevisionId: input.catalogRevisionId,\n    name: input.source.name,\n    kind: input.source.kind,\n    endpoint: input.source.endpoint,\n    status: input.source.status,\n    enabled: input.source.enabled,\n    namespace: input.source.namespace,\n    importAuthPolicy: input.source.importAuthPolicy,\n    bindingConfigJson: getSourceAdapterForSource(input.source).serializeBindingConfig(input.source),\n    sourceHash: input.source.sourceHash,\n    lastError: input.source.lastError,\n    createdAt: input.source.createdAt,\n    updatedAt: input.source.updatedAt,\n  };\n\n  return {\n    sourceRecord,\n    runtimeAuthArtifact: authArtifactFromSourceAuth({\n      source: input.source,\n      auth: input.source.auth,\n      slot: \"runtime\",\n      actorAccountId: input.actorAccountId,\n      existingAuthArtifactId: input.existingRuntimeAuthArtifactId\n        ?? AuthArtifactIdSchema.make(`auth_art_${crypto.randomUUID()}`),\n    }),\n    importAuthArtifact: input.source.importAuthPolicy === \"separate\"\n      ? authArtifactFromSourceAuth({\n          source: input.source,\n          auth: input.source.importAuth,\n          slot: \"import\",\n          actorAccountId: input.actorAccountId,\n          existingAuthArtifactId: input.existingImportAuthArtifactId\n            ?? AuthArtifactIdSchema.make(`auth_art_${crypto.randomUUID()}`),\n        })\n      : null,\n  };\n};\n\nexport const projectSourceFromStorage = (input: {\n  sourceRecord: StoredSourceRecord;\n  runtimeAuthArtifact: AuthArtifact | null;\n  importAuthArtifact: AuthArtifact | null;\n}): Effect.Effect<Source, Error, never> =>\n  Effect.gen(function* () {\n    const adapter = getSourceAdapter(input.sourceRecord.kind);\n    const bindingConfig = yield* adapter.deserializeBindingConfig({\n      id: input.sourceRecord.id,\n      bindingConfigJson: input.sourceRecord.bindingConfigJson,\n    });\n\n    return {\n      id: input.sourceRecord.id,\n      workspaceId: input.sourceRecord.workspaceId,\n      name: input.sourceRecord.name,\n      kind: input.sourceRecord.kind,\n      endpoint: input.sourceRecord.endpoint,\n      status: input.sourceRecord.status,\n      enabled: input.sourceRecord.enabled,\n      namespace: input.sourceRecord.namespace,\n      bindingVersion: bindingConfig.version,\n      binding: bindingConfig.payload,\n      importAuthPolicy: input.sourceRecord.importAuthPolicy,\n      importAuth:\n        input.sourceRecord.importAuthPolicy === \"separate\"\n          ? sourceAuthFromAuthArtifact(input.importAuthArtifact)\n          : { kind: \"none\" },\n      auth: sourceAuthFromAuthArtifact(input.runtimeAuthArtifact),\n      sourceHash: input.sourceRecord.sourceHash,\n      lastError: input.sourceRecord.lastError,\n      createdAt: input.sourceRecord.createdAt,\n      updatedAt: input.sourceRecord.updatedAt,\n    } satisfies Source;\n  }).pipe(\n    Effect.mapError((cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n    ),\n  );\n\nexport const projectSourcesFromStorage = (input: {\n  sourceRecords: ReadonlyArray<StoredSourceRecord>;\n  authArtifacts: ReadonlyArray<AuthArtifact>;\n}): Effect.Effect<ReadonlyArray<Source>, Error, never> => {\n  const authArtifactsBySourceId = new Map<string, {\n    runtime: AuthArtifact | null;\n    import: AuthArtifact | null;\n  }>();\n\n  for (const authArtifact of input.authArtifacts) {\n    const existing = authArtifactsBySourceId.get(authArtifact.sourceId) ?? {\n      runtime: null,\n      import: null,\n    };\n    const current = authArtifact.slot === \"runtime\" ? existing.runtime : existing.import;\n    if (current === null || (current.actorAccountId === null && authArtifact.actorAccountId !== null)) {\n      authArtifactsBySourceId.set(authArtifact.sourceId, {\n        ...existing,\n        [authArtifact.slot]: authArtifact,\n      });\n    }\n  }\n\n  return Effect.forEach(input.sourceRecords, (sourceRecord) =>\n    projectSourceFromStorage({\n      sourceRecord,\n      runtimeAuthArtifact: authArtifactsBySourceId.get(sourceRecord.id)?.runtime ?? null,\n      importAuthArtifact: authArtifactsBySourceId.get(sourceRecord.id)?.import ?? null,\n    }));\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-discovery.test.ts",
    "content": "import {\n  createServer,\n  type IncomingMessage,\n  type ServerResponse,\n} from \"node:http\";\n\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport { discoverSource } from \"./source-discovery\";\n\ntype TestServer = {\n  url: string;\n};\n\nconst toError = (cause: unknown): Error =>\n  cause instanceof Error ? cause : new Error(String(cause));\n\nconst makeServer = (\n  handler: (input: {\n    request: IncomingMessage;\n    response: ServerResponse<IncomingMessage>;\n    url: string;\n  }) => void,\n) =>\n  Effect.acquireRelease(\n    Effect.tryPromise({\n      try: () =>\n        new Promise<{\n          server: ReturnType<typeof createServer>;\n          sockets: Set<import(\"node:net\").Socket>;\n          url: string;\n        }>((resolve, reject) => {\n          let serverUrl = \"\";\n          const server = createServer((request, response) =>\n            handler({\n              request,\n              response,\n              url: serverUrl,\n            }),\n          );\n          const sockets = new Set<import(\"node:net\").Socket>();\n\n          server.on(\"connection\", (socket) => {\n            sockets.add(socket);\n            socket.on(\"close\", () => {\n              sockets.delete(socket);\n            });\n          });\n\n          server.once(\"error\", reject);\n          server.listen(0, \"127.0.0.1\", () => {\n            const address = server.address();\n            if (!address || typeof address === \"string\") {\n              reject(new Error(\"Failed to resolve test server address\"));\n              return;\n            }\n\n            serverUrl = `http://127.0.0.1:${address.port}`;\n            resolve({\n              server,\n              sockets,\n              url: serverUrl,\n            });\n          });\n        }),\n      catch: toError,\n    }),\n    ({ server, sockets }) =>\n      Effect.tryPromise({\n        try: () =>\n          new Promise<void>((resolve, reject) => {\n            server.closeAllConnections?.();\n            sockets.forEach((socket) => socket.destroy());\n            server.close((error) => {\n              if (error) {\n                reject(error);\n                return;\n              }\n              resolve();\n            });\n          }),\n        catch: toError,\n      }),\n  ).pipe(Effect.map(({ url }) => ({ url }) satisfies TestServer));\n\ndescribe(\"source-discovery\", () => {\n  it.scoped(\n    \"detects OpenAPI and infers bearer auth from security schemes\",\n    () =>\n      Effect.gen(function* () {\n        const server = yield* makeServer(({ request, response, url }) => {\n          if (request.url !== \"/openapi.json\") {\n            response.statusCode = 404;\n            response.end();\n            return;\n          }\n\n          if (request.headers.authorization !== \"Bearer top-secret\") {\n            response.statusCode = 401;\n            response.setHeader(\"www-authenticate\", 'Bearer realm=\"spec\"');\n            response.end(\"Unauthorized\");\n            return;\n          }\n\n          response.statusCode = 200;\n          response.setHeader(\"content-type\", \"application/json\");\n          response.end(\n            JSON.stringify({\n              openapi: \"3.0.3\",\n              info: {\n                title: \"Secure Example API\",\n                version: \"1.0.0\",\n              },\n              servers: [{ url: `${url}/api` }],\n              components: {\n                securitySchemes: {\n                  bearerAuth: {\n                    type: \"http\",\n                    scheme: \"bearer\",\n                  },\n                },\n              },\n              security: [{ bearerAuth: [] }],\n              paths: {\n                \"/widgets\": {\n                  get: {\n                    operationId: \"widgets/list\",\n                    responses: {\n                      200: {\n                        description: \"ok\",\n                      },\n                    },\n                  },\n                },\n              },\n            }),\n          );\n        });\n\n        const result = yield* discoverSource({\n          url: `${server.url}/openapi.json`,\n          probeAuth: {\n            kind: \"bearer\",\n            token: \"top-secret\",\n          },\n        });\n\n        expect(result.detectedKind).toBe(\"openapi\");\n        expect(result.authInference.suggestedKind).toBe(\"bearer\");\n        expect(result.authInference.supported).toBe(true);\n        expect(result.authInference.headerName).toBe(\"Authorization\");\n        expect(result.specUrl).toBe(`${server.url}/openapi.json`);\n        expect(result.endpoint).toBe(`${server.url}/api`);\n        expect(result.toolCount).toBe(1);\n      }),\n  );\n\n  it.scoped(\"detects GraphQL from successful introspection\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeServer(({ request, response }) => {\n        if (request.url !== \"/graphql\" || request.method !== \"POST\") {\n          response.statusCode = 404;\n          response.end();\n          return;\n        }\n\n        response.statusCode = 200;\n        response.setHeader(\"content-type\", \"application/json\");\n        response.end(\n          JSON.stringify({\n            data: {\n              __schema: {\n                queryType: {\n                  name: \"Query\",\n                },\n              },\n            },\n          }),\n        );\n      });\n\n      const result = yield* discoverSource({\n        url: `${server.url}/graphql`,\n      });\n\n      expect(result.detectedKind).toBe(\"graphql\");\n      expect(result.confidence).toBe(\"high\");\n      expect(result.authInference.suggestedKind).toBe(\"none\");\n      expect(result.specUrl).toBeNull();\n    }),\n  );\n\n  it.scoped(\"detects Google Discovery documents\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeServer(({ request, response, url }) => {\n        if (request.url !== \"/gmail/$discovery/rest?version=v1\") {\n          response.statusCode = 404;\n          response.end();\n          return;\n        }\n\n        response.statusCode = 200;\n        response.setHeader(\"content-type\", \"application/json\");\n        response.end(\n          JSON.stringify({\n            name: \"gmail\",\n            version: \"v1\",\n            title: \"Gmail API\",\n            description: \"Access Gmail mailboxes and settings.\",\n            rootUrl: `${url}/`,\n            servicePath: \"gmail/v1/users/\",\n            auth: {\n              oauth2: {\n                scopes: {\n                  \"https://www.googleapis.com/auth/gmail.readonly\": {\n                    description: \"View your email messages and settings\",\n                  },\n                },\n              },\n            },\n            methods: {\n              getProfile: {\n                id: \"gmail.users.getProfile\",\n                path: \"{userId}/profile\",\n                httpMethod: \"GET\",\n                parameters: {\n                  userId: {\n                    type: \"string\",\n                    required: true,\n                    location: \"path\",\n                  },\n                },\n                response: {\n                  $ref: \"Profile\",\n                },\n              },\n            },\n            schemas: {\n              Profile: {\n                id: \"Profile\",\n                type: \"object\",\n                properties: {\n                  emailAddress: {\n                    type: \"string\",\n                  },\n                },\n              },\n            },\n          }),\n        );\n      });\n\n      const result = yield* discoverSource({\n        url: `${server.url}/gmail/$discovery/rest?version=v1`,\n      });\n\n      expect(result.detectedKind).toBe(\"google_discovery\");\n      expect(result.specUrl).toBe(\n        `${server.url}/gmail/$discovery/rest?version=v1`,\n      );\n      expect(result.endpoint).toBe(`${server.url}/gmail/v1/users/`);\n      expect(result.name).toBe(\"Gmail API\");\n      expect(result.namespace).toBe(\"gmail\");\n      expect(result.authInference.suggestedKind).toBe(\"oauth2\");\n      expect(result.authInference.oauthScopes).toEqual([\n        \"https://www.googleapis.com/auth/gmail.readonly\",\n      ]);\n      expect(result.toolCount).toBe(1);\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-discovery.ts",
    "content": "import * as Effect from \"effect/Effect\";\n\nimport {\n  fallbackSourceDiscoveryResult,\n  normalizeSourceDiscoveryUrl,\n  probeHeadersFromAuth,\n  type SourceAdapter,\n  type SourceProbeAuth,\n  type SourceDiscoveryResult,\n} from \"@executor/source-core\";\n\nimport { builtInSourceAdapters } from \"./source-adapters\";\n\ntype DiscoverableSourceAdapter = SourceAdapter & {\n  detectSource: NonNullable<SourceAdapter[\"detectSource\"]>;\n};\n\nconst sourceAdapters: ReadonlyArray<SourceAdapter> = builtInSourceAdapters;\n\nconst discoverableSourceAdapters = sourceAdapters.filter(\n  (adapter): adapter is DiscoverableSourceAdapter =>\n    adapter.detectSource !== undefined,\n);\n\nexport const discoverSource = (input: {\n  url: string;\n  probeAuth?: SourceProbeAuth | null;\n}): Effect.Effect<SourceDiscoveryResult, Error, never> =>\n  Effect.gen(function* () {\n    const normalizedUrl = yield* Effect.try({\n      try: () => normalizeSourceDiscoveryUrl(input.url),\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    });\n    const headers = probeHeadersFromAuth(input.probeAuth);\n\n    const adaptersByPriority = [...discoverableSourceAdapters].sort(\n      (left, right) =>\n        (right.discoveryPriority?.({ normalizedUrl }) ?? 0)\n        - (left.discoveryPriority?.({ normalizedUrl }) ?? 0),\n    );\n\n    for (const adapter of adaptersByPriority) {\n      const detected = yield* adapter.detectSource({\n        normalizedUrl,\n        headers,\n      });\n      if (detected) {\n        return detected;\n      }\n    }\n\n    return fallbackSourceDiscoveryResult(normalizedUrl);\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-inspection.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { LoadedSourceCatalogTool } from \"../catalog/source/runtime\";\nimport { inspectionToolDetailFromTool } from \"./source-inspection\";\n\ndescribe(\"source inspection\", () => {\n  it.effect(\"keeps the shared TypeScript contract first-class on tool detail\", () =>\n    Effect.gen(function* () {\n      const detail = yield* inspectionToolDetailFromTool({\n      path: \"linear.administrableTeams\",\n      source: {\n        id: \"linear\",\n      },\n      capability: {\n        surface: {\n          title: \"Administrable Teams\",\n          summary: \"All teams the user can administrate.\",\n          description: \"All teams the user can administrate.\",\n          tags: [\"query\"],\n        },\n        native: [],\n      },\n      executable: {\n        id: \"exec_graphql_administrableTeams\",\n        adapterKey: \"graphql\",\n        bindingVersion: 1,\n        binding: {\n          operationKind: \"query\",\n          rootTypeName: \"Query\",\n          fieldName: \"administrableTeams\",\n        },\n        projection: {\n          callShapeId: \"shape_call\",\n          resultDataShapeId: \"shape_result_data\",\n          resultErrorShapeId: \"shape_result_error\",\n          responseSetId: \"response_set_1\",\n        },\n        display: {\n          protocol: \"graphql\",\n          method: \"query\",\n          pathTemplate: \"administrableTeams\",\n          operationId: \"administrableTeams\",\n          group: \"query\",\n          leaf: \"administrableTeams\",\n          rawToolId: \"administrableTeams\",\n        },\n        native: [],\n      },\n      projectedDescriptor: {\n        toolPath: [\"linear\", \"administrableTeams\"],\n        callShapeId: \"shape_call\",\n        resultShapeId: \"shape_result\",\n        responseSetId: \"response_set_1\",\n      },\n      descriptor: {\n        inputTypePreview: \"{ input: string }\",\n        outputTypePreview: \"{ data: string | null; error: unknown | null; headers: Record<string, string>; status: number | null }\",\n        inputSchema: {\n          type: \"object\",\n          properties: {\n            input: { type: \"string\" },\n          },\n          required: [\"input\"],\n        },\n        outputSchema: {\n          type: \"object\",\n          properties: {\n            data: { type: [\"string\", \"null\"] },\n          },\n          required: [\"data\"],\n        },\n      },\n      projectedCatalog: {\n        version: \"ir.v1\",\n        documents: {},\n        resources: {},\n        scopes: {},\n        capabilities: {},\n        executables: {},\n        responseSets: {},\n        diagnostics: {},\n        symbols: {\n          shape_call: {\n            id: \"shape_call\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            title: \"AdministrableTeamsCall\",\n            node: {\n              type: \"object\",\n              fields: {\n                input: {\n                  shapeId: \"shape_call_input\",\n                  docs: {\n                    description: \"The exact input string to filter by.\",\n                  },\n                },\n              },\n              required: [\"input\"],\n              additionalProperties: false,\n            },\n            synthetic: false,\n            provenance: [],\n          },\n          shape_call_input: {\n            id: \"shape_call_input\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            title: \"Input\",\n            node: {\n              type: \"scalar\",\n              scalar: \"string\",\n            },\n            synthetic: false,\n            provenance: [],\n          },\n          shape_result: {\n            id: \"shape_result\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            title: \"AdministrableTeamsResult\",\n            node: {\n              type: \"object\",\n              fields: {\n                data: {\n                  shapeId: \"shape_result_data_nullable\",\n                  docs: {\n                    description: \"Matching team data when present.\",\n                  },\n                },\n                error: {\n                  shapeId: \"shape_result_error_nullable\",\n                },\n                headers: {\n                  shapeId: \"shape_result_headers\",\n                },\n                status: {\n                  shapeId: \"shape_result_status_nullable\",\n                },\n              },\n              required: [\"data\", \"error\", \"headers\", \"status\"],\n              additionalProperties: false,\n            },\n            synthetic: true,\n            provenance: [],\n          },\n          shape_result_data_nullable: {\n            id: \"shape_result_data_nullable\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"nullable\",\n              itemShapeId: \"shape_result_data\",\n            },\n            synthetic: true,\n            provenance: [],\n          },\n          shape_result_data: {\n            id: \"shape_result_data\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"scalar\",\n              scalar: \"string\",\n            },\n            synthetic: false,\n            provenance: [],\n          },\n          shape_result_error_nullable: {\n            id: \"shape_result_error_nullable\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"nullable\",\n              itemShapeId: \"shape_result_error\",\n            },\n            synthetic: true,\n            provenance: [],\n          },\n          shape_result_error: {\n            id: \"shape_result_error\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"unknown\",\n            },\n            synthetic: false,\n            provenance: [],\n          },\n          shape_result_headers: {\n            id: \"shape_result_headers\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"object\",\n              fields: {},\n              additionalProperties: \"shape_result_header_value\",\n            },\n            synthetic: true,\n            provenance: [],\n          },\n          shape_result_header_value: {\n            id: \"shape_result_header_value\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"scalar\",\n              scalar: \"string\",\n            },\n            synthetic: true,\n            provenance: [],\n          },\n          shape_result_status_nullable: {\n            id: \"shape_result_status_nullable\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"nullable\",\n              itemShapeId: \"shape_result_status\",\n            },\n            synthetic: true,\n            provenance: [],\n          },\n          shape_result_status: {\n            id: \"shape_result_status\",\n            kind: \"shape\",\n            resourceId: \"res_1\",\n            node: {\n              type: \"scalar\",\n              scalar: \"integer\",\n            },\n            synthetic: true,\n            provenance: [],\n          },\n        },\n      },\n      typeProjector: {} as LoadedSourceCatalogTool[\"typeProjector\"],\n    } as LoadedSourceCatalogTool);\n\n      expect(detail.summary.path).toBe(\"linear.administrableTeams\");\n      expect(detail.summary.method).toBe(\"query\");\n\n      expect(detail.contract.callSignature).toContain(\"Promise<\");\n      expect(detail.contract.callDeclaration).toContain(\"/**\");\n      expect(detail.contract.callDeclaration).toContain(\"Administrable Teams\");\n      expect(detail.contract.callDeclaration).toContain(\"declare function linearAdministrableTeams\");\n      expect(detail.contract.callShapeId).toBe(\"shape_call\");\n      expect(detail.contract.resultShapeId).toBe(\"shape_result\");\n      expect(detail.contract.input.typeDeclaration).toContain(\"type LinearAdministrableTeamsCall\");\n      expect(detail.contract.output.typeDeclaration).toContain(\"type LinearAdministrableTeamsResult\");\n      expect(detail.contract.input.typeDeclaration).toContain(\"The exact input string to filter by.\");\n      expect(detail.contract.output.typeDeclaration).toContain(\"Matching team data when present.\");\n      expect(detail.contract.input.schemaJson).toContain(\"\\\"input\\\"\");\n      expect(detail.contract.output.schemaJson).toContain(\"\\\"data\\\"\");\n\n      const sectionTitles = detail.sections.map((section) => section.title);\n      expect(sectionTitles).not.toContain(\"Input Schema\");\n      expect(sectionTitles).not.toContain(\"Output Schema\");\n\n      const overview = detail.sections.find((section) => section.kind === \"facts\");\n      expect(overview).toBeDefined();\n      expect(overview?.items).toEqual(\n        expect.arrayContaining([\n          expect.objectContaining({ label: \"Signature\" }),\n          expect.objectContaining({ label: \"Call shape\", value: \"shape_call\" }),\n          expect.objectContaining({ label: \"Result shape\", value: \"shape_result\" }),\n        ]),\n      );\n    }));\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-inspection.ts",
    "content": "import type {\n  Source,\n  SourceId,\n  SourceInspection,\n  SourceInspectionDiscoverPayload,\n  SourceInspectionDiscoverResult,\n  SourceInspectionDiscoverResultItem,\n  SourceInspectionToolDetail,\n  SourceInspectionToolListItem,\n  SourceInspectionToolSummary,\n  WorkspaceId,\n} from \"#schema\";\nimport {\n  ControlPlaneNotFoundError,\n  ControlPlaneStorageError,\n} from \"../../api/errors\";\nimport * as Effect from \"effect/Effect\";\n\nimport { LocalSourceArtifactMissingError } from \"../local/errors\";\nimport { operationErrors } from \"../policy/operation-errors\";\nimport {\n  buildLoadedSourceCatalogToolContract,\n  expandCatalogToolByPath,\n  expandCatalogTools,\n  loadSourceWithCatalog,\n  type LoadedSourceCatalogTool,\n} from \"../catalog/source/runtime\";\nimport { RuntimeSourceStoreService } from \"./source-store\";\n\nconst sourceInspectOps = {\n  bundle: operationErrors(\"sources.inspect.bundle\"),\n  tool: operationErrors(\"sources.inspect.tool\"),\n  discover: operationErrors(\"sources.inspect.discover\"),\n} as const;\n\nconst tokenize = (value: string): Array<string> =>\n  value\n    .trim()\n    .toLowerCase()\n    .split(/[^a-z0-9]+/)\n    .filter(Boolean);\n\nconst canInspectSourceWithoutCatalog = (source: Source): boolean =>\n  source.status === \"draft\"\n  || source.status === \"probing\"\n  || source.status === \"auth_required\";\n\nconst loadSourceForMissingCatalog = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  cause: LocalSourceArtifactMissingError;\n}) =>\n  Effect.gen(function* () {\n    const sourceStore = yield* RuntimeSourceStoreService;\n    const source = yield* sourceStore.loadSourceById({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    });\n\n    if (!canInspectSourceWithoutCatalog(source)) {\n      return yield* input.cause;\n    }\n\n    return source;\n  });\n\nconst loadSourceCatalogOrEmpty = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n}) =>\n  loadSourceWithCatalog({\n    workspaceId: input.workspaceId,\n    sourceId: input.sourceId,\n  }).pipe(\n    Effect.map((catalogEntry) => ({\n      kind: \"catalog\" as const,\n      catalogEntry,\n    })),\n    Effect.catchTag(\"LocalSourceArtifactMissingError\", (cause) =>\n      Effect.gen(function* () {\n        const source = yield* loadSourceForMissingCatalog({\n          workspaceId: input.workspaceId,\n          sourceId: input.sourceId,\n          cause,\n        });\n\n        return {\n          kind: \"empty\" as const,\n          source,\n        };\n      })),\n  );\n\nconst executableDetails = (tool: LoadedSourceCatalogTool) => {\n  const display = tool.executable.display ?? {};\n  return {\n    protocol: display.protocol ?? tool.executable.adapterKey,\n    method: display.method ?? null,\n    pathTemplate: display.pathTemplate ?? null,\n    rawToolId: display.rawToolId ?? tool.path.split(\".\").at(-1) ?? null,\n    operationId: display.operationId ?? null,\n    group: display.group ?? null,\n    leaf: display.leaf ?? tool.path.split(\".\").at(-1) ?? null,\n    tags: tool.capability.surface.tags ?? [],\n  };\n};\n\nconst inspectionToolListItemFromTool = (tool: LoadedSourceCatalogTool): SourceInspectionToolListItem => ({\n  path: tool.path,\n  method: executableDetails(tool).method,\n  ...(tool.descriptor.contract?.inputTypePreview\n    ? { inputTypePreview: tool.descriptor.contract.inputTypePreview }\n    : {}),\n  ...(tool.descriptor.contract?.outputTypePreview\n    ? { outputTypePreview: tool.descriptor.contract.outputTypePreview }\n    : {}),\n});\n\nconst persistedToolSummaryFromTool = (tool: LoadedSourceCatalogTool): SourceInspectionToolSummary => {\n  const details = executableDetails(tool);\n\n  return {\n    path: tool.path,\n    sourceKey: tool.source.id,\n    ...(tool.capability.surface.title ? { title: tool.capability.surface.title } : {}),\n    ...(tool.capability.surface.summary || tool.capability.surface.description\n      ? { description: tool.capability.surface.summary ?? tool.capability.surface.description! }\n      : {}),\n    protocol: details.protocol,\n    toolId: tool.path.split(\".\").at(-1) ?? tool.path,\n    rawToolId: details.rawToolId,\n    operationId: details.operationId,\n    group: details.group,\n    leaf: details.leaf,\n    tags: [...details.tags],\n    method: details.method,\n    pathTemplate: details.pathTemplate,\n    ...(tool.descriptor.contract?.inputTypePreview\n      ? { inputTypePreview: tool.descriptor.contract.inputTypePreview }\n      : {}),\n    ...(tool.descriptor.contract?.outputTypePreview\n      ? { outputTypePreview: tool.descriptor.contract.outputTypePreview }\n      : {}),\n  };\n};\n\nconst nativeEncodingLanguage = (encoding: string | undefined): string =>\n  encoding === \"graphql\" || encoding === \"yaml\" || encoding === \"json\" || encoding === \"text\"\n    ? encoding\n    : \"json\";\n\nconst jsonSection = (\n  title: string,\n  value: unknown | null | undefined,\n): SourceInspectionToolDetail[\"sections\"][number] | null =>\n  value === null || value === undefined\n    ? null\n    : {\n        kind: \"code\",\n        title,\n        language: \"json\",\n        body: JSON.stringify(value, null, 2),\n      };\n\nexport const inspectionToolDetailFromTool = (\n  tool: LoadedSourceCatalogTool,\n): Effect.Effect<SourceInspectionToolDetail, Error, never> =>\n  Effect.gen(function* () {\n    const summary = persistedToolSummaryFromTool(tool);\n    const details = executableDetails(tool);\n    const contract = yield* buildLoadedSourceCatalogToolContract(tool);\n    const overviewItems = [\n      { label: \"Protocol\", value: details.protocol },\n      ...(details.method ? [{ label: \"Method\", value: details.method, mono: true }] : []),\n      ...(details.pathTemplate ? [{ label: \"Target\", value: details.pathTemplate, mono: true }] : []),\n      ...(details.operationId ? [{ label: \"Operation\", value: details.operationId, mono: true }] : []),\n      ...(details.group ? [{ label: \"Group\", value: details.group, mono: true }] : []),\n      ...(details.leaf ? [{ label: \"Leaf\", value: details.leaf, mono: true }] : []),\n      ...(details.rawToolId ? [{ label: \"Raw tool\", value: details.rawToolId, mono: true }] : []),\n      { label: \"Signature\", value: contract.callSignature, mono: true },\n      { label: \"Call shape\", value: contract.callShapeId, mono: true },\n      ...(contract.resultShapeId\n        ? [{ label: \"Result shape\", value: contract.resultShapeId, mono: true }]\n        : []),\n      { label: \"Response set\", value: contract.responseSetId, mono: true },\n    ];\n    const nativeSections = [\n      ...(tool.capability.native ?? []).map((blob, index) => ({\n        kind: \"code\" as const,\n        title: `Capability native ${String(index + 1)}: ${blob.kind}`,\n        language: nativeEncodingLanguage(blob.encoding),\n        body:\n          typeof blob.value === \"string\"\n            ? blob.value\n            : JSON.stringify(blob.value ?? null, null, 2),\n      })),\n      ...(tool.executable.native ?? []).map((blob, index) => ({\n        kind: \"code\" as const,\n        title: `Executable native ${String(index + 1)}: ${blob.kind}`,\n        language: nativeEncodingLanguage(blob.encoding),\n        body:\n          typeof blob.value === \"string\"\n            ? blob.value\n            : JSON.stringify(blob.value ?? null, null, 2),\n      })),\n    ];\n    const sections = [\n      {\n        kind: \"facts\" as const,\n        title: \"Overview\",\n        items: overviewItems,\n      },\n      ...(summary.description\n        ? [{\n            kind: \"markdown\" as const,\n            title: \"Description\",\n            body: summary.description,\n          }]\n        : []),\n      ...([\n        jsonSection(\"Capability\", tool.capability),\n        jsonSection(\"Executable\", {\n          id: tool.executable.id,\n          adapterKey: tool.executable.adapterKey,\n          bindingVersion: tool.executable.bindingVersion,\n          binding: tool.executable.binding,\n          projection: tool.executable.projection,\n          display: tool.executable.display ?? null,\n        }),\n        jsonSection(\"Documentation\", {\n          summary: tool.capability.surface.summary,\n          description: tool.capability.surface.description,\n        }),\n      ].filter((section) => section !== null) as Array<SourceInspectionToolDetail[\"sections\"][number]>),\n      ...nativeSections,\n    ];\n\n    return {\n      summary,\n      contract,\n      sections,\n    } satisfies SourceInspectionToolDetail;\n  });\n\nconst resolveSourceInspection = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  includeSchemas: boolean;\n  includeTypePreviews: boolean;\n}) =>\n  Effect.gen(function* () {\n    const loaded = yield* loadSourceCatalogOrEmpty({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    });\n\n    if (loaded.kind === \"empty\") {\n      return {\n        source: loaded.source,\n        namespace: loaded.source.namespace ?? \"\",\n        pipelineKind: \"ir\" as const,\n        tools: [],\n      };\n    }\n\n    const tools = yield* expandCatalogTools({\n      catalogs: [loaded.catalogEntry],\n      includeSchemas: input.includeSchemas,\n      includeTypePreviews: input.includeTypePreviews,\n    });\n\n    return {\n      source: loaded.catalogEntry.source,\n      namespace: loaded.catalogEntry.source.namespace ?? \"\",\n      pipelineKind: \"ir\" as const,\n      tools,\n    };\n  });\n\nconst resolveSourceInspectionTool = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  toolPath: string;\n}) =>\n  Effect.gen(function* () {\n    const loaded = yield* loadSourceCatalogOrEmpty({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    });\n\n    if (loaded.kind === \"empty\") {\n      return {\n        source: loaded.source,\n        namespace: loaded.source.namespace ?? \"\",\n        pipelineKind: \"ir\" as const,\n        tool: null,\n      };\n    }\n\n    const tool = yield* expandCatalogToolByPath({\n      catalogs: [loaded.catalogEntry],\n      path: input.toolPath,\n      includeSchemas: true,\n      includeTypePreviews: true,\n    });\n\n    return {\n      source: loaded.catalogEntry.source,\n      namespace: loaded.catalogEntry.source.namespace ?? \"\",\n      pipelineKind: \"ir\" as const,\n      tool,\n    };\n  });\n\nconst scoreTool = (input: {\n  queryTokens: ReadonlyArray<string>;\n  tool: LoadedSourceCatalogTool;\n}): SourceInspectionDiscoverResultItem | null => {\n  let score = 0;\n  const reasons: Array<string> = [];\n  const summary = persistedToolSummaryFromTool(input.tool);\n  const pathTokens = tokenize(summary.path);\n  const titleTokens = tokenize(summary.title ?? \"\");\n  const descriptionTokens = tokenize(summary.description ?? \"\");\n  const tagTokens = summary.tags.flatMap(tokenize);\n  const methodPathTokens = tokenize(`${summary.method ?? \"\"} ${summary.pathTemplate ?? \"\"}`);\n\n  for (const token of input.queryTokens) {\n    if (pathTokens.includes(token)) {\n      score += 12;\n      reasons.push(`path matches ${token} (+12)`);\n      continue;\n    }\n    if (tagTokens.includes(token)) {\n      score += 10;\n      reasons.push(`tag matches ${token} (+10)`);\n      continue;\n    }\n    if (titleTokens.includes(token)) {\n      score += 8;\n      reasons.push(`title matches ${token} (+8)`);\n      continue;\n    }\n    if (methodPathTokens.includes(token)) {\n      score += 6;\n      reasons.push(`method/path matches ${token} (+6)`);\n      continue;\n    }\n    if (descriptionTokens.includes(token) || input.tool.searchText.includes(token)) {\n      score += 2;\n      reasons.push(`description/text matches ${token} (+2)`);\n    }\n  }\n\n  if (score <= 0) {\n    return null;\n  }\n\n  return {\n    path: input.tool.path,\n    score,\n    ...(summary.description ? { description: summary.description } : {}),\n    ...(summary.inputTypePreview ? { inputTypePreview: summary.inputTypePreview } : {}),\n    ...(summary.outputTypePreview ? { outputTypePreview: summary.outputTypePreview } : {}),\n    reasons,\n  };\n};\n\nconst mapInspectionError = (\n  operation:\n    | typeof sourceInspectOps.bundle\n    | typeof sourceInspectOps.tool\n    | typeof sourceInspectOps.discover,\n  cause: unknown,\n  details: string,\n): ControlPlaneNotFoundError | ControlPlaneStorageError => {\n  if (cause instanceof ControlPlaneNotFoundError) {\n    return cause;\n  }\n\n  if (cause instanceof ControlPlaneStorageError) {\n    return cause;\n  }\n\n  return operation.unknownStorage(cause, details);\n};\n\nexport const getSourceInspection = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n}) =>\n  Effect.gen(function* () {\n    const inspection = yield* resolveSourceInspection({\n      ...input,\n      includeSchemas: false,\n      includeTypePreviews: true,\n    });\n\n    return {\n      source: inspection.source,\n      namespace: inspection.namespace,\n      pipelineKind: inspection.pipelineKind,\n      toolCount: inspection.tools.length,\n      tools: inspection.tools.map((tool) => inspectionToolListItemFromTool(tool)),\n    } satisfies SourceInspection;\n  }).pipe(\n    Effect.mapError((cause) =>\n      mapInspectionError(\n        sourceInspectOps.bundle,\n        cause,\n        \"Failed building source inspection bundle\",\n      )),\n  );\n\nexport const getSourceInspectionToolDetail = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  toolPath: string;\n}) =>\n  Effect.gen(function* () {\n    const inspection = yield* resolveSourceInspectionTool({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n      toolPath: input.toolPath,\n    });\n    const tool = inspection.tool;\n\n    if (!tool) {\n      return yield* sourceInspectOps.tool.notFound(\n          \"Tool not found\",\n          `workspaceId=${input.workspaceId} sourceId=${input.sourceId} path=${input.toolPath}`,\n        );\n    }\n\n    return yield* inspectionToolDetailFromTool(tool);\n  }).pipe(\n    Effect.mapError((cause) =>\n      mapInspectionError(\n        sourceInspectOps.tool,\n        cause,\n        \"Failed building source inspection tool detail\",\n      )),\n  );\n\nexport const discoverSourceInspectionTools = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  payload: SourceInspectionDiscoverPayload;\n}) =>\n  Effect.gen(function* () {\n    const inspection = yield* resolveSourceInspection({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n      includeSchemas: false,\n      includeTypePreviews: true,\n    });\n    const queryTokens = tokenize(input.payload.query);\n    const results = inspection.tools\n      .map((tool) =>\n        scoreTool({\n          queryTokens,\n          tool,\n        }),\n      )\n      .filter((value): value is SourceInspectionDiscoverResultItem => value !== null)\n      .sort((left, right) =>\n        right.score - left.score || left.path.localeCompare(right.path),\n      )\n      .slice(0, input.payload.limit ?? 12);\n\n    return {\n      query: input.payload.query,\n      queryTokens,\n      bestPath: results[0]?.path ?? null,\n      total: results.length,\n      results,\n    } satisfies SourceInspectionDiscoverResult;\n  }).pipe(\n    Effect.mapError((cause) =>\n      mapInspectionError(\n        sourceInspectOps.discover,\n        cause,\n        \"Failed building source inspection discovery\",\n      )),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-names.ts",
    "content": "export { namespaceFromSourceName } from \"@executor/source-core\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store/auth.ts",
    "content": "import type {\n  AccountId,\n  AuthArtifact,\n  CredentialSlot,\n  ProviderAuthGrant,\n  Source,\n  WorkspaceId,\n} from \"#schema\";\nimport { decodeProviderGrantRefAuthArtifactConfig } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport { authArtifactSecretMaterialRefs } from \"../../auth/auth-artifacts\";\nimport { removeAuthLeaseAndSecrets } from \"../../auth/auth-leases\";\nimport { createDefaultSecretMaterialDeleter } from \"../../local/secret-material-providers\";\nimport type { ControlPlaneStoreShape } from \"../../store\";\n\nconst secretRefKey = (ref: { providerId: string; handle: string }): string =>\n  `${ref.providerId}:${ref.handle}`;\n\nexport const cleanupAuthArtifactSecretRefs = (\n  rows: ControlPlaneStoreShape,\n  input: {\n    previous: AuthArtifact | null;\n    next: AuthArtifact | null;\n  },\n) =>\n  Effect.gen(function* () {\n    if (input.previous === null) {\n      return;\n    }\n\n    const deleteSecretMaterial = createDefaultSecretMaterialDeleter({ rows });\n    const nextRefKeys = new Set(\n      (input.next === null ? [] : authArtifactSecretMaterialRefs(input.next)).map(\n        secretRefKey,\n      ),\n    );\n    const refsToDelete = authArtifactSecretMaterialRefs(input.previous).filter(\n      (ref) => !nextRefKeys.has(secretRefKey(ref)),\n    );\n\n    yield* Effect.forEach(\n      refsToDelete,\n      (ref) => Effect.either(deleteSecretMaterial(ref)),\n      { discard: true },\n    );\n  });\n\nexport const providerGrantIdsFromArtifacts = (\n  artifacts: ReadonlyArray<\n    Pick<AuthArtifact, \"artifactKind\" | \"configJson\"> | null\n  >,\n): ReadonlySet<ProviderAuthGrant[\"id\"]> =>\n  new Set(\n    artifacts\n      .flatMap((artifact) =>\n        artifact ? [decodeProviderGrantRefAuthArtifactConfig(artifact)] : []\n      )\n      .flatMap((config) => (config ? [config.grantId] : [])),\n  );\n\nexport const selectPreferredAuthArtifact = (input: {\n  authArtifacts: ReadonlyArray<AuthArtifact>;\n  actorAccountId?: AccountId | null;\n  slot: CredentialSlot;\n}): AuthArtifact | null => {\n  const matchingSlot = input.authArtifacts.filter(\n    (artifact) => artifact.slot === input.slot,\n  );\n\n  if (input.actorAccountId !== undefined) {\n    const exact = matchingSlot.find(\n      (artifact) => artifact.actorAccountId === input.actorAccountId,\n    );\n    if (exact) {\n      return exact;\n    }\n  }\n\n  return matchingSlot.find((artifact) => artifact.actorAccountId === null) ?? null;\n};\n\nexport const selectExactAuthArtifact = (input: {\n  authArtifacts: ReadonlyArray<AuthArtifact>;\n  actorAccountId?: AccountId | null;\n  slot: CredentialSlot;\n}): AuthArtifact | null =>\n  input.authArtifacts.find(\n    (artifact) =>\n      artifact.slot === input.slot &&\n      artifact.actorAccountId === (input.actorAccountId ?? null),\n  ) ?? null;\n\nexport const removeAuthArtifactsForSource = (\n  rows: ControlPlaneStoreShape,\n  input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n  },\n) =>\n  Effect.gen(function* () {\n    const existingAuthArtifacts = yield* rows.authArtifacts.listByWorkspaceAndSourceId({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    });\n\n    yield* rows.authArtifacts.removeByWorkspaceAndSourceId({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    });\n\n    yield* Effect.forEach(\n      existingAuthArtifacts,\n      (artifact) =>\n        removeAuthLeaseAndSecrets(rows, {\n          authArtifactId: artifact.id,\n        }),\n      { discard: true },\n    );\n\n    yield* Effect.forEach(\n      existingAuthArtifacts,\n      (artifact) =>\n        cleanupAuthArtifactSecretRefs(rows, {\n          previous: artifact,\n          next: null,\n        }),\n      { discard: true },\n    );\n\n    return existingAuthArtifacts.length;\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store/config.ts",
    "content": "import type {\n  LocalConfigSecretInput,\n  LocalConfigSource,\n  Source,\n  SourceId,\n} from \"#schema\";\nimport { SourceIdSchema } from \"#schema\";\n\nimport type { LoadedLocalExecutorConfig } from \"../../local/config\";\nimport { LocalUnsupportedSourceKindError } from \"../../local/errors\";\nimport {\n  fromConfigSecretProviderId,\n  toConfigSecretProviderId,\n} from \"../../local/config-secrets\";\nimport { getSourceAdapterForSource } from \"../source-adapters\";\nimport { slugify } from \"../slug\";\n\nexport const trimOrNull = (value: string | null | undefined): string | null => {\n  if (value == null) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nexport const cloneJson = <T>(value: T): T =>\n  JSON.parse(JSON.stringify(value)) as T;\n\nexport const deriveLocalSourceId = (\n  source: Pick<Source, \"namespace\" | \"name\">,\n  used: ReadonlySet<string>,\n): SourceId => {\n  const base = trimOrNull(source.namespace) ?? trimOrNull(source.name) ?? \"source\";\n  const slugBase = slugify(base) || \"source\";\n  let candidate = slugBase;\n  let counter = 2;\n  while (used.has(candidate)) {\n    candidate = `${slugBase}-${counter}`;\n    counter += 1;\n  }\n  return SourceIdSchema.make(candidate);\n};\n\nconst resolveLocalConfigSecretProviderAlias = (\n  config: LoadedLocalExecutorConfig[\"config\"],\n): string | null => {\n  const defaultAlias = trimOrNull(config?.secrets?.defaults?.env);\n  if (defaultAlias !== null && config?.secrets?.providers?.[defaultAlias]) {\n    return defaultAlias;\n  }\n\n  return config?.secrets?.providers?.default ? \"default\" : null;\n};\n\nexport const sourceAuthFromConfigInput = (input: {\n  auth: unknown;\n  config: LoadedLocalExecutorConfig[\"config\"];\n  existing: Source[\"auth\"] | null;\n}): Source[\"auth\"] => {\n  if (input.auth === undefined) {\n    return input.existing ?? { kind: \"none\" };\n  }\n\n  if (typeof input.auth === \"string\") {\n    const providerAlias = resolveLocalConfigSecretProviderAlias(input.config);\n    return {\n      kind: \"bearer\",\n      headerName: \"Authorization\",\n      prefix: \"Bearer \",\n      token: {\n        providerId: providerAlias ? toConfigSecretProviderId(providerAlias) : \"env\",\n        handle: input.auth,\n      },\n    };\n  }\n\n  if (typeof input.auth === \"object\" && input.auth !== null) {\n    const explicit = input.auth as {\n      source?: string;\n      provider?: string;\n      id?: string;\n    };\n    const providerAlias = trimOrNull(explicit.provider);\n    const providerId = providerAlias\n      ? providerAlias === \"params\"\n        ? \"params\"\n        : toConfigSecretProviderId(providerAlias)\n      : explicit.source === \"env\"\n        ? \"env\"\n        : explicit.source === \"params\"\n          ? \"params\"\n          : null;\n    const handle = trimOrNull(explicit.id);\n    if (providerId && handle) {\n      return {\n        kind: \"bearer\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        token: {\n          providerId,\n          handle,\n        },\n      };\n    }\n  }\n\n  return input.existing ?? { kind: \"none\" };\n};\n\nconst configAuthFromSource = (input: {\n  source: Source;\n  existingConfigAuth: LocalConfigSecretInput | undefined;\n  config: LoadedLocalExecutorConfig[\"config\"];\n}): LocalConfigSecretInput | undefined => {\n  if (input.source.auth.kind !== \"bearer\") {\n    return input.existingConfigAuth;\n  }\n\n  if (input.source.auth.token.providerId === \"env\") {\n    return input.source.auth.token.handle;\n  }\n\n  if (input.source.auth.token.providerId === \"params\") {\n    return {\n      source: \"params\",\n      provider: \"params\",\n      id: input.source.auth.token.handle,\n    };\n  }\n\n  const provider = fromConfigSecretProviderId(input.source.auth.token.providerId);\n  if (provider !== null) {\n    const configuredProvider = input.config?.secrets?.providers?.[provider];\n    if (configuredProvider) {\n      return {\n        source: configuredProvider.source,\n        provider,\n        id: input.source.auth.token.handle,\n      };\n    }\n  }\n\n  return input.existingConfigAuth;\n};\n\nexport const configSourceFromLocalSource = (input: {\n  source: Source;\n  existingConfigAuth: LocalConfigSecretInput | undefined;\n  config: LoadedLocalExecutorConfig[\"config\"];\n}): LocalConfigSource => {\n  const auth = configAuthFromSource({\n    source: input.source,\n    existingConfigAuth: input.existingConfigAuth,\n    config: input.config,\n  });\n\n  const common = {\n    ...(trimOrNull(input.source.name) !== trimOrNull(input.source.id)\n      ? { name: input.source.name }\n      : {}),\n    ...(trimOrNull(input.source.namespace) !== trimOrNull(input.source.id)\n      ? { namespace: input.source.namespace ?? undefined }\n      : {}),\n    ...(input.source.enabled === false ? { enabled: false } : {}),\n    connection: {\n      endpoint: input.source.endpoint,\n      ...(auth !== undefined ? { auth } : {}),\n    },\n  };\n\n  const adapter = getSourceAdapterForSource(input.source);\n  if (adapter.localConfigBindingSchema === null) {\n    throw new LocalUnsupportedSourceKindError({\n      message: `Unsupported source kind for local config: ${input.source.kind}`,\n      kind: input.source.kind,\n    });\n  }\n\n  return {\n    kind: input.source.kind as LocalConfigSource[\"kind\"],\n    ...common,\n    binding: cloneJson(adapter.localConfigBindingFromSource(input.source)),\n  } as LocalConfigSource;\n};\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store/deps.ts",
    "content": "import type { AccountId, WorkspaceId } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport type {\n  LoadedLocalExecutorConfig,\n  ResolvedLocalWorkspaceContext,\n} from \"../../local/config\";\nimport {\n  LocalExecutorConfigDecodeError,\n  LocalFileSystemError,\n  LocalWorkspaceStateDecodeError,\n  RuntimeLocalWorkspaceMismatchError,\n  RuntimeLocalWorkspaceUnavailableError,\n} from \"../../local/errors\";\nimport {\n  requireRuntimeLocalWorkspace,\n  type RuntimeLocalWorkspaceState,\n} from \"../../local/runtime-context\";\nimport type {\n  SourceArtifactStoreShape,\n  WorkspaceStorageServices,\n  WorkspaceConfigStoreShape,\n  WorkspaceStateStoreShape,\n} from \"../../local/storage\";\nimport {\n  SourceArtifactStore,\n  WorkspaceConfigStore,\n  WorkspaceStateStore,\n} from \"../../local/storage\";\nimport type { LocalWorkspaceState } from \"../../local/workspace-state\";\nimport type { ControlPlaneStoreShape } from \"../../store\";\n\nexport type RuntimeSourceStoreDeps = {\n  rows: ControlPlaneStoreShape;\n  runtimeLocalWorkspace: RuntimeLocalWorkspaceState;\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n};\n\nexport type ResolvedSourceStoreWorkspace = {\n  context: ResolvedLocalWorkspaceContext;\n  installation: {\n    workspaceId: WorkspaceId;\n    accountId: AccountId;\n  };\n  workspaceConfigStore: WorkspaceConfigStoreShape;\n  workspaceStateStore: WorkspaceStateStoreShape;\n  sourceArtifactStore: SourceArtifactStoreShape;\n  loadedConfig: LoadedLocalExecutorConfig;\n  workspaceState: LocalWorkspaceState;\n};\n\nexport const resolveRuntimeLocalWorkspaceFromDeps = (\n  deps: RuntimeSourceStoreDeps,\n  workspaceId: WorkspaceId,\n): Effect.Effect<\n  ResolvedSourceStoreWorkspace,\n  | RuntimeLocalWorkspaceUnavailableError\n  | RuntimeLocalWorkspaceMismatchError\n  | LocalFileSystemError\n  | LocalExecutorConfigDecodeError\n  | LocalWorkspaceStateDecodeError\n  | Error,\n  never\n> =>\n  Effect.gen(function* () {\n    if (deps.runtimeLocalWorkspace.installation.workspaceId !== workspaceId) {\n      return yield* new RuntimeLocalWorkspaceMismatchError({\n          message: `Runtime local workspace mismatch: expected ${workspaceId}, got ${deps.runtimeLocalWorkspace.installation.workspaceId}`,\n          requestedWorkspaceId: workspaceId,\n          activeWorkspaceId: deps.runtimeLocalWorkspace.installation.workspaceId,\n        });\n    }\n\n    const loadedConfig = yield* deps.workspaceConfigStore.load(\n      deps.runtimeLocalWorkspace.context,\n    );\n    const workspaceState = yield* deps.workspaceStateStore.load(\n      deps.runtimeLocalWorkspace.context,\n    );\n\n    return {\n      context: deps.runtimeLocalWorkspace.context,\n      installation: deps.runtimeLocalWorkspace.installation,\n      workspaceConfigStore: deps.workspaceConfigStore,\n      workspaceStateStore: deps.workspaceStateStore,\n      sourceArtifactStore: deps.sourceArtifactStore,\n      loadedConfig,\n      workspaceState,\n    };\n  });\n\nexport const loadRuntimeSourceStoreDeps = (\n  rows: ControlPlaneStoreShape,\n  workspaceId: WorkspaceId,\n): Effect.Effect<\n  RuntimeSourceStoreDeps,\n  | RuntimeLocalWorkspaceUnavailableError\n  | RuntimeLocalWorkspaceMismatchError\n  | LocalFileSystemError\n  | LocalExecutorConfigDecodeError\n  | LocalWorkspaceStateDecodeError\n  | Error,\n  WorkspaceStorageServices\n> =>\n  Effect.gen(function* () {\n    const runtimeLocalWorkspace = yield* requireRuntimeLocalWorkspace(workspaceId);\n    const workspaceConfigStore = yield* WorkspaceConfigStore;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n\n    return {\n      rows,\n      runtimeLocalWorkspace,\n      workspaceConfigStore,\n      workspaceStateStore,\n      sourceArtifactStore,\n    };\n  });\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store/lifecycle.ts",
    "content": "import type { AccountId, Source, WorkspaceId } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport { removeAuthLeaseAndSecrets } from \"../../auth/auth-leases\";\nimport {\n  clearProviderGrantOrphanedAt,\n  markProviderGrantOrphanedIfUnused,\n} from \"../../auth/provider-grant-lifecycle\";\nimport type { LocalWorkspaceState } from \"../../local/workspace-state\";\nimport {\n  stableSourceCatalogId,\n  stableSourceCatalogRevisionId,\n  splitSourceForStorage,\n} from \"../source-definitions\";\nimport {\n  cleanupAuthArtifactSecretRefs,\n  providerGrantIdsFromArtifacts,\n  removeAuthArtifactsForSource,\n  selectExactAuthArtifact,\n} from \"./auth\";\nimport {\n  configSourceFromLocalSource,\n  cloneJson,\n  deriveLocalSourceId,\n} from \"./config\";\nimport {\n  type RuntimeSourceStoreDeps,\n  resolveRuntimeLocalWorkspaceFromDeps,\n} from \"./deps\";\nimport {\n  loadSourceByIdWithDeps,\n  shouldRefreshWorkspaceDeclarationsAfterPersist,\n  syncWorkspaceSourceTypeDeclarationsWithDeps,\n} from \"./records\";\n\nexport const removeSourceByIdWithDeps = (\n  deps: RuntimeSourceStoreDeps,\n  input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n  },\n): Effect.Effect<boolean, Error, never> =>\n  Effect.gen(function* () {\n    const localWorkspace = yield* resolveRuntimeLocalWorkspaceFromDeps(\n      deps,\n      input.workspaceId,\n    );\n    if (!localWorkspace.loadedConfig.config?.sources?.[input.sourceId]) {\n      return false;\n    }\n\n    const projectConfig = cloneJson(localWorkspace.loadedConfig.projectConfig ?? {});\n    const sources = {\n      ...projectConfig.sources,\n    };\n    delete sources[input.sourceId];\n    yield* localWorkspace.workspaceConfigStore.writeProject({\n      context: localWorkspace.context,\n      config: {\n        ...projectConfig,\n        sources,\n      },\n    });\n\n    const { [input.sourceId]: _removedSource, ...remainingSources } =\n      localWorkspace.workspaceState.sources;\n    const workspaceState: LocalWorkspaceState = {\n      ...localWorkspace.workspaceState,\n      sources: remainingSources,\n    };\n    yield* localWorkspace.workspaceStateStore.write({\n      context: localWorkspace.context,\n      state: workspaceState,\n    });\n    yield* localWorkspace.sourceArtifactStore.remove({\n      context: localWorkspace.context,\n      sourceId: input.sourceId,\n    });\n    const existingAuthArtifacts =\n      yield* deps.rows.authArtifacts.listByWorkspaceAndSourceId({\n        workspaceId: input.workspaceId,\n        sourceId: input.sourceId,\n      });\n    const removedGrantIds = providerGrantIdsFromArtifacts(existingAuthArtifacts);\n\n    yield* deps.rows.sourceAuthSessions.removeByWorkspaceAndSourceId(\n      input.workspaceId,\n      input.sourceId,\n    );\n    yield* deps.rows.sourceOauthClients.removeByWorkspaceAndSourceId({\n      workspaceId: input.workspaceId,\n      sourceId: input.sourceId,\n    });\n    yield* removeAuthArtifactsForSource(deps.rows, input);\n    yield* Effect.forEach(\n      [...removedGrantIds],\n      (grantId) =>\n        markProviderGrantOrphanedIfUnused(deps.rows, {\n          workspaceId: input.workspaceId,\n          grantId,\n        }),\n      { discard: true },\n    );\n    yield* syncWorkspaceSourceTypeDeclarationsWithDeps(deps, input.workspaceId);\n\n    return true;\n  });\n\nexport const persistSourceWithDeps = (\n  deps: RuntimeSourceStoreDeps,\n  source: Source,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<Source, Error, never> =>\n  Effect.gen(function* () {\n    const localWorkspace = yield* resolveRuntimeLocalWorkspaceFromDeps(\n      deps,\n      source.workspaceId,\n    );\n    const nextSource = {\n      ...source,\n      id:\n        localWorkspace.loadedConfig.config?.sources?.[source.id] ||\n        localWorkspace.workspaceState.sources[source.id]\n          ? source.id\n          : deriveLocalSourceId(\n              source,\n              new Set(Object.keys(localWorkspace.loadedConfig.config?.sources ?? {})),\n            ),\n    } satisfies Source;\n    const existingAuthArtifacts =\n      yield* deps.rows.authArtifacts.listByWorkspaceAndSourceId({\n        workspaceId: nextSource.workspaceId,\n        sourceId: nextSource.id,\n      });\n    const existingRuntimeAuthArtifact = selectExactAuthArtifact({\n      authArtifacts: existingAuthArtifacts,\n      actorAccountId: options.actorAccountId,\n      slot: \"runtime\",\n    });\n    const existingImportAuthArtifact = selectExactAuthArtifact({\n      authArtifacts: existingAuthArtifacts,\n      actorAccountId: options.actorAccountId,\n      slot: \"import\",\n    });\n    const projectConfig = cloneJson(localWorkspace.loadedConfig.projectConfig ?? {});\n    const sources = {\n      ...projectConfig.sources,\n    };\n    const existingConfigSource = sources[nextSource.id];\n    sources[nextSource.id] = configSourceFromLocalSource({\n      source: nextSource,\n      existingConfigAuth: existingConfigSource?.connection.auth,\n      config: localWorkspace.loadedConfig.config,\n    });\n    yield* localWorkspace.workspaceConfigStore.writeProject({\n      context: localWorkspace.context,\n      config: {\n        ...projectConfig,\n        sources,\n      },\n    });\n\n    const { runtimeAuthArtifact, importAuthArtifact } = splitSourceForStorage({\n      source: nextSource,\n      catalogId: stableSourceCatalogId(nextSource),\n      catalogRevisionId: stableSourceCatalogRevisionId(nextSource),\n      actorAccountId: options.actorAccountId,\n      existingRuntimeAuthArtifactId: existingRuntimeAuthArtifact?.id ?? null,\n      existingImportAuthArtifactId: existingImportAuthArtifact?.id ?? null,\n    });\n\n    if (runtimeAuthArtifact === null) {\n      if (existingRuntimeAuthArtifact !== null) {\n        yield* removeAuthLeaseAndSecrets(deps.rows, {\n          authArtifactId: existingRuntimeAuthArtifact.id,\n        });\n      }\n      yield* deps.rows.authArtifacts.removeByWorkspaceSourceAndActor({\n        workspaceId: nextSource.workspaceId,\n        sourceId: nextSource.id,\n        actorAccountId: options.actorAccountId ?? null,\n        slot: \"runtime\",\n      });\n    } else {\n      yield* deps.rows.authArtifacts.upsert(runtimeAuthArtifact);\n      if (\n        existingRuntimeAuthArtifact !== null &&\n        existingRuntimeAuthArtifact.id !== runtimeAuthArtifact.id\n      ) {\n        yield* removeAuthLeaseAndSecrets(deps.rows, {\n          authArtifactId: existingRuntimeAuthArtifact.id,\n        });\n      }\n    }\n\n    yield* cleanupAuthArtifactSecretRefs(deps.rows, {\n      previous: existingRuntimeAuthArtifact ?? null,\n      next: runtimeAuthArtifact,\n    });\n\n    if (importAuthArtifact === null) {\n      if (existingImportAuthArtifact !== null) {\n        yield* removeAuthLeaseAndSecrets(deps.rows, {\n          authArtifactId: existingImportAuthArtifact.id,\n        });\n      }\n      yield* deps.rows.authArtifacts.removeByWorkspaceSourceAndActor({\n        workspaceId: nextSource.workspaceId,\n        sourceId: nextSource.id,\n        actorAccountId: options.actorAccountId ?? null,\n        slot: \"import\",\n      });\n    } else {\n      yield* deps.rows.authArtifacts.upsert(importAuthArtifact);\n      if (\n        existingImportAuthArtifact !== null &&\n        existingImportAuthArtifact.id !== importAuthArtifact.id\n      ) {\n        yield* removeAuthLeaseAndSecrets(deps.rows, {\n          authArtifactId: existingImportAuthArtifact.id,\n        });\n      }\n    }\n\n    yield* cleanupAuthArtifactSecretRefs(deps.rows, {\n      previous: existingImportAuthArtifact ?? null,\n      next: importAuthArtifact,\n    });\n\n    const previousGrantIds = providerGrantIdsFromArtifacts([\n      existingRuntimeAuthArtifact,\n      existingImportAuthArtifact,\n    ]);\n    const nextGrantIds = providerGrantIdsFromArtifacts([\n      runtimeAuthArtifact,\n      importAuthArtifact,\n    ]);\n\n    yield* Effect.forEach(\n      [...nextGrantIds],\n      (grantId) =>\n        clearProviderGrantOrphanedAt(deps.rows, {\n          grantId,\n        }),\n      { discard: true },\n    );\n    yield* Effect.forEach(\n      [...previousGrantIds].filter((grantId) => !nextGrantIds.has(grantId)),\n      (grantId) =>\n        markProviderGrantOrphanedIfUnused(deps.rows, {\n          workspaceId: nextSource.workspaceId,\n          grantId,\n        }),\n      { discard: true },\n    );\n\n    const existingSourceState = localWorkspace.workspaceState.sources[nextSource.id];\n    const workspaceState: LocalWorkspaceState = {\n      ...localWorkspace.workspaceState,\n      sources: {\n        ...localWorkspace.workspaceState.sources,\n        [nextSource.id]: {\n          status: nextSource.status,\n          lastError: nextSource.lastError,\n          sourceHash: nextSource.sourceHash,\n          createdAt: existingSourceState?.createdAt ?? nextSource.createdAt,\n          updatedAt: nextSource.updatedAt,\n        },\n      },\n    };\n    yield* localWorkspace.workspaceStateStore.write({\n      context: localWorkspace.context,\n      state: workspaceState,\n    });\n\n    if (shouldRefreshWorkspaceDeclarationsAfterPersist(nextSource)) {\n      yield* syncWorkspaceSourceTypeDeclarationsWithDeps(\n        deps,\n        nextSource.workspaceId,\n        options,\n      );\n    }\n\n    return yield* loadSourceByIdWithDeps(deps, {\n      workspaceId: nextSource.workspaceId,\n      sourceId: nextSource.id,\n      actorAccountId: options.actorAccountId,\n    });\n  }).pipe(\n    Effect.withSpan(\"source.store.persist\", {\n      attributes: {\n        \"executor.workspace.id\": source.workspaceId,\n        \"executor.source.id\": source.id,\n        \"executor.source.kind\": source.kind,\n        \"executor.source.status\": source.status,\n      },\n    }),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store/records.ts",
    "content": "import type {\n  AccountId,\n  AuthArtifact,\n  Source,\n  SourceId,\n  WorkspaceId,\n} from \"#schema\";\nimport { SourceIdSchema } from \"#schema\";\nimport * as Effect from \"effect/Effect\";\n\nimport { sourceAuthFromAuthArtifact } from \"../../auth/auth-artifacts\";\nimport { authArtifactSecretMaterialRefs } from \"../../auth/auth-artifacts\";\nimport { refreshWorkspaceSourceTypeDeclarationsInBackground } from \"../../catalog/source/type-declarations\";\nimport type { LoadedLocalExecutorConfig } from \"../../local/config\";\nimport {\n  LocalConfiguredSourceNotFoundError,\n  LocalExecutorConfigDecodeError,\n  LocalFileSystemError,\n  LocalWorkspaceStateDecodeError,\n  RuntimeLocalWorkspaceMismatchError,\n  RuntimeLocalWorkspaceUnavailableError,\n} from \"../../local/errors\";\nimport type { LocalWorkspaceState } from \"../../local/workspace-state\";\nimport { getSourceAdapter } from \"../source-adapters\";\nimport {\n  resolveRuntimeLocalWorkspaceFromDeps,\n  type RuntimeSourceStoreDeps,\n} from \"./deps\";\nimport {\n  selectPreferredAuthArtifact,\n} from \"./auth\";\nimport {\n  sourceAuthFromConfigInput,\n  trimOrNull,\n} from \"./config\";\n\nexport const buildLocalSourceRecord = (input: {\n  workspaceId: WorkspaceId;\n  loadedConfig: LoadedLocalExecutorConfig;\n  workspaceState: LocalWorkspaceState;\n  sourceId: SourceId;\n  actorAccountId?: AccountId | null;\n  authArtifacts: ReadonlyArray<AuthArtifact>;\n}): Effect.Effect<\n  {\n    source: Source;\n    sourceId: SourceId;\n  },\n  LocalConfiguredSourceNotFoundError | Error,\n  never\n> =>\n  Effect.gen(function* () {\n    const sourceConfig = input.loadedConfig.config?.sources?.[input.sourceId];\n    if (!sourceConfig) {\n      return yield* new LocalConfiguredSourceNotFoundError({\n          message: `Configured source not found for id ${input.sourceId}`,\n          sourceId: input.sourceId,\n        });\n    }\n\n    const existingState = input.workspaceState.sources[input.sourceId];\n    const adapter = getSourceAdapter(sourceConfig.kind);\n    const baseSource = (yield* adapter.validateSource({\n      id: SourceIdSchema.make(input.sourceId),\n      workspaceId: input.workspaceId,\n      name: trimOrNull(sourceConfig.name) ?? input.sourceId,\n      kind: sourceConfig.kind,\n      endpoint: sourceConfig.connection.endpoint.trim(),\n      status:\n        existingState?.status ??\n        (sourceConfig.enabled ?? true ? \"connected\" : \"draft\"),\n      enabled: sourceConfig.enabled ?? true,\n      namespace: trimOrNull(sourceConfig.namespace) ?? input.sourceId,\n      bindingVersion: adapter.bindingConfigVersion,\n      binding: sourceConfig.binding,\n      importAuthPolicy: adapter.defaultImportAuthPolicy,\n      importAuth: { kind: \"none\" },\n      auth: sourceAuthFromConfigInput({\n        auth: sourceConfig.connection.auth,\n        config: input.loadedConfig.config,\n        existing: null,\n      }),\n      sourceHash: existingState?.sourceHash ?? null,\n      lastError: existingState?.lastError ?? null,\n      createdAt: existingState?.createdAt ?? Date.now(),\n      updatedAt: existingState?.updatedAt ?? Date.now(),\n    })) as Source;\n\n    const runtimeAuthArtifact = selectPreferredAuthArtifact({\n      authArtifacts: input.authArtifacts.filter(\n        (artifactItem) => artifactItem.sourceId === baseSource.id,\n      ),\n      actorAccountId: input.actorAccountId,\n      slot: \"runtime\",\n    });\n    const importAuthArtifact = selectPreferredAuthArtifact({\n      authArtifacts: input.authArtifacts.filter(\n        (artifactItem) => artifactItem.sourceId === baseSource.id,\n      ),\n      actorAccountId: input.actorAccountId,\n      slot: \"import\",\n    });\n\n    const source: Source = {\n      ...baseSource,\n      auth:\n        runtimeAuthArtifact === null\n          ? baseSource.auth\n          : sourceAuthFromAuthArtifact(runtimeAuthArtifact),\n      importAuth:\n        baseSource.importAuthPolicy === \"separate\"\n          ? importAuthArtifact === null\n            ? baseSource.importAuth\n            : sourceAuthFromAuthArtifact(importAuthArtifact)\n          : { kind: \"none\" },\n    };\n\n    return {\n      source,\n      sourceId: input.sourceId,\n    };\n  });\n\nexport const loadSourcesInWorkspaceWithDeps = (\n  deps: RuntimeSourceStoreDeps,\n  workspaceId: WorkspaceId,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<\n  readonly Source[],\n  | RuntimeLocalWorkspaceUnavailableError\n  | RuntimeLocalWorkspaceMismatchError\n  | LocalFileSystemError\n  | LocalExecutorConfigDecodeError\n  | LocalWorkspaceStateDecodeError\n  | LocalConfiguredSourceNotFoundError\n  | Error,\n  never\n> =>\n  Effect.gen(function* () {\n    const localWorkspace = yield* resolveRuntimeLocalWorkspaceFromDeps(\n      deps,\n      workspaceId,\n    );\n    const authArtifacts = yield* deps.rows.authArtifacts.listByWorkspaceId(\n      workspaceId,\n    );\n    const sources = yield* Effect.forEach(\n      Object.keys(localWorkspace.loadedConfig.config?.sources ?? {}),\n      (sourceId) =>\n        Effect.map(\n          buildLocalSourceRecord({\n            workspaceId,\n            loadedConfig: localWorkspace.loadedConfig,\n            workspaceState: localWorkspace.workspaceState,\n            sourceId: SourceIdSchema.make(sourceId),\n            actorAccountId: options.actorAccountId,\n            authArtifacts,\n          }),\n          ({ source }) => source,\n        ),\n    );\n    yield* Effect.annotateCurrentSpan(\"executor.source.count\", sources.length);\n    return sources;\n  }).pipe(\n    Effect.withSpan(\"source.store.load_workspace\", {\n      attributes: {\n        \"executor.workspace.id\": workspaceId,\n      },\n    }),\n  );\n\nexport const syncWorkspaceSourceTypeDeclarationsWithDeps = (\n  deps: RuntimeSourceStoreDeps,\n  workspaceId: WorkspaceId,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<void, Error, never> =>\n  Effect.gen(function* () {\n    const localWorkspace = yield* resolveRuntimeLocalWorkspaceFromDeps(\n      deps,\n      workspaceId,\n    );\n    const sources = yield* loadSourcesInWorkspaceWithDeps(\n      deps,\n      workspaceId,\n      options,\n    );\n    const entries = yield* Effect.forEach(sources, (source) =>\n      Effect.map(\n        deps.sourceArtifactStore.read({\n          context: localWorkspace.context,\n          sourceId: source.id,\n        }),\n        (artifact) =>\n          artifact === null\n            ? null\n            : {\n                source,\n                snapshot: artifact.snapshot,\n              },\n      ),\n    );\n\n    yield* Effect.sync(() => {\n      refreshWorkspaceSourceTypeDeclarationsInBackground({\n        context: localWorkspace.context,\n        entries: entries.filter(\n          (entry): entry is NonNullable<typeof entry> => entry !== null,\n        ),\n      });\n    });\n  }).pipe(\n    Effect.withSpan(\"source.types.refresh_workspace.schedule\", {\n      attributes: {\n        \"executor.workspace.id\": workspaceId,\n      },\n    }),\n  );\n\nexport const shouldRefreshWorkspaceDeclarationsAfterPersist = (source: Source): boolean =>\n  source.enabled === false ||\n  source.status === \"auth_required\" ||\n  source.status === \"error\" ||\n  source.status === \"draft\";\n\nexport const listLinkedSecretSourcesInWorkspaceWithDeps = (\n  deps: RuntimeSourceStoreDeps,\n  workspaceId: WorkspaceId,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<\n  Map<string, Array<{ sourceId: string; sourceName: string }>>,\n  | RuntimeLocalWorkspaceUnavailableError\n  | RuntimeLocalWorkspaceMismatchError\n  | LocalFileSystemError\n  | LocalExecutorConfigDecodeError\n  | LocalWorkspaceStateDecodeError\n  | LocalConfiguredSourceNotFoundError\n  | Error,\n  never\n> =>\n  Effect.gen(function* () {\n    const [sources, authArtifacts, materialIds] = yield* Effect.all([\n      loadSourcesInWorkspaceWithDeps(deps, workspaceId, {\n        actorAccountId: options.actorAccountId,\n      }),\n      deps.rows.authArtifacts.listByWorkspaceId(workspaceId),\n      deps.rows.secretMaterials.listAll().pipe(\n        Effect.map(\n          (materials) => new Set(materials.map((material) => String(material.id))),\n        ),\n      ),\n    ]);\n\n    const sourceNames = new Map(\n      sources.map((source) => [source.id, source.name] as const),\n    );\n    const linkedSources = new Map<\n      string,\n      Array<{ sourceId: string; sourceName: string }>\n    >();\n\n    for (const artifact of authArtifacts) {\n      for (const ref of authArtifactSecretMaterialRefs(artifact)) {\n        if (!materialIds.has(ref.handle)) {\n          continue;\n        }\n\n        const existing = linkedSources.get(ref.handle) ?? [];\n        if (!existing.some((link) => link.sourceId === artifact.sourceId)) {\n          existing.push({\n            sourceId: artifact.sourceId,\n            sourceName: sourceNames.get(artifact.sourceId) ?? artifact.sourceId,\n          });\n          linkedSources.set(ref.handle, existing);\n        }\n      }\n    }\n\n    return linkedSources;\n  });\n\nexport const loadSourceByIdWithDeps = (\n  deps: RuntimeSourceStoreDeps,\n  input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n    actorAccountId?: AccountId | null;\n  },\n): Effect.Effect<\n  Source,\n  | RuntimeLocalWorkspaceUnavailableError\n  | RuntimeLocalWorkspaceMismatchError\n  | LocalFileSystemError\n  | LocalExecutorConfigDecodeError\n  | LocalWorkspaceStateDecodeError\n  | LocalConfiguredSourceNotFoundError\n  | Error,\n  never\n> =>\n  Effect.gen(function* () {\n    const localWorkspace = yield* resolveRuntimeLocalWorkspaceFromDeps(\n      deps,\n      input.workspaceId,\n    );\n    const authArtifacts = yield* deps.rows.authArtifacts.listByWorkspaceId(\n      input.workspaceId,\n    );\n    if (!localWorkspace.loadedConfig.config?.sources?.[input.sourceId]) {\n      return yield* new LocalConfiguredSourceNotFoundError({\n          message: `Source not found: workspaceId=${input.workspaceId} sourceId=${input.sourceId}`,\n          sourceId: input.sourceId,\n        });\n    }\n\n    const localSource = yield* buildLocalSourceRecord({\n      workspaceId: input.workspaceId,\n      loadedConfig: localWorkspace.loadedConfig,\n      workspaceState: localWorkspace.workspaceState,\n      sourceId: input.sourceId,\n      actorAccountId: input.actorAccountId,\n      authArtifacts,\n    });\n\n    return localSource.source;\n  }).pipe(\n    Effect.withSpan(\"source.store.load_by_id\", {\n      attributes: {\n        \"executor.workspace.id\": input.workspaceId,\n        \"executor.source.id\": input.sourceId,\n      },\n    }),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  SourceIdSchema,\n  WorkspaceIdSchema,\n  type Source,\n} from \"#schema\";\n\nimport type { LoadedLocalExecutorConfig } from \"../local/config\";\nimport { buildLocalSourceRecord } from \"./source-store\";\nimport type { LocalWorkspaceState } from \"../local/workspace-state\";\n\nconst workspaceId = WorkspaceIdSchema.make(\"ws_source_store\");\nconst sourceId = SourceIdSchema.make(\"linear\");\n\nconst loadedConfig: LoadedLocalExecutorConfig = {\n  config: {\n    sources: {\n      [sourceId]: {\n        kind: \"graphql\",\n        name: \"Linear GraphQL\",\n        namespace: \"linear\",\n        connection: {\n          endpoint: \"https://api.linear.app/graphql\",\n        },\n        binding: {\n          defaultHeaders: null,\n        },\n      },\n    },\n  },\n  homeConfig: null,\n  projectConfig: null,\n  homeConfigPath: \"/tmp/home-config.jsonc\",\n  projectConfigPath: \"/tmp/project-config.jsonc\",\n};\n\nconst workspaceState: LocalWorkspaceState = {\n  version: 1,\n  sources: {\n    [sourceId]: {\n      status: \"connected\",\n      lastError: null,\n      sourceHash: \"hash_linear\",\n      createdAt: 1000,\n      updatedAt: 2000,\n    },\n  },\n  policies: {},\n};\n\ndescribe(\"source-store\", () => {\n  it.effect(\"projects configured sources without reading local artifacts\", () =>\n    Effect.gen(function* () {\n      const result = yield* buildLocalSourceRecord({\n        workspaceId,\n        loadedConfig,\n        workspaceState,\n        sourceId,\n        authArtifacts: [],\n      });\n\n      expect(result.source).toEqual({\n        id: sourceId,\n        workspaceId,\n        name: \"Linear GraphQL\",\n        kind: \"graphql\",\n        endpoint: \"https://api.linear.app/graphql\",\n        status: \"connected\",\n        enabled: true,\n        namespace: \"linear\",\n        bindingVersion: 1,\n        binding: {\n          defaultHeaders: null,\n        },\n        importAuthPolicy: \"reuse_runtime\",\n        importAuth: { kind: \"none\" },\n        auth: { kind: \"none\" },\n        sourceHash: \"hash_linear\",\n        lastError: null,\n        createdAt: 1000,\n        updatedAt: 2000,\n      } satisfies Source);\n    }));\n});\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/source-store.ts",
    "content": "import type {\n  AccountId,\n  Source,\n  WorkspaceId,\n} from \"#schema\";\nimport * as Context from \"effect/Context\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  SourceArtifactStore,\n  type WorkspaceStorageServices,\n  WorkspaceConfigStore,\n  WorkspaceStateStore,\n} from \"../local/storage\";\nimport { RuntimeLocalWorkspaceService } from \"../local/runtime-context\";\nimport { ControlPlaneStore, type ControlPlaneStoreShape } from \"../store\";\nimport {\n  loadRuntimeSourceStoreDeps,\n  type RuntimeSourceStoreDeps,\n} from \"./source-store/deps\";\nimport {\n  buildLocalSourceRecord,\n  listLinkedSecretSourcesInWorkspaceWithDeps,\n  loadSourceByIdWithDeps,\n  loadSourcesInWorkspaceWithDeps,\n} from \"./source-store/records\";\nimport {\n  persistSourceWithDeps,\n  removeSourceByIdWithDeps,\n} from \"./source-store/lifecycle\";\n\nexport { buildLocalSourceRecord } from \"./source-store/records\";\n\ntype RuntimeSourceStoreShape = {\n  loadSourcesInWorkspace: (\n    workspaceId: WorkspaceId,\n    options?: { actorAccountId?: AccountId | null },\n  ) => ReturnType<typeof loadSourcesInWorkspaceWithDeps>;\n  listLinkedSecretSourcesInWorkspace: (\n    workspaceId: WorkspaceId,\n    options?: { actorAccountId?: AccountId | null },\n  ) => ReturnType<typeof listLinkedSecretSourcesInWorkspaceWithDeps>;\n  loadSourceById: (input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n    actorAccountId?: AccountId | null;\n  }) => ReturnType<typeof loadSourceByIdWithDeps>;\n  removeSourceById: (input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n  }) => ReturnType<typeof removeSourceByIdWithDeps>;\n  persistSource: (\n    source: Source,\n    options?: { actorAccountId?: AccountId | null },\n  ) => ReturnType<typeof persistSourceWithDeps>;\n};\n\nexport type RuntimeSourceStore = RuntimeSourceStoreShape;\n\nexport const loadSourcesInWorkspace = (\n  rows: ControlPlaneStoreShape,\n  workspaceId: WorkspaceId,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<readonly Source[], Error, WorkspaceStorageServices> =>\n  Effect.flatMap(\n    loadRuntimeSourceStoreDeps(rows, workspaceId),\n    (deps) => loadSourcesInWorkspaceWithDeps(deps, workspaceId, options),\n  );\n\nexport const listLinkedSecretSourcesInWorkspace = (\n  rows: ControlPlaneStoreShape,\n  workspaceId: WorkspaceId,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<\n  Map<string, Array<{ sourceId: string; sourceName: string }>>,\n  Error,\n  WorkspaceStorageServices\n> =>\n  Effect.flatMap(\n    loadRuntimeSourceStoreDeps(rows, workspaceId),\n    (deps) => listLinkedSecretSourcesInWorkspaceWithDeps(deps, workspaceId, options),\n  );\n\nexport const loadSourceById = (\n  rows: ControlPlaneStoreShape,\n  input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n    actorAccountId?: AccountId | null;\n  },\n): Effect.Effect<Source, Error, WorkspaceStorageServices> =>\n  Effect.flatMap(\n    loadRuntimeSourceStoreDeps(rows, input.workspaceId),\n    (deps) => loadSourceByIdWithDeps(deps, input),\n  );\n\nexport const removeSourceById = (\n  rows: ControlPlaneStoreShape,\n  input: {\n    workspaceId: WorkspaceId;\n    sourceId: Source[\"id\"];\n  },\n): Effect.Effect<boolean, Error, WorkspaceStorageServices> =>\n  Effect.flatMap(\n    loadRuntimeSourceStoreDeps(rows, input.workspaceId),\n    (deps) => removeSourceByIdWithDeps(deps, input),\n  );\n\nexport const persistSource = (\n  rows: ControlPlaneStoreShape,\n  source: Source,\n  options: {\n    actorAccountId?: AccountId | null;\n  } = {},\n): Effect.Effect<Source, Error, WorkspaceStorageServices> =>\n  Effect.flatMap(\n    loadRuntimeSourceStoreDeps(rows, source.workspaceId),\n    (deps) => persistSourceWithDeps(deps, source, options),\n  );\n\nexport class RuntimeSourceStoreService extends Context.Tag(\n  \"#runtime/RuntimeSourceStoreService\",\n)<RuntimeSourceStoreService, RuntimeSourceStoreShape>() {}\n\nexport const RuntimeSourceStoreLive = Layer.effect(\n  RuntimeSourceStoreService,\n  Effect.gen(function* () {\n    const rows = yield* ControlPlaneStore;\n    const runtimeLocalWorkspace = yield* RuntimeLocalWorkspaceService;\n    const workspaceConfigStore = yield* WorkspaceConfigStore;\n    const workspaceStateStore = yield* WorkspaceStateStore;\n    const sourceArtifactStore = yield* SourceArtifactStore;\n\n    const deps: RuntimeSourceStoreDeps = {\n      rows,\n      runtimeLocalWorkspace,\n      workspaceConfigStore,\n      workspaceStateStore,\n      sourceArtifactStore,\n    };\n\n    return RuntimeSourceStoreService.of({\n      loadSourcesInWorkspace: (workspaceId, options = {}) =>\n        loadSourcesInWorkspaceWithDeps(deps, workspaceId, options),\n      listLinkedSecretSourcesInWorkspace: (workspaceId, options = {}) =>\n        listLinkedSecretSourcesInWorkspaceWithDeps(deps, workspaceId, options),\n      loadSourceById: (input) =>\n        loadSourceByIdWithDeps(deps, input),\n      removeSourceById: (input) =>\n        removeSourceByIdWithDeps(deps, input),\n      persistSource: (source, options = {}) =>\n        persistSourceWithDeps(deps, source, options),\n    });\n  }),\n);\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/sources/sources-operations.ts",
    "content": "import type {\n  CreateSourcePayload,\n  UpdateSourcePayload,\n} from \"../../api/sources/api\";\nimport {\n  type AccountId,\n  SourceIdSchema,\n  type Source,\n  type SourceId,\n  type WorkspaceId,\n} from \"#schema\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  createSourceFromPayload,\n  updateSourceFromPayload,\n} from \"./source-definitions\";\nimport { getSourceAdapterForSource } from \"./source-adapters\";\nimport {\n  mapPersistenceError,\n} from \"../policy/operations-shared\";\nimport {\n  operationErrors,\n} from \"../policy/operation-errors\";\nimport { ControlPlaneStore, type ControlPlaneStoreShape } from \"../store\";\nimport { RuntimeSourceCatalogSyncService } from \"../catalog/source/sync\";\nimport {\n  RuntimeSourceStoreService,\n} from \"./source-store\";\n\nconst sourceOps = {\n  list: operationErrors(\"sources.list\"),\n  create: operationErrors(\"sources.create\"),\n  get: operationErrors(\"sources.get\"),\n  update: operationErrors(\"sources.update\"),\n  remove: operationErrors(\"sources.remove\"),\n} as const;\n\nconst shouldAutoProbeSource = (source: Source): boolean =>\n  getSourceAdapterForSource(source).shouldAutoProbe(source);\n\nconst syncArtifactsForSource = (input: {\n  store: ControlPlaneStoreShape;\n  sourceStore: Effect.Effect.Success<typeof RuntimeSourceStoreService>;\n  source: Source;\n  actorAccountId: AccountId;\n  operation:\n    | typeof sourceOps.create\n    | typeof sourceOps.update;\n}) =>\n  Effect.gen(function* () {\n    const catalogSyncService = yield* RuntimeSourceCatalogSyncService;\n\n    // For HTTP-backed source kinds that can validate themselves from a remote\n    // document, automatically attempt to probe and connect. This mirrors the\n    // addExecutorSource flow by overriding status to \"connected\" so the sync\n    // guard passes.\n    const autoProbe = shouldAutoProbeSource(input.source);\n    const sourceForSync = autoProbe\n      ? { ...input.source, status: \"connected\" as const }\n      : input.source;\n\n    const synced = yield* Effect.either(\n      catalogSyncService.sync({\n        source: sourceForSync,\n        actorAccountId: input.actorAccountId,\n      }),\n    );\n\n    return yield* Either.match(synced, {\n      onRight: () =>\n        Effect.gen(function* () {\n          if (autoProbe) {\n            const connectedSource = yield* updateSourceFromPayload({\n              source: input.source,\n              payload: { status: \"connected\", lastError: null },\n              now: Date.now(),\n            }).pipe(\n              Effect.mapError((cause) =>\n                input.operation.badRequest(\n                  \"Failed updating source status\",\n                  cause instanceof Error ? cause.message : String(cause),\n                ),\n              ),\n            );\n            yield* mapPersistenceError(\n              input.operation.child(\"source_connected\"),\n              input.sourceStore.persistSource(connectedSource, {\n                actorAccountId: input.actorAccountId,\n              }),\n            );\n            return connectedSource;\n          }\n          return input.source;\n        }),\n      onLeft: (error) =>\n        Effect.gen(function* () {\n          if (autoProbe || (input.source.enabled && input.source.status === \"connected\")) {\n            const erroredSource = yield* updateSourceFromPayload({\n              source: input.source,\n              payload: {\n                status: \"error\",\n                lastError: error.message,\n              },\n              now: Date.now(),\n          }).pipe(\n            Effect.mapError((cause) =>\n              input.operation.badRequest(\n                \"Failed indexing source tools\",\n                cause instanceof Error ? cause.message : String(cause),\n                ),\n              ),\n            );\n\n            yield* mapPersistenceError(\n              input.operation.child(\"source_error\"),\n              input.sourceStore.persistSource(erroredSource, {\n                actorAccountId: input.actorAccountId,\n              }),\n            );\n          }\n\n          return yield* input.operation.unknownStorage(error, \"Failed syncing source tools\");\n        }),\n    });\n  });\n\nexport const listSources = (input: {\n  workspaceId: WorkspaceId;\n  accountId: AccountId;\n}) =>\n  Effect.flatMap(ControlPlaneStore, () =>\n    Effect.gen(function* () {\n      const sourceStore = yield* RuntimeSourceStoreService;\n\n      return yield* sourceStore.loadSourcesInWorkspace(input.workspaceId, {\n        actorAccountId: input.accountId,\n      }).pipe(\n        Effect.mapError((error) =>\n          sourceOps.list.unknownStorage(\n            error,\n            \"Failed projecting stored sources\",\n          ),\n        ),\n      );\n    }));\n\nexport const createSource = (input: {\n  workspaceId: WorkspaceId;\n  accountId: AccountId;\n  payload: CreateSourcePayload;\n}) =>\n  Effect.flatMap(ControlPlaneStore, (store) =>\n    Effect.gen(function* () {\n      const sourceStore = yield* RuntimeSourceStoreService;\n      const now = Date.now();\n\n      const source = yield* createSourceFromPayload({\n        workspaceId: input.workspaceId,\n        sourceId: SourceIdSchema.make(`src_${crypto.randomUUID()}`),\n        payload: input.payload,\n        now,\n      }).pipe(\n        Effect.mapError((cause) =>\n          sourceOps.create.badRequest(\n            \"Invalid source definition\",\n            cause instanceof Error ? cause.message : String(cause),\n          ),\n        ),\n      );\n\n      const persistedSource = yield* mapPersistenceError(\n        sourceOps.create.child(\"persist\"),\n        sourceStore.persistSource(source, {\n          actorAccountId: input.accountId,\n        }),\n      );\n\n      const synchronizedSource = yield* syncArtifactsForSource({\n        store,\n        sourceStore,\n        source: persistedSource,\n        actorAccountId: input.accountId,\n        operation: sourceOps.create,\n      });\n\n      return synchronizedSource;\n    }));\n\nexport const getSource = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  accountId: AccountId;\n}) =>\n  Effect.flatMap(ControlPlaneStore, () =>\n    Effect.gen(function* () {\n      const sourceStore = yield* RuntimeSourceStoreService;\n\n      return yield* sourceStore.loadSourceById({\n        workspaceId: input.workspaceId,\n        sourceId: input.sourceId,\n        actorAccountId: input.accountId,\n      }).pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error && cause.message.startsWith(\"Source not found:\")\n            ? sourceOps.get.notFound(\n                \"Source not found\",\n                `workspaceId=${input.workspaceId} sourceId=${input.sourceId}`,\n              )\n            : sourceOps.get.unknownStorage(\n                cause,\n                \"Failed projecting stored source\",\n              ),\n            ),\n      );\n    }));\n\nexport const updateSource = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n  accountId: AccountId;\n  payload: UpdateSourcePayload;\n}) =>\n  Effect.flatMap(ControlPlaneStore, (store) =>\n    Effect.gen(function* () {\n      const sourceStore = yield* RuntimeSourceStoreService;\n      const existingSource = yield* sourceStore.loadSourceById({\n        workspaceId: input.workspaceId,\n        sourceId: input.sourceId,\n        actorAccountId: input.accountId,\n      }).pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error && cause.message.startsWith(\"Source not found:\")\n            ? sourceOps.update.notFound(\n                \"Source not found\",\n                `workspaceId=${input.workspaceId} sourceId=${input.sourceId}`,\n              )\n            : sourceOps.update.unknownStorage(\n                cause,\n                \"Failed projecting stored source\",\n              ),\n        ),\n      );\n\n      const updatedSource = yield* updateSourceFromPayload({\n        source: existingSource,\n        payload: input.payload,\n        now: Date.now(),\n      }).pipe(\n        Effect.mapError((cause) =>\n          sourceOps.update.badRequest(\n            \"Invalid source definition\",\n            cause instanceof Error ? cause.message : String(cause),\n          ),\n        ),\n      );\n\n      const persistedSource = yield* mapPersistenceError(\n        sourceOps.update.child(\"persist\"),\n        sourceStore.persistSource(updatedSource, {\n          actorAccountId: input.accountId,\n        }),\n      );\n\n      const synchronizedSource = yield* syncArtifactsForSource({\n        store,\n        sourceStore,\n        source: persistedSource,\n        actorAccountId: input.accountId,\n        operation: sourceOps.update,\n      });\n\n      return synchronizedSource;\n    }));\n\nexport const removeSource = (input: {\n  workspaceId: WorkspaceId;\n  sourceId: SourceId;\n}) =>\n  Effect.flatMap(ControlPlaneStore, () =>\n    Effect.gen(function* () {\n      const sourceStore = yield* RuntimeSourceStoreService;\n      const removed = yield* mapPersistenceError(\n        sourceOps.remove.child(\"remove\"),\n        sourceStore.removeSourceById({\n          workspaceId: input.workspaceId,\n          sourceId: input.sourceId,\n        }),\n      );\n\n      return { removed };\n    })\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/runtime/store.ts",
    "content": "import * as Context from \"effect/Context\";\nimport type * as Effect from \"effect/Effect\";\n\nimport type {\n  AuthArtifact,\n  AuthLease,\n  Execution,\n  ExecutionInteraction,\n  ExecutionStep,\n  ProviderAuthGrant,\n  SecretMaterial,\n  SourceAuthSession,\n  WorkspaceOauthClient,\n  WorkspaceSourceOauthClient,\n} from \"#schema\";\n\ntype SecretMaterialSummary = {\n  id: string;\n  providerId: string;\n  name: string | null;\n  purpose: string;\n  createdAt: number;\n  updatedAt: number;\n};\n\nexport type ControlPlaneStoreShape = {\n  authArtifacts: {\n    listByWorkspaceId: (\n      workspaceId: AuthArtifact[\"workspaceId\"],\n    ) => Effect.Effect<readonly AuthArtifact[], Error, never>;\n    listByWorkspaceAndSourceId: (input: {\n      workspaceId: AuthArtifact[\"workspaceId\"];\n      sourceId: AuthArtifact[\"sourceId\"];\n    }) => Effect.Effect<readonly AuthArtifact[], Error, never>;\n    getByWorkspaceSourceAndActor: (input: {\n      workspaceId: AuthArtifact[\"workspaceId\"];\n      sourceId: AuthArtifact[\"sourceId\"];\n      actorAccountId: AuthArtifact[\"actorAccountId\"];\n      slot: AuthArtifact[\"slot\"];\n    }) => Effect.Effect<import(\"effect/Option\").Option<AuthArtifact>, Error, never>;\n    upsert: (artifact: AuthArtifact) => Effect.Effect<void, Error, never>;\n    removeByWorkspaceSourceAndActor: (input: {\n      workspaceId: AuthArtifact[\"workspaceId\"];\n      sourceId: AuthArtifact[\"sourceId\"];\n      actorAccountId: AuthArtifact[\"actorAccountId\"];\n      slot?: AuthArtifact[\"slot\"];\n    }) => Effect.Effect<boolean, Error, never>;\n    removeByWorkspaceAndSourceId: (input: {\n      workspaceId: AuthArtifact[\"workspaceId\"];\n      sourceId: AuthArtifact[\"sourceId\"];\n    }) => Effect.Effect<number, Error, never>;\n  };\n  authLeases: {\n    listAll: () => Effect.Effect<readonly AuthLease[], Error, never>;\n    getByAuthArtifactId: (\n      authArtifactId: AuthLease[\"authArtifactId\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<AuthLease>, Error, never>;\n    upsert: (lease: AuthLease) => Effect.Effect<void, Error, never>;\n    removeByAuthArtifactId: (\n      authArtifactId: AuthLease[\"authArtifactId\"],\n    ) => Effect.Effect<boolean, Error, never>;\n  };\n  sourceOauthClients: {\n    getByWorkspaceSourceAndProvider: (input: {\n      workspaceId: WorkspaceSourceOauthClient[\"workspaceId\"];\n      sourceId: WorkspaceSourceOauthClient[\"sourceId\"];\n      providerKey: string;\n    }) => Effect.Effect<\n      import(\"effect/Option\").Option<WorkspaceSourceOauthClient>,\n      Error,\n      never\n    >;\n    upsert: (\n      oauthClient: WorkspaceSourceOauthClient,\n    ) => Effect.Effect<void, Error, never>;\n    removeByWorkspaceAndSourceId: (input: {\n      workspaceId: WorkspaceSourceOauthClient[\"workspaceId\"];\n      sourceId: WorkspaceSourceOauthClient[\"sourceId\"];\n    }) => Effect.Effect<number, Error, never>;\n  };\n  workspaceOauthClients: {\n    listByWorkspaceAndProvider: (input: {\n      workspaceId: WorkspaceOauthClient[\"workspaceId\"];\n      providerKey: string;\n    }) => Effect.Effect<readonly WorkspaceOauthClient[], Error, never>;\n    getById: (\n      id: WorkspaceOauthClient[\"id\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<WorkspaceOauthClient>, Error, never>;\n    upsert: (oauthClient: WorkspaceOauthClient) => Effect.Effect<void, Error, never>;\n    removeById: (id: WorkspaceOauthClient[\"id\"]) => Effect.Effect<boolean, Error, never>;\n  };\n  providerAuthGrants: {\n    listByWorkspaceId: (\n      workspaceId: ProviderAuthGrant[\"workspaceId\"],\n    ) => Effect.Effect<readonly ProviderAuthGrant[], Error, never>;\n    listByWorkspaceActorAndProvider: (input: {\n      workspaceId: ProviderAuthGrant[\"workspaceId\"];\n      actorAccountId: ProviderAuthGrant[\"actorAccountId\"];\n      providerKey: string;\n    }) => Effect.Effect<readonly ProviderAuthGrant[], Error, never>;\n    getById: (\n      id: ProviderAuthGrant[\"id\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<ProviderAuthGrant>, Error, never>;\n    upsert: (grant: ProviderAuthGrant) => Effect.Effect<void, Error, never>;\n    removeById: (id: ProviderAuthGrant[\"id\"]) => Effect.Effect<boolean, Error, never>;\n  };\n  sourceAuthSessions: {\n    listAll: () => Effect.Effect<readonly SourceAuthSession[], Error, never>;\n    listByWorkspaceId: (\n      workspaceId: SourceAuthSession[\"workspaceId\"],\n    ) => Effect.Effect<readonly SourceAuthSession[], Error, never>;\n    getById: (\n      id: SourceAuthSession[\"id\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<SourceAuthSession>, Error, never>;\n    getByState: (\n      state: SourceAuthSession[\"state\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<SourceAuthSession>, Error, never>;\n    getPendingByWorkspaceSourceAndActor: (input: {\n      workspaceId: SourceAuthSession[\"workspaceId\"];\n      sourceId: SourceAuthSession[\"sourceId\"];\n      actorAccountId: SourceAuthSession[\"actorAccountId\"];\n      credentialSlot?: SourceAuthSession[\"credentialSlot\"];\n    }) => Effect.Effect<\n      import(\"effect/Option\").Option<SourceAuthSession>,\n      Error,\n      never\n    >;\n    insert: (session: SourceAuthSession) => Effect.Effect<void, Error, never>;\n    update: (\n      id: SourceAuthSession[\"id\"],\n      patch: Partial<\n        Omit<SourceAuthSession, \"id\" | \"workspaceId\" | \"sourceId\" | \"createdAt\">\n      >,\n    ) => Effect.Effect<import(\"effect/Option\").Option<SourceAuthSession>, Error, never>;\n    upsert: (session: SourceAuthSession) => Effect.Effect<void, Error, never>;\n    removeByWorkspaceAndSourceId: (\n      workspaceId: SourceAuthSession[\"workspaceId\"],\n      sourceId: SourceAuthSession[\"sourceId\"],\n    ) => Effect.Effect<boolean, Error, never>;\n  };\n  secretMaterials: {\n    getById: (\n      id: SecretMaterial[\"id\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<SecretMaterial>, Error, never>;\n    listAll: () => Effect.Effect<readonly SecretMaterialSummary[], Error, never>;\n    upsert: (material: SecretMaterial) => Effect.Effect<void, Error, never>;\n    updateById: (\n      id: SecretMaterial[\"id\"],\n      update: { name?: string | null; value?: string },\n    ) => Effect.Effect<\n      import(\"effect/Option\").Option<SecretMaterialSummary>,\n      Error,\n      never\n    >;\n    removeById: (id: SecretMaterial[\"id\"]) => Effect.Effect<boolean, Error, never>;\n  };\n  executions: {\n    getById: (\n      executionId: Execution[\"id\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<Execution>, Error, never>;\n    getByWorkspaceAndId: (\n      workspaceId: Execution[\"workspaceId\"],\n      executionId: Execution[\"id\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<Execution>, Error, never>;\n    insert: (execution: Execution) => Effect.Effect<void, Error, never>;\n    update: (\n      executionId: Execution[\"id\"],\n      patch: Partial<\n        Omit<Execution, \"id\" | \"workspaceId\" | \"createdByAccountId\" | \"createdAt\">\n      >,\n    ) => Effect.Effect<import(\"effect/Option\").Option<Execution>, Error, never>;\n  };\n  executionInteractions: {\n    getById: (\n      interactionId: ExecutionInteraction[\"id\"],\n    ) => Effect.Effect<\n      import(\"effect/Option\").Option<ExecutionInteraction>,\n      Error,\n      never\n    >;\n    listByExecutionId: (\n      executionId: ExecutionInteraction[\"executionId\"],\n    ) => Effect.Effect<readonly ExecutionInteraction[], Error, never>;\n    getPendingByExecutionId: (\n      executionId: ExecutionInteraction[\"executionId\"],\n    ) => Effect.Effect<\n      import(\"effect/Option\").Option<ExecutionInteraction>,\n      Error,\n      never\n    >;\n    insert: (\n      interaction: ExecutionInteraction,\n    ) => Effect.Effect<void, Error, never>;\n    update: (\n      interactionId: ExecutionInteraction[\"id\"],\n      patch: Partial<\n        Omit<ExecutionInteraction, \"id\" | \"executionId\" | \"createdAt\">\n      >,\n    ) => Effect.Effect<\n      import(\"effect/Option\").Option<ExecutionInteraction>,\n      Error,\n      never\n    >;\n  };\n  executionSteps: {\n    getByExecutionAndSequence: (\n      executionId: ExecutionStep[\"executionId\"],\n      sequence: ExecutionStep[\"sequence\"],\n    ) => Effect.Effect<import(\"effect/Option\").Option<ExecutionStep>, Error, never>;\n    listByExecutionId: (\n      executionId: ExecutionStep[\"executionId\"],\n    ) => Effect.Effect<readonly ExecutionStep[], Error, never>;\n    insert: (step: ExecutionStep) => Effect.Effect<void, Error, never>;\n    deleteByExecutionId: (\n      executionId: ExecutionStep[\"executionId\"],\n    ) => Effect.Effect<void, Error, never>;\n    updateByExecutionAndSequence: (\n      executionId: ExecutionStep[\"executionId\"],\n      sequence: ExecutionStep[\"sequence\"],\n      patch: Partial<\n        Omit<ExecutionStep, \"id\" | \"executionId\" | \"sequence\" | \"createdAt\">\n      >,\n    ) => Effect.Effect<import(\"effect/Option\").Option<ExecutionStep>, Error, never>;\n  };\n};\n\nexport class ControlPlaneStore extends Context.Tag(\n  \"#runtime/ControlPlaneStore\",\n)<ControlPlaneStore, ControlPlaneStoreShape>() {}\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/common.ts",
    "content": "import { Schema } from \"effect\";\n\nexport const TimestampMsSchema = Schema.Number;\n\nexport type TimestampMs = typeof TimestampMsSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/enums.ts",
    "content": "export {\n  SourceAuthSchema,\n  SourceBindingSchema,\n  SourceBindingVersionSchema,\n  SourceKindSchema,\n  SourceStatusSchema,\n  SourceTransportSchema,\n  type SourceAuth,\n  type SourceBinding,\n  type SourceKind,\n  type SourceStatus,\n  type SourceTransport,\n} from \"./models/source\";\nexport {\n  SecretRefSchema,\n  type SecretRef,\n} from \"./models/auth-artifact\";\nexport {\n  SourceCatalogAdapterKeySchema,\n  SourceCatalogKindSchema,\n  SourceCatalogVisibilitySchema,\n  type SourceCatalogAdapterKey,\n  type SourceCatalogKind,\n  type SourceCatalogVisibility,\n} from \"./models/source-catalog\";\nexport {\n  SourceAuthInferenceSchema,\n  SourceDiscoveryAuthKindSchema,\n  SourceDiscoveryAuthParameterLocationSchema,\n  SourceDiscoveryConfidenceSchema,\n  SourceDiscoveryKindSchema,\n  SourceDiscoveryResultSchema,\n  SourceProbeAuthSchema,\n  type SourceAuthInference,\n  type SourceDiscoveryAuthKind,\n  type SourceDiscoveryAuthParameterLocation,\n  type SourceDiscoveryConfidence,\n  type SourceDiscoveryKind,\n  type SourceDiscoveryResult,\n  type SourceProbeAuth,\n} from \"./models/source-discovery\";\nexport {\n  AuthArtifactKindSchema,\n  AuthArtifactSlotSchema,\n  BuiltInAuthArtifactKindSchema,\n  type AuthArtifactKind,\n  type AuthArtifactSlot,\n  type BuiltInAuthArtifactKind,\n} from \"./models/auth-artifact\";\nexport {\n  SourceAuthSessionProviderKindSchema,\n  SourceAuthSessionStatusSchema,\n  type SourceAuthSessionProviderKind,\n  type SourceAuthSessionStatus,\n} from \"./models/source-auth-session\";\nexport {\n  LocalWorkspacePolicyApprovalModeSchema,\n  LocalWorkspacePolicyEffectSchema,\n  type LocalWorkspacePolicyApprovalMode,\n  type LocalWorkspacePolicyEffect,\n} from \"./models/policy\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/ids.ts",
    "content": "import { Schema } from \"effect\";\n\nexport const AccountIdSchema = Schema.String.pipe(Schema.brand(\"AccountId\"));\nexport const WorkspaceIdSchema = Schema.String.pipe(Schema.brand(\"WorkspaceId\"));\nexport const SourceIdSchema = Schema.String.pipe(Schema.brand(\"SourceId\"));\nexport const SourceCatalogIdSchema = Schema.String.pipe(Schema.brand(\"SourceCatalogId\"));\nexport const SourceCatalogRevisionIdSchema = Schema.String.pipe(\n  Schema.brand(\"SourceCatalogRevisionId\"),\n);\nexport const SourceAuthSessionIdSchema = Schema.String.pipe(\n  Schema.brand(\"SourceAuthSessionId\"),\n);\nexport const AuthArtifactIdSchema = Schema.String.pipe(\n  Schema.brand(\"AuthArtifactId\"),\n);\nexport const AuthLeaseIdSchema = Schema.String.pipe(\n  Schema.brand(\"AuthLeaseId\"),\n);\nexport const CredentialIdSchema = AuthArtifactIdSchema;\nexport const WorkspaceSourceOauthClientIdSchema = Schema.String.pipe(\n  Schema.brand(\"WorkspaceSourceOauthClientId\"),\n);\nexport const WorkspaceOauthClientIdSchema = Schema.String.pipe(\n  Schema.brand(\"WorkspaceOauthClientId\"),\n);\nexport const ProviderAuthGrantIdSchema = Schema.String.pipe(\n  Schema.brand(\"ProviderAuthGrantId\"),\n);\nexport const SecretMaterialIdSchema = Schema.String.pipe(\n  Schema.brand(\"SecretMaterialId\"),\n);\nexport const PolicyIdSchema = Schema.String.pipe(Schema.brand(\"PolicyId\"));\nexport const ExecutionIdSchema = Schema.String.pipe(Schema.brand(\"ExecutionId\"));\nexport const ExecutionInteractionIdSchema = Schema.String.pipe(\n  Schema.brand(\"ExecutionInteractionId\"),\n);\nexport const ExecutionStepIdSchema = Schema.String.pipe(\n  Schema.brand(\"ExecutionStepId\"),\n);\n\nexport type AccountId = typeof AccountIdSchema.Type;\nexport type WorkspaceId = typeof WorkspaceIdSchema.Type;\nexport type SourceId = typeof SourceIdSchema.Type;\nexport type SourceCatalogId = typeof SourceCatalogIdSchema.Type;\nexport type SourceCatalogRevisionId = typeof SourceCatalogRevisionIdSchema.Type;\nexport type SourceAuthSessionId = typeof SourceAuthSessionIdSchema.Type;\nexport type AuthArtifactId = typeof AuthArtifactIdSchema.Type;\nexport type AuthLeaseId = typeof AuthLeaseIdSchema.Type;\nexport type CredentialId = typeof CredentialIdSchema.Type;\nexport type WorkspaceSourceOauthClientId = typeof WorkspaceSourceOauthClientIdSchema.Type;\nexport type WorkspaceOauthClientId = typeof WorkspaceOauthClientIdSchema.Type;\nexport type ProviderAuthGrantId = typeof ProviderAuthGrantIdSchema.Type;\nexport type SecretMaterialId = typeof SecretMaterialIdSchema.Type;\nexport type PolicyId = typeof PolicyIdSchema.Type;\nexport type ExecutionId = typeof ExecutionIdSchema.Type;\nexport type ExecutionInteractionId = typeof ExecutionInteractionIdSchema.Type;\nexport type ExecutionStepId = typeof ExecutionStepIdSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/index.ts",
    "content": "export * from \"./common\";\nexport * from \"./enums\";\nexport * from \"./ids\";\n\nexport * from \"./models/auth\";\nexport * from \"./models/source\";\nexport * from \"./models/source-catalog\";\nexport * from \"./models/auth-artifact\";\nexport * from \"./models/auth-lease\";\nexport * from \"./models/source-oauth-client\";\nexport * from \"./models/workspace-oauth-client\";\nexport * from \"./models/provider-auth-grant\";\nexport * from \"./models/secret-material\";\nexport * from \"./models/source-auth-session\";\nexport * from \"./models/policy\";\nexport * from \"./models/local-installation\";\nexport * from \"./models/local-config\";\nexport * from \"./models/execution\";\nexport * from \"./models/source-inspection\";\nexport * from \"./models/source-discovery\";\nexport * from \"./models/code-migration\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/auth/account.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../../common\";\nimport { AccountIdSchema } from \"../../ids\";\nimport { PrincipalProviderSchema } from \"./principal\";\n\nexport const AccountSchema = Schema.Struct({\n  id: AccountIdSchema,\n  provider: PrincipalProviderSchema,\n  subject: Schema.String,\n  email: Schema.NullOr(Schema.String),\n  displayName: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const AccountInsertSchema = AccountSchema;\n\nexport const AccountUpdateSchema = Schema.partial(\n  Schema.Struct({\n    provider: PrincipalProviderSchema,\n    subject: Schema.String,\n    email: Schema.NullOr(Schema.String),\n    displayName: Schema.NullOr(Schema.String),\n    updatedAt: TimestampMsSchema,\n  }),\n);\n\nexport type Account = typeof AccountSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/auth/index.ts",
    "content": "export * from \"./account\";\nexport * from \"./principal\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/auth/principal.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { AccountIdSchema } from \"../../ids\";\n\nexport const PrincipalProviderSchema = Schema.Literal(\n  \"local\",\n  \"workos\",\n  \"service\",\n);\n\nexport const PrincipalSchema = Schema.Struct({\n  accountId: AccountIdSchema,\n  provider: PrincipalProviderSchema,\n  subject: Schema.String,\n  email: Schema.NullOr(Schema.String),\n  displayName: Schema.NullOr(Schema.String),\n});\n\nexport type PrincipalProvider = typeof PrincipalProviderSchema.Type;\nexport type Principal = typeof PrincipalSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/auth-artifact.ts",
    "content": "import { Schema } from \"effect\";\nimport * as Option from \"effect/Option\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  AccountIdSchema,\n  AuthArtifactIdSchema,\n  ProviderAuthGrantIdSchema,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n} from \"../ids\";\n\nexport const SecretRefSchema = Schema.Struct({\n  providerId: Schema.String,\n  handle: Schema.String,\n});\n\nexport const AuthArtifactSlotSchema = Schema.Literal(\"runtime\", \"import\");\nexport const CredentialSlotSchema = AuthArtifactSlotSchema;\n\nexport const AuthArtifactKindSchema = Schema.String;\nexport const AuthGrantSetSchema = Schema.Array(Schema.String);\n\nexport const RequestPlacementPartSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"literal\"),\n    value: Schema.String,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"secret_ref\"),\n    ref: SecretRefSchema,\n  }),\n);\n\nexport const RequestPlacementTemplateSchema = Schema.Union(\n  Schema.Struct({\n    location: Schema.Literal(\"header\"),\n    name: Schema.String,\n    parts: Schema.Array(RequestPlacementPartSchema),\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"query\"),\n    name: Schema.String,\n    parts: Schema.Array(RequestPlacementPartSchema),\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"cookie\"),\n    name: Schema.String,\n    parts: Schema.Array(RequestPlacementPartSchema),\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"body\"),\n    path: Schema.String,\n    parts: Schema.Array(RequestPlacementPartSchema),\n  }),\n);\n\nexport const RequestPlacementSchema = Schema.Union(\n  Schema.Struct({\n    location: Schema.Literal(\"header\"),\n    name: Schema.String,\n    value: Schema.String,\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"query\"),\n    name: Schema.String,\n    value: Schema.String,\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"cookie\"),\n    name: Schema.String,\n    value: Schema.String,\n  }),\n  Schema.Struct({\n    location: Schema.Literal(\"body\"),\n    path: Schema.String,\n    value: Schema.String,\n  }),\n);\n\nexport const RequestPlacementTemplatesJsonSchema = Schema.parseJson(\n  Schema.Array(RequestPlacementTemplateSchema),\n);\n\nexport const StaticBearerAuthArtifactKind = \"static_bearer\" as const;\nexport const StaticOAuth2AuthArtifactKind = \"static_oauth2\" as const;\nexport const StaticPlacementsAuthArtifactKind = \"static_placements\" as const;\nexport const RefreshableOAuth2AuthorizedUserAuthArtifactKind =\n  \"oauth2_authorized_user\" as const;\nexport const ProviderGrantRefAuthArtifactKind = \"provider_grant_ref\" as const;\nexport const McpOAuthAuthArtifactKind = \"mcp_oauth\" as const;\n\nexport const OAuth2ClientAuthenticationMethodSchema = Schema.Literal(\n  \"none\",\n  \"client_secret_post\",\n);\n\nexport const BuiltInAuthArtifactKindSchema = Schema.Literal(\n  StaticBearerAuthArtifactKind,\n  StaticOAuth2AuthArtifactKind,\n  StaticPlacementsAuthArtifactKind,\n  RefreshableOAuth2AuthorizedUserAuthArtifactKind,\n);\n\nexport const StaticBearerAuthArtifactConfigSchema = Schema.Struct({\n  headerName: Schema.String,\n  prefix: Schema.String,\n  token: SecretRefSchema,\n});\n\nexport const StaticOAuth2AuthArtifactConfigSchema = Schema.Struct({\n  headerName: Schema.String,\n  prefix: Schema.String,\n  accessToken: SecretRefSchema,\n  refreshToken: Schema.NullOr(SecretRefSchema),\n});\n\nexport const StaticPlacementsAuthArtifactConfigSchema = Schema.Struct({\n  placements: Schema.Array(RequestPlacementTemplateSchema),\n});\n\nexport const RefreshableOAuth2AuthorizedUserAuthArtifactConfigSchema = Schema.Struct({\n  headerName: Schema.String,\n  prefix: Schema.String,\n  tokenEndpoint: Schema.String,\n  clientId: Schema.String,\n  clientAuthentication: OAuth2ClientAuthenticationMethodSchema,\n  clientSecret: Schema.NullOr(SecretRefSchema),\n  refreshToken: SecretRefSchema,\n});\n\nexport const ProviderGrantRefAuthArtifactConfigSchema = Schema.Struct({\n  grantId: ProviderAuthGrantIdSchema,\n  providerKey: Schema.String,\n  requiredScopes: Schema.Array(Schema.String),\n  headerName: Schema.String,\n  prefix: Schema.String,\n});\n\nexport const McpOAuthAuthArtifactConfigSchema = Schema.Struct({\n  redirectUri: Schema.String,\n  accessToken: SecretRefSchema,\n  refreshToken: Schema.NullOr(SecretRefSchema),\n  tokenType: Schema.String,\n  expiresIn: Schema.NullOr(Schema.Number),\n  scope: Schema.NullOr(Schema.String),\n  resourceMetadataUrl: Schema.NullOr(Schema.String),\n  authorizationServerUrl: Schema.NullOr(Schema.String),\n  resourceMetadataJson: Schema.NullOr(Schema.String),\n  authorizationServerMetadataJson: Schema.NullOr(Schema.String),\n  clientInformationJson: Schema.NullOr(Schema.String),\n});\n\nexport const StaticBearerAuthArtifactConfigJsonSchema = Schema.parseJson(\n  StaticBearerAuthArtifactConfigSchema,\n);\n\nexport const StaticOAuth2AuthArtifactConfigJsonSchema = Schema.parseJson(\n  StaticOAuth2AuthArtifactConfigSchema,\n);\n\nexport const StaticPlacementsAuthArtifactConfigJsonSchema = Schema.parseJson(\n  StaticPlacementsAuthArtifactConfigSchema,\n);\n\nexport const RefreshableOAuth2AuthorizedUserAuthArtifactConfigJsonSchema = Schema.parseJson(\n  RefreshableOAuth2AuthorizedUserAuthArtifactConfigSchema,\n);\n\nexport const ProviderGrantRefAuthArtifactConfigJsonSchema = Schema.parseJson(\n  ProviderGrantRefAuthArtifactConfigSchema,\n);\n\nexport const McpOAuthAuthArtifactConfigJsonSchema = Schema.parseJson(\n  McpOAuthAuthArtifactConfigSchema,\n);\n\nexport const RequestPlacementsJsonSchema = Schema.parseJson(\n  Schema.Array(RequestPlacementSchema),\n);\n\nexport const AuthGrantSetJsonSchema = Schema.parseJson(AuthGrantSetSchema);\n\nconst decodeStaticBearerAuthArtifactConfigOption = Schema.decodeUnknownOption(\n  StaticBearerAuthArtifactConfigJsonSchema,\n);\n\nconst decodeStaticOAuth2AuthArtifactConfigOption = Schema.decodeUnknownOption(\n  StaticOAuth2AuthArtifactConfigJsonSchema,\n);\n\nconst decodeStaticPlacementsAuthArtifactConfigOption = Schema.decodeUnknownOption(\n  StaticPlacementsAuthArtifactConfigJsonSchema,\n);\n\nconst decodeRefreshableOAuth2AuthorizedUserAuthArtifactConfigOption = Schema.decodeUnknownOption(\n  RefreshableOAuth2AuthorizedUserAuthArtifactConfigJsonSchema,\n);\nconst decodeProviderGrantRefAuthArtifactConfigOption = Schema.decodeUnknownOption(\n  ProviderGrantRefAuthArtifactConfigJsonSchema,\n);\nconst decodeMcpOAuthAuthArtifactConfigOption = Schema.decodeUnknownOption(\n  McpOAuthAuthArtifactConfigJsonSchema,\n);\n\nconst decodeAuthGrantSetOption = Schema.decodeUnknownOption(AuthGrantSetJsonSchema);\n\nexport const AuthArtifactSchema = Schema.Struct({\n  id: AuthArtifactIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  sourceId: SourceIdSchema,\n  actorAccountId: Schema.NullOr(AccountIdSchema),\n  slot: AuthArtifactSlotSchema,\n  artifactKind: AuthArtifactKindSchema,\n  configJson: Schema.String,\n  grantSetJson: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type SecretRef = typeof SecretRefSchema.Type;\nexport type AuthArtifactSlot = typeof AuthArtifactSlotSchema.Type;\nexport type CredentialSlot = typeof CredentialSlotSchema.Type;\nexport type AuthArtifactKind = typeof AuthArtifactKindSchema.Type;\nexport type AuthGrantSet = typeof AuthGrantSetSchema.Type;\nexport type RequestPlacementPart = typeof RequestPlacementPartSchema.Type;\nexport type RequestPlacementTemplate = typeof RequestPlacementTemplateSchema.Type;\nexport type RequestPlacement = typeof RequestPlacementSchema.Type;\nexport type OAuth2ClientAuthenticationMethod =\n  typeof OAuth2ClientAuthenticationMethodSchema.Type;\nexport type BuiltInAuthArtifactKind = typeof BuiltInAuthArtifactKindSchema.Type;\nexport type StaticBearerAuthArtifactConfig = typeof StaticBearerAuthArtifactConfigSchema.Type;\nexport type StaticOAuth2AuthArtifactConfig = typeof StaticOAuth2AuthArtifactConfigSchema.Type;\nexport type StaticPlacementsAuthArtifactConfig = typeof StaticPlacementsAuthArtifactConfigSchema.Type;\nexport type RefreshableOAuth2AuthorizedUserAuthArtifactConfig =\n  typeof RefreshableOAuth2AuthorizedUserAuthArtifactConfigSchema.Type;\nexport type ProviderGrantRefAuthArtifactConfig =\n  typeof ProviderGrantRefAuthArtifactConfigSchema.Type;\nexport type McpOAuthAuthArtifactConfig = typeof McpOAuthAuthArtifactConfigSchema.Type;\nexport type AuthArtifact = typeof AuthArtifactSchema.Type;\n\nexport type DecodedBuiltInAuthArtifactConfig =\n  | {\n      artifactKind: typeof StaticBearerAuthArtifactKind;\n      config: StaticBearerAuthArtifactConfig;\n    }\n  | {\n      artifactKind: typeof StaticOAuth2AuthArtifactKind;\n      config: StaticOAuth2AuthArtifactConfig;\n    }\n  | {\n      artifactKind: typeof StaticPlacementsAuthArtifactKind;\n      config: StaticPlacementsAuthArtifactConfig;\n    }\n  | {\n      artifactKind: typeof RefreshableOAuth2AuthorizedUserAuthArtifactKind;\n      config: RefreshableOAuth2AuthorizedUserAuthArtifactConfig;\n    };\n\nexport const decodeProviderGrantRefAuthArtifactConfig = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n): ProviderGrantRefAuthArtifactConfig | null => {\n  if (artifact.artifactKind !== ProviderGrantRefAuthArtifactKind) {\n    return null;\n  }\n\n  const decoded = decodeProviderGrantRefAuthArtifactConfigOption(artifact.configJson);\n  return Option.isSome(decoded) ? decoded.value : null;\n};\n\nexport const decodeMcpOAuthAuthArtifactConfig = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n): McpOAuthAuthArtifactConfig | null => {\n  if (artifact.artifactKind !== McpOAuthAuthArtifactKind) {\n    return null;\n  }\n\n  const decoded = decodeMcpOAuthAuthArtifactConfigOption(artifact.configJson);\n  return Option.isSome(decoded) ? decoded.value : null;\n};\n\nexport const decodeBuiltInAuthArtifactConfig = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n): DecodedBuiltInAuthArtifactConfig | null => {\n  switch (artifact.artifactKind) {\n    case StaticBearerAuthArtifactKind: {\n      const decoded = decodeStaticBearerAuthArtifactConfigOption(artifact.configJson);\n      return Option.isSome(decoded)\n        ? { artifactKind: StaticBearerAuthArtifactKind, config: decoded.value }\n        : null;\n    }\n    case StaticOAuth2AuthArtifactKind: {\n      const decoded = decodeStaticOAuth2AuthArtifactConfigOption(artifact.configJson);\n      return Option.isSome(decoded)\n        ? { artifactKind: StaticOAuth2AuthArtifactKind, config: decoded.value }\n        : null;\n    }\n    case StaticPlacementsAuthArtifactKind: {\n      const decoded = decodeStaticPlacementsAuthArtifactConfigOption(artifact.configJson);\n      return Option.isSome(decoded)\n        ? { artifactKind: StaticPlacementsAuthArtifactKind, config: decoded.value }\n        : null;\n    }\n    case RefreshableOAuth2AuthorizedUserAuthArtifactKind: {\n      const decoded = decodeRefreshableOAuth2AuthorizedUserAuthArtifactConfigOption(\n        artifact.configJson,\n      );\n      return Option.isSome(decoded)\n        ? {\n            artifactKind: RefreshableOAuth2AuthorizedUserAuthArtifactKind,\n            config: decoded.value,\n          }\n        : null;\n    }\n    default:\n      return null;\n  }\n};\n\nexport const decodeAuthArtifactGrantSet = (\n  artifact: Pick<AuthArtifact, \"grantSetJson\"> | string | null,\n): AuthGrantSet | null => {\n  const grantSetJson = artifact !== null && typeof artifact === \"object\"\n    ? artifact.grantSetJson\n    : artifact;\n\n  if (grantSetJson === null) {\n    return null;\n  }\n\n  const decoded = decodeAuthGrantSetOption(grantSetJson);\n  return Option.isSome(decoded) ? decoded.value : null;\n};\n\nexport const decodeAuthGrantSet = decodeAuthArtifactGrantSet;\n\nexport const authArtifactSecretRefs = (\n  artifact: Pick<AuthArtifact, \"artifactKind\" | \"configJson\">,\n): ReadonlyArray<SecretRef> => {\n  const decoded = decodeBuiltInAuthArtifactConfig(artifact);\n  if (decoded !== null) {\n    switch (decoded.artifactKind) {\n      case StaticBearerAuthArtifactKind:\n        return [decoded.config.token];\n      case StaticOAuth2AuthArtifactKind:\n        return decoded.config.refreshToken\n          ? [decoded.config.accessToken, decoded.config.refreshToken]\n          : [decoded.config.accessToken];\n      case StaticPlacementsAuthArtifactKind:\n        return decoded.config.placements.flatMap((placement) =>\n          placement.parts.flatMap((part) =>\n            part.kind === \"secret_ref\" ? [part.ref] : [],\n          )\n        );\n      case RefreshableOAuth2AuthorizedUserAuthArtifactKind:\n        return decoded.config.clientSecret\n          ? [decoded.config.refreshToken, decoded.config.clientSecret]\n          : [decoded.config.refreshToken];\n    }\n  }\n\n  const mcpOAuthConfig = decodeMcpOAuthAuthArtifactConfig(artifact);\n  if (mcpOAuthConfig !== null) {\n    return mcpOAuthConfig.refreshToken\n      ? [mcpOAuthConfig.accessToken, mcpOAuthConfig.refreshToken]\n      : [mcpOAuthConfig.accessToken];\n  }\n\n  return [];\n};\n\nexport const authArtifactSecretMaterialRefs = authArtifactSecretRefs;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/auth-lease.ts",
    "content": "import { Schema } from \"effect\";\nimport * as Option from \"effect/Option\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  AccountIdSchema,\n  AuthArtifactIdSchema,\n  AuthLeaseIdSchema,\n  SourceIdSchema,\n  WorkspaceIdSchema,\n} from \"../ids\";\n\nimport {\n  AuthArtifactSlotSchema,\n  RequestPlacementTemplatesJsonSchema,\n  type RequestPlacementTemplate,\n} from \"./auth-artifact\";\n\nexport const AuthLeaseSchema = Schema.Struct({\n  id: AuthLeaseIdSchema,\n  authArtifactId: AuthArtifactIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  sourceId: SourceIdSchema,\n  actorAccountId: Schema.NullOr(AccountIdSchema),\n  slot: AuthArtifactSlotSchema,\n  placementsTemplateJson: Schema.String,\n  expiresAt: Schema.NullOr(TimestampMsSchema),\n  refreshAfter: Schema.NullOr(TimestampMsSchema),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type AuthLease = typeof AuthLeaseSchema.Type;\n\nconst decodeLeasePlacementTemplatesOption = Schema.decodeUnknownOption(\n  RequestPlacementTemplatesJsonSchema,\n);\n\nexport const decodeAuthLeasePlacementTemplates = (\n  lease: Pick<AuthLease, \"placementsTemplateJson\">,\n): ReadonlyArray<RequestPlacementTemplate> | null => {\n  const decoded = decodeLeasePlacementTemplatesOption(lease.placementsTemplateJson);\n  return Option.isSome(decoded) ? decoded.value : null;\n};\n\nexport const authLeaseSecretRefs = (\n  lease: Pick<AuthLease, \"placementsTemplateJson\">,\n) =>\n  (decodeAuthLeasePlacementTemplates(lease) ?? []).flatMap((placement) =>\n    placement.parts.flatMap((part) => (part.kind === \"secret_ref\" ? [part.ref] : [])),\n  );\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/code-migration.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\n\nexport const StoredCodeMigrationRecordSchema = Schema.Struct({\n  id: Schema.String,\n  appliedAt: TimestampMsSchema,\n});\n\nexport type StoredCodeMigrationRecord =\n  typeof StoredCodeMigrationRecordSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/credential.ts",
    "content": "export {\n  AuthArtifactSlotSchema as CredentialSlotSchema,\n  type AuthArtifactSlot as CredentialSlot,\n} from \"./auth-artifact\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/execution.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  AccountIdSchema,\n  ExecutionIdSchema,\n  ExecutionInteractionIdSchema,\n  ExecutionStepIdSchema,\n  WorkspaceIdSchema,\n} from \"../ids\";\n\nexport const ExecutionStatusSchema = Schema.Literal(\n  \"pending\",\n  \"running\",\n  \"waiting_for_interaction\",\n  \"completed\",\n  \"failed\",\n  \"cancelled\",\n);\n\nexport const ExecutionSchema = Schema.Struct({\n  id: ExecutionIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  createdByAccountId: AccountIdSchema,\n  status: ExecutionStatusSchema,\n  code: Schema.String,\n  resultJson: Schema.NullOr(Schema.String),\n  errorText: Schema.NullOr(Schema.String),\n  logsJson: Schema.NullOr(Schema.String),\n  startedAt: Schema.NullOr(TimestampMsSchema),\n  completedAt: Schema.NullOr(TimestampMsSchema),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const ExecutionInsertSchema = ExecutionSchema;\n\nexport const ExecutionUpdateSchema = Schema.partial(\n  Schema.Struct({\n    status: ExecutionStatusSchema,\n    code: Schema.String,\n    resultJson: Schema.NullOr(Schema.String),\n    errorText: Schema.NullOr(Schema.String),\n    logsJson: Schema.NullOr(Schema.String),\n    startedAt: Schema.NullOr(TimestampMsSchema),\n    completedAt: Schema.NullOr(TimestampMsSchema),\n    updatedAt: TimestampMsSchema,\n  }),\n);\n\nexport const ExecutionInteractionStatusSchema = Schema.Literal(\n  \"pending\",\n  \"resolved\",\n  \"cancelled\",\n);\n\nexport const ExecutionInteractionSchema = Schema.Struct({\n  id: ExecutionInteractionIdSchema,\n  executionId: ExecutionIdSchema,\n  status: ExecutionInteractionStatusSchema,\n  kind: Schema.String,\n  purpose: Schema.String,\n  payloadJson: Schema.String,\n  responseJson: Schema.NullOr(Schema.String),\n  responsePrivateJson: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const ExecutionInteractionInsertSchema = ExecutionInteractionSchema;\n\nexport const ExecutionInteractionUpdateSchema = Schema.partial(\n  Schema.Struct({\n    status: ExecutionInteractionStatusSchema,\n    kind: Schema.String,\n    purpose: Schema.String,\n    payloadJson: Schema.String,\n    responseJson: Schema.NullOr(Schema.String),\n    responsePrivateJson: Schema.NullOr(Schema.String),\n    updatedAt: TimestampMsSchema,\n  }),\n);\n\nexport const ExecutionEnvelopeSchema = Schema.Struct({\n  execution: ExecutionSchema,\n  pendingInteraction: Schema.NullOr(ExecutionInteractionSchema),\n});\n\nexport const ExecutionStepKindSchema = Schema.Literal(\"tool_call\");\n\nexport const ExecutionStepStatusSchema = Schema.Literal(\n  \"pending\",\n  \"waiting\",\n  \"completed\",\n  \"failed\",\n);\n\nexport const ExecutionStepSchema = Schema.Struct({\n  id: ExecutionStepIdSchema,\n  executionId: ExecutionIdSchema,\n  sequence: Schema.Number,\n  kind: ExecutionStepKindSchema,\n  status: ExecutionStepStatusSchema,\n  path: Schema.String,\n  argsJson: Schema.String,\n  resultJson: Schema.NullOr(Schema.String),\n  errorText: Schema.NullOr(Schema.String),\n  interactionId: Schema.NullOr(ExecutionInteractionIdSchema),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const ExecutionStepInsertSchema = ExecutionStepSchema;\n\nexport const ExecutionStepUpdateSchema = Schema.partial(\n  Schema.Struct({\n    status: ExecutionStepStatusSchema,\n    resultJson: Schema.NullOr(Schema.String),\n    errorText: Schema.NullOr(Schema.String),\n    interactionId: Schema.NullOr(ExecutionInteractionIdSchema),\n    updatedAt: TimestampMsSchema,\n  }),\n);\n\nexport type ExecutionStatus = typeof ExecutionStatusSchema.Type;\nexport type Execution = typeof ExecutionSchema.Type;\nexport type ExecutionInteractionStatus = typeof ExecutionInteractionStatusSchema.Type;\nexport type ExecutionInteraction = typeof ExecutionInteractionSchema.Type;\nexport type ExecutionEnvelope = typeof ExecutionEnvelopeSchema.Type;\nexport type ExecutionStepKind = typeof ExecutionStepKindSchema.Type;\nexport type ExecutionStepStatus = typeof ExecutionStepStatusSchema.Type;\nexport type ExecutionStep = typeof ExecutionStepSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/local-config.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { localConfigurableSourceAdapters } from \"../../runtime/sources/source-adapters\";\n\nexport const LocalExecutorRuntimeSchema = Schema.Literal(\n  \"quickjs\",\n  \"ses\",\n  \"deno\",\n);\n\nexport const LocalConfigSecretProviderSourceSchema = Schema.Literal(\n  \"env\",\n  \"file\",\n  \"exec\",\n  \"params\",\n);\n\nexport const LocalConfigEnvSecretProviderSchema = Schema.Struct({\n  source: Schema.Literal(\"env\"),\n});\n\nexport const LocalConfigFileSecretProviderModeSchema = Schema.Literal(\n  \"singleValue\",\n  \"json\",\n);\n\nexport const LocalConfigFileSecretProviderSchema = Schema.Struct({\n  source: Schema.Literal(\"file\"),\n  path: Schema.String,\n  mode: Schema.optional(LocalConfigFileSecretProviderModeSchema),\n});\n\nexport const LocalConfigExecSecretProviderSchema = Schema.Struct({\n  source: Schema.Literal(\"exec\"),\n  command: Schema.String,\n  args: Schema.optional(Schema.Array(Schema.String)),\n  env: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.String })),\n  allowSymlinkCommand: Schema.optional(Schema.Boolean),\n  trustedDirs: Schema.optional(Schema.Array(Schema.String)),\n});\n\nexport const LocalConfigSecretProviderSchema = Schema.Union(\n  LocalConfigEnvSecretProviderSchema,\n  LocalConfigFileSecretProviderSchema,\n  LocalConfigExecSecretProviderSchema,\n);\n\nexport const LocalConfigExplicitSecretRefSchema = Schema.Struct({\n  source: LocalConfigSecretProviderSourceSchema,\n  provider: Schema.String,\n  id: Schema.String,\n});\n\nexport const LocalConfigSecretInputSchema = Schema.Union(\n  Schema.String,\n  LocalConfigExplicitSecretRefSchema,\n);\n\nexport const LocalConfigSourceConnectionSchema = Schema.Struct({\n  endpoint: Schema.String,\n  auth: Schema.optional(LocalConfigSecretInputSchema),\n});\n\nconst LocalConfigSourceEntryBaseSchema = Schema.Struct({\n  name: Schema.optional(Schema.String),\n  namespace: Schema.optional(Schema.String),\n  enabled: Schema.optional(Schema.Boolean),\n  connection: LocalConfigSourceConnectionSchema,\n});\n\ntype SchemaTypeOf<TSchema> = TSchema extends { readonly Type: infer T } ? T : never;\ntype LocalConfigSourceEntryBase = typeof LocalConfigSourceEntryBaseSchema.Type;\n\ntype LocalConfigSourceFromAdapter<\n  TAdapter extends (typeof localConfigurableSourceAdapters)[number],\n> =\n  TAdapter extends {\n    key: infer TKey extends string;\n    localConfigBindingSchema: infer TSchema;\n  }\n    ? {\n        kind: TKey;\n        binding: SchemaTypeOf<TSchema>;\n      } & LocalConfigSourceEntryBase\n    : never;\n\nexport type LocalConfigSource = LocalConfigSourceFromAdapter<\n  (typeof localConfigurableSourceAdapters)[number]\n>;\n\nconst LocalConfigSourceEntrySchemas = localConfigurableSourceAdapters.map(\n  (adapter) =>\n    Schema.extend(\n      LocalConfigSourceEntryBaseSchema,\n      Schema.Struct({\n        kind: Schema.Literal(adapter.key as LocalConfigSource[\"kind\"]),\n        binding: adapter.localConfigBindingSchema,\n      }),\n    ),\n);\n\nexport const LocalConfigSourceSchema = Schema.Union(\n  ...((LocalConfigSourceEntrySchemas as unknown) as [\n    Schema.Schema<any, any, never>,\n    Schema.Schema<any, any, never>,\n    ...Array<Schema.Schema<any, any, never>>,\n  ]),\n) as Schema.Schema<LocalConfigSource, any, never>;\n\nexport const LocalConfigPolicyActionSchema = Schema.Literal(\"allow\", \"deny\");\nexport const LocalConfigPolicyApprovalSchema = Schema.Literal(\"auto\", \"manual\");\n\nexport const LocalConfigPolicySchema = Schema.Struct({\n  match: Schema.String,\n  action: LocalConfigPolicyActionSchema,\n  approval: LocalConfigPolicyApprovalSchema,\n  enabled: Schema.optional(Schema.Boolean),\n  priority: Schema.optional(Schema.Number),\n});\n\nexport const LocalConfigSecretsSchema = Schema.Struct({\n  providers: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: LocalConfigSecretProviderSchema,\n    }),\n  ),\n  defaults: Schema.optional(\n    Schema.Struct({\n      env: Schema.optional(Schema.String),\n      file: Schema.optional(Schema.String),\n      exec: Schema.optional(Schema.String),\n    }),\n  ),\n});\n\nexport const LocalConfigWorkspaceSchema = Schema.Struct({\n  name: Schema.optional(Schema.String),\n});\n\nexport const LocalExecutorConfigSchema = Schema.Struct({\n  runtime: Schema.optional(LocalExecutorRuntimeSchema),\n  workspace: Schema.optional(LocalConfigWorkspaceSchema),\n  sources: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: LocalConfigSourceSchema,\n    }),\n  ),\n  policies: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: LocalConfigPolicySchema,\n    }),\n  ),\n  secrets: Schema.optional(LocalConfigSecretsSchema),\n});\n\nexport type LocalConfigSecretProviderSource =\n  typeof LocalConfigSecretProviderSourceSchema.Type;\nexport type LocalConfigSecretProvider =\n  typeof LocalConfigSecretProviderSchema.Type;\nexport type LocalConfigExplicitSecretRef =\n  typeof LocalConfigExplicitSecretRefSchema.Type;\nexport type LocalConfigSecretInput = typeof LocalConfigSecretInputSchema.Type;\nexport type LocalConfigPolicy = typeof LocalConfigPolicySchema.Type;\nexport type LocalConfigSecrets = typeof LocalConfigSecretsSchema.Type;\nexport type LocalExecutorRuntime = typeof LocalExecutorRuntimeSchema.Type;\nexport type LocalExecutorConfig = typeof LocalExecutorConfigSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/local-installation.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport {\n  AccountIdSchema,\n  WorkspaceIdSchema,\n} from \"../ids\";\n\nexport const LocalInstallationSchema = Schema.Struct({\n  accountId: AccountIdSchema,\n  workspaceId: WorkspaceIdSchema,\n});\n\nexport const LocalInstallationInsertSchema = LocalInstallationSchema;\nexport const LocalInstallationUpdateSchema = Schema.partial(LocalInstallationSchema);\n\nexport type LocalInstallation = typeof LocalInstallationSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/policy.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport { PolicyIdSchema, WorkspaceIdSchema } from \"../ids\";\n\nexport const LocalWorkspacePolicyEffectSchema = Schema.Literal(\"allow\", \"deny\");\nexport const LocalWorkspacePolicyApprovalModeSchema = Schema.Literal(\"auto\", \"required\");\n\nexport const LocalWorkspacePolicySchema = Schema.Struct({\n  id: PolicyIdSchema,\n  key: Schema.String,\n  workspaceId: WorkspaceIdSchema,\n  resourcePattern: Schema.String,\n  effect: LocalWorkspacePolicyEffectSchema,\n  approvalMode: LocalWorkspacePolicyApprovalModeSchema,\n  priority: Schema.Number,\n  enabled: Schema.Boolean,\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const LocalWorkspacePolicyInsertSchema = LocalWorkspacePolicySchema;\nexport const LocalWorkspacePolicyUpdateSchema = Schema.partial(LocalWorkspacePolicySchema);\n\nexport type LocalWorkspacePolicyEffect = typeof LocalWorkspacePolicyEffectSchema.Type;\nexport type LocalWorkspacePolicyApprovalMode =\n  typeof LocalWorkspacePolicyApprovalModeSchema.Type;\nexport type LocalWorkspacePolicy = typeof LocalWorkspacePolicySchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/provider-auth-grant.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  AccountIdSchema,\n  ProviderAuthGrantIdSchema,\n  WorkspaceIdSchema,\n  WorkspaceOauthClientIdSchema,\n} from \"../ids\";\n\nimport {\n  OAuth2ClientAuthenticationMethodSchema,\n  SecretRefSchema,\n} from \"./auth-artifact\";\n\nexport const ProviderAuthGrantSchema = Schema.Struct({\n  id: ProviderAuthGrantIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  actorAccountId: Schema.NullOr(AccountIdSchema),\n  providerKey: Schema.String,\n  oauthClientId: WorkspaceOauthClientIdSchema,\n  tokenEndpoint: Schema.String,\n  clientAuthentication: OAuth2ClientAuthenticationMethodSchema,\n  headerName: Schema.String,\n  prefix: Schema.String,\n  refreshToken: SecretRefSchema,\n  grantedScopes: Schema.Array(Schema.String),\n  lastRefreshedAt: Schema.NullOr(TimestampMsSchema),\n  orphanedAt: Schema.NullOr(TimestampMsSchema),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type ProviderAuthGrant = typeof ProviderAuthGrantSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/secret-material.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport { SecretMaterialIdSchema } from \"../ids\";\n\nexport const SecretMaterialPurposeSchema = Schema.Literal(\n  \"auth_material\",\n  \"oauth_access_token\",\n  \"oauth_refresh_token\",\n  \"oauth_client_info\",\n);\n\nexport const SecretMaterialSchema = Schema.Struct({\n  id: SecretMaterialIdSchema,\n  name: Schema.NullOr(Schema.String),\n  purpose: SecretMaterialPurposeSchema,\n  providerId: Schema.String,\n  handle: Schema.String,\n  value: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type SecretMaterialPurpose = typeof SecretMaterialPurposeSchema.Type;\nexport type SecretMaterial = typeof SecretMaterialSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/source-auth-session.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  AccountIdSchema,\n  ExecutionIdSchema,\n  ExecutionInteractionIdSchema,\n  SourceIdSchema,\n  SourceAuthSessionIdSchema,\n  WorkspaceOauthClientIdSchema,\n  WorkspaceIdSchema,\n} from \"../ids\";\nimport {\n  CredentialSlotSchema,\n  OAuth2ClientAuthenticationMethodSchema,\n  SecretRefSchema,\n} from \"./auth-artifact\";\n\nexport const SourceAuthSessionProviderKindSchema = Schema.String;\n\nexport const SourceAuthSessionStatusSchema = Schema.Literal(\n  \"pending\",\n  \"completed\",\n  \"failed\",\n  \"cancelled\",\n);\n\nexport type JsonValue =\n  | string\n  | number\n  | boolean\n  | null\n  | JsonObject\n  | ReadonlyArray<JsonValue>;\n\nexport type JsonObject = {\n  readonly [key: string]: JsonValue;\n};\n\nexport const JsonValueSchema: Schema.Schema<JsonValue> = Schema.suspend(() =>\n  Schema.Union(\n    Schema.String,\n    Schema.Number,\n    Schema.Boolean,\n    Schema.Null,\n    Schema.Array(JsonValueSchema),\n    Schema.Record({\n      key: Schema.String,\n      value: JsonValueSchema,\n    }),\n  )\n).annotations({ identifier: \"JsonValue\" });\n\nexport const JsonObjectSchema = Schema.Record({\n  key: Schema.String,\n  value: JsonValueSchema,\n}).annotations({ identifier: \"JsonObject\" });\n\nexport const McpSourceAuthSessionDataSchema = Schema.Struct({\n  kind: Schema.Literal(\"mcp_oauth\"),\n  endpoint: Schema.String,\n  redirectUri: Schema.String,\n  scope: Schema.NullOr(Schema.String),\n  resourceMetadataUrl: Schema.NullOr(Schema.String),\n  authorizationServerUrl: Schema.NullOr(Schema.String),\n  resourceMetadata: Schema.NullOr(JsonObjectSchema),\n  authorizationServerMetadata: Schema.NullOr(JsonObjectSchema),\n  clientInformation: Schema.NullOr(JsonObjectSchema),\n  codeVerifier: Schema.NullOr(Schema.String),\n  authorizationUrl: Schema.NullOr(Schema.String),\n});\n\nexport const McpSourceAuthSessionDataJsonSchema = Schema.parseJson(\n  McpSourceAuthSessionDataSchema,\n);\n\nexport const OAuth2PkceSourceAuthSessionDataSchema = Schema.Struct({\n  kind: Schema.Literal(\"oauth2_pkce\"),\n  providerKey: Schema.String,\n  authorizationEndpoint: Schema.String,\n  tokenEndpoint: Schema.String,\n  redirectUri: Schema.String,\n  clientId: Schema.String,\n  clientAuthentication: OAuth2ClientAuthenticationMethodSchema,\n  clientSecret: Schema.NullOr(SecretRefSchema),\n  scopes: Schema.Array(Schema.String),\n  headerName: Schema.String,\n  prefix: Schema.String,\n  authorizationParams: Schema.Record({\n    key: Schema.String,\n    value: Schema.String,\n  }),\n  codeVerifier: Schema.NullOr(Schema.String),\n  authorizationUrl: Schema.NullOr(Schema.String),\n});\n\nexport const OAuth2PkceSourceAuthSessionDataJsonSchema = Schema.parseJson(\n  OAuth2PkceSourceAuthSessionDataSchema,\n);\n\nexport const ProviderOauthTargetSourceSchema = Schema.Struct({\n  sourceId: SourceIdSchema,\n  requiredScopes: Schema.Array(Schema.String),\n});\n\nexport const ProviderOauthBatchSourceAuthSessionDataSchema = Schema.Struct({\n  kind: Schema.Literal(\"provider_oauth_batch\"),\n  providerKey: Schema.String,\n  authorizationEndpoint: Schema.String,\n  tokenEndpoint: Schema.String,\n  redirectUri: Schema.String,\n  oauthClientId: WorkspaceOauthClientIdSchema,\n  clientAuthentication: OAuth2ClientAuthenticationMethodSchema,\n  scopes: Schema.Array(Schema.String),\n  headerName: Schema.String,\n  prefix: Schema.String,\n  authorizationParams: Schema.Record({\n    key: Schema.String,\n    value: Schema.String,\n  }),\n  targetSources: Schema.Array(ProviderOauthTargetSourceSchema),\n  codeVerifier: Schema.NullOr(Schema.String),\n  authorizationUrl: Schema.NullOr(Schema.String),\n});\n\nexport const ProviderOauthBatchSourceAuthSessionDataJsonSchema = Schema.parseJson(\n  ProviderOauthBatchSourceAuthSessionDataSchema,\n);\n\nexport const SourceAuthSessionSchema = Schema.Struct({\n  id: SourceAuthSessionIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  sourceId: SourceIdSchema,\n  actorAccountId: Schema.NullOr(AccountIdSchema),\n  credentialSlot: CredentialSlotSchema,\n  executionId: Schema.NullOr(ExecutionIdSchema),\n  interactionId: Schema.NullOr(ExecutionInteractionIdSchema),\n  providerKind: SourceAuthSessionProviderKindSchema,\n  status: SourceAuthSessionStatusSchema,\n  state: Schema.String,\n  sessionDataJson: Schema.String,\n  errorText: Schema.NullOr(Schema.String),\n  completedAt: Schema.NullOr(TimestampMsSchema),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type SourceAuthSessionProviderKind = typeof SourceAuthSessionProviderKindSchema.Type;\nexport type SourceAuthSessionStatus = typeof SourceAuthSessionStatusSchema.Type;\nexport type McpSourceAuthSessionData = typeof McpSourceAuthSessionDataSchema.Type;\nexport type OAuth2PkceSourceAuthSessionData =\n  typeof OAuth2PkceSourceAuthSessionDataSchema.Type;\nexport type ProviderOauthTargetSource = typeof ProviderOauthTargetSourceSchema.Type;\nexport type ProviderOauthBatchSourceAuthSessionData =\n  typeof ProviderOauthBatchSourceAuthSessionDataSchema.Type;\nexport type SourceAuthSession = typeof SourceAuthSessionSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/source-catalog.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  SourceCatalogIdSchema,\n  SourceCatalogRevisionIdSchema,\n} from \"../ids\";\n\nexport const SourceCatalogKindSchema = Schema.Literal(\n  \"imported\",\n  \"internal\",\n);\n\nexport const SourceCatalogAdapterKeySchema = Schema.String;\n\nexport const SourceCatalogVisibilitySchema = Schema.Literal(\n  \"private\",\n  \"workspace\",\n  \"organization\",\n  \"public\",\n);\n\nexport const StoredSourceCatalogRecordSchema = Schema.Struct({\n  id: SourceCatalogIdSchema,\n  kind: SourceCatalogKindSchema,\n  adapterKey: SourceCatalogAdapterKeySchema,\n  providerKey: Schema.String,\n  name: Schema.String,\n  summary: Schema.NullOr(Schema.String),\n  visibility: SourceCatalogVisibilitySchema,\n  latestRevisionId: SourceCatalogRevisionIdSchema,\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const StoredSourceCatalogRevisionRecordSchema = Schema.Struct({\n  id: SourceCatalogRevisionIdSchema,\n  catalogId: SourceCatalogIdSchema,\n  revisionNumber: Schema.Number,\n  sourceConfigJson: Schema.String,\n  importMetadataJson: Schema.NullOr(Schema.String),\n  importMetadataHash: Schema.NullOr(Schema.String),\n  snapshotHash: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type SourceCatalogKind = typeof SourceCatalogKindSchema.Type;\nexport type SourceCatalogAdapterKey = typeof SourceCatalogAdapterKeySchema.Type;\nexport type SourceCatalogVisibility = typeof SourceCatalogVisibilitySchema.Type;\nexport type StoredSourceCatalogRecord = typeof StoredSourceCatalogRecordSchema.Type;\nexport type StoredSourceCatalogRevisionRecord = typeof StoredSourceCatalogRevisionRecordSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/source-discovery.ts",
    "content": "export {\n  SourceAuthInferenceSchema,\n  SourceDiscoveryAuthKindSchema,\n  SourceDiscoveryAuthParameterLocationSchema,\n  SourceDiscoveryConfidenceSchema,\n  SourceDiscoveryKindSchema,\n  SourceDiscoveryResultSchema,\n  SourceProbeAuthSchema,\n  type SourceAuthInference,\n  type SourceDiscoveryAuthKind,\n  type SourceDiscoveryAuthParameterLocation,\n  type SourceDiscoveryConfidence,\n  type SourceDiscoveryKind,\n  type SourceDiscoveryResult,\n  type SourceProbeAuth,\n} from \"@executor/source-core\";\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/source-inspection.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { SourceSchema } from \"./source\";\n\nexport const SourceInspectionPipelineKindSchema = Schema.Literal(\"ir\");\n\nexport const SourceInspectionToolSummarySchema = Schema.Struct({\n  path: Schema.String,\n  sourceKey: Schema.String,\n  title: Schema.optional(Schema.String),\n  description: Schema.optional(Schema.String),\n  protocol: Schema.String,\n  toolId: Schema.String,\n  rawToolId: Schema.NullOr(Schema.String),\n  operationId: Schema.NullOr(Schema.String),\n  group: Schema.NullOr(Schema.String),\n  leaf: Schema.NullOr(Schema.String),\n  tags: Schema.Array(Schema.String),\n  method: Schema.NullOr(Schema.String),\n  pathTemplate: Schema.NullOr(Schema.String),\n  inputTypePreview: Schema.optional(Schema.String),\n  outputTypePreview: Schema.optional(Schema.String),\n});\n\nexport const SourceInspectionFactItemSchema = Schema.Struct({\n  label: Schema.String,\n  value: Schema.String,\n  mono: Schema.optional(Schema.Boolean),\n});\n\nexport const SourceInspectionFactsSectionSchema = Schema.Struct({\n  kind: Schema.Literal(\"facts\"),\n  title: Schema.String,\n  items: Schema.Array(SourceInspectionFactItemSchema),\n});\n\nexport const SourceInspectionMarkdownSectionSchema = Schema.Struct({\n  kind: Schema.Literal(\"markdown\"),\n  title: Schema.String,\n  body: Schema.String,\n});\n\nexport const SourceInspectionCodeSectionSchema = Schema.Struct({\n  kind: Schema.Literal(\"code\"),\n  title: Schema.String,\n  language: Schema.String,\n  body: Schema.String,\n});\n\nexport const SourceInspectionSectionSchema = Schema.Union(\n  SourceInspectionFactsSectionSchema,\n  SourceInspectionMarkdownSectionSchema,\n  SourceInspectionCodeSectionSchema,\n);\n\nexport const SourceInspectionToolListItemSchema = Schema.Struct({\n  path: Schema.String,\n  method: Schema.NullOr(Schema.String),\n  inputTypePreview: Schema.optional(Schema.String),\n  outputTypePreview: Schema.optional(Schema.String),\n});\n\nexport const SourceInspectionToolContractSideSchema = Schema.Struct({\n  shapeId: Schema.NullOr(Schema.String),\n  typePreview: Schema.NullOr(Schema.String),\n  typeDeclaration: Schema.NullOr(Schema.String),\n  schemaJson: Schema.NullOr(Schema.String),\n  exampleJson: Schema.NullOr(Schema.String),\n});\n\nexport const SourceInspectionToolContractSchema = Schema.Struct({\n  callSignature: Schema.String,\n  callDeclaration: Schema.String,\n  callShapeId: Schema.String,\n  resultShapeId: Schema.NullOr(Schema.String),\n  responseSetId: Schema.String,\n  input: SourceInspectionToolContractSideSchema,\n  output: SourceInspectionToolContractSideSchema,\n});\n\nexport const SourceInspectionSchema = Schema.Struct({\n  source: SourceSchema,\n  namespace: Schema.String,\n  pipelineKind: SourceInspectionPipelineKindSchema,\n  toolCount: Schema.Number,\n  tools: Schema.Array(SourceInspectionToolListItemSchema),\n});\n\nexport const SourceInspectionToolDetailSchema = Schema.Struct({\n  summary: SourceInspectionToolSummarySchema,\n  contract: SourceInspectionToolContractSchema,\n  sections: Schema.Array(SourceInspectionSectionSchema),\n});\n\nexport const SourceInspectionDiscoverPayloadSchema = Schema.Struct({\n  query: Schema.String,\n  limit: Schema.optional(Schema.Number),\n});\n\nexport const SourceInspectionDiscoverResultItemSchema = Schema.Struct({\n  path: Schema.String,\n  score: Schema.Number,\n  description: Schema.optional(Schema.String),\n  inputTypePreview: Schema.optional(Schema.String),\n  outputTypePreview: Schema.optional(Schema.String),\n  reasons: Schema.Array(Schema.String),\n});\n\nexport const SourceInspectionDiscoverResultSchema = Schema.Struct({\n  query: Schema.String,\n  queryTokens: Schema.Array(Schema.String),\n  bestPath: Schema.NullOr(Schema.String),\n  total: Schema.Number,\n  results: Schema.Array(SourceInspectionDiscoverResultItemSchema),\n});\n\nexport type SourceInspectionPipelineKind =\n  typeof SourceInspectionPipelineKindSchema.Type;\nexport type SourceInspectionToolSummary =\n  typeof SourceInspectionToolSummarySchema.Type;\nexport type SourceInspectionFactItem =\n  typeof SourceInspectionFactItemSchema.Type;\nexport type SourceInspectionFactsSection =\n  typeof SourceInspectionFactsSectionSchema.Type;\nexport type SourceInspectionMarkdownSection =\n  typeof SourceInspectionMarkdownSectionSchema.Type;\nexport type SourceInspectionCodeSection =\n  typeof SourceInspectionCodeSectionSchema.Type;\nexport type SourceInspectionSection =\n  typeof SourceInspectionSectionSchema.Type;\nexport type SourceInspectionToolListItem =\n  typeof SourceInspectionToolListItemSchema.Type;\nexport type SourceInspectionToolContractSide =\n  typeof SourceInspectionToolContractSideSchema.Type;\nexport type SourceInspectionToolContract =\n  typeof SourceInspectionToolContractSchema.Type;\nexport type SourceInspection = typeof SourceInspectionSchema.Type;\nexport type SourceInspectionToolDetail =\n  typeof SourceInspectionToolDetailSchema.Type;\nexport type SourceInspectionDiscoverPayload =\n  typeof SourceInspectionDiscoverPayloadSchema.Type;\nexport type SourceInspectionDiscoverResultItem =\n  typeof SourceInspectionDiscoverResultItemSchema.Type;\nexport type SourceInspectionDiscoverResult =\n  typeof SourceInspectionDiscoverResultSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/source-oauth-client.ts",
    "content": "import { Schema } from \"effect\";\nexport {\n  SourceOauthClientInputSchema,\n  WorkspaceSourceOauthClientRedirectModeSchema,\n} from \"@executor/source-core\";\nimport {\n  SourceOauthClientInputSchema,\n  WorkspaceSourceOauthClientRedirectModeSchema,\n} from \"@executor/source-core\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  SourceIdSchema,\n  WorkspaceIdSchema,\n  WorkspaceSourceOauthClientIdSchema,\n} from \"../ids\";\n\nexport const WorkspaceSourceOauthClientMetadataSchema = Schema.Struct({\n  redirectMode: Schema.optional(WorkspaceSourceOauthClientRedirectModeSchema),\n});\n\nexport const WorkspaceSourceOauthClientMetadataJsonSchema = Schema.parseJson(\n  WorkspaceSourceOauthClientMetadataSchema,\n);\n\nexport const WorkspaceSourceOauthClientSchema = Schema.Struct({\n  id: WorkspaceSourceOauthClientIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  sourceId: SourceIdSchema,\n  providerKey: Schema.String,\n  clientId: Schema.String,\n  clientSecretProviderId: Schema.NullOr(Schema.String),\n  clientSecretHandle: Schema.NullOr(Schema.String),\n  clientMetadataJson: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type WorkspaceSourceOauthClient = typeof WorkspaceSourceOauthClientSchema.Type;\nexport type WorkspaceSourceOauthClientRedirectMode =\n  typeof WorkspaceSourceOauthClientRedirectModeSchema.Type;\nexport type WorkspaceSourceOauthClientMetadata =\n  typeof WorkspaceSourceOauthClientMetadataSchema.Type;\nexport type SourceOauthClientInput = typeof SourceOauthClientInputSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/source.ts",
    "content": "import { Schema } from \"effect\";\nexport {\n  SourceImportAuthPolicySchema,\n  SourceTransportSchema,\n  StringMapSchema,\n} from \"@executor/source-core\";\nimport {\n  SourceImportAuthPolicySchema,\n  SourceTransportSchema,\n  StringMapSchema,\n} from \"@executor/source-core\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  ProviderAuthGrantIdSchema,\n  SourceIdSchema,\n  SourceCatalogIdSchema,\n  SourceCatalogRevisionIdSchema,\n  WorkspaceIdSchema,\n} from \"../ids\";\nimport { SecretRefSchema } from \"./auth-artifact\";\nimport { JsonObjectSchema } from \"./source-auth-session\";\n\nexport const SourceKindSchema = Schema.String;\n\nexport const SourceStatusSchema = Schema.Literal(\n  \"draft\",\n  \"probing\",\n  \"auth_required\",\n  \"connected\",\n  \"error\",\n);\n\nexport const SourceAuthSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"none\"),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"bearer\"),\n    headerName: Schema.String,\n    prefix: Schema.String,\n    token: SecretRefSchema,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"oauth2\"),\n    headerName: Schema.String,\n    prefix: Schema.String,\n    accessToken: SecretRefSchema,\n    refreshToken: Schema.NullOr(SecretRefSchema),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"oauth2_authorized_user\"),\n    headerName: Schema.String,\n    prefix: Schema.String,\n    tokenEndpoint: Schema.String,\n    clientId: Schema.String,\n    clientAuthentication: Schema.Literal(\"none\", \"client_secret_post\"),\n    clientSecret: Schema.NullOr(SecretRefSchema),\n    refreshToken: SecretRefSchema,\n    grantSet: Schema.NullOr(Schema.Array(Schema.String)),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"provider_grant_ref\"),\n    grantId: ProviderAuthGrantIdSchema,\n    providerKey: Schema.String,\n    requiredScopes: Schema.Array(Schema.String),\n    headerName: Schema.String,\n    prefix: Schema.String,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"mcp_oauth\"),\n    redirectUri: Schema.String,\n    accessToken: SecretRefSchema,\n    refreshToken: Schema.NullOr(SecretRefSchema),\n    tokenType: Schema.String,\n    expiresIn: Schema.NullOr(Schema.Number),\n    scope: Schema.NullOr(Schema.String),\n    resourceMetadataUrl: Schema.NullOr(Schema.String),\n    authorizationServerUrl: Schema.NullOr(Schema.String),\n    resourceMetadataJson: Schema.NullOr(Schema.String),\n    authorizationServerMetadataJson: Schema.NullOr(Schema.String),\n    clientInformationJson: Schema.NullOr(Schema.String),\n  }),\n);\n\nexport const SourceBindingVersionSchema = Schema.Number;\n\nexport const SourceBindingSchema = Schema.Struct({\n  version: SourceBindingVersionSchema,\n  payload: JsonObjectSchema,\n});\n\nconst SourceStorageRowSchema = Schema.Struct({\n  workspaceId: WorkspaceIdSchema,\n  sourceId: SourceIdSchema,\n  catalogId: SourceCatalogIdSchema,\n  catalogRevisionId: SourceCatalogRevisionIdSchema,\n  name: Schema.String,\n  kind: SourceKindSchema,\n  endpoint: Schema.String,\n  status: SourceStatusSchema,\n  enabled: Schema.Boolean,\n  namespace: Schema.NullOr(Schema.String),\n  importAuthPolicy: SourceImportAuthPolicySchema,\n  bindingConfigJson: Schema.String,\n  sourceHash: Schema.NullOr(Schema.String),\n  lastError: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport const StoredSourceRecordSchema = Schema.transform(\n  SourceStorageRowSchema,\n  Schema.Struct({\n    id: SourceIdSchema,\n    workspaceId: WorkspaceIdSchema,\n    catalogId: SourceCatalogIdSchema,\n    catalogRevisionId: SourceCatalogRevisionIdSchema,\n    name: Schema.String,\n    kind: SourceKindSchema,\n    endpoint: Schema.String,\n    status: SourceStatusSchema,\n    enabled: Schema.Boolean,\n    namespace: Schema.NullOr(Schema.String),\n    importAuthPolicy: SourceImportAuthPolicySchema,\n    bindingConfigJson: Schema.String,\n    sourceHash: Schema.NullOr(Schema.String),\n    lastError: Schema.NullOr(Schema.String),\n    createdAt: TimestampMsSchema,\n    updatedAt: TimestampMsSchema,\n  }),\n  {\n    strict: false,\n    decode: (row) => ({\n      id: row.sourceId,\n      workspaceId: row.workspaceId,\n      catalogId: row.catalogId,\n      catalogRevisionId: row.catalogRevisionId,\n      name: row.name,\n      kind: row.kind,\n      endpoint: row.endpoint,\n      status: row.status,\n      enabled: row.enabled,\n      namespace: row.namespace,\n      importAuthPolicy: row.importAuthPolicy,\n      bindingConfigJson: row.bindingConfigJson,\n      sourceHash: row.sourceHash,\n      lastError: row.lastError,\n      createdAt: row.createdAt,\n      updatedAt: row.updatedAt,\n    }),\n    encode: (source) => ({\n      workspaceId: source.workspaceId,\n      sourceId: source.id,\n      catalogId: source.catalogId,\n      catalogRevisionId: source.catalogRevisionId,\n      name: source.name,\n      kind: source.kind,\n      endpoint: source.endpoint,\n      status: source.status,\n      enabled: source.enabled,\n      namespace: source.namespace,\n      importAuthPolicy: source.importAuthPolicy,\n      bindingConfigJson: source.bindingConfigJson,\n      sourceHash: source.sourceHash,\n      lastError: source.lastError,\n      createdAt: source.createdAt,\n      updatedAt: source.updatedAt,\n    }),\n  },\n);\n\nexport const SourceSchema = Schema.Struct({\n  id: SourceIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  name: Schema.String,\n  kind: SourceKindSchema,\n  endpoint: Schema.String,\n  status: SourceStatusSchema,\n  enabled: Schema.Boolean,\n  namespace: Schema.NullOr(Schema.String),\n  bindingVersion: SourceBindingVersionSchema,\n  binding: JsonObjectSchema,\n  importAuthPolicy: SourceImportAuthPolicySchema,\n  importAuth: SourceAuthSchema,\n  auth: SourceAuthSchema,\n  sourceHash: Schema.NullOr(Schema.String),\n  lastError: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type SourceKind = typeof SourceKindSchema.Type;\nexport type SourceStatus = typeof SourceStatusSchema.Type;\nexport type SourceTransport = typeof SourceTransportSchema.Type;\nexport type SourceImportAuthPolicy = typeof SourceImportAuthPolicySchema.Type;\nexport type SourceAuth = typeof SourceAuthSchema.Type;\nexport type SourceBinding = typeof SourceBindingSchema.Type;\nexport type StoredSourceRecord = typeof StoredSourceRecordSchema.Type;\nexport type StringMap = typeof StringMapSchema.Type;\nexport type Source = typeof SourceSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/models/workspace-oauth-client.ts",
    "content": "import { Schema } from \"effect\";\n\nimport { TimestampMsSchema } from \"../common\";\nimport {\n  WorkspaceIdSchema,\n  WorkspaceOauthClientIdSchema,\n} from \"../ids\";\n\nexport const WorkspaceOauthClientSchema = Schema.Struct({\n  id: WorkspaceOauthClientIdSchema,\n  workspaceId: WorkspaceIdSchema,\n  providerKey: Schema.String,\n  label: Schema.NullOr(Schema.String),\n  clientId: Schema.String,\n  clientSecretProviderId: Schema.NullOr(Schema.String),\n  clientSecretHandle: Schema.NullOr(Schema.String),\n  clientMetadataJson: Schema.NullOr(Schema.String),\n  createdAt: TimestampMsSchema,\n  updatedAt: TimestampMsSchema,\n});\n\nexport type WorkspaceOauthClient = typeof WorkspaceOauthClientSchema.Type;\n"
  },
  {
    "path": "packages/platform/control-plane/src/schema/schema.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Either from \"effect/Either\";\nimport * as Schema from \"effect/Schema\";\n\nimport {\n  SourceInspectionToolDetailSchema,\n  StoredSourceCatalogRevisionRecordSchema,\n} from \"./index\";\n\ndescribe(\"control-plane-schema\", () => {\n  it(\"accepts snapshot-native inspection detail rows\", () => {\n    const decode = Schema.decodeUnknownEither(SourceInspectionToolDetailSchema);\n\n    const detail = decode({\n      summary: {\n        path: \"github.issues.list\",\n        sourceKey: \"src_1\",\n        protocol: \"http\",\n        toolId: \"list\",\n        rawToolId: \"issues.list\",\n        operationId: \"listIssues\",\n        group: \"issues\",\n        leaf: \"list\",\n        tags: [\"issues\"],\n        method: \"GET\",\n        pathTemplate: \"/issues\",\n      },\n      contract: {\n        callSignature: \"(args: GithubIssuesListCall) => Promise<GithubIssuesListResult>\",\n        callDeclaration: \"declare function githubIssuesList(args: GithubIssuesListCall): Promise<GithubIssuesListResult>;\",\n        callShapeId: \"shape_call\",\n        resultShapeId: \"shape_result\",\n        responseSetId: \"response_set_1\",\n        input: {\n          shapeId: \"shape_call\",\n          typePreview: \"{ owner: string; repo: string }\",\n          typeDeclaration: \"type GithubIssuesListCall = { owner: string; repo: string };\",\n          schemaJson: \"{}\",\n          exampleJson: null,\n        },\n        output: {\n          shapeId: \"shape_result\",\n          typePreview: \"{ data: unknown; error: unknown; headers: Record<string, string>; status: number | null }\",\n          typeDeclaration: \"type GithubIssuesListResult = { data: unknown; error: unknown; headers: Record<string, string>; status: number | null };\",\n          schemaJson: \"{}\",\n          exampleJson: null,\n        },\n      },\n      sections: [{\n        kind: \"facts\",\n        title: \"Overview\",\n        items: [{\n          label: \"Protocol\",\n          value: \"http\",\n          mono: true,\n        }],\n      }, {\n        kind: \"code\",\n        title: \"Executable\",\n        language: \"json\",\n        body: \"{}\",\n      }],\n    });\n\n    expect(Either.isRight(detail)).toBe(true);\n  });\n\n  it(\"rejects malformed catalog revisions\", () => {\n    const decode = Schema.decodeUnknownEither(StoredSourceCatalogRevisionRecordSchema);\n\n    const invalidRevision = decode({\n      id: \"src_catalog_rev_1\",\n      catalogId: \"src_catalog_1\",\n      revisionNumber: \"1\",\n      sourceConfigJson: \"{}\",\n      importMetadataJson: null,\n      importMetadataHash: null,\n      snapshotHash: null,\n      createdAt: 1,\n      updatedAt: 1,\n    });\n\n    expect(Either.isLeft(invalidRevision)).toBe(true);\n  });\n});\n"
  },
  {
    "path": "packages/platform/control-plane/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.d.ts\"\n  ],\n  \"exclude\": [\n    \"src/**/*.test.ts\",\n    \"src/persistence/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/platform/control-plane/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    include: [\"src/**/*.test.ts\"],\n    testTimeout: 30_000,\n  },\n});\n"
  },
  {
    "path": "packages/platform/server/CHANGELOG.md",
    "content": "# @executor/server\n\n## null\n\n### Patch Changes\n\n- @executor/control-plane@null\n- @executor/executor-mcp@null\n"
  },
  {
    "path": "packages/platform/server/package.json",
    "content": "{\n  \"name\": \"@executor/server\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@effect/opentelemetry\": \"^0.61.0\",\n    \"@effect/platform\": \"catalog:\",\n    \"@effect/platform-node\": \"catalog:\",\n    \"@executor/control-plane\": \"workspace:*\",\n    \"@executor/executor-mcp\": \"workspace:*\",\n    \"@opentelemetry/api\": \"^1.9.0\",\n    \"@opentelemetry/exporter-trace-otlp-grpc\": \"^0.213.0\",\n    \"@opentelemetry/exporter-trace-otlp-http\": \"^0.213.0\",\n    \"@opentelemetry/resources\": \"^2.6.0\",\n    \"@opentelemetry/sdk-trace-base\": \"^2.6.0\",\n    \"@opentelemetry/sdk-trace-node\": \"^2.6.0\",\n    \"@opentelemetry/semantic-conventions\": \"^1.40.0\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/platform/server/src/config.ts",
    "content": "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { loadMonorepoRootEnv } from \"./env\";\n\nloadMonorepoRootEnv();\n\nexport const EXECUTOR_HOME_ENV = \"EXECUTOR_HOME\";\nexport const EXECUTOR_DATA_DIR_ENV = \"EXECUTOR_DATA_DIR\";\nexport const EXECUTOR_LOCAL_DATA_DIR_ENV = \"EXECUTOR_LOCAL_DATA_DIR\";\nexport const EXECUTOR_SERVER_PID_FILE_ENV = \"EXECUTOR_SERVER_PID_FILE\";\nexport const EXECUTOR_SERVER_LOG_FILE_ENV = \"EXECUTOR_SERVER_LOG_FILE\";\nexport const EXECUTOR_WEB_ASSETS_DIR_ENV = \"EXECUTOR_WEB_ASSETS_DIR\";\nexport const EXECUTOR_TRACE_ENABLED_ENV = \"EXECUTOR_TRACE_ENABLED\";\nexport const EXECUTOR_TRACE_OTLP_ENDPOINT_ENV = \"EXECUTOR_TRACE_OTLP_ENDPOINT\";\nexport const EXECUTOR_TRACE_OTLP_HTTP_ENDPOINT_ENV = \"EXECUTOR_TRACE_OTLP_HTTP_ENDPOINT\";\nexport const EXECUTOR_TRACE_SERVICE_NAME_ENV = \"EXECUTOR_TRACE_SERVICE_NAME\";\nexport const EXECUTOR_TRACE_QUERY_BASE_URL_ENV = \"EXECUTOR_TRACE_QUERY_BASE_URL\";\n\nconst trim = (value: string | undefined): string | undefined => {\n  const candidate = value?.trim();\n  return candidate && candidate.length > 0 ? candidate : undefined;\n};\n\nconst home = homedir();\nconst isWindows = process.platform === \"win32\";\nconst isMac = process.platform === \"darwin\";\nconst explicitExecutorHome = trim(process.env[EXECUTOR_HOME_ENV]);\nconst defaultLinuxDataHome = trim(process.env.XDG_DATA_HOME) ?? join(home, \".local\", \"share\");\nconst defaultLinuxStateHome = trim(process.env.XDG_STATE_HOME) ?? join(home, \".local\", \"state\");\nconst defaultWindowsHome = join(trim(process.env.LOCALAPPDATA) ?? join(home, \"AppData\", \"Local\"), \"Executor\");\nconst defaultMacHome = join(home, \"Library\", \"Application Support\", \"Executor\");\nconst defaultLinuxHome = join(defaultLinuxDataHome, \"executor\");\n\nexport const DEFAULT_SERVER_PORT = 8788;\nexport const DEFAULT_SERVER_HOST = \"127.0.0.1\";\nexport const DEFAULT_SERVER_BASE_URL = `http://${DEFAULT_SERVER_HOST}:${DEFAULT_SERVER_PORT}`;\nexport const DEFAULT_EXECUTOR_HOME =\n  explicitExecutorHome\n  ?? (isWindows ? defaultWindowsHome : isMac ? defaultMacHome : defaultLinuxHome);\nexport const DEFAULT_EXECUTOR_DATA_DIR =\n  trim(process.env[EXECUTOR_DATA_DIR_ENV])\n  ?? join(DEFAULT_EXECUTOR_HOME, \"data\");\nexport const DEFAULT_EXECUTOR_RUN_DIR = explicitExecutorHome\n  ? join(DEFAULT_EXECUTOR_HOME, \"run\")\n  : isWindows || isMac\n    ? join(DEFAULT_EXECUTOR_HOME, \"run\")\n    : join(defaultLinuxStateHome, \"executor\", \"run\");\n\nexport const DEFAULT_LOCAL_DATA_DIR =\n  trim(process.env[EXECUTOR_LOCAL_DATA_DIR_ENV])\n  ?? join(DEFAULT_EXECUTOR_DATA_DIR, \"control-plane\");\n\nexport const DEFAULT_SERVER_PID_FILE =\n  trim(process.env[EXECUTOR_SERVER_PID_FILE_ENV])\n  ?? join(DEFAULT_EXECUTOR_RUN_DIR, \"server.pid\");\nexport const DEFAULT_SERVER_LOG_FILE =\n  trim(process.env[EXECUTOR_SERVER_LOG_FILE_ENV])\n  ?? join(DEFAULT_EXECUTOR_RUN_DIR, \"server.log\");\n\nexport const SERVER_START_TIMEOUT_MS = 5_000;\nexport const SERVER_POLL_INTERVAL_MS = 100;\n"
  },
  {
    "path": "packages/platform/server/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class PlatformServerEffectError extends Data.TaggedError(\n  \"PlatformServerEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const platformServerEffectError = (\n  module: string,\n  message: string,\n) => new PlatformServerEffectError({ module, message });\n"
  },
  {
    "path": "packages/platform/server/src/env.test.ts",
    "content": "import { mkdtemp, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, describe, expect, it } from \"bun:test\";\n\nimport { loadMonorepoRootEnv } from \"./env\";\n\nconst tempDirs: string[] = [];\n\nconst makeTempDir = async (): Promise<string> => {\n  const directory = await mkdtemp(join(tmpdir(), \"executor-server-env-\"));\n  tempDirs.push(directory);\n  return directory;\n};\n\nafterEach(async () => {\n  await Promise.all(tempDirs.splice(0).map((directory) =>\n    rm(directory, { recursive: true, force: true })\n  ));\n});\n\ndescribe(\"loadMonorepoRootEnv\", () => {\n  it(\"loads root .env.local values when running from a workspace child directory\", async () => {\n    const root = await makeTempDir();\n    await writeFile(join(root, \"package.json\"), JSON.stringify({\n      private: true,\n      workspaces: [\"apps/*\", \"packages/*/*\"],\n    }));\n    await writeFile(join(root, \".env.local\"), \"GOOGLE_CLIENT_ID=test-client\\nGOOGLE_CLIENT_SECRET=test-secret\\n\");\n    const child = join(root, \"apps\", \"executor\");\n    await mkdir(child, { recursive: true });\n\n    const env: NodeJS.ProcessEnv = {};\n    const result = loadMonorepoRootEnv({\n      cwd: child,\n      env,\n    });\n\n    expect(result.rootDir).toBe(root);\n    expect(result.loadedFiles).toContain(join(root, \".env.local\"));\n    expect(env.GOOGLE_CLIENT_ID).toBe(\"test-client\");\n    expect(env.GOOGLE_CLIENT_SECRET).toBe(\"test-secret\");\n  });\n\n  it(\"does not override explicit process environment values\", async () => {\n    const root = await makeTempDir();\n    await writeFile(join(root, \"package.json\"), JSON.stringify({\n      private: true,\n      workspaces: [\"apps/*\", \"packages/*/*\"],\n    }));\n    await writeFile(join(root, \".env.local\"), \"GOOGLE_CLIENT_ID=file-client\\n\");\n    const child = join(root, \"apps\", \"executor\");\n    await mkdir(child, { recursive: true });\n\n    const env: NodeJS.ProcessEnv = {\n      GOOGLE_CLIENT_ID: \"shell-client\",\n    };\n    loadMonorepoRootEnv({\n      cwd: child,\n      env,\n    });\n\n    expect(env.GOOGLE_CLIENT_ID).toBe(\"shell-client\");\n  });\n});\n"
  },
  {
    "path": "packages/platform/server/src/env.ts",
    "content": "import { existsSync, readFileSync } from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\n\ntype LoadMonorepoRootEnvOptions = {\n  cwd?: string;\n  env?: NodeJS.ProcessEnv;\n};\n\nconst parseEnvFile = (content: string): Record<string, string> => {\n  const values: Record<string, string> = {};\n\n  for (const rawLine of content.split(/\\r?\\n/u)) {\n    const line = rawLine.trim();\n    if (line.length === 0 || line.startsWith(\"#\")) {\n      continue;\n    }\n\n    const match = /^(?:export\\s+)?([A-Za-z_][A-Za-z0-9_]*)\\s*=\\s*(.*)$/u.exec(rawLine);\n    if (!match) {\n      continue;\n    }\n\n    const key = match[1]!;\n    let value = match[2] ?? \"\";\n    value = value.trim();\n\n    if (\n      (value.startsWith(\"\\\"\") && value.endsWith(\"\\\"\"))\n      || (value.startsWith(\"'\") && value.endsWith(\"'\"))\n    ) {\n      const quote = value[0]!;\n      value = value.slice(1, -1);\n      if (quote === \"\\\"\") {\n        value = value\n          .replace(/\\\\n/gu, \"\\n\")\n          .replace(/\\\\r/gu, \"\\r\")\n          .replace(/\\\\t/gu, \"\\t\")\n          .replace(/\\\\\"/gu, \"\\\"\")\n          .replace(/\\\\\\\\/gu, \"\\\\\");\n      }\n    } else {\n      value = value.replace(/\\s+#.*$/u, \"\");\n    }\n\n    values[key] = value;\n  }\n\n  return values;\n};\n\nconst isWorkspaceRoot = (directory: string): boolean => {\n  const packageJsonPath = join(directory, \"package.json\");\n  if (!existsSync(packageJsonPath)) {\n    return false;\n  }\n\n  try {\n    const parsed = JSON.parse(readFileSync(packageJsonPath, \"utf8\")) as {\n      workspaces?: unknown;\n    };\n    return Array.isArray(parsed.workspaces);\n  } catch {\n    return false;\n  }\n};\n\nconst findMonorepoRoot = (startDir: string): string | null => {\n  let current = resolve(startDir);\n\n  while (true) {\n    if (isWorkspaceRoot(current)) {\n      return current;\n    }\n\n    const parent = dirname(current);\n    if (parent === current) {\n      return null;\n    }\n\n    current = parent;\n  }\n};\n\nexport const loadMonorepoRootEnv = (\n  options: LoadMonorepoRootEnvOptions = {},\n): { rootDir: string | null; loadedFiles: string[] } => {\n  const cwd = options.cwd ?? process.cwd();\n  const env = options.env ?? process.env;\n  const rootDir = findMonorepoRoot(cwd);\n  if (rootDir === null) {\n    return {\n      rootDir: null,\n      loadedFiles: [],\n    };\n  }\n\n  const initialKeys = new Set(Object.keys(env));\n  const loadedFiles: string[] = [];\n\n  for (const fileName of [\".env\", \".env.local\"]) {\n    const filePath = join(rootDir, fileName);\n    if (!existsSync(filePath)) {\n      continue;\n    }\n\n    const parsed = parseEnvFile(readFileSync(filePath, \"utf8\"));\n    for (const [key, value] of Object.entries(parsed)) {\n      if (initialKeys.has(key)) {\n        continue;\n      }\n      env[key] = value;\n    }\n    loadedFiles.push(filePath);\n  }\n\n  return {\n    rootDir,\n    loadedFiles,\n  };\n};\n\n"
  },
  {
    "path": "packages/platform/server/src/index.ts",
    "content": "import {\n  createServer as createNodeServer,\n  type IncomingMessage,\n  type ServerResponse,\n} from \"node:http\";\nimport type { AddressInfo } from \"node:net\";\nimport { dirname, extname, resolve } from \"node:path\";\nimport { Readable } from \"node:stream\";\nimport { FileSystem, HttpApiBuilder, HttpServer } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport {\n  createControlPlaneApiLayer,\n  createControlPlaneRuntime,\n  type ResolveExecutionEnvironment,\n  type ResolveSecretMaterial,\n  type ControlPlaneRuntime,\n} from \"@executor/control-plane\";\nimport { createExecutorMcpRequestHandler } from \"@executor/executor-mcp\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport type * as Scope from \"effect/Scope\";\n\nimport {\n  DEFAULT_LOCAL_DATA_DIR,\n  DEFAULT_SERVER_LOG_FILE,\n  DEFAULT_SERVER_PID_FILE,\n  DEFAULT_SERVER_HOST,\n  DEFAULT_SERVER_PORT,\n  EXECUTOR_TRACE_ENABLED_ENV,\n  EXECUTOR_TRACE_OTLP_ENDPOINT_ENV,\n  EXECUTOR_TRACE_OTLP_HTTP_ENDPOINT_ENV,\n  EXECUTOR_TRACE_QUERY_BASE_URL_ENV,\n  EXECUTOR_TRACE_SERVICE_NAME_ENV,\n} from \"./config\";\nimport {\n  createLocalTracingRuntimeFromEnv,\n  tracingSearchUrl,\n} from \"./tracing\";\nimport { platformServerEffectError } from \"./effect-errors\";\n\nexport {\n  DEFAULT_EXECUTOR_DATA_DIR,\n  DEFAULT_EXECUTOR_HOME,\n  DEFAULT_LOCAL_DATA_DIR,\n  DEFAULT_SERVER_BASE_URL,\n  DEFAULT_SERVER_LOG_FILE,\n  DEFAULT_SERVER_HOST,\n  DEFAULT_SERVER_PID_FILE,\n  DEFAULT_SERVER_PORT,\n  EXECUTOR_DATA_DIR_ENV,\n  EXECUTOR_HOME_ENV,\n  EXECUTOR_LOCAL_DATA_DIR_ENV,\n  EXECUTOR_SERVER_PID_FILE_ENV,\n  EXECUTOR_SERVER_LOG_FILE_ENV,\n  EXECUTOR_WEB_ASSETS_DIR_ENV,\n  EXECUTOR_TRACE_ENABLED_ENV,\n  EXECUTOR_TRACE_OTLP_ENDPOINT_ENV,\n  EXECUTOR_TRACE_OTLP_HTTP_ENDPOINT_ENV,\n  EXECUTOR_TRACE_QUERY_BASE_URL_ENV,\n  EXECUTOR_TRACE_SERVICE_NAME_ENV,\n  SERVER_POLL_INTERVAL_MS,\n  SERVER_START_TIMEOUT_MS,\n} from \"./config\";\n\ntype StaticUiOptions = {\n  readonly assetsDir?: string;\n  readonly devServerUrl?: string;\n};\n\nexport type LocalExecutorServer = {\n  readonly runtime: ControlPlaneRuntime;\n  readonly port: number;\n  readonly host: string;\n  readonly baseUrl: string;\n};\n\nexport type StartLocalExecutorServerOptions = {\n  readonly port?: number;\n  readonly host?: string;\n  readonly localDataDir?: string;\n  readonly workspaceRoot?: string;\n  readonly pidFile?: string;\n  readonly executionResolver?: ResolveExecutionEnvironment;\n  readonly resolveSecretMaterial?: ResolveSecretMaterial;\n  readonly ui?: StaticUiOptions;\n};\n\nexport type LocalExecutorRequestHandler = {\n  readonly runtime: ControlPlaneRuntime;\n  readonly handleApiRequest: (request: Request) => Promise<Response>;\n  readonly getBaseUrl: () => string | undefined;\n  readonly setBaseUrl: (baseUrl: string) => void;\n};\n\ntype ControlPlaneWebHandler = ReturnType<typeof HttpApiBuilder.toWebHandler>;\ntype ExecutorMcpHandler = ReturnType<typeof createExecutorMcpRequestHandler>;\n\nconst disposeRuntime = (runtime: ControlPlaneRuntime) =>\n  Effect.tryPromise({\n    try: () => runtime.close(),\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause ?? \"runtime close failed\")),\n  }).pipe(Effect.orDie);\n\nconst createRuntime = (\n  localDataDir: string,\n  getLocalServerBaseUrl: () => string | undefined,\n  options: StartLocalExecutorServerOptions,\n) =>\n  createControlPlaneRuntime({\n    workspaceRoot: options.workspaceRoot,\n    executionResolver: options.executionResolver,\n    resolveSecretMaterial: options.resolveSecretMaterial,\n    getLocalServerBaseUrl,\n    localDataDir,\n  }).pipe(\n    Effect.mapError((cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n    ),\n  );\n\nconst createControlPlaneWebHandler = (\n  runtime: ControlPlaneRuntime,\n  tracingRuntime: ReturnType<typeof createLocalTracingRuntimeFromEnv>,\n) =>\n  Effect.acquireRelease(\n    Effect.sync(() =>\n      HttpApiBuilder.toWebHandler(\n        Layer.merge(\n          HttpApiBuilder.middlewareOpenApi({ path: \"/v1/openapi.json\" }).pipe(\n            Layer.provideMerge(\n              createControlPlaneApiLayer(runtime.runtimeLayer).pipe(\n                Layer.provideMerge(tracingRuntime?.layer ?? Layer.empty),\n              ),\n            )\n          ),\n          HttpServer.layerContext,\n        ),\n      ),\n    ),\n    (handler: ControlPlaneWebHandler) => Effect.tryPromise({ try: () => handler.dispose(), catch: (cause) => cause instanceof Error ? cause : new Error(String(cause ?? \"web handler dispose failed\")) }).pipe(Effect.orDie),\n  );\n\nconst safeFilePath = (assetsDir: string, pathname: string): string | null => {\n  const target = resolve(assetsDir, `.${pathname}`);\n  const root = resolve(assetsDir);\n  return target.startsWith(root) ? target : null;\n};\n\nconst isRegularFile = async (\n  fileSystem: FileSystem.FileSystem,\n  path: string,\n): Promise<boolean> => {\n  try {\n    const info = await Effect.runPromise(fileSystem.stat(path));\n    return info.type === \"File\";\n  } catch {\n    return false;\n  }\n};\n\nconst contentTypeByExtension: Record<string, string> = {\n  \".css\": \"text/css; charset=utf-8\",\n  \".gif\": \"image/gif\",\n  \".html\": \"text/html; charset=utf-8\",\n  \".ico\": \"image/x-icon\",\n  \".jpg\": \"image/jpeg\",\n  \".jpeg\": \"image/jpeg\",\n  \".js\": \"text/javascript; charset=utf-8\",\n  \".json\": \"application/json; charset=utf-8\",\n  \".map\": \"application/json; charset=utf-8\",\n  \".mjs\": \"text/javascript; charset=utf-8\",\n  \".png\": \"image/png\",\n  \".svg\": \"image/svg+xml\",\n  \".txt\": \"text/plain; charset=utf-8\",\n  \".wasm\": \"application/wasm\",\n  \".woff\": \"font/woff\",\n  \".woff2\": \"font/woff2\",\n};\n\nconst contentTypeForPath = (path: string): string =>\n  contentTypeByExtension[extname(path).toLowerCase()] ?? \"application/octet-stream\";\n\nconst readResponseFile = async (\n  fileSystem: FileSystem.FileSystem,\n  path: string,\n  contentType?: string,\n): Promise<Response> => {\n  const body = await Effect.runPromise(fileSystem.readFile(path));\n  return new Response(Buffer.from(body), {\n    headers: {\n      \"content-type\": contentType ?? contentTypeForPath(path),\n    },\n  });\n};\n\nconst toWebRequest = (nodeRequest: IncomingMessage): Request => {\n  const host = nodeRequest.headers.host ?? \"127.0.0.1\";\n  const url = `http://${host}${nodeRequest.url ?? \"/\"}`;\n  const headers = new Headers();\n\n  for (const [key, value] of Object.entries(nodeRequest.headers)) {\n    if (value === undefined) {\n      continue;\n    }\n\n    if (Array.isArray(value)) {\n      for (const item of value) {\n        headers.append(key, item);\n      }\n      continue;\n    }\n\n    headers.set(key, value);\n  }\n\n  const method = nodeRequest.method ?? \"GET\";\n  const requestInit: RequestInit & { duplex?: \"half\" } = {\n    method,\n    headers,\n  };\n\n  if (method !== \"GET\" && method !== \"HEAD\") {\n    requestInit.body = Readable.toWeb(nodeRequest) as unknown as BodyInit;\n    requestInit.duplex = \"half\";\n  }\n\n  return new Request(url, requestInit);\n};\n\nconst writeNodeResponse = async (\n  nodeResponse: ServerResponse,\n  webResponse: Response,\n): Promise<void> => {\n  nodeResponse.statusCode = webResponse.status;\n  webResponse.headers.forEach((value, key) => {\n    nodeResponse.setHeader(key, value);\n  });\n\n  if (!webResponse.body) {\n    nodeResponse.end();\n    return;\n  }\n\n  const reader = webResponse.body.getReader();\n  while (true) {\n    const { done, value } = await reader.read();\n    if (done) {\n      break;\n    }\n\n    nodeResponse.write(Buffer.from(value));\n  }\n\n  nodeResponse.end();\n};\n\n\nconst wantsHtml = (request: Request): boolean =>\n  request.headers.get(\"accept\")?.includes(\"text/html\") ?? false;\n\nconst serveUiAsset = async (\n  fileSystem: FileSystem.FileSystem,\n  request: Request,\n  ui: StaticUiOptions,\n): Promise<Response | null> => {\n  const url = new URL(request.url);\n\n  if (ui.devServerUrl) {\n    const proxyUrl = new URL(`${url.pathname}${url.search}`, ui.devServerUrl);\n    return fetch(new Request(proxyUrl.toString(), request));\n  }\n\n  if (!ui.assetsDir) {\n    return null;\n  }\n\n  const candidatePath = safeFilePath(ui.assetsDir, url.pathname);\n  if (candidatePath && await isRegularFile(fileSystem, candidatePath)) {\n    return readResponseFile(fileSystem, candidatePath);\n  }\n\n  const shouldServeIndex =\n    url.pathname === \"/\"\n    || extname(url.pathname).length === 0\n    || wantsHtml(request);\n\n  if (!shouldServeIndex) {\n    return null;\n  }\n\n  const indexPath = resolve(ui.assetsDir, \"index.html\");\n  if (!(await isRegularFile(fileSystem, indexPath))) {\n    return null;\n  }\n\n  return readResponseFile(fileSystem, indexPath, \"text/html; charset=utf-8\");\n};\n\nconst isApiRequest = (request: Request): boolean => {\n  const pathname = new URL(request.url).pathname;\n  return pathname === \"/mcp\" || pathname === \"/v1\" || pathname.startsWith(\"/v1/\");\n};\n\nexport const createLocalExecutorRequestHandler = (\n  options: StartLocalExecutorServerOptions = {},\n): Effect.Effect<LocalExecutorRequestHandler, Error, Scope.Scope> =>\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n    const requestedLocalDataDir = options.localDataDir ?? DEFAULT_LOCAL_DATA_DIR;\n\n    if (requestedLocalDataDir !== \":memory:\") {\n      yield* fileSystem.makeDirectory(dirname(requestedLocalDataDir), {\n        recursive: true,\n      }).pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n        ),\n      );\n    }\n\n    let baseUrlRef: string | undefined;\n    const tracingRuntime = createLocalTracingRuntimeFromEnv();\n\n    if (tracingRuntime) {\n      yield* Effect.sync(() => {\n        console.info(\n          `[executor] tracing enabled -> ${tracingSearchUrl({\n            queryBaseUrl: tracingRuntime.queryBaseUrl,\n            serviceName: tracingRuntime.serviceName,\n          })}`,\n        );\n      });\n    }\n\n    const runtime = yield* Effect.acquireRelease(\n      createRuntime(requestedLocalDataDir, () => baseUrlRef, options),\n      disposeRuntime,\n    );\n\n    const apiHandler = yield* createControlPlaneWebHandler(runtime, tracingRuntime);\n    const mcpHandler = yield* Effect.acquireRelease(\n      Effect.sync(() => createExecutorMcpRequestHandler(runtime)),\n      (handler: ExecutorMcpHandler) =>\n        Effect.tryPromise({\n          try: () => handler.close(),\n          catch: (cause) =>\n            cause instanceof Error\n              ? cause\n              : new Error(String(cause ?? \"mcp handler close failed\")),\n        }).pipe(Effect.orDie),\n    );\n\n    return {\n      runtime,\n      handleApiRequest: (request) => {\n        const pathname = new URL(request.url).pathname;\n        return pathname === \"/mcp\"\n          ? mcpHandler.handleRequest(request)\n          : apiHandler.handler(request);\n      },\n      getBaseUrl: () => baseUrlRef,\n      setBaseUrl: (baseUrl) => {\n        baseUrlRef = baseUrl;\n      },\n    } satisfies LocalExecutorRequestHandler;\n  }).pipe(Effect.provide(NodeFileSystem.layer));\n\nexport const createLocalExecutorServer = (\n  options: StartLocalExecutorServerOptions = {},\n): Effect.Effect<LocalExecutorServer, Error, Scope.Scope> =>\n  Effect.gen(function* () {\n    const fileSystem = yield* FileSystem.FileSystem;\n    const host = options.host ?? DEFAULT_SERVER_HOST;\n    const port = options.port ?? DEFAULT_SERVER_PORT;\n    const requestHandler = yield* createLocalExecutorRequestHandler(options);\n\n    const server = yield* Effect.acquireRelease(\n      Effect.tryPromise({\n        try: () =>\n          new Promise<ReturnType<typeof createNodeServer>>((resolveServer, reject) => {\n            const server = createNodeServer((nodeRequest, nodeResponse) => {\n              void (async () => {\n                const request = toWebRequest(nodeRequest);\n                const response = isApiRequest(request)\n                  ? await requestHandler.handleApiRequest(request)\n                  : await serveUiAsset(fileSystem, request, options.ui ?? {}) ?? new Response(\"Not Found\", { status: 404 });\n                await writeNodeResponse(nodeResponse, response);\n              })().catch((cause) => {\n                nodeResponse.statusCode = 500;\n                nodeResponse.end(cause instanceof Error ? cause.message : String(cause));\n              });\n            });\n\n            server.once(\"error\", reject);\n            server.listen(port, host, () => {\n              server.off(\"error\", reject);\n              resolveServer(server);\n            });\n          }),\n        catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n      }),\n      (server) => Effect.tryPromise({\n        try: () =>\n          new Promise<void>((resolveClose, reject) => {\n            server.close((error) => {\n              if (error) {\n                reject(error);\n                return;\n              }\n\n              resolveClose();\n            });\n          }),\n        catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n      }).pipe(Effect.orDie),\n    );\n\n    const address = server.address();\n    if (!address || typeof address === \"string\") {\n      return yield* platformServerEffectError(\"index\", \"Failed to resolve local executor server address\");\n    }\n\n    const resolvedAddress = address as AddressInfo;\n    const baseUrl = `http://${host}:${resolvedAddress.port}`;\n    requestHandler.setBaseUrl(baseUrl);\n\n    return {\n      runtime: requestHandler.runtime,\n      host,\n      port: resolvedAddress.port,\n      baseUrl,\n    } satisfies LocalExecutorServer;\n  }).pipe(Effect.provide(NodeFileSystem.layer));\n\nexport const runLocalExecutorServer = (\n  options: StartLocalExecutorServerOptions = {},\n): Effect.Effect<void, Error, never> =>\n  Effect.scoped(\n    Effect.gen(function* () {\n      const fileSystem = yield* FileSystem.FileSystem;\n      const server = yield* createLocalExecutorServer(options);\n      const pidFile = options.pidFile ?? DEFAULT_SERVER_PID_FILE;\n\n      yield* Effect.acquireRelease(\n        Effect.gen(function* () {\n          yield* fileSystem.makeDirectory(dirname(pidFile), {\n            recursive: true,\n          }).pipe(\n            Effect.mapError((cause) =>\n              cause instanceof Error ? cause : new Error(String(cause)),\n            ),\n          );\n          yield* fileSystem.writeFileString(pidFile, JSON.stringify({\n            pid: process.pid,\n            port: server.port,\n            host: server.host,\n            baseUrl: server.baseUrl,\n            startedAt: Date.now(),\n            logFile: DEFAULT_SERVER_LOG_FILE,\n          }, null, 2)).pipe(\n            Effect.mapError((cause) =>\n              cause instanceof Error ? cause : new Error(String(cause)),\n            ),\n          );\n        }),\n        () =>\n          fileSystem.remove(pidFile, { force: true }).pipe(\n            Effect.mapError((cause) =>\n              cause instanceof Error\n                ? cause\n                : new Error(String(cause ?? \"pid file cleanup failed\")),\n            ),\n            Effect.orDie,\n          ),\n      );\n\n      console.error(`executor server listening on ${server.baseUrl}`);\n\n      yield* Effect.async<void, never>((resume) => {\n        const shutdown = () => resume(Effect.void);\n        process.once(\"SIGINT\", shutdown);\n        process.once(\"SIGTERM\", shutdown);\n\n        return Effect.sync(() => {\n          process.off(\"SIGINT\", shutdown);\n          process.off(\"SIGTERM\", shutdown);\n        });\n      });\n    }),\n  ).pipe(Effect.provide(NodeFileSystem.layer));\n"
  },
  {
    "path": "packages/platform/server/src/tracing.ts",
    "content": "import * as NodeSdk from \"@effect/opentelemetry/NodeSdk\";\nimport { OTLPTraceExporter } from \"@opentelemetry/exporter-trace-otlp-grpc\";\nimport { SimpleSpanProcessor } from \"@opentelemetry/sdk-trace-base\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  EXECUTOR_TRACE_ENABLED_ENV,\n  EXECUTOR_TRACE_OTLP_ENDPOINT_ENV,\n  EXECUTOR_TRACE_OTLP_HTTP_ENDPOINT_ENV,\n  EXECUTOR_TRACE_QUERY_BASE_URL_ENV,\n  EXECUTOR_TRACE_SERVICE_NAME_ENV,\n} from \"./config\";\n\nconst DEFAULT_TRACE_OTLP_ENDPOINT = \"http://127.0.0.1:4317\";\nconst DEFAULT_TRACE_QUERY_BASE_URL = \"http://127.0.0.1:16686\";\nconst DEFAULT_TRACE_SERVICE_NAME = \"executor-local\";\n\nexport type LocalTracingRuntime = {\n  readonly layer: Layer.Layer<never>;\n  readonly otlpEndpoint: string;\n  readonly queryBaseUrl: string;\n  readonly serviceName: string;\n};\n\nconst trim = (value: string | undefined): string | undefined => {\n  const candidate = value?.trim();\n  return candidate && candidate.length > 0 ? candidate : undefined;\n};\n\nconst envFlag = (value: string | undefined): boolean => {\n  const normalized = value?.trim().toLowerCase();\n  return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\" || normalized === \"on\";\n};\n\nexport const createLocalTracingRuntimeFromEnv = (): LocalTracingRuntime | null => {\n  if (!envFlag(process.env[EXECUTOR_TRACE_ENABLED_ENV])) {\n    return null;\n  }\n\n  const otlpEndpoint =\n    trim(process.env[EXECUTOR_TRACE_OTLP_ENDPOINT_ENV])\n    ?? trim(process.env[EXECUTOR_TRACE_OTLP_HTTP_ENDPOINT_ENV])\n    ?? DEFAULT_TRACE_OTLP_ENDPOINT;\n  const serviceName = trim(process.env[EXECUTOR_TRACE_SERVICE_NAME_ENV]) ?? DEFAULT_TRACE_SERVICE_NAME;\n  const queryBaseUrl = trim(process.env[EXECUTOR_TRACE_QUERY_BASE_URL_ENV]) ?? DEFAULT_TRACE_QUERY_BASE_URL;\n\n  return {\n    layer: NodeSdk.layer(() => ({\n      resource: {\n        serviceName,\n        attributes: {\n          \"service.namespace\": \"executor\",\n        },\n      },\n      spanProcessor: [new SimpleSpanProcessor(new OTLPTraceExporter({ url: otlpEndpoint }))],\n    })),\n    otlpEndpoint,\n    queryBaseUrl,\n    serviceName,\n  };\n};\n\nexport const tracingSearchUrl = (input: {\n  queryBaseUrl: string;\n  serviceName: string;\n}): string => `${input.queryBaseUrl.replace(/\\/$/, \"\")}/search?service=${encodeURIComponent(input.serviceName)}`;\n"
  },
  {
    "path": "packages/platform/server/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\", \"DOM\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/builtins/package.json",
    "content": "{\n  \"name\": \"@executor/source-builtins\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@executor/source-core\": \"workspace:*\",\n    \"@executor/source-google-discovery\": \"workspace:*\",\n    \"@executor/source-graphql\": \"workspace:*\",\n    \"@executor/source-mcp\": \"workspace:*\",\n    \"@executor/source-openapi\": \"workspace:*\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/sources/builtins/src/index.ts",
    "content": "import type { SourceAdapter } from \"@executor/source-core\";\nimport { googleDiscoverySourceAdapter } from \"@executor/source-google-discovery\";\nimport { graphqlSourceAdapter } from \"@executor/source-graphql\";\nimport { mcpSourceAdapter } from \"@executor/source-mcp\";\nimport { openApiSourceAdapter } from \"@executor/source-openapi\";\n\nexport const externalSourceAdapters = [\n  openApiSourceAdapter,\n  graphqlSourceAdapter,\n  googleDiscoverySourceAdapter,\n  mcpSourceAdapter,\n] as const satisfies readonly SourceAdapter[];\n"
  },
  {
    "path": "packages/sources/builtins/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/core/package.json",
    "content": "{\n  \"name\": \"@executor/source-core\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@executor/auth-oauth2\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"@executor/ir\": \"workspace:*\",\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/sources/core/src/catalog-fragment.ts",
    "content": "import {\n  DocumentIdSchema,\n  ResourceIdSchema,\n  ScopeIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  CatalogFragmentV1,\n  Scope,\n  SourceDocument,\n} from \"@executor/ir/model\";\n\nimport { namespaceFromSourceName } from \"./discovery\";\nimport type { Source } from \"./source-models\";\nimport {\n  docsFrom,\n  mutableRecord,\n  provenanceFor,\n  sourceKindFromSource,\n  stableHash,\n} from \"./catalog-shared\";\nimport { createJsonSchemaImporter } from \"./catalog-json-schema\";\nimport type {\n  CatalogFragmentBuildContext,\n  CatalogFragmentBuilder,\n  CatalogSourceDocumentInput,\n} from \"./catalog-types\";\n\nconst serviceScopeIdForSource = (source: Pick<Source, \"id\">) =>\n  ScopeIdSchema.make(`scope_service_${stableHash({ sourceId: source.id })}`);\n\nconst documentIdFor = (source: Pick<Source, \"id\">, key: string) =>\n  DocumentIdSchema.make(`doc_${stableHash({ sourceId: source.id, key })}`);\n\nconst resourceIdForSource = (source: Pick<Source, \"id\">) =>\n  ResourceIdSchema.make(`res_${stableHash({ sourceId: source.id })}`);\n\nconst nativeBlob = (input: {\n  source: Pick<Source, \"kind\">;\n  kind: string;\n  pointer: string;\n  value: unknown;\n  summary?: string;\n}) => ({\n  sourceKind: sourceKindFromSource(input.source),\n  kind: input.kind,\n  pointer: input.pointer,\n  encoding: \"json\" as const,\n  ...(input.summary ? { summary: input.summary } : {}),\n  value: input.value,\n});\n\nconst createEmptyCatalogFragment = (): CatalogFragmentBuilder => ({\n  version: \"ir.v1.fragment\",\n  documents: {},\n  resources: {},\n  scopes: {},\n  symbols: {},\n  capabilities: {},\n  executables: {},\n  responseSets: {},\n  diagnostics: {},\n});\n\nconst finalizeCatalogFragment = (\n  fragment: CatalogFragmentBuilder,\n): CatalogFragmentV1 => ({\n  version: \"ir.v1.fragment\",\n  ...(Object.keys(fragment.documents).length > 0\n    ? { documents: fragment.documents }\n    : {}),\n  ...(Object.keys(fragment.resources).length > 0\n    ? { resources: fragment.resources }\n    : {}),\n  ...(Object.keys(fragment.scopes).length > 0\n    ? { scopes: fragment.scopes }\n    : {}),\n  ...(Object.keys(fragment.symbols).length > 0\n    ? { symbols: fragment.symbols }\n    : {}),\n  ...(Object.keys(fragment.capabilities).length > 0\n    ? { capabilities: fragment.capabilities }\n    : {}),\n  ...(Object.keys(fragment.executables).length > 0\n    ? { executables: fragment.executables }\n    : {}),\n  ...(Object.keys(fragment.responseSets).length > 0\n    ? { responseSets: fragment.responseSets }\n    : {}),\n  ...(Object.keys(fragment.diagnostics).length > 0\n    ? { diagnostics: fragment.diagnostics }\n    : {}),\n});\n\nconst createServiceScope = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\" | \"name\" | \"namespace\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  defaults?: Scope[\"defaults\"];\n}) => {\n  const scopeId = serviceScopeIdForSource(input.source);\n  mutableRecord(input.catalog.scopes)[scopeId] = {\n    id: scopeId,\n    kind: \"service\",\n    name: input.source.name,\n    namespace:\n      input.source.namespace ?? namespaceFromSourceName(input.source.name),\n    docs: docsFrom({\n      summary: input.source.name,\n    }),\n    ...(input.defaults ? { defaults: input.defaults } : {}),\n    synthetic: false,\n    provenance: provenanceFor(input.documentId, \"#/service\"),\n  } satisfies Scope;\n  return scopeId;\n};\n\nexport const buildCatalogFragment = (input: {\n  source: Pick<\n    Source,\n    \"id\" | \"kind\" | \"name\" | \"endpoint\" | \"namespace\" | \"binding\" | \"auth\"\n  >;\n  documents: readonly CatalogSourceDocumentInput[];\n  serviceScopeDefaults?: Scope[\"defaults\"];\n  resourceDialectUri?: string;\n  registerOperations: (context: CatalogFragmentBuildContext) => void;\n}): CatalogFragmentV1 => {\n  const catalog = createEmptyCatalogFragment();\n  const documents =\n    input.documents.length > 0\n      ? input.documents\n      : [\n          {\n            documentKind: \"synthetic\",\n            documentKey: input.source.endpoint,\n            fetchedAt: Date.now(),\n            contentText: \"{}\",\n          },\n        ];\n  const primaryDocument = documents[0]!;\n  const primaryDocumentKey =\n    primaryDocument.documentKey ?? input.source.endpoint ?? input.source.id;\n  const primaryDocumentId = documentIdFor(\n    input.source,\n    `${primaryDocument.documentKind}:${primaryDocument.documentKey}`,\n  );\n  const primaryResourceId = resourceIdForSource(input.source);\n\n  for (const document of documents) {\n    const documentId = documentIdFor(\n      input.source,\n      `${document.documentKind}:${document.documentKey}`,\n    );\n    mutableRecord(catalog.documents)[documentId] = {\n      id: documentId,\n      kind: sourceKindFromSource(input.source),\n      title: input.source.name,\n      fetchedAt: new Date(document.fetchedAt ?? Date.now()).toISOString(),\n      rawRef: document.documentKey,\n      entryUri: document.documentKey.startsWith(\"http\")\n        ? document.documentKey\n        : undefined,\n      native: [\n        nativeBlob({\n          source: input.source,\n          kind: \"source_document\",\n          pointer: `#/${document.documentKind}`,\n          value: document.contentText,\n          summary: document.documentKind,\n        }),\n      ],\n    } satisfies SourceDocument;\n  }\n\n  mutableRecord(catalog.resources)[primaryResourceId] = {\n    id: primaryResourceId,\n    documentId: primaryDocumentId,\n    canonicalUri: primaryDocumentKey,\n    baseUri: primaryDocumentKey,\n    ...(input.resourceDialectUri\n      ? {\n          dialectUri: input.resourceDialectUri,\n        }\n      : {}),\n    anchors: {},\n    dynamicAnchors: {},\n    synthetic: false,\n    provenance: provenanceFor(primaryDocumentId, \"#\"),\n  };\n\n  const serviceScopeId = createServiceScope({\n    catalog,\n    source: input.source,\n    documentId: primaryDocumentId,\n    defaults: input.serviceScopeDefaults,\n  });\n  const importer = createJsonSchemaImporter({\n    catalog,\n    source: input.source,\n    resourceId: primaryResourceId,\n    documentId: primaryDocumentId,\n  });\n  input.registerOperations({\n    catalog,\n    documentId: primaryDocumentId,\n    serviceScopeId,\n    importer,\n  });\n  importer.finalize();\n\n  return finalizeCatalogFragment(catalog);\n};\n"
  },
  {
    "path": "packages/sources/core/src/catalog-json-schema.ts",
    "content": "import {\n  DiagnosticIdSchema,\n  DocumentIdSchema,\n  ResourceIdSchema,\n  ShapeSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  ImportDiagnostic,\n  NativeBlob,\n  ShapeNode,\n  ShapeSymbol,\n} from \"@executor/ir/model\";\n\nimport type { Source } from \"./source-models\";\nimport type {\n  CatalogFragmentBuilder,\n  JsonSchemaImporter,\n} from \"./catalog-types\";\nimport {\n  docsFrom,\n  mutableRecord,\n  provenanceFor,\n  sourceKindFromSource,\n  stableHash,\n  stableStringify,\n} from \"./catalog-shared\";\n\nconst asObject = (value: unknown): Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.trim().length > 0 ? value : null;\n\nconst asBoolean = (value: unknown): boolean | null =>\n  typeof value === \"boolean\" ? value : null;\n\nconst asNumber = (value: unknown): number | null =>\n  typeof value === \"number\" && Number.isFinite(value) ? value : null;\n\nconst asArray = (value: unknown): unknown[] =>\n  Array.isArray(value) ? value : [];\n\nconst asStringArray = (value: unknown): string[] =>\n  asArray(value).flatMap((entry) => {\n    const stringValue = asString(entry);\n    return stringValue === null ? [] : [stringValue];\n  });\n\nconst addDiagnostic = (\n  catalog: CatalogFragmentBuilder,\n  input: Omit<ImportDiagnostic, \"id\">,\n) => {\n  const id = DiagnosticIdSchema.make(`diag_${stableHash(input)}`);\n  mutableRecord(catalog.diagnostics)[id] = {\n    id,\n    ...input,\n  };\n  return id;\n};\n\nconst nativeBlob = (input: {\n  source: Pick<Source, \"kind\">;\n  kind: string;\n  pointer: string;\n  value: unknown;\n  summary?: string;\n}): NativeBlob => ({\n  sourceKind: sourceKindFromSource(input.source),\n  kind: input.kind,\n  pointer: input.pointer,\n  encoding: \"json\",\n  ...(input.summary ? { summary: input.summary } : {}),\n  value: input.value,\n});\n\nexport const createJsonSchemaImporter = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"kind\">;\n  resourceId: ReturnType<typeof ResourceIdSchema.make>;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n}): JsonSchemaImporter => {\n  const cache = new Map<string, ReturnType<typeof ShapeSymbolIdSchema.make>>();\n  const structuralCache = new Map<\n    string,\n    ReturnType<typeof ShapeSymbolIdSchema.make>\n  >();\n  const dedupedShapeIds = new Map<\n    ReturnType<typeof ShapeSymbolIdSchema.make>,\n    ReturnType<typeof ShapeSymbolIdSchema.make>\n  >();\n  const activeShapeIds: ReturnType<typeof ShapeSymbolIdSchema.make>[] = [];\n  const recursiveShapeIds = new Set<\n    ReturnType<typeof ShapeSymbolIdSchema.make>\n  >();\n\n  const resolvePointer = (root: unknown, pointer: string): unknown => {\n    if (pointer === \"#\" || pointer.length === 0) {\n      return root;\n    }\n\n    const segments = pointer\n      .replace(/^#\\//, \"\")\n      .split(\"/\")\n      .map((segment) => segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n    let current: unknown = root;\n    for (const segment of segments) {\n      if (Array.isArray(current)) {\n        const index = Number(segment);\n        current = Number.isInteger(index) ? current[index] : undefined;\n        continue;\n      }\n\n      current = asObject(current)[segment];\n    }\n\n    return current;\n  };\n\n  const importSchema = (\n    schema: unknown,\n    key: string,\n    rootSchema?: unknown,\n  ): ReturnType<typeof ShapeSymbolIdSchema.make> => {\n    const stableKey = `${input.resourceId}:${key}`;\n    const cached = cache.get(stableKey);\n    if (cached) {\n      const cycleIndex = activeShapeIds.indexOf(cached);\n      if (cycleIndex !== -1) {\n        for (const activeShapeId of activeShapeIds.slice(cycleIndex)) {\n          recursiveShapeIds.add(activeShapeId);\n        }\n      }\n      return cached;\n    }\n\n    const shapeId = ShapeSymbolIdSchema.make(\n      `shape_${stableHash({ resourceId: input.resourceId, key })}`,\n    );\n    cache.set(stableKey, shapeId);\n    activeShapeIds.push(shapeId);\n\n    try {\n      const objectSchema = asObject(schema);\n      const title = asString(objectSchema.title) ?? undefined;\n      const docs = docsFrom({\n        description: asString(objectSchema.description),\n      });\n      const deprecated = asBoolean(objectSchema.deprecated) ?? undefined;\n\n      const register = (\n        node: ShapeNode,\n        extras: {\n          native?: NativeBlob[];\n          diagnosticIds?: ReturnType<typeof DiagnosticIdSchema.make>[];\n        } = {},\n      ): ReturnType<typeof ShapeSymbolIdSchema.make> => {\n        const signature = stableStringify(node);\n        const recursive = recursiveShapeIds.has(shapeId);\n        const existingShapeId = recursive\n          ? undefined\n          : structuralCache.get(signature);\n\n        if (existingShapeId) {\n          const existingShape = input.catalog.symbols[existingShapeId];\n          if (existingShape?.kind === \"shape\") {\n            if (existingShape.title === undefined && title) {\n              mutableRecord(input.catalog.symbols)[existingShapeId] = {\n                ...existingShape,\n                title,\n              } satisfies ShapeSymbol;\n            }\n            if (existingShape.docs === undefined && docs) {\n              mutableRecord(input.catalog.symbols)[existingShapeId] = {\n                ...(mutableRecord(input.catalog.symbols)[\n                  existingShapeId\n                ] as ShapeSymbol),\n                docs,\n              } satisfies ShapeSymbol;\n            }\n            if (\n              existingShape.deprecated === undefined &&\n              deprecated !== undefined\n            ) {\n              mutableRecord(input.catalog.symbols)[existingShapeId] = {\n                ...(mutableRecord(input.catalog.symbols)[\n                  existingShapeId\n                ] as ShapeSymbol),\n                deprecated,\n              } satisfies ShapeSymbol;\n            }\n          }\n          dedupedShapeIds.set(shapeId, existingShapeId);\n          cache.set(stableKey, existingShapeId);\n          return existingShapeId;\n        }\n\n        mutableRecord(input.catalog.symbols)[shapeId] = {\n          id: shapeId,\n          kind: \"shape\",\n          resourceId: input.resourceId,\n          ...(title ? { title } : {}),\n          ...(docs ? { docs } : {}),\n          ...(deprecated !== undefined ? { deprecated } : {}),\n          node,\n          synthetic: false,\n          provenance: provenanceFor(input.documentId, key),\n          ...(extras.diagnosticIds && extras.diagnosticIds.length > 0\n            ? { diagnosticIds: extras.diagnosticIds }\n            : {}),\n          ...(extras.native && extras.native.length > 0\n            ? { native: extras.native }\n            : {}),\n        } satisfies ShapeSymbol;\n\n        if (!recursive) {\n          structuralCache.set(signature, shapeId);\n        }\n\n        return shapeId;\n      };\n\n      if (typeof schema === \"boolean\") {\n        return register({\n          type: \"unknown\",\n          reason: schema ? \"schema_true\" : \"schema_false\",\n        });\n      }\n\n      const ref = asString(objectSchema.$ref);\n      if (ref !== null) {\n        const resolved = ref.startsWith(\"#\")\n          ? resolvePointer(rootSchema ?? schema, ref)\n          : undefined;\n\n        if (resolved === undefined) {\n          const diagnosticId = addDiagnostic(input.catalog, {\n            level: \"warning\",\n            code: \"unresolved_ref\",\n            message: `Unresolved JSON schema ref ${ref}`,\n            provenance: provenanceFor(input.documentId, key),\n            relatedSymbolIds: [shapeId],\n          });\n          register(\n            {\n              type: \"unknown\",\n              reason: `unresolved_ref:${ref}`,\n            },\n            {\n              diagnosticIds: [diagnosticId],\n            },\n          );\n          return cache.get(stableKey)!;\n        }\n\n        const target = importSchema(resolved, ref, rootSchema ?? schema);\n        return register({\n          type: \"ref\",\n          target,\n        });\n      }\n\n      const enumValues = asArray(objectSchema.enum);\n      if (enumValues.length === 1) {\n        return register({\n          type: \"const\",\n          value: enumValues[0],\n        });\n      }\n\n      if (enumValues.length > 1) {\n        return register({\n          type: \"enum\",\n          values: enumValues,\n        });\n      }\n\n      if (\"const\" in objectSchema) {\n        return register({\n          type: \"const\",\n          value: objectSchema.const,\n        });\n      }\n\n      const anyOf = asArray(objectSchema.anyOf);\n      if (anyOf.length > 0) {\n        return register({\n          type: \"anyOf\",\n          items: anyOf.map((entry, index) =>\n            importSchema(entry, `${key}/anyOf/${index}`, rootSchema ?? schema),\n          ),\n        });\n      }\n\n      const allOf = asArray(objectSchema.allOf);\n      if (allOf.length > 0) {\n        return register({\n          type: \"allOf\",\n          items: allOf.map((entry, index) =>\n            importSchema(entry, `${key}/allOf/${index}`, rootSchema ?? schema),\n          ),\n        });\n      }\n\n      const oneOf = asArray(objectSchema.oneOf);\n      if (oneOf.length > 0) {\n        return register({\n          type: \"oneOf\",\n          items: oneOf.map((entry, index) =>\n            importSchema(entry, `${key}/oneOf/${index}`, rootSchema ?? schema),\n          ),\n        });\n      }\n\n      if (\n        \"if\" in objectSchema ||\n        \"then\" in objectSchema ||\n        \"else\" in objectSchema\n      ) {\n        return register({\n          type: \"conditional\",\n          ifShapeId: importSchema(\n            objectSchema.if ?? {},\n            `${key}/if`,\n            rootSchema ?? schema,\n          ),\n          thenShapeId: importSchema(\n            objectSchema.then ?? {},\n            `${key}/then`,\n            rootSchema ?? schema,\n          ),\n          ...(objectSchema.else !== undefined\n            ? {\n                elseShapeId: importSchema(\n                  objectSchema.else,\n                  `${key}/else`,\n                  rootSchema ?? schema,\n                ),\n              }\n            : {}),\n        });\n      }\n\n      if (\"not\" in objectSchema) {\n        return register({\n          type: \"not\",\n          itemShapeId: importSchema(\n            objectSchema.not,\n            `${key}/not`,\n            rootSchema ?? schema,\n          ),\n        });\n      }\n\n      const declaredType = objectSchema.type;\n      const typeArray = Array.isArray(declaredType)\n        ? declaredType.flatMap((entry) => {\n            const value = asString(entry);\n            return value === null ? [] : [value];\n          })\n        : [];\n      const nullable =\n        asBoolean(objectSchema.nullable) === true || typeArray.includes(\"null\");\n      const effectiveType = Array.isArray(declaredType)\n        ? (typeArray.find((entry) => entry !== \"null\") ?? null)\n        : asString(declaredType);\n\n      const registerNullable = (\n        itemShapeId: ReturnType<typeof ShapeSymbolIdSchema.make>,\n      ) => {\n        register({\n          type: \"nullable\",\n          itemShapeId,\n        });\n        return shapeId;\n      };\n\n      const constraints: Record<string, unknown> = {};\n      for (const constraintKey of [\n        \"format\",\n        \"minLength\",\n        \"maxLength\",\n        \"pattern\",\n        \"minimum\",\n        \"maximum\",\n        \"exclusiveMinimum\",\n        \"exclusiveMaximum\",\n        \"multipleOf\",\n        \"default\",\n        \"examples\",\n      ]) {\n        if (objectSchema[constraintKey] !== undefined) {\n          constraints[constraintKey] = objectSchema[constraintKey];\n        }\n      }\n\n      if (\n        effectiveType === \"object\" ||\n        \"properties\" in objectSchema ||\n        \"additionalProperties\" in objectSchema ||\n        \"patternProperties\" in objectSchema\n      ) {\n        const fields = Object.fromEntries(\n          Object.entries(asObject(objectSchema.properties)).map(\n            ([fieldName, fieldSchema]) => [\n              fieldName,\n              {\n                shapeId: importSchema(\n                  fieldSchema,\n                  `${key}/properties/${fieldName}`,\n                  rootSchema ?? schema,\n                ),\n                ...(docsFrom({\n                  description: asString(asObject(fieldSchema).description),\n                })\n                  ? {\n                      docs: docsFrom({\n                        description: asString(\n                          asObject(fieldSchema).description,\n                        ),\n                      })!,\n                    }\n                  : {}),\n              },\n            ],\n          ),\n        );\n\n        const patternProperties = Object.fromEntries(\n          Object.entries(asObject(objectSchema.patternProperties)).map(\n            ([pattern, value]) => [\n              pattern,\n              importSchema(\n                value,\n                `${key}/patternProperties/${pattern}`,\n                rootSchema ?? schema,\n              ),\n            ],\n          ),\n        );\n\n        const additionalPropertiesValue = objectSchema.additionalProperties;\n        const additionalProperties =\n          typeof additionalPropertiesValue === \"boolean\"\n            ? additionalPropertiesValue\n            : additionalPropertiesValue !== undefined\n              ? importSchema(\n                  additionalPropertiesValue,\n                  `${key}/additionalProperties`,\n                  rootSchema ?? schema,\n                )\n              : undefined;\n\n        const objectNode: ShapeNode = {\n          type: \"object\",\n          fields,\n          ...(asStringArray(objectSchema.required).length > 0\n            ? { required: asStringArray(objectSchema.required) }\n            : {}),\n          ...(additionalProperties !== undefined\n            ? { additionalProperties }\n            : {}),\n          ...(Object.keys(patternProperties).length > 0\n            ? { patternProperties }\n            : {}),\n        };\n\n        if (nullable) {\n          const innerId = importSchema(\n            {\n              ...objectSchema,\n              nullable: false,\n              type: \"object\",\n            },\n            `${key}:nonnull`,\n            rootSchema ?? schema,\n          );\n          return registerNullable(innerId);\n        }\n\n        return register(objectNode);\n      }\n\n      if (\n        effectiveType === \"array\" ||\n        \"items\" in objectSchema ||\n        \"prefixItems\" in objectSchema\n      ) {\n        if (\n          Array.isArray(objectSchema.prefixItems) &&\n          objectSchema.prefixItems.length > 0\n        ) {\n          const tupleNode: ShapeNode = {\n            type: \"tuple\",\n            itemShapeIds: objectSchema.prefixItems.map((entry, index) =>\n              importSchema(\n                entry,\n                `${key}/prefixItems/${index}`,\n                rootSchema ?? schema,\n              ),\n            ),\n            ...(objectSchema.items !== undefined\n              ? {\n                  additionalItems:\n                    typeof objectSchema.items === \"boolean\"\n                      ? objectSchema.items\n                      : importSchema(\n                          objectSchema.items,\n                          `${key}/items`,\n                          rootSchema ?? schema,\n                        ),\n                }\n              : {}),\n          };\n\n          if (nullable) {\n            const innerId = importSchema(\n              {\n                ...objectSchema,\n                nullable: false,\n                type: \"array\",\n              },\n              `${key}:nonnull`,\n              rootSchema ?? schema,\n            );\n            return registerNullable(innerId);\n          }\n\n          return register(tupleNode);\n        }\n\n        const items = objectSchema.items ?? {};\n        const arrayNode: ShapeNode = {\n          type: \"array\",\n          itemShapeId: importSchema(\n            items,\n            `${key}/items`,\n            rootSchema ?? schema,\n          ),\n          ...(asNumber(objectSchema.minItems) !== null\n            ? { minItems: asNumber(objectSchema.minItems)! }\n            : {}),\n          ...(asNumber(objectSchema.maxItems) !== null\n            ? { maxItems: asNumber(objectSchema.maxItems)! }\n            : {}),\n        };\n\n        if (nullable) {\n          const innerId = importSchema(\n            {\n              ...objectSchema,\n              nullable: false,\n              type: \"array\",\n            },\n            `${key}:nonnull`,\n            rootSchema ?? schema,\n          );\n          return registerNullable(innerId);\n        }\n\n        return register(arrayNode);\n      }\n\n      if (\n        effectiveType === \"string\" ||\n        effectiveType === \"number\" ||\n        effectiveType === \"integer\" ||\n        effectiveType === \"boolean\" ||\n        effectiveType === \"null\"\n      ) {\n        const scalar =\n          effectiveType === \"null\"\n            ? \"null\"\n            : effectiveType === \"integer\"\n              ? \"integer\"\n              : effectiveType === \"number\"\n                ? \"number\"\n                : effectiveType === \"boolean\"\n                  ? \"boolean\"\n                  : asString(objectSchema.format) === \"binary\"\n                    ? \"bytes\"\n                    : \"string\";\n\n        const scalarNode: ShapeNode = {\n          type: \"scalar\",\n          scalar,\n          ...(asString(objectSchema.format)\n            ? { format: asString(objectSchema.format)! }\n            : {}),\n          ...(Object.keys(constraints).length > 0 ? { constraints } : {}),\n        };\n\n        if (nullable && scalar !== \"null\") {\n          const innerId = importSchema(\n            {\n              ...objectSchema,\n              nullable: false,\n              type: effectiveType,\n            },\n            `${key}:nonnull`,\n            rootSchema ?? schema,\n          );\n          return registerNullable(innerId);\n        }\n\n        return register(scalarNode);\n      }\n\n      return register(\n        {\n          type: \"unknown\",\n          reason: `unsupported_schema:${key}`,\n        },\n        {\n          native: [\n            nativeBlob({\n              source: input.source,\n              kind: \"json_schema\",\n              pointer: key,\n              value: schema,\n              summary: \"Unsupported JSON schema preserved natively\",\n            }),\n          ],\n        },\n      );\n    } finally {\n      const poppedShapeId = activeShapeIds.pop();\n      if (poppedShapeId !== shapeId) {\n        throw new Error(`JSON schema importer stack mismatch for ${shapeId}`);\n      }\n    }\n  };\n\n  return {\n    importSchema: (schema, key, rootSchema) =>\n      importSchema(schema, key, rootSchema ?? schema),\n    finalize: () => {\n      const rewriteDedupedShapeIds = (value: unknown): void => {\n        if (typeof value === \"string\") {\n          return;\n        }\n        if (!value || typeof value !== \"object\") {\n          return;\n        }\n        if (Array.isArray(value)) {\n          for (let index = 0; index < value.length; index += 1) {\n            const entry = value[index];\n            if (\n              typeof entry === \"string\" &&\n              dedupedShapeIds.has(\n                entry as ReturnType<typeof ShapeSymbolIdSchema.make>,\n              )\n            ) {\n              value[index] = dedupedShapeIds.get(\n                entry as ReturnType<typeof ShapeSymbolIdSchema.make>,\n              )!;\n            } else {\n              rewriteDedupedShapeIds(entry);\n            }\n          }\n          return;\n        }\n\n        for (const [entryKey, entryValue] of Object.entries(value)) {\n          if (\n            typeof entryValue === \"string\" &&\n            dedupedShapeIds.has(\n              entryValue as ReturnType<typeof ShapeSymbolIdSchema.make>,\n            )\n          ) {\n            (value as Record<string, unknown>)[entryKey] = dedupedShapeIds.get(\n              entryValue as ReturnType<typeof ShapeSymbolIdSchema.make>,\n            )!;\n          } else {\n            rewriteDedupedShapeIds(entryValue);\n          }\n        }\n      };\n\n      rewriteDedupedShapeIds(input.catalog);\n    },\n  };\n};\n"
  },
  {
    "path": "packages/sources/core/src/catalog-shared.ts",
    "content": "import { sha256Hex } from \"@executor/codemode-core\";\nimport {\n  DocumentIdSchema,\n  ExampleSymbolIdSchema,\n  ResponseSetIdSchema,\n  ResponseSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  Capability,\n  DocumentationBlock,\n  EffectKind,\n  ExampleSymbol,\n  ImportMetadata,\n  ProvenanceRef,\n  ResponseSet,\n  SourceKind,\n} from \"@executor/ir/model\";\n\nimport { namespaceFromSourceName } from \"./discovery\";\nimport type { Source } from \"./source-models\";\nimport type { CatalogFragmentBuilder } from \"./catalog-types\";\n\nexport const stableStringify = (value: unknown): string => {\n  if (value === null || typeof value !== \"object\") {\n    return JSON.stringify(value);\n  }\n\n  if (Array.isArray(value)) {\n    return `[${value.map((entry) => stableStringify(entry)).join(\",\")}]`;\n  }\n\n  const entries = Object.entries(value as Record<string, unknown>)\n    .sort(([left], [right]) => left.localeCompare(right))\n    .map(([key, entry]) => `${JSON.stringify(key)}:${stableStringify(entry)}`);\n  return `{${entries.join(\",\")}}`;\n};\n\nexport const stableHash = (value: unknown): string =>\n  sha256Hex(stableStringify(value)).slice(0, 16);\n\nexport const mutableRecord = <K extends string, V>(\n  value: Readonly<Record<K, V>>,\n): Record<K, V> => value as unknown as Record<K, V>;\n\nexport const asJsonRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst mergedJsonSchemaDefs = (\n  ...schemas: Array<unknown | undefined>\n): Record<string, unknown> | undefined => {\n  const defs: Record<string, unknown> = {};\n\n  for (const schema of schemas) {\n    const schemaDefs = asJsonRecord(asJsonRecord(schema).$defs);\n    for (const [key, value] of Object.entries(schemaDefs)) {\n      defs[key] = value;\n    }\n  }\n\n  return Object.keys(defs).length > 0 ? defs : undefined;\n};\n\nexport const schemaWithMergedDefs = (\n  schema: Record<string, unknown>,\n  ...schemas: Array<unknown | undefined>\n): Record<string, unknown> => {\n  const defs = mergedJsonSchemaDefs(schema, ...schemas);\n  return defs ? { ...schema, $defs: defs } : schema;\n};\n\nexport const isObjectLikeJsonSchema = (schema: unknown): boolean => {\n  const record = asJsonRecord(schema);\n  return record.type === \"object\" || record.properties !== undefined;\n};\n\nexport const sourceKindFromSource = (\n  source: Pick<Source, \"kind\">,\n): SourceKind => {\n  switch (source.kind) {\n    case \"openapi\":\n      return \"openapi\";\n    case \"graphql\":\n      return \"graphql-schema\";\n    case \"google_discovery\":\n      return \"google-discovery\";\n    case \"mcp\":\n      return \"mcp\";\n    default:\n      return \"custom\";\n  }\n};\n\nexport const toolPathSegments = (\n  source: Pick<Source, \"name\" | \"namespace\">,\n  toolId: string,\n): string[] => {\n  const namespace = source.namespace ?? namespaceFromSourceName(source.name);\n  const fullPath = namespace ? `${namespace}.${toolId}` : toolId;\n  return fullPath.split(\".\").filter((segment) => segment.length > 0);\n};\n\nexport const provenanceFor = (\n  documentId: ReturnType<typeof DocumentIdSchema.make>,\n  pointer: string,\n): ProvenanceRef[] => [\n  {\n    relation: \"declared\",\n    documentId,\n    pointer,\n  },\n];\n\nexport const interactionForEffect = (\n  effect: EffectKind,\n): Capability[\"interaction\"] => ({\n  approval: {\n    mayRequire: effect !== \"read\",\n    reasons:\n      effect === \"delete\"\n        ? [\"delete\"]\n        : effect === \"write\" || effect === \"action\"\n          ? [\"write\"]\n          : [],\n  },\n  elicitation: {\n    mayRequest: false,\n  },\n  resume: {\n    supported: false,\n  },\n});\n\nexport const createCatalogImportMetadata = (input: {\n  source: Pick<Source, \"kind\" | \"endpoint\" | \"sourceHash\" | \"binding\" | \"auth\">;\n  adapterKey: string;\n}): ImportMetadata => ({\n  sourceKind: sourceKindFromSource(input.source),\n  adapterKey: input.adapterKey,\n  importerVersion: \"ir.v1.snapshot_builder\",\n  importedAt: new Date().toISOString(),\n  sourceConfigHash:\n    input.source.sourceHash ??\n    stableHash({\n      endpoint: input.source.endpoint,\n      binding: input.source.binding,\n      auth: input.source.auth?.kind ?? null,\n    }),\n});\n\nexport const docsFrom = (input: {\n  summary?: string | null;\n  description?: string | null;\n  externalDocsUrl?: string | null;\n}): DocumentationBlock | undefined => {\n  const summary = input.summary ?? undefined;\n  const description = input.description ?? undefined;\n  const externalDocsUrl = input.externalDocsUrl ?? undefined;\n\n  if (!summary && !description && !externalDocsUrl) {\n    return undefined;\n  }\n\n  return {\n    ...(summary ? { summary } : {}),\n    ...(description ? { description } : {}),\n    ...(externalDocsUrl ? { externalDocsUrl } : {}),\n  };\n};\n\nexport const exampleSymbolFromValue = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"kind\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  pointer: string;\n  name?: string;\n  value: unknown;\n  summary?: string;\n  description?: string;\n}): ReturnType<typeof ExampleSymbolIdSchema.make> => {\n  const exampleId = ExampleSymbolIdSchema.make(\n    `example_${stableHash({\n      pointer: input.pointer,\n      value: input.value,\n    })}`,\n  );\n  mutableRecord(input.catalog.symbols)[exampleId] = {\n    id: exampleId,\n    kind: \"example\",\n    exampleKind: \"value\",\n    ...(input.name ? { name: input.name } : {}),\n    ...(docsFrom({\n      summary: input.summary ?? null,\n      description: input.description ?? null,\n    })\n      ? {\n          docs: docsFrom({\n            summary: input.summary ?? null,\n            description: input.description ?? null,\n          })!,\n        }\n      : {}),\n    value: input.value,\n    synthetic: false,\n    provenance: provenanceFor(input.documentId, input.pointer),\n  } satisfies ExampleSymbol;\n  return exampleId;\n};\n\nconst schemaFromField = (schema: unknown, fieldName: string): unknown => {\n  const record = asJsonRecord(schema);\n  const properties = asJsonRecord(record.properties);\n  if (properties[fieldName] !== undefined) {\n    return properties[fieldName];\n  }\n  return undefined;\n};\n\nexport const groupedSchemaForParameter = (\n  schema: unknown,\n  location: string,\n  name: string,\n): unknown => {\n  const direct = schemaFromField(schema, name);\n  if (direct !== undefined) {\n    return direct;\n  }\n\n  const groupKey =\n    location === \"header\"\n      ? \"headers\"\n      : location === \"cookie\"\n        ? \"cookies\"\n        : location;\n  const groupSchema = schemaFromField(schema, groupKey);\n  return groupSchema === undefined\n    ? undefined\n    : schemaFromField(groupSchema, name);\n};\n\nexport const requestBodySchemaFromInput = (schema: unknown): unknown =>\n  schemaFromField(schema, \"body\") ?? schemaFromField(schema, \"input\");\n\nexport const preferredResponseContentTypes = (\n  mediaTypes: readonly string[] | undefined,\n): string[] => {\n  const candidates =\n    mediaTypes && mediaTypes.length > 0\n      ? [...mediaTypes]\n      : [\"application/json\"];\n\n  const preferred = [\n    ...candidates.filter((mediaType) => mediaType === \"application/json\"),\n    ...candidates.filter(\n      (mediaType) =>\n        mediaType !== \"application/json\" &&\n        mediaType.toLowerCase().includes(\"+json\"),\n    ),\n    ...candidates.filter(\n      (mediaType) =>\n        mediaType !== \"application/json\" &&\n        !mediaType.toLowerCase().includes(\"+json\") &&\n        mediaType.toLowerCase().includes(\"json\"),\n    ),\n    ...candidates,\n  ];\n\n  return [...new Set(preferred)];\n};\n\nexport const responseSetFromSingleResponse = (input: {\n  catalog: CatalogFragmentBuilder;\n  responseId: ReturnType<typeof ResponseSymbolIdSchema.make>;\n  provenance: ProvenanceRef[];\n  traits?: ResponseSet[\"variants\"][number][\"traits\"];\n}) => {\n  const responseSetId = ResponseSetIdSchema.make(\n    `response_set_${stableHash({\n      responseId: input.responseId,\n      traits: input.traits,\n    })}`,\n  );\n  mutableRecord(input.catalog.responseSets)[responseSetId] = {\n    id: responseSetId,\n    variants: [\n      {\n        match: {\n          kind: \"range\",\n          value: \"2XX\",\n        },\n        responseId: input.responseId,\n        ...(input.traits && input.traits.length > 0\n          ? { traits: input.traits }\n          : {}),\n      },\n    ],\n    synthetic: false,\n    provenance: input.provenance,\n  } satisfies ResponseSet;\n  return responseSetId;\n};\n\nexport const responseSetFromVariants = (input: {\n  catalog: CatalogFragmentBuilder;\n  variants: ResponseSet[\"variants\"];\n  provenance: ProvenanceRef[];\n}) => {\n  const responseSetId = ResponseSetIdSchema.make(\n    `response_set_${stableHash({\n      variants: input.variants.map((variant) => ({\n        match: variant.match,\n        responseId: variant.responseId,\n        traits: variant.traits,\n      })),\n    })}`,\n  );\n  mutableRecord(input.catalog.responseSets)[responseSetId] = {\n    id: responseSetId,\n    variants: input.variants,\n    synthetic: false,\n    provenance: input.provenance,\n  } satisfies ResponseSet;\n  return responseSetId;\n};\n\nexport const statusMatchFromHttpStatusCode = (\n  statusCode: string,\n): ResponseSet[\"variants\"][number][\"match\"] => {\n  const normalized = statusCode.trim().toUpperCase();\n\n  if (/^\\d{3}$/.test(normalized)) {\n    return {\n      kind: \"exact\",\n      status: Number(normalized),\n    };\n  }\n\n  if (/^[1-5]XX$/.test(normalized)) {\n    return {\n      kind: \"range\",\n      value: normalized as \"1XX\" | \"2XX\" | \"3XX\" | \"4XX\" | \"5XX\",\n    };\n  }\n\n  return {\n    kind: \"default\",\n  };\n};\n"
  },
  {
    "path": "packages/sources/core/src/catalog-sync-result.ts",
    "content": "import { sha256Hex } from \"@executor/codemode-core\";\nimport { createCatalogSnapshotV1FromFragments } from \"@executor/ir/catalog\";\nimport type {\n  CatalogFragmentV1,\n  CatalogSnapshotV1,\n  ImportMetadata,\n} from \"@executor/ir/model\";\n\nexport const contentHash = (value: string): string => sha256Hex(value);\n\nexport type SourceCatalogSyncResult = {\n  fragment: CatalogFragmentV1;\n  importMetadata: ImportMetadata;\n  sourceHash: string | null;\n};\n\nexport const createSourceCatalogSyncResult = (\n  input: SourceCatalogSyncResult,\n): SourceCatalogSyncResult => input;\n\nexport const snapshotFromSourceCatalogSyncResult = (\n  syncResult: SourceCatalogSyncResult,\n): CatalogSnapshotV1 =>\n  createCatalogSnapshotV1FromFragments({\n    import: syncResult.importMetadata,\n    fragments: [syncResult.fragment],\n  });\n"
  },
  {
    "path": "packages/sources/core/src/catalog-types.ts",
    "content": "import {\n  DocumentIdSchema,\n  ScopeIdSchema,\n  ShapeSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type { CatalogFragmentV1, EffectKind } from \"@executor/ir/model\";\n\nexport type CatalogSourceDocumentInput = {\n  documentKind: string;\n  documentKey: string;\n  contentText: string;\n  fetchedAt?: number | null;\n};\n\nexport type BaseCatalogOperationInput = {\n  toolId: string;\n  title?: string | null;\n  description?: string | null;\n  effect: EffectKind;\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n};\n\nexport type CatalogFragmentBuilder = {\n  version: \"ir.v1.fragment\";\n  documents: NonNullable<CatalogFragmentV1[\"documents\"]>;\n  resources: NonNullable<CatalogFragmentV1[\"resources\"]>;\n  scopes: NonNullable<CatalogFragmentV1[\"scopes\"]>;\n  symbols: NonNullable<CatalogFragmentV1[\"symbols\"]>;\n  capabilities: NonNullable<CatalogFragmentV1[\"capabilities\"]>;\n  executables: NonNullable<CatalogFragmentV1[\"executables\"]>;\n  responseSets: NonNullable<CatalogFragmentV1[\"responseSets\"]>;\n  diagnostics: NonNullable<CatalogFragmentV1[\"diagnostics\"]>;\n};\n\nexport type JsonSchemaImporter = {\n  importSchema: (\n    schema: unknown,\n    key: string,\n    rootSchema?: unknown,\n  ) => ReturnType<typeof ShapeSymbolIdSchema.make>;\n  finalize: () => void;\n};\n\nexport type CatalogFragmentBuildContext = {\n  catalog: CatalogFragmentBuilder;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  serviceScopeId: ReturnType<typeof ScopeIdSchema.make>;\n  importer: JsonSchemaImporter;\n};\n\nexport const EXECUTABLE_BINDING_VERSION = 1;\n"
  },
  {
    "path": "packages/sources/core/src/catalog.ts",
    "content": "export {\n  EXECUTABLE_BINDING_VERSION,\n  type BaseCatalogOperationInput,\n  type CatalogFragmentBuildContext,\n  type CatalogFragmentBuilder,\n  type CatalogSourceDocumentInput,\n  type JsonSchemaImporter,\n} from \"./catalog-types\";\nexport {\n  asJsonRecord,\n  createCatalogImportMetadata,\n  docsFrom,\n  exampleSymbolFromValue,\n  groupedSchemaForParameter,\n  interactionForEffect,\n  isObjectLikeJsonSchema,\n  mutableRecord,\n  preferredResponseContentTypes,\n  provenanceFor,\n  requestBodySchemaFromInput,\n  responseSetFromSingleResponse,\n  responseSetFromVariants,\n  schemaWithMergedDefs,\n  stableHash,\n  toolPathSegments,\n  statusMatchFromHttpStatusCode,\n} from \"./catalog-shared\";\nexport { buildCatalogFragment } from \"./catalog-fragment\";\n"
  },
  {
    "path": "packages/sources/core/src/composition.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport { createSourceAdapterRegistry } from \"./registry\";\nimport type { SourceAdapter, SourceAdapterInputSchema } from \"./types\";\n\ntype SchemaTypeOf<TSchema> = TSchema extends { readonly Type: infer T } ? T : never;\ntype AdapterUnion<TAdapters extends readonly SourceAdapter[]> = TAdapters[number];\ntype ConnectPayloadSchema<TAdapters extends readonly SourceAdapter[]> =\n  NonNullable<AdapterUnion<TAdapters>[\"connectPayloadSchema\"]>;\ntype ExecutorAddInputSchema<TAdapters extends readonly SourceAdapter[]> =\n  NonNullable<AdapterUnion<TAdapters>[\"executorAddInputSchema\"]>;\n\nexport type ConnectableSourceAdapter<TAdapter extends SourceAdapter = SourceAdapter> = TAdapter & {\n  connectPayloadSchema: SourceAdapterInputSchema;\n};\n\nexport type ExecutorAddableSourceAdapter<TAdapter extends SourceAdapter = SourceAdapter> = TAdapter & {\n  executorAddInputSchema: SourceAdapterInputSchema;\n};\n\nexport type LocalConfigurableSourceAdapter<TAdapter extends SourceAdapter = SourceAdapter> = TAdapter & {\n  localConfigBindingSchema: SourceAdapterInputSchema;\n};\n\nconst isConnectableSourceAdapter = <TAdapter extends SourceAdapter>(\n  adapter: TAdapter,\n): adapter is ConnectableSourceAdapter<TAdapter> =>\n  adapter.connectPayloadSchema !== null;\n\nconst isExecutorAddableSourceAdapter = <TAdapter extends SourceAdapter>(\n  adapter: TAdapter,\n): adapter is ExecutorAddableSourceAdapter<TAdapter> =>\n  adapter.executorAddInputSchema !== null;\n\nconst isLocalConfigurableSourceAdapter = <TAdapter extends SourceAdapter>(\n  adapter: TAdapter,\n): adapter is LocalConfigurableSourceAdapter<TAdapter> =>\n  adapter.localConfigBindingSchema !== null;\n\nconst asSchemaTuple = (\n  schemas: ReadonlyArray<Schema.Schema<any, any, never>>,\n): [\n  Schema.Schema<any, any, never>,\n  Schema.Schema<any, any, never>,\n  ...Array<Schema.Schema<any, any, never>>,\n] => schemas as [\n  Schema.Schema<any, any, never>,\n  Schema.Schema<any, any, never>,\n  ...Array<Schema.Schema<any, any, never>>,\n];\n\nconst createSchemaFromAdapters = <TSchema extends SourceAdapterInputSchema>(\n  schemas: ReadonlyArray<TSchema>,\n  label: string,\n): TSchema =>\n  (schemas.length === 0\n    ? (() => {\n        throw new Error(`Cannot create ${label} without any schemas`);\n      })()\n    : schemas.length === 1\n    ? schemas[0]!\n    : Schema.Union(...asSchemaTuple(schemas))) as TSchema;\n\nexport const createSourceAdapterComposition = <const TAdapters extends readonly SourceAdapter[]>(\n  adapters: TAdapters,\n) => {\n  const connectableSourceAdapters = adapters.filter(isConnectableSourceAdapter);\n  const executorAddableSourceAdapters = adapters.filter(isExecutorAddableSourceAdapter);\n  const localConfigurableSourceAdapters = adapters.filter(isLocalConfigurableSourceAdapter);\n  const registry = createSourceAdapterRegistry(adapters);\n\n  return {\n    connectableSourceAdapters,\n    connectPayloadSchema: createSchemaFromAdapters(\n      connectableSourceAdapters.map((adapter) => adapter.connectPayloadSchema),\n      \"connect payload schema\",\n    ) as Schema.Schema<SchemaTypeOf<ConnectPayloadSchema<TAdapters>>, any, never>,\n    executorAddableSourceAdapters,\n    executorAddInputSchema: createSchemaFromAdapters(\n      executorAddableSourceAdapters.map((adapter) => adapter.executorAddInputSchema),\n      \"executor add input schema\",\n    ) as Schema.Schema<SchemaTypeOf<ExecutorAddInputSchema<TAdapters>>, any, never>,\n    localConfigurableSourceAdapters,\n    ...registry,\n  };\n};\n\nexport type SourceAdapterComposition = ReturnType<typeof createSourceAdapterComposition>;\n"
  },
  {
    "path": "packages/sources/core/src/discovery-models.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport {\n  StringMapSchema,\n  SourceTransportSchema,\n} from \"./source-models\";\n\nexport const SourceDiscoveryKindSchema = Schema.Literal(\n  \"mcp\",\n  \"openapi\",\n  \"google_discovery\",\n  \"graphql\",\n  \"unknown\",\n);\n\nexport const SourceDiscoveryConfidenceSchema = Schema.Literal(\n  \"low\",\n  \"medium\",\n  \"high\",\n);\n\nexport const SourceDiscoveryAuthKindSchema = Schema.Literal(\n  \"none\",\n  \"bearer\",\n  \"oauth2\",\n  \"apiKey\",\n  \"basic\",\n  \"unknown\",\n);\n\nexport const SourceDiscoveryAuthParameterLocationSchema = Schema.Literal(\n  \"header\",\n  \"query\",\n  \"cookie\",\n);\n\nexport const SourceProbeAuthSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"none\"),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"bearer\"),\n    headerName: Schema.optional(Schema.NullOr(Schema.String)),\n    prefix: Schema.optional(Schema.NullOr(Schema.String)),\n    token: Schema.String,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"basic\"),\n    username: Schema.String,\n    password: Schema.String,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"headers\"),\n    headers: StringMapSchema,\n  }),\n);\n\nexport const SourceAuthInferenceSchema = Schema.Struct({\n  suggestedKind: SourceDiscoveryAuthKindSchema,\n  confidence: SourceDiscoveryConfidenceSchema,\n  supported: Schema.Boolean,\n  reason: Schema.String,\n  headerName: Schema.NullOr(Schema.String),\n  prefix: Schema.NullOr(Schema.String),\n  parameterName: Schema.NullOr(Schema.String),\n  parameterLocation: Schema.NullOr(SourceDiscoveryAuthParameterLocationSchema),\n  oauthAuthorizationUrl: Schema.NullOr(Schema.String),\n  oauthTokenUrl: Schema.NullOr(Schema.String),\n  oauthScopes: Schema.Array(Schema.String),\n});\n\nexport const SourceDiscoveryResultSchema = Schema.Struct({\n  detectedKind: SourceDiscoveryKindSchema,\n  confidence: SourceDiscoveryConfidenceSchema,\n  endpoint: Schema.String,\n  specUrl: Schema.NullOr(Schema.String),\n  name: Schema.NullOr(Schema.String),\n  namespace: Schema.NullOr(Schema.String),\n  transport: Schema.NullOr(SourceTransportSchema),\n  authInference: SourceAuthInferenceSchema,\n  toolCount: Schema.NullOr(Schema.Number),\n  warnings: Schema.Array(Schema.String),\n});\n\nexport type SourceDiscoveryKind = typeof SourceDiscoveryKindSchema.Type;\nexport type SourceDiscoveryConfidence = typeof SourceDiscoveryConfidenceSchema.Type;\nexport type SourceDiscoveryAuthKind = typeof SourceDiscoveryAuthKindSchema.Type;\nexport type SourceDiscoveryAuthParameterLocation =\n  typeof SourceDiscoveryAuthParameterLocationSchema.Type;\nexport type SourceProbeAuth = typeof SourceProbeAuthSchema.Type;\nexport type SourceAuthInference = typeof SourceAuthInferenceSchema.Type;\nexport type SourceDiscoveryResult = typeof SourceDiscoveryResultSchema.Type;\n"
  },
  {
    "path": "packages/sources/core/src/discovery.ts",
    "content": "import * as Effect from \"effect/Effect\";\n\nimport type {\n  SourceAuthInference,\n  SourceDiscoveryResult,\n  SourceProbeAuth,\n} from \"./discovery-models\";\n\nexport const SOURCE_DISCOVERY_TIMEOUT_MS = 5_000;\n\nexport type HttpProbeResponse = {\n  status: number;\n  headers: Readonly<Record<string, string>>;\n  text: string;\n};\n\nexport type SourceDiscoveryProbeInput = {\n  normalizedUrl: string;\n  headers: Readonly<Record<string, string>>;\n};\n\nexport const isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.length > 0 ? value : null;\n\nexport const trimOrNull = (value: string | null | undefined): string | null => {\n  if (value == null) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nexport const defaultNameFromEndpoint = (endpoint: string): string =>\n  new URL(endpoint).hostname;\n\nexport const namespaceFromSourceName = (name: string): string => {\n  const normalized = name\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \".\")\n    .replace(/^\\.+|\\.+$/g, \"\");\n\n  return normalized.length > 0 ? normalized : \"source\";\n};\n\nexport const normalizeSourceDiscoveryUrl = (value: string): string => {\n  const trimmed = value.trim();\n  if (trimmed.length === 0) {\n    throw new Error(\"Source URL is required\");\n  }\n\n  const parsed = new URL(trimmed);\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw new Error(\"Source URL must use http or https\");\n  }\n\n  return parsed.toString();\n};\n\nexport const unsupportedAuthInference = (\n  kind: SourceAuthInference[\"suggestedKind\"],\n  input: Omit<SourceAuthInference, \"suggestedKind\" | \"supported\">,\n): SourceAuthInference => ({\n  ...input,\n  suggestedKind: kind,\n  supported: false,\n});\n\nexport const supportedAuthInference = (\n  kind: Extract<SourceAuthInference[\"suggestedKind\"], \"none\" | \"bearer\" | \"oauth2\">,\n  input: Omit<SourceAuthInference, \"suggestedKind\" | \"supported\">,\n): SourceAuthInference => ({\n  ...input,\n  suggestedKind: kind,\n  supported: true,\n});\n\nexport const unknownAuthInference = (reason: string): SourceAuthInference => ({\n  suggestedKind: \"unknown\",\n  confidence: \"low\",\n  supported: false,\n  reason,\n  headerName: null,\n  prefix: null,\n  parameterName: null,\n  parameterLocation: null,\n  oauthAuthorizationUrl: null,\n  oauthTokenUrl: null,\n  oauthScopes: [],\n});\n\nexport const noneAuthInference = (\n  reason: string,\n  confidence: SourceAuthInference[\"confidence\"] = \"high\",\n): SourceAuthInference =>\n  supportedAuthInference(\"none\", {\n    confidence,\n    reason,\n    headerName: null,\n    prefix: null,\n    parameterName: null,\n    parameterLocation: null,\n    oauthAuthorizationUrl: null,\n    oauthTokenUrl: null,\n    oauthScopes: [],\n  });\n\nexport const parseChallengeAuthInference = (\n  headers: Readonly<Record<string, string>>,\n  fallbackReason: string,\n): SourceAuthInference => {\n  const challenge = headers[\"www-authenticate\"] ?? headers[\"WWW-Authenticate\"];\n  if (!challenge) {\n    return unknownAuthInference(fallbackReason);\n  }\n\n  const normalized = challenge.toLowerCase();\n  if (normalized.includes(\"bearer\")) {\n    return supportedAuthInference(\"bearer\", {\n      confidence: normalized.includes(\"realm=\") ? \"medium\" : \"low\",\n      reason: `Derived from HTTP challenge: ${challenge}`,\n      headerName: \"Authorization\",\n      prefix: \"Bearer \",\n      parameterName: null,\n      parameterLocation: null,\n      oauthAuthorizationUrl: null,\n      oauthTokenUrl: null,\n      oauthScopes: [],\n    });\n  }\n\n  if (normalized.includes(\"basic\")) {\n    return unsupportedAuthInference(\"basic\", {\n      confidence: \"medium\",\n      reason: `Derived from HTTP challenge: ${challenge}`,\n      headerName: \"Authorization\",\n      prefix: \"Basic \",\n      parameterName: null,\n      parameterLocation: null,\n      oauthAuthorizationUrl: null,\n      oauthTokenUrl: null,\n      oauthScopes: [],\n    });\n  }\n\n  return unknownAuthInference(fallbackReason);\n};\n\nexport const probeHeadersFromAuth = (\n  probeAuth: SourceProbeAuth | null | undefined,\n): Record<string, string> => {\n  if (probeAuth == null || probeAuth.kind === \"none\") {\n    return {};\n  }\n\n  if (probeAuth.kind === \"headers\") {\n    return { ...probeAuth.headers };\n  }\n\n  if (probeAuth.kind === \"basic\") {\n    return {\n      Authorization: `Basic ${Buffer.from(`${probeAuth.username}:${probeAuth.password}`).toString(\"base64\")}`,\n    };\n  }\n\n  return {\n    [trimOrNull(probeAuth.headerName) ?? \"Authorization\"]: `${probeAuth.prefix ?? \"Bearer \"}${probeAuth.token}`,\n  };\n};\n\nconst responseHeadersRecord = (response: Response): Record<string, string> => {\n  const headers: Record<string, string> = {};\n  response.headers.forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n};\n\nexport const executeHttpProbe = (input: {\n  method: \"GET\" | \"POST\";\n  url: string;\n  headers?: Readonly<Record<string, string>>;\n  body?: string;\n}): Effect.Effect<HttpProbeResponse, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      let response: Response;\n      try {\n        response = await fetch(input.url, {\n          method: input.method,\n          headers: input.headers,\n          body: input.body,\n          signal: AbortSignal.timeout(SOURCE_DISCOVERY_TIMEOUT_MS),\n        });\n      } catch (cause) {\n        if (\n          cause instanceof Error\n          && (cause.name === \"AbortError\" || cause.name === \"TimeoutError\")\n        ) {\n          throw new Error(`Source discovery timed out after ${SOURCE_DISCOVERY_TIMEOUT_MS}ms`);\n        }\n        throw cause;\n      }\n\n      return {\n        status: response.status,\n        headers: responseHeadersRecord(response),\n        text: await response.text(),\n      } satisfies HttpProbeResponse;\n    },\n    catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nexport const looksLikeGraphqlEndpoint = (normalizedUrl: string): boolean =>\n  /graphql/i.test(new URL(normalizedUrl).pathname);\n\nexport const tryParseJson = (value: string): unknown => {\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    return null;\n  }\n};\n\nexport const fallbackSourceDiscoveryResult = (\n  normalizedUrl: string,\n): SourceDiscoveryResult => {\n  const endpoint = normalizedUrl;\n  const name = defaultNameFromEndpoint(endpoint);\n  return {\n    detectedKind: \"unknown\",\n    confidence: \"low\",\n    endpoint,\n    specUrl: null,\n    name,\n    namespace: namespaceFromSourceName(name),\n    transport: null,\n    authInference: unknownAuthInference(\n      \"Could not infer source kind or auth requirements from the provided URL\",\n    ),\n    toolCount: null,\n    warnings: [\n      \"Could not confirm whether the URL is Google Discovery, OpenAPI, GraphQL, or MCP.\",\n    ],\n  };\n};\n"
  },
  {
    "path": "packages/sources/core/src/effect-errors.ts",
    "content": "import * as Data from \"effect/Data\";\n\nexport class SourceCoreEffectError extends Data.TaggedError(\n  \"SourceCoreEffectError\",\n)<{\n  readonly module: string;\n  readonly message: string;\n}> {}\n\nexport const sourceCoreEffectError = (\n  module: string,\n  message: string,\n) => new SourceCoreEffectError({ module, message });\n"
  },
  {
    "path": "packages/sources/core/src/index.ts",
    "content": "export * from \"./catalog\";\nexport * from \"./catalog-sync-result\";\nexport * from \"./composition\";\nexport * from \"./discovery\";\nexport * from \"./discovery-models\";\nexport * from \"./effect-errors\";\nexport * from \"./registry\";\nexport * from \"./shared\";\nexport * from \"./source-models\";\nexport * from \"./types\";\n"
  },
  {
    "path": "packages/sources/core/src/registry.ts",
    "content": "import type { Source, SourceCatalogKind } from \"./source-models\";\nimport type { SourceAdapter } from \"./types\";\n\nexport const createSourceAdapterRegistry = <const TAdapters extends readonly SourceAdapter[]>(\n  adapters: TAdapters,\n) => {\n  const adaptersByKey = new Map<string, SourceAdapter>(\n    adapters.map((adapter) => [adapter.key, adapter]),\n  );\n\n  const getSourceAdapter = (key: string): SourceAdapter => {\n    const adapter = adaptersByKey.get(key);\n    if (!adapter) {\n      throw new Error(`Unsupported source adapter: ${key}`);\n    }\n\n    return adapter;\n  };\n\n  const getSourceAdapterForSource = (source: Pick<Source, \"kind\">): SourceAdapter =>\n    getSourceAdapter(source.kind);\n\n  const findSourceAdapterByProviderKey = (providerKey: string): SourceAdapter | null =>\n    adapters.find((adapter) => adapter.providerKey === providerKey) ?? null;\n\n  return {\n    adapters,\n    getSourceAdapter,\n    getSourceAdapterForSource,\n    findSourceAdapterByProviderKey,\n    sourceBindingStateFromSource: (source: Source) =>\n      getSourceAdapterForSource(source).bindingStateFromSource(source),\n    sourceAdapterCatalogKind: (key: string): SourceCatalogKind =>\n      getSourceAdapter(key).catalogKind,\n    sourceAdapterRequiresInteractiveConnect: (key: string): boolean =>\n      getSourceAdapter(key).connectStrategy === \"interactive\",\n    sourceAdapterUsesCredentialManagedAuth: (key: string): boolean =>\n      getSourceAdapter(key).credentialStrategy === \"credential_managed\",\n    isInternalSourceAdapter: (key: string): boolean =>\n      getSourceAdapter(key).catalogKind === \"internal\",\n  };\n};\n\nexport type SourceAdapterRegistry = ReturnType<typeof createSourceAdapterRegistry>;\n"
  },
  {
    "path": "packages/sources/core/src/shared.ts",
    "content": "import * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nimport { sourceCoreEffectError } from \"./effect-errors\";\nimport {\n  SecretRefSchema,\n  SourceBindingVersionSchema,\n  SourceImportAuthPolicySchema,\n  SourceOauthClientInputSchema,\n  StringArraySchema,\n  SourceTransportSchema,\n  StringMapSchema,\n  type CredentialSlot,\n  type SecretRef,\n  type SourceBinding,\n  type StringArray,\n  type SourceTransport,\n  type StringMap,\n} from \"./source-models\";\n\nconst TrimmedNonEmptyStringSchema = Schema.Trim.pipe(Schema.nonEmptyString());\n\nexport const OptionalNullableStringSchema = Schema.optional(\n  Schema.NullOr(Schema.String),\n);\n\nexport const ConnectBearerAuthSchema = Schema.Struct({\n  kind: Schema.Literal(\"bearer\"),\n  headerName: OptionalNullableStringSchema,\n  prefix: OptionalNullableStringSchema,\n  token: OptionalNullableStringSchema,\n  tokenRef: Schema.optional(\n    Schema.NullOr(SecretRefSchema as Schema.Schema<SecretRef, SecretRef, never>),\n  ),\n});\n\nexport const ConnectOAuth2AuthSchema = Schema.Struct({\n  kind: Schema.Literal(\"oauth2\"),\n  headerName: OptionalNullableStringSchema,\n  prefix: OptionalNullableStringSchema,\n  accessToken: OptionalNullableStringSchema,\n  accessTokenRef: Schema.optional(\n    Schema.NullOr(SecretRefSchema as Schema.Schema<SecretRef, SecretRef, never>),\n  ),\n  refreshToken: OptionalNullableStringSchema,\n  refreshTokenRef: Schema.optional(\n    Schema.NullOr(SecretRefSchema as Schema.Schema<SecretRef, SecretRef, never>),\n  ),\n});\n\nexport const ConnectHttpAuthSchema = Schema.Union(\n  Schema.Struct({ kind: Schema.Literal(\"none\") }),\n  ConnectBearerAuthSchema,\n  ConnectOAuth2AuthSchema,\n);\n\nexport const ConnectHttpImportAuthSchema = Schema.Struct({\n  importAuthPolicy: Schema.optional(SourceImportAuthPolicySchema),\n  importAuth: Schema.optional(ConnectHttpAuthSchema),\n});\n\nexport const ConnectOauthClientSchema = Schema.optional(\n  Schema.NullOr(SourceOauthClientInputSchema),\n);\n\nexport const SourceConnectCommonFieldsSchema = Schema.Struct({\n  endpoint: TrimmedNonEmptyStringSchema,\n  name: OptionalNullableStringSchema,\n  namespace: OptionalNullableStringSchema,\n});\n\nexport const McpConnectFieldsSchema = Schema.Struct({\n  transport: Schema.optional(Schema.NullOr(SourceTransportSchema)),\n  queryParams: Schema.optional(Schema.NullOr(StringMapSchema)),\n  headers: Schema.optional(Schema.NullOr(StringMapSchema)),\n  command: Schema.optional(Schema.NullOr(Schema.String)),\n  args: Schema.optional(Schema.NullOr(StringArraySchema)),\n  env: Schema.optional(Schema.NullOr(StringMapSchema)),\n  cwd: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nexport const parseJsonValue = <T>(input: {\n  label: string;\n  value: string | null;\n}): Effect.Effect<T | null, Error, never> =>\n  input.value === null\n    ? Effect.succeed<T | null>(null)\n    : Effect.try({\n        try: () => JSON.parse(input.value!) as T,\n        catch: (cause) =>\n          cause instanceof Error\n            ? new Error(`Invalid ${input.label}: ${cause.message}`)\n            : new Error(`Invalid ${input.label}: ${String(cause)}`),\n      });\n\nexport class SourceCredentialRequiredError extends Data.TaggedError(\n  \"SourceCredentialRequiredError\",\n)<{\n  readonly slot: CredentialSlot;\n  readonly message: string;\n}> {\n  constructor(\n    slot: CredentialSlot,\n    message: string,\n  ) {\n    super({ slot, message });\n  }\n}\n\nexport const isSourceCredentialRequiredError = (\n  error: unknown,\n): error is SourceCredentialRequiredError =>\n  error instanceof SourceCredentialRequiredError;\n\nexport const emptySourceBindingState = {\n  transport: null,\n  queryParams: null,\n  headers: null,\n  command: null,\n  args: null,\n  env: null,\n  cwd: null,\n  specUrl: null,\n  defaultHeaders: null,\n} satisfies {\n  transport: SourceTransport | null;\n  queryParams: StringMap | null;\n  headers: StringMap | null;\n  command: string | null;\n  args: StringArray | null;\n  env: StringMap | null;\n  cwd: string | null;\n  specUrl: string | null;\n  defaultHeaders: StringMap | null;\n};\n\nconst BindingConfigEnvelopeSchema = <A, I>(\n  adapterKey: string,\n  payloadSchema: Schema.Schema<A, I, never>,\n) =>\n  Schema.Struct({\n    adapterKey: Schema.Literal(adapterKey),\n    version: SourceBindingVersionSchema,\n    payload: payloadSchema,\n  });\n\nexport const encodeBindingConfig = <A, I>(input: {\n  adapterKey: string;\n  version: number;\n  payloadSchema: Schema.Schema<A, I, never>;\n  payload: A;\n}): string =>\n  Schema.encodeSync(\n    Schema.parseJson(BindingConfigEnvelopeSchema(input.adapterKey, input.payloadSchema)),\n  )({\n    adapterKey: input.adapterKey,\n    version: input.version,\n    payload: input.payload,\n  });\n\nexport const decodeBindingConfig = <A>(input: {\n  sourceId: string;\n  label: string;\n  adapterKey: string;\n  version: number;\n  payloadSchema: Schema.Schema<A, any, never>;\n  value: string | null;\n}): Effect.Effect<SourceBinding & { payload: A }, Error, never> => {\n  if (input.value === null) {\n    return Effect.fail(\n      sourceCoreEffectError(\"core/shared\", `Missing ${input.label} binding config for ${input.sourceId}`),\n    );\n  }\n\n  return Effect.try({\n    try: () =>\n      Schema.decodeUnknownSync(\n        Schema.parseJson(BindingConfigEnvelopeSchema(input.adapterKey, input.payloadSchema)),\n      )(input.value),\n    catch: (cause) => {\n      const message = cause instanceof Error ? cause.message : String(cause);\n      return new Error(\n        `Invalid ${input.label} binding config for ${input.sourceId}: ${message}`,\n      );\n    },\n  }).pipe(\n    Effect.flatMap((decoded) =>\n      decoded.version === input.version\n        ? Effect.succeed({\n            version: decoded.version,\n            payload: decoded.payload,\n          } as SourceBinding & { payload: A })\n        : Effect.fail(\n            sourceCoreEffectError(\"core/shared\", \n              `Unsupported ${input.label} binding config version ${decoded.version} for ${input.sourceId}; expected ${input.version}`,\n            ),\n          ),\n    ),\n  );\n};\n\nexport const decodeSourceBindingPayload = <A>(input: {\n  sourceId: string;\n  label: string;\n  version: number;\n  expectedVersion: number;\n  schema: Schema.Schema<A, any, never>;\n  value: unknown;\n  allowedKeys?: readonly string[] | undefined;\n}): Effect.Effect<A, Error, never> =>\n  input.version !== input.expectedVersion\n    ? Effect.fail(\n        sourceCoreEffectError(\"core/shared\", \n          `Unsupported ${input.label} binding version ${input.version} for ${input.sourceId}; expected ${input.expectedVersion}`,\n        ),\n      )\n    : Effect.try({\n        try: () => {\n          if (\n            input.allowedKeys\n            && input.value !== null\n            && typeof input.value === \"object\"\n            && !Array.isArray(input.value)\n          ) {\n            const extraKeys = Object.keys(input.value as Record<string, unknown>).filter(\n              (key) => !input.allowedKeys!.includes(key),\n            );\n            if (extraKeys.length > 0) {\n              throw new Error(\n                `Unsupported fields: ${extraKeys.join(\", \")}`,\n              );\n            }\n          }\n\n          return Schema.decodeUnknownSync(input.schema)(input.value);\n        },\n        catch: (cause) => {\n          const message = cause instanceof Error ? cause.message : String(cause);\n          return new Error(\n            `Invalid ${input.label} binding payload for ${input.sourceId}: ${message}`,\n          );\n        },\n      });\n\nexport const decodeExecutableBindingPayload = <A>(input: {\n  executableId: string;\n  label: string;\n  version: number;\n  expectedVersion: number;\n  schema: Schema.Schema<A, any, never>;\n  value: unknown;\n}): A => {\n  if (input.version !== input.expectedVersion) {\n    throw new Error(\n      `Unsupported ${input.label} executable binding version ${input.version} for ${input.executableId}; expected ${input.expectedVersion}`,\n    );\n  }\n\n  try {\n    return Schema.decodeUnknownSync(input.schema)(input.value);\n  } catch (cause) {\n    const message = cause instanceof Error ? cause.message : String(cause);\n    throw new Error(\n      `Invalid ${input.label} executable binding for ${input.executableId}: ${message}`,\n    );\n  }\n};\n"
  },
  {
    "path": "packages/sources/core/src/source-models.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nexport const SecretRefSchema = Schema.Struct({\n  providerId: Schema.String,\n  handle: Schema.String,\n});\n\nexport const CredentialSlotSchema = Schema.Literal(\"runtime\", \"import\");\n\nexport const SourceCatalogKindSchema = Schema.Literal(\n  \"imported\",\n  \"internal\",\n);\n\nexport const SourceKindSchema = Schema.String;\n\nexport const SourceStatusSchema = Schema.Literal(\n  \"draft\",\n  \"probing\",\n  \"auth_required\",\n  \"connected\",\n  \"error\",\n);\n\nexport const SourceTransportSchema = Schema.Literal(\n  \"auto\",\n  \"streamable-http\",\n  \"sse\",\n  \"stdio\",\n);\n\nexport const SourceImportAuthPolicySchema = Schema.Literal(\n  \"none\",\n  \"reuse_runtime\",\n  \"separate\",\n);\n\nexport const StringMapSchema = Schema.Record({\n  key: Schema.String,\n  value: Schema.String,\n});\n\nexport const StringArraySchema = Schema.Array(Schema.String);\n\nexport type JsonValue =\n  | string\n  | number\n  | boolean\n  | null\n  | JsonObject\n  | ReadonlyArray<JsonValue>;\n\nexport type JsonObject = {\n  readonly [key: string]: JsonValue;\n};\n\nexport const JsonValueSchema: Schema.Schema<JsonValue> = Schema.suspend(() =>\n  Schema.Union(\n    Schema.String,\n    Schema.Number,\n    Schema.Boolean,\n    Schema.Null,\n    Schema.Array(JsonValueSchema),\n    Schema.Record({\n      key: Schema.String,\n      value: JsonValueSchema,\n    }),\n  )\n).annotations({ identifier: \"JsonValue\" });\n\nexport const JsonObjectSchema = Schema.Record({\n  key: Schema.String,\n  value: JsonValueSchema,\n}).annotations({ identifier: \"JsonObject\" });\n\nexport const SourceAuthSchema = Schema.Union(\n  Schema.Struct({\n    kind: Schema.Literal(\"none\"),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"bearer\"),\n    headerName: Schema.String,\n    prefix: Schema.String,\n    token: SecretRefSchema,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"oauth2\"),\n    headerName: Schema.String,\n    prefix: Schema.String,\n    accessToken: SecretRefSchema,\n    refreshToken: Schema.NullOr(SecretRefSchema),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"oauth2_authorized_user\"),\n    headerName: Schema.String,\n    prefix: Schema.String,\n    tokenEndpoint: Schema.String,\n    clientId: Schema.String,\n    clientAuthentication: Schema.Literal(\"none\", \"client_secret_post\"),\n    clientSecret: Schema.NullOr(SecretRefSchema),\n    refreshToken: SecretRefSchema,\n    grantSet: Schema.NullOr(Schema.Array(Schema.String)),\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"provider_grant_ref\"),\n    grantId: Schema.String,\n    providerKey: Schema.String,\n    requiredScopes: Schema.Array(Schema.String),\n    headerName: Schema.String,\n    prefix: Schema.String,\n  }),\n  Schema.Struct({\n    kind: Schema.Literal(\"mcp_oauth\"),\n    redirectUri: Schema.String,\n    accessToken: SecretRefSchema,\n    refreshToken: Schema.NullOr(SecretRefSchema),\n    tokenType: Schema.String,\n    expiresIn: Schema.NullOr(Schema.Number),\n    scope: Schema.NullOr(Schema.String),\n    resourceMetadataUrl: Schema.NullOr(Schema.String),\n    authorizationServerUrl: Schema.NullOr(Schema.String),\n    resourceMetadataJson: Schema.NullOr(Schema.String),\n    authorizationServerMetadataJson: Schema.NullOr(Schema.String),\n    clientInformationJson: Schema.NullOr(Schema.String),\n  }),\n);\n\nexport const SourceBindingVersionSchema = Schema.Number;\n\nexport const SourceBindingSchema = Schema.Struct({\n  version: SourceBindingVersionSchema,\n  payload: JsonObjectSchema,\n});\n\nexport const SourceSchema = Schema.Struct({\n  id: Schema.String,\n  workspaceId: Schema.String,\n  name: Schema.String,\n  kind: SourceKindSchema,\n  endpoint: Schema.String,\n  status: SourceStatusSchema,\n  enabled: Schema.Boolean,\n  namespace: Schema.NullOr(Schema.String),\n  bindingVersion: SourceBindingVersionSchema,\n  binding: JsonObjectSchema,\n  importAuthPolicy: SourceImportAuthPolicySchema,\n  importAuth: SourceAuthSchema,\n  auth: SourceAuthSchema,\n  sourceHash: Schema.NullOr(Schema.String),\n  lastError: Schema.NullOr(Schema.String),\n  createdAt: Schema.Number,\n  updatedAt: Schema.Number,\n});\n\nexport const StoredSourceRecordSchema = Schema.Struct({\n  id: Schema.String,\n  bindingConfigJson: Schema.NullOr(Schema.String),\n});\n\nexport const WorkspaceSourceOauthClientRedirectModeSchema = Schema.Literal(\n  \"app_callback\",\n  \"loopback\",\n);\n\nexport const WorkspaceOauthClientIdSchema = Schema.String;\n\nexport const SourceOauthClientInputSchema = Schema.Struct({\n  clientId: Schema.Trim.pipe(Schema.nonEmptyString()),\n  clientSecret: Schema.optional(\n    Schema.NullOr(Schema.Trim.pipe(Schema.nonEmptyString())),\n  ),\n  redirectMode: Schema.optional(WorkspaceSourceOauthClientRedirectModeSchema),\n});\n\nexport type SecretRef = typeof SecretRefSchema.Type;\nexport type CredentialSlot = typeof CredentialSlotSchema.Type;\nexport type SourceCatalogKind = typeof SourceCatalogKindSchema.Type;\nexport type SourceKind = typeof SourceKindSchema.Type;\nexport type SourceStatus = typeof SourceStatusSchema.Type;\nexport type SourceTransport = typeof SourceTransportSchema.Type;\nexport type SourceImportAuthPolicy = typeof SourceImportAuthPolicySchema.Type;\nexport type StringMap = typeof StringMapSchema.Type;\nexport type StringArray = typeof StringArraySchema.Type;\nexport type SourceAuth = typeof SourceAuthSchema.Type;\nexport type SourceBinding = typeof SourceBindingSchema.Type;\nexport type Source = typeof SourceSchema.Type;\nexport type StoredSourceRecord = typeof StoredSourceRecordSchema.Type;\nexport type WorkspaceSourceOauthClientRedirectMode =\n  typeof WorkspaceSourceOauthClientRedirectModeSchema.Type;\nexport type SourceOauthClientInput = typeof SourceOauthClientInputSchema.Type;\n"
  },
  {
    "path": "packages/sources/core/src/types.ts",
    "content": "import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport type {\n  OnElicitation,\n  ToolDescriptor as CatalogToolDescriptor,\n} from \"@executor/codemode-core\";\nimport type { Capability, CatalogV1, Executable } from \"@executor/ir/model\";\nimport * as Effect from \"effect/Effect\";\nimport type { Schema } from \"effect\";\n\nimport type { OAuth2ClientAuthenticationMethod } from \"@executor/auth-oauth2\";\nimport type { SourceCatalogSyncResult } from \"./catalog-sync-result\";\nimport type { SourceDiscoveryResult } from \"./discovery-models\";\nimport type {\n  CredentialSlot,\n  SecretRef,\n  Source,\n  SourceBinding,\n  SourceCatalogKind,\n  SourceImportAuthPolicy,\n  SourceOauthClientInput,\n  StringArray,\n  SourceTransport,\n  StoredSourceRecord,\n  StringMap,\n} from \"./source-models\";\n\nexport type RequestPlacement =\n  | {\n      location: \"header\";\n      name: string;\n      value: string;\n    }\n  | {\n      location: \"query\";\n      name: string;\n      value: string;\n    }\n  | {\n      location: \"cookie\";\n      name: string;\n      value: string;\n    }\n  | {\n      location: \"body\";\n      path: string;\n      value: string;\n    };\n\nexport type ResolvedSourceAuthMaterial = {\n  placements: ReadonlyArray<RequestPlacement>;\n  headers: Readonly<Record<string, string>>;\n  queryParams: Readonly<Record<string, string>>;\n  cookies: Readonly<Record<string, string>>;\n  bodyValues: Readonly<Record<string, string>>;\n  expiresAt: number | null;\n  refreshAfter: number | null;\n  authProvider?: OAuthClientProvider | undefined;\n};\n\nexport type SecretMaterialResolveContext = {\n  params?: Readonly<Record<string, string | undefined>>;\n};\n\nexport type ResolveSecretMaterial = (input: {\n  ref: SecretRef;\n  context?: SecretMaterialResolveContext;\n}) => Effect.Effect<string, Error, never>;\n\nexport type SourceAdapterConnectStrategy = \"direct\" | \"interactive\" | \"none\";\n\nexport type SourceAdapterCredentialStrategy =\n  | \"credential_managed\"\n  | \"adapter_defined\"\n  | \"none\";\n\nexport type SourceAdapterInputSchema = Schema.Schema<any, any, never>;\n\nexport type SourceBindingState = {\n  transport: SourceTransport | null;\n  queryParams: StringMap | null;\n  headers: StringMap | null;\n  command: string | null;\n  args: StringArray | null;\n  env: StringMap | null;\n  cwd: string | null;\n  specUrl: string | null;\n  defaultHeaders: StringMap | null;\n};\n\nexport type StoredSourceBindingConfig = Pick<SourceBinding, \"version\" | \"payload\">;\n\nexport type SourceAdapterSyncInput = {\n  source: Source;\n  resolveSecretMaterial: ResolveSecretMaterial;\n  resolveAuthMaterialForSlot: (slot: CredentialSlot) => Effect.Effect<\n    ResolvedSourceAuthMaterial,\n    Error,\n    never\n  >;\n};\n\nexport type SourceAdapterOauth2SetupConfig = {\n  providerKey: string;\n  authorizationEndpoint: string;\n  tokenEndpoint: string;\n  scopes: readonly string[];\n  headerName: string;\n  prefix: string;\n  clientAuthentication: OAuth2ClientAuthenticationMethod;\n  authorizationParams?: Readonly<Record<string, string>>;\n};\n\nexport type SourceAdapterInvokeResult = {\n  data: unknown;\n  error: unknown;\n  headers: Record<string, string>;\n  status: number | null;\n};\n\nexport type SourceAdapterInvokeInput = {\n  source: Source;\n  capability: Capability;\n  executable: Executable;\n  descriptor: CatalogToolDescriptor;\n  catalog: CatalogV1;\n  args: unknown;\n  auth: ResolvedSourceAuthMaterial;\n  onElicitation?: OnElicitation;\n  context?: Record<string, unknown>;\n};\n\nexport type SourceAdapterDiscoveryInput = {\n  normalizedUrl: string;\n  headers: Readonly<Record<string, string>>;\n};\n\nexport type SourceAdapter = {\n  key: string;\n  displayName: string;\n  catalogKind: SourceCatalogKind;\n  connectStrategy: SourceAdapterConnectStrategy;\n  credentialStrategy: SourceAdapterCredentialStrategy;\n  bindingConfigVersion: number;\n  providerKey: string;\n  defaultImportAuthPolicy: SourceImportAuthPolicy;\n  connectPayloadSchema: SourceAdapterInputSchema | null;\n  executorAddInputSchema: SourceAdapterInputSchema | null;\n  executorAddHelpText: readonly string[] | null;\n  executorAddInputSignatureWidth: number | null;\n  localConfigBindingSchema: SourceAdapterInputSchema | null;\n  localConfigBindingFromSource: (source: Source) => unknown;\n  serializeBindingConfig: (source: Source) => string;\n  deserializeBindingConfig: (\n    input: Pick<StoredSourceRecord, \"id\" | \"bindingConfigJson\">,\n  ) => Effect.Effect<StoredSourceBindingConfig, Error, never>;\n  bindingStateFromSource: (source: Source) => Effect.Effect<SourceBindingState, Error, never>;\n  sourceConfigFromSource: (source: Source) => Record<string, unknown>;\n  validateSource: (source: Source) => Effect.Effect<Source, Error, never>;\n  shouldAutoProbe: (source: Source) => boolean;\n  discoveryPriority?: (input: {\n    normalizedUrl: string;\n  }) => number;\n  detectSource?: (\n    input: SourceAdapterDiscoveryInput,\n  ) => Effect.Effect<SourceDiscoveryResult | null, Error, never>;\n  syncCatalog: (\n    input: SourceAdapterSyncInput,\n  ) => Effect.Effect<SourceCatalogSyncResult, Error, never>;\n  invoke: (\n    input: SourceAdapterInvokeInput,\n  ) => Effect.Effect<SourceAdapterInvokeResult, Error, never>;\n  getOauth2SetupConfig?: (input: {\n    source: Source;\n    slot: CredentialSlot;\n  }) => Effect.Effect<SourceAdapterOauth2SetupConfig | null, Error, never>;\n  normalizeOauthClientInput?: (\n    input: SourceOauthClientInput,\n  ) => Effect.Effect<SourceOauthClientInput, Error, never>;\n};\n"
  },
  {
    "path": "packages/sources/core/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\",\n    \"src/**/*.d.ts\"\n  ],\n  \"exclude\": [\n    \"src/**/*.test.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/google-discovery/CHANGELOG.md",
    "content": "# @executor/source-google-discovery\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n"
  },
  {
    "path": "packages/sources/google-discovery/package.json",
    "content": "{\n  \"name\": \"@executor/source-google-discovery\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@effect/platform\": \"catalog:\",\n    \"@executor/ir\": \"workspace:*\",\n    \"@executor/source-core\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/platform-node\": \"^0.104.1\",\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/sources/google-discovery/src/adapter.test.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport { describe, expect, it } from \"@effect/vitest\";\nimport {\n  EXECUTABLE_BINDING_VERSION,\n  type Source,\n} from \"@executor/source-core\";\nimport * as Effect from \"effect/Effect\";\n\nimport { googleDiscoverySourceAdapter } from \"./adapter\";\nimport { googleDiscoveryProviderDataFromDefinition } from \"./tools\";\n\nconst withJsonServer = async <T>(handler: (input: {\n  baseUrl: string;\n  requests: Array<{\n    method: string;\n    url: string;\n    headers: Record<string, string | string[] | undefined>;\n    body: string;\n  }>;\n}) => Promise<T>): Promise<T> => {\n  const requests: Array<{\n    method: string;\n    url: string;\n    headers: Record<string, string | string[] | undefined>;\n    body: string;\n  }> = [];\n  const server = createServer(async (request, response) => {\n    const chunks: Buffer[] = [];\n    for await (const chunk of request) {\n      chunks.push(Buffer.from(chunk));\n    }\n    requests.push({\n      method: request.method ?? \"GET\",\n      url: request.url ?? \"/\",\n      headers: request.headers,\n      body: Buffer.concat(chunks).toString(\"utf8\"),\n    });\n\n    response.statusCode = 200;\n    response.setHeader(\"content-type\", \"application/json\");\n    response.end(\n      JSON.stringify({\n        ok: true,\n        url: request.url ?? \"/\",\n      }),\n    );\n  });\n\n  await new Promise<void>((resolve, reject) => {\n    server.listen(0, \"127.0.0.1\", (error?: Error) => {\n      if (error) {\n        reject(error);\n        return;\n      }\n      resolve();\n    });\n  });\n\n  try {\n    const address = server.address();\n    if (!address || typeof address === \"string\") {\n      throw new Error(\"Failed to resolve local adapter test server address\");\n    }\n    return await handler({\n      baseUrl: `http://127.0.0.1:${address.port}`,\n      requests,\n    });\n  } finally {\n    await new Promise<void>((resolve, reject) => {\n      server.close((error) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve();\n      });\n    });\n  }\n};\n\nconst makeGoogleDiscoverySource = (discoveryUrl: string): Source => ({\n  id: \"src_google_gmail\",\n  workspaceId: \"ws_test\",\n  name: \"Gmail\",\n  kind: \"google_discovery\",\n  endpoint: discoveryUrl,\n  status: \"connected\",\n  enabled: true,\n  namespace: \"google.gmail\",\n  bindingVersion: 1,\n  binding: {\n    service: \"gmail\",\n    version: \"v1\",\n    discoveryUrl,\n    defaultHeaders: null,\n    scopes: [],\n  },\n  importAuthPolicy: \"reuse_runtime\",\n  importAuth: { kind: \"none\" },\n  auth: { kind: \"none\" },\n  sourceHash: null,\n  lastError: null,\n  createdAt: 1,\n  updatedAt: 1,\n});\n\ndescribe(\"google discovery source adapter\", () => {\n  it(\"invokes requests against the discovery document runtime root instead of the stored discovery endpoint\", () =>\n    Effect.tryPromise({\n      try: async () => {\n        await withJsonServer(async ({ baseUrl, requests }) => {\n          const discoveryUrl = `${baseUrl}/$discovery/rest?version=v1`;\n          const source = makeGoogleDiscoverySource(discoveryUrl);\n          const providerData = googleDiscoveryProviderDataFromDefinition({\n            service: \"gmail\",\n            version: \"v1\",\n            rootUrl: `${baseUrl}/`,\n            servicePath: \"gmail/v1/\",\n            definition: {\n              toolId: \"users.messages.list\",\n              rawToolId: \"users.messages.list\",\n              methodId: \"gmail.users.messages.list\",\n              name: \"List Messages\",\n              description: null,\n              group: \"users.messages\",\n              leaf: \"list\",\n              method: \"get\",\n              path: \"users/{userId}/messages\",\n              flatPath: null,\n              parameters: [\n                {\n                  name: \"userId\",\n                  location: \"path\",\n                  required: true,\n                  repeated: false,\n                  description: null,\n                  type: \"string\",\n                },\n                {\n                  name: \"labelIds\",\n                  location: \"query\",\n                  required: false,\n                  repeated: true,\n                  description: null,\n                  type: \"string\",\n                },\n              ],\n              requestSchemaId: null,\n              responseSchemaId: null,\n              scopes: [],\n              supportsMediaUpload: false,\n              supportsMediaDownload: false,\n            },\n          });\n\n          const result = await Effect.runPromise(\n            googleDiscoverySourceAdapter.invoke({\n              source,\n              capability: {} as any,\n              executable: {\n                id: \"exe_google_gmail_list\",\n                bindingVersion: EXECUTABLE_BINDING_VERSION,\n                binding: providerData,\n              } as any,\n              descriptor: {} as any,\n              catalog: {} as any,\n              args: {\n                userId: \"me\",\n                labelIds: [\"INBOX\", \"UNREAD\"],\n              },\n              auth: {\n                placements: [],\n                headers: {\n                  authorization: \"Bearer live-test-token\",\n                },\n                queryParams: {},\n                cookies: {},\n                bodyValues: {},\n                expiresAt: null,\n                refreshAfter: null,\n              },\n            }),\n          );\n\n          expect(result.status).toBe(200);\n          expect(result.error).toBeNull();\n          expect(result.data).toEqual({\n            ok: true,\n            url: \"/gmail/v1/users/me/messages?labelIds=INBOX&labelIds=UNREAD\",\n          });\n          expect(requests).toHaveLength(1);\n          expect(requests[0]?.url).toBe(\n            \"/gmail/v1/users/me/messages?labelIds=INBOX&labelIds=UNREAD\",\n          );\n          expect(requests[0]?.headers.authorization).toBe(\"Bearer live-test-token\");\n        });\n      },\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    }));\n});\n"
  },
  {
    "path": "packages/sources/google-discovery/src/adapter.ts",
    "content": "import {\n  FetchHttpClient,\n  HttpClient,\n  HttpClientRequest,\n} from \"@effect/platform\";\nimport {\n  applyCookiePlacementsToHeaders,\n  applyHttpQueryPlacementsToUrl,\n  applyJsonBodyPlacements,\n} from \"@executor/codemode-core\";\nimport {\n  compileGoogleDiscoveryToolDefinitions,\n  extractGoogleDiscoveryManifest,\n} from \"./document\";\nimport { detectGoogleDiscoverySource } from \"./discovery\";\nimport { buildGoogleDiscoveryToolPresentation } from \"./tools\";\nimport {\n  createGoogleDiscoveryCatalogFragment,\n  type GoogleDiscoveryCatalogOperationInput,\n} from \"./catalog\";\nimport { GoogleDiscoveryLocalConfigBindingSchema } from \"./local-config\";\nimport {\n  GoogleDiscoveryToolProviderDataSchema,\n  type GoogleDiscoveryToolManifest,\n  type GoogleDiscoveryToolProviderData,\n} from \"./types\";\nimport {\n  ConnectHttpAuthSchema,\n  ConnectHttpImportAuthSchema,\n  ConnectOauthClientSchema,\n  createSourceCatalogSyncResult,\n  decodeBindingConfig,\n  decodeExecutableBindingPayload,\n  decodeSourceBindingPayload,\n  emptySourceBindingState,\n  encodeBindingConfig,\n  isSourceCredentialRequiredError,\n  OptionalNullableStringSchema,\n  SourceCredentialRequiredError,\n  StringMapSchema,\n  WorkspaceOauthClientIdSchema,\n  createCatalogImportMetadata,\n  EXECUTABLE_BINDING_VERSION,\n  sourceCoreEffectError,\n  type Source,\n  type SourceAdapter,\n} from \"@executor/source-core\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nconst GoogleDiscoveryConnectPayloadSchema = Schema.extend(\n  ConnectHttpImportAuthSchema,\n  Schema.Struct({\n    kind: Schema.Literal(\"google_discovery\"),\n    service: Schema.Trim.pipe(Schema.nonEmptyString()),\n    version: Schema.Trim.pipe(Schema.nonEmptyString()),\n    discoveryUrl: Schema.optional(\n      Schema.NullOr(Schema.Trim.pipe(Schema.nonEmptyString())),\n    ),\n    scopes: Schema.optional(\n      Schema.Array(Schema.Trim.pipe(Schema.nonEmptyString())),\n    ),\n    workspaceOauthClientId: Schema.optional(\n      Schema.NullOr(WorkspaceOauthClientIdSchema),\n    ),\n    oauthClient: ConnectOauthClientSchema,\n    name: OptionalNullableStringSchema,\n    namespace: OptionalNullableStringSchema,\n    auth: Schema.optional(ConnectHttpAuthSchema),\n  }),\n);\n\nconst GoogleDiscoveryExecutorAddInputSchema =\n  GoogleDiscoveryConnectPayloadSchema;\n\nconst GoogleDiscoveryBindingConfigSchema = Schema.Struct({\n  service: Schema.Trim.pipe(Schema.nonEmptyString()),\n  version: Schema.Trim.pipe(Schema.nonEmptyString()),\n  discoveryUrl: Schema.Trim.pipe(Schema.nonEmptyString()),\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n  scopes: Schema.optional(\n    Schema.Array(Schema.Trim.pipe(Schema.nonEmptyString())),\n  ),\n});\n\nconst GoogleDiscoverySourceBindingPayloadSchema = Schema.Struct({\n  service: Schema.String,\n  version: Schema.String,\n  discoveryUrl: Schema.optional(Schema.String),\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n  scopes: Schema.optional(Schema.Array(Schema.String)),\n});\n\ntype GoogleDiscoveryBindingConfig =\n  typeof GoogleDiscoveryBindingConfigSchema.Type;\n\nconst GOOGLE_DISCOVERY_BINDING_CONFIG_VERSION = 1;\nconst bindingHasAnyField = (\n  value: unknown,\n  fields: readonly string[],\n): boolean =>\n  value !== null &&\n  typeof value === \"object\" &&\n  !Array.isArray(value) &&\n  fields.some((field) => Object.prototype.hasOwnProperty.call(value, field));\n\nconst defaultGoogleDiscoveryUrl = (service: string, version: string): string =>\n  `https://www.googleapis.com/discovery/v1/apis/${encodeURIComponent(service)}/${encodeURIComponent(version)}/rest`;\n\nconst googleDiscoveryBindingConfigFromSource = (\n  source: Pick<Source, \"id\" | \"bindingVersion\" | \"binding\">,\n): Effect.Effect<GoogleDiscoveryBindingConfig, Error, never> =>\n  Effect.gen(function* () {\n    if (\n      bindingHasAnyField(source.binding, [\n        \"transport\",\n        \"queryParams\",\n        \"headers\",\n        \"specUrl\",\n      ])\n    ) {\n      return yield* sourceCoreEffectError(\"google-discovery/adapter\", \n          \"Google Discovery sources cannot define MCP or OpenAPI binding fields\",\n        );\n    }\n\n    const bindingConfig = yield* decodeSourceBindingPayload({\n      sourceId: source.id,\n      label: \"Google Discovery\",\n      version: source.bindingVersion,\n      expectedVersion: GOOGLE_DISCOVERY_BINDING_CONFIG_VERSION,\n      schema: GoogleDiscoverySourceBindingPayloadSchema,\n      value: source.binding,\n      allowedKeys: [\n        \"service\",\n        \"version\",\n        \"discoveryUrl\",\n        \"defaultHeaders\",\n        \"scopes\",\n      ],\n    });\n\n    const service = bindingConfig.service.trim();\n    const version = bindingConfig.version.trim();\n    if (service.length === 0 || version.length === 0) {\n      return yield* sourceCoreEffectError(\"google-discovery/adapter\", \"Google Discovery sources require service and version\");\n    }\n\n    const explicitDiscoveryUrl =\n      typeof bindingConfig.discoveryUrl === \"string\" &&\n      bindingConfig.discoveryUrl.trim().length > 0\n        ? bindingConfig.discoveryUrl.trim()\n        : null;\n\n    return {\n      service,\n      version,\n      discoveryUrl:\n        explicitDiscoveryUrl ?? defaultGoogleDiscoveryUrl(service, version),\n      defaultHeaders: bindingConfig.defaultHeaders ?? null,\n      scopes: (bindingConfig.scopes ?? [])\n        .map((scope) => scope.trim())\n        .filter((scope) => scope.length > 0),\n    } satisfies GoogleDiscoveryBindingConfig;\n  });\n\nconst fetchGoogleDiscoveryDocumentWithHeaders = (input: {\n  url: string;\n  headers?: Readonly<Record<string, string>>;\n  queryParams?: Readonly<Record<string, string>>;\n  cookies?: Readonly<Record<string, string>>;\n}): Effect.Effect<string, Error, never> =>\n  Effect.gen(function* () {\n    const client = yield* HttpClient.HttpClient;\n    const request = HttpClientRequest.get(input.url).pipe(\n      HttpClientRequest.setHeaders({\n        ...input.headers,\n        ...(input.cookies\n          ? {\n              cookie: Object.entries(input.cookies)\n                .map(([name, value]) => `${name}=${encodeURIComponent(value)}`)\n                .join(\"; \"),\n            }\n          : {}),\n      }),\n    );\n    const response = yield* client\n      .execute(request)\n      .pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n        ),\n      );\n\n    if (response.status === 401 || response.status === 403) {\n      return yield* new SourceCredentialRequiredError(\n          \"import\",\n          `Google Discovery fetch requires credentials (status ${response.status})`,\n        );\n    }\n    if (response.status < 200 || response.status >= 300) {\n      return yield* sourceCoreEffectError(\"google-discovery/adapter\", \n          `Google Discovery fetch failed with status ${response.status}`,\n        );\n    }\n\n    return yield* response.text.pipe(\n      Effect.mapError((cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n      ),\n    );\n  }).pipe(Effect.provide(FetchHttpClient.layer));\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst stringValuesFromParameter = (\n  value: unknown,\n  repeated: boolean,\n): string[] => {\n  if (value === undefined || value === null) {\n    return [];\n  }\n\n  if (Array.isArray(value)) {\n    const normalized = value.flatMap((entry) =>\n      entry === undefined || entry === null ? [] : [String(entry)],\n    );\n    return repeated ? normalized : [normalized.join(\",\")];\n  }\n\n  if (\n    typeof value === \"string\" ||\n    typeof value === \"number\" ||\n    typeof value === \"boolean\"\n  ) {\n    return [String(value)];\n  }\n\n  return [JSON.stringify(value)];\n};\n\nconst replacePathParameters = (input: {\n  pathTemplate: string;\n  args: Record<string, unknown>;\n  parameters: ReadonlyArray<\n    GoogleDiscoveryToolProviderData[\"invocation\"][\"parameters\"][number]\n  >;\n}): string =>\n  input.pathTemplate.replaceAll(/\\{([^}]+)\\}/g, (_, name: string) => {\n    const parameter = input.parameters.find(\n      (entry) => entry.location === \"path\" && entry.name === name,\n    );\n    const rawValue = input.args[name];\n    if ((rawValue === undefined || rawValue === null) && parameter?.required) {\n      throw new Error(`Missing required path parameter: ${name}`);\n    }\n\n    const values = stringValuesFromParameter(rawValue, false);\n    if (values.length === 0) {\n      return \"\";\n    }\n\n    return encodeURIComponent(values[0]!);\n  });\n\n// `source.endpoint` stores the discovery document URL, not the runtime API\n// root. Always derive invocation targets from the discovery document metadata.\nconst resolveGoogleDiscoveryBaseUrl = (input: {\n  providerData: GoogleDiscoveryToolProviderData;\n}): string => {\n  return new URL(\n    input.providerData.invocation.servicePath || \"\",\n    input.providerData.invocation.rootUrl,\n  ).toString();\n};\n\nconst responseHeadersRecord = (response: Response): Record<string, string> => {\n  const headers: Record<string, string> = {};\n  response.headers.forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n};\n\nconst decodeResponseBody = async (response: Response): Promise<unknown> => {\n  const contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n  const text = await response.text();\n\n  if (text.trim().length === 0) {\n    return null;\n  }\n\n  if (\n    contentType.includes(\"application/json\") ||\n    contentType.includes(\"+json\")\n  ) {\n    try {\n      return JSON.parse(text) as unknown;\n    } catch {\n      return text;\n    }\n  }\n\n  return text;\n};\n\nconst googleDiscoveryCatalogOperationFromDefinition = (input: {\n  manifest: Parameters<typeof compileGoogleDiscoveryToolDefinitions>[0];\n  definition: ReturnType<typeof compileGoogleDiscoveryToolDefinitions>[number];\n}): GoogleDiscoveryCatalogOperationInput => {\n  const presentation = buildGoogleDiscoveryToolPresentation({\n    manifest: input.manifest,\n    definition: input.definition,\n  });\n\n  return {\n    toolId: input.definition.toolId,\n    title: input.definition.name,\n    description: input.definition.description,\n    effect:\n      input.definition.method === \"get\" || input.definition.method === \"head\"\n        ? \"read\"\n        : input.definition.method === \"delete\"\n          ? \"delete\"\n          : \"write\",\n    inputSchema: presentation.inputSchema,\n    outputSchema: presentation.outputSchema,\n    providerData: presentation.providerData as GoogleDiscoveryToolProviderData,\n  };\n};\n\n/**\n * Google's API server enforces a \"most restrictive matching scope\" policy: when\n * a narrow scope (e.g. gmail.metadata) is granted alongside a broader scope\n * (e.g. gmail.readonly), the server may restrict behaviour to the narrow scope.\n *\n * For Gmail, this means having gmail.metadata in the grant blocks the `q`\n * parameter on messages.list and prevents reading message bodies, even when\n * gmail.readonly or gmail.modify are also granted.\n *\n * To avoid this, we compute the maximal non-redundant scope set from the\n * discovery document's per-method scope declarations. A scope is \"subsumed\" if\n * every method that accepts it also accepts some other scope in the set — meaning\n * the other scope is strictly broader. Subsumed scopes are dropped so that\n * Google's server never picks the narrower one.\n */\nconst computeMaximalScopes = (\n  manifest: GoogleDiscoveryToolManifest,\n): ReadonlyArray<string> => {\n  const topLevelScopes = Object.keys(manifest.oauthScopes ?? {});\n  if (topLevelScopes.length === 0) return [];\n\n  // Build a map of scope -> set of method IDs that accept it\n  const scopeToMethods = new Map<string, Set<string>>();\n  for (const scope of topLevelScopes) {\n    scopeToMethods.set(scope, new Set());\n  }\n  for (const method of manifest.methods) {\n    for (const scope of method.scopes) {\n      scopeToMethods.get(scope)?.add(method.methodId);\n    }\n  }\n\n  // A scope is subsumed if there exists another scope whose method set is a\n  // strict superset of this scope's method set. Remove subsumed scopes.\n  const maximal = topLevelScopes.filter((scope) => {\n    const methods = scopeToMethods.get(scope);\n    if (!methods || methods.size === 0) return true; // keep scopes not used by any method\n    return !topLevelScopes.some((other) => {\n      if (other === scope) return false;\n      const otherMethods = scopeToMethods.get(other);\n      if (!otherMethods || otherMethods.size <= methods.size) return false;\n      // Check if `other` is a strict superset of `scope`\n      for (const m of methods) {\n        if (!otherMethods.has(m)) return false;\n      }\n      return true;\n    });\n  });\n\n  return maximal;\n};\n\nconst googleDiscoveryOauth2SetupConfig = (source: Source) =>\n  Effect.gen(function* () {\n    const bindingConfig = yield* googleDiscoveryBindingConfigFromSource(source);\n    const configuredScopes = bindingConfig.scopes ?? [];\n    const manifest = yield* fetchGoogleDiscoveryDocumentWithHeaders({\n      url: bindingConfig.discoveryUrl,\n      headers: bindingConfig.defaultHeaders ?? undefined,\n    }).pipe(\n      Effect.flatMap((document) =>\n        extractGoogleDiscoveryManifest(source.name, document),\n      ),\n      Effect.catchAll(() => Effect.succeed(null)),\n    );\n    const discoveryScopes = manifest ? computeMaximalScopes(manifest) : [];\n    const scopes =\n      discoveryScopes.length > 0\n        ? [...new Set([...discoveryScopes, ...configuredScopes])]\n        : configuredScopes;\n\n    if (scopes.length === 0) {\n      return null;\n    }\n\n    return {\n      providerKey: \"google_workspace\",\n      authorizationEndpoint: \"https://accounts.google.com/o/oauth2/v2/auth\",\n      tokenEndpoint: \"https://oauth2.googleapis.com/token\",\n      scopes,\n      headerName: \"Authorization\",\n      prefix: \"Bearer \",\n      clientAuthentication: \"client_secret_post\" as const,\n      authorizationParams: {\n        access_type: \"offline\",\n        prompt: \"consent\",\n        include_granted_scopes: \"true\",\n      },\n    };\n  });\n\nexport const googleDiscoverySourceAdapter = {\n  key: \"google_discovery\",\n  displayName: \"Google Discovery\",\n  catalogKind: \"imported\",\n  connectStrategy: \"direct\",\n  credentialStrategy: \"credential_managed\",\n  bindingConfigVersion: GOOGLE_DISCOVERY_BINDING_CONFIG_VERSION,\n  providerKey: \"google_workspace\",\n  defaultImportAuthPolicy: \"reuse_runtime\",\n  connectPayloadSchema: GoogleDiscoveryConnectPayloadSchema,\n  executorAddInputSchema: GoogleDiscoveryExecutorAddInputSchema,\n  executorAddHelpText: [\n    \"service is the Discovery service name, e.g. sheets or drive. version is the API version, e.g. v4 or v3.\",\n  ],\n  executorAddInputSignatureWidth: 420,\n  localConfigBindingSchema: GoogleDiscoveryLocalConfigBindingSchema,\n  localConfigBindingFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(\n        googleDiscoveryBindingConfigFromSource(source),\n        (bindingConfig) => ({\n          service: bindingConfig.service,\n          version: bindingConfig.version,\n          discoveryUrl: bindingConfig.discoveryUrl,\n          defaultHeaders: bindingConfig.defaultHeaders ?? null,\n          scopes: bindingConfig.scopes,\n        }),\n      ),\n    ),\n  serializeBindingConfig: (source) =>\n    encodeBindingConfig({\n      adapterKey: \"google_discovery\",\n      version: GOOGLE_DISCOVERY_BINDING_CONFIG_VERSION,\n      payloadSchema: GoogleDiscoveryBindingConfigSchema,\n      payload: Effect.runSync(googleDiscoveryBindingConfigFromSource(source)),\n    }),\n  deserializeBindingConfig: ({ id, bindingConfigJson }) =>\n    Effect.map(\n      decodeBindingConfig({\n        sourceId: id,\n        label: \"Google Discovery\",\n        adapterKey: \"google_discovery\",\n        version: GOOGLE_DISCOVERY_BINDING_CONFIG_VERSION,\n        payloadSchema: GoogleDiscoveryBindingConfigSchema,\n        value: bindingConfigJson,\n      }),\n      ({ version, payload }) => ({\n        version,\n        payload: {\n          service: payload.service,\n          version: payload.version,\n          discoveryUrl: payload.discoveryUrl,\n          defaultHeaders: payload.defaultHeaders ?? null,\n          scopes: payload.scopes ?? [],\n        },\n      }),\n    ),\n  bindingStateFromSource: (source) =>\n    Effect.map(\n      googleDiscoveryBindingConfigFromSource(source),\n      (bindingConfig) => ({\n        ...emptySourceBindingState,\n        defaultHeaders: bindingConfig.defaultHeaders ?? null,\n      }),\n    ),\n  sourceConfigFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(\n        googleDiscoveryBindingConfigFromSource(source),\n        (bindingConfig) => ({\n          kind: \"google_discovery\",\n          service: bindingConfig.service,\n          version: bindingConfig.version,\n          discoveryUrl: bindingConfig.discoveryUrl,\n          defaultHeaders: bindingConfig.defaultHeaders,\n          scopes: bindingConfig.scopes,\n        }),\n      ),\n    ),\n  validateSource: (source) =>\n    Effect.gen(function* () {\n      const bindingConfig =\n        yield* googleDiscoveryBindingConfigFromSource(source);\n      return {\n        ...source,\n        bindingVersion: GOOGLE_DISCOVERY_BINDING_CONFIG_VERSION,\n        binding: {\n          service: bindingConfig.service,\n          version: bindingConfig.version,\n          discoveryUrl: bindingConfig.discoveryUrl,\n          defaultHeaders: bindingConfig.defaultHeaders ?? null,\n          scopes: [...(bindingConfig.scopes ?? [])],\n        },\n      };\n    }),\n  shouldAutoProbe: (source) =>\n    source.enabled &&\n    (source.status === \"draft\" || source.status === \"probing\"),\n  discoveryPriority: ({ normalizedUrl }) =>\n    normalizedUrl.includes(\"$discovery/rest\") || normalizedUrl.includes(\"/discovery/v1/apis/\")\n      ? 500\n      : 300,\n  detectSource: ({ normalizedUrl, headers }) =>\n    detectGoogleDiscoverySource({\n      normalizedUrl,\n      headers,\n    }),\n  syncCatalog: ({ source, resolveAuthMaterialForSlot }) =>\n    Effect.gen(function* () {\n      const bindingConfig =\n        yield* googleDiscoveryBindingConfigFromSource(source);\n      const auth = yield* resolveAuthMaterialForSlot(\"import\");\n      const discoveryDocument = yield* fetchGoogleDiscoveryDocumentWithHeaders({\n        url: bindingConfig.discoveryUrl,\n        headers: {\n          ...bindingConfig.defaultHeaders,\n          ...auth.headers,\n        },\n        cookies: auth.cookies,\n        queryParams: auth.queryParams,\n      }).pipe(\n        Effect.mapError((cause) =>\n          isSourceCredentialRequiredError(cause)\n            ? cause\n            : new Error(\n                `Failed fetching Google Discovery document for ${source.id}: ${cause.message}`,\n              ),\n        ),\n      );\n      const manifest = yield* extractGoogleDiscoveryManifest(\n        source.name,\n        discoveryDocument,\n      );\n      const definitions = compileGoogleDiscoveryToolDefinitions(manifest);\n      const now = Date.now();\n\n      return createSourceCatalogSyncResult({\n        fragment: createGoogleDiscoveryCatalogFragment({\n          source,\n          documents: [\n            {\n              documentKind: \"google_discovery\",\n              documentKey: bindingConfig.discoveryUrl,\n              contentText: discoveryDocument,\n              fetchedAt: now,\n            },\n          ],\n          operations: definitions.map((definition) =>\n            googleDiscoveryCatalogOperationFromDefinition({\n              manifest,\n              definition,\n            }),\n          ),\n        }),\n        importMetadata: createCatalogImportMetadata({\n          source,\n          adapterKey: \"google_discovery\",\n        }),\n        sourceHash: manifest.sourceHash,\n      });\n    }),\n  getOauth2SetupConfig: ({ source }) =>\n    googleDiscoveryOauth2SetupConfig(source),\n  normalizeOauthClientInput: (input) =>\n    Effect.succeed({\n      ...input,\n      redirectMode: input.redirectMode ?? \"loopback\",\n    }),\n  invoke: (input) =>\n    Effect.tryPromise({\n      try: async () => {\n        const bindingConfig = Effect.runSync(\n          googleDiscoveryBindingConfigFromSource(input.source),\n        );\n        const providerData = decodeExecutableBindingPayload({\n          executableId: input.executable.id,\n          label: \"Google Discovery\",\n          version: input.executable.bindingVersion,\n          expectedVersion: EXECUTABLE_BINDING_VERSION,\n          schema: GoogleDiscoveryToolProviderDataSchema,\n          value: input.executable.binding,\n        }) as GoogleDiscoveryToolProviderData;\n        const args = asRecord(input.args);\n        const resolvedPath = replacePathParameters({\n          pathTemplate: providerData.invocation.path,\n          args,\n          parameters: providerData.invocation.parameters,\n        });\n        const url = new URL(\n          resolvedPath.replace(/^\\//, \"\"),\n          resolveGoogleDiscoveryBaseUrl({\n            providerData,\n          }),\n        );\n        const headers: Record<string, string> = {\n          ...bindingConfig.defaultHeaders,\n        };\n\n        for (const parameter of providerData.invocation.parameters) {\n          if (parameter.location === \"path\") {\n            continue;\n          }\n\n          const rawValue = args[parameter.name];\n          if (\n            (rawValue === undefined || rawValue === null) &&\n            parameter.required\n          ) {\n            throw new Error(\n              `Missing required ${parameter.location} parameter: ${parameter.name}`,\n            );\n          }\n\n          const values = stringValuesFromParameter(\n            rawValue,\n            parameter.repeated,\n          );\n          if (values.length === 0) {\n            continue;\n          }\n\n          if (parameter.location === \"query\") {\n            for (const value of values) {\n              url.searchParams.append(parameter.name, value);\n            }\n            continue;\n          }\n\n          if (parameter.location === \"header\") {\n            headers[parameter.name] = parameter.repeated\n              ? values.join(\",\")\n              : values[0]!;\n          }\n        }\n\n        const requestUrl = applyHttpQueryPlacementsToUrl({\n          url,\n          queryParams: input.auth.queryParams,\n        });\n        const requestHeaders = applyCookiePlacementsToHeaders({\n          headers: {\n            ...headers,\n            ...input.auth.headers,\n          },\n          cookies: input.auth.cookies,\n        });\n\n        let body: string | undefined;\n        const hasBodyValues = Object.keys(input.auth.bodyValues).length > 0;\n        if (\n          providerData.invocation.requestSchemaId !== null &&\n          (args.body !== undefined || hasBodyValues)\n        ) {\n          body = JSON.stringify(\n            applyJsonBodyPlacements({\n              body: args.body !== undefined ? args.body : {},\n              bodyValues: input.auth.bodyValues,\n              label: `${providerData.invocation.method.toUpperCase()} ${providerData.invocation.path}`,\n            }),\n          );\n          if (!(\"content-type\" in requestHeaders)) {\n            requestHeaders[\"content-type\"] = \"application/json\";\n          }\n        }\n\n        const response = await fetch(requestUrl.toString(), {\n          method: providerData.invocation.method.toUpperCase(),\n          headers: requestHeaders,\n          ...(body !== undefined ? { body } : {}),\n        });\n        const responseBody = await decodeResponseBody(response);\n\n        return {\n          data: response.ok ? responseBody : null,\n          error: response.ok ? null : responseBody,\n          headers: responseHeadersRecord(response),\n          status: response.status,\n        };\n      },\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    }),\n} satisfies SourceAdapter;\n"
  },
  {
    "path": "packages/sources/google-discovery/src/catalog.ts",
    "content": "import { createCatalogSnapshotV1FromFragments } from \"@executor/ir/catalog\";\nimport {\n  CapabilityIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ParameterSymbolIdSchema,\n  RequestBodySymbolIdSchema,\n  ResponseSymbolIdSchema,\n  ScopeIdSchema,\n  SecuritySchemeSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  AuthRequirement,\n  Capability,\n  CatalogSnapshotV1,\n  ParameterSymbol,\n  ResponseSymbol,\n  Scope,\n  SecuritySchemeSymbol,\n  Executable,\n} from \"@executor/ir/model\";\nimport {\n  type BaseCatalogOperationInput,\n  type CatalogFragmentBuilder,\n  type CatalogSourceDocumentInput,\n  type JsonSchemaImporter,\n  type Source,\n  EXECUTABLE_BINDING_VERSION,\n  buildCatalogFragment,\n  createCatalogImportMetadata,\n  docsFrom,\n  groupedSchemaForParameter,\n  interactionForEffect,\n  mutableRecord,\n  provenanceFor,\n  requestBodySchemaFromInput,\n  responseSetFromSingleResponse,\n  stableHash,\n  toolPathSegments,\n} from \"@executor/source-core\";\n\nimport type { GoogleDiscoveryToolProviderData } from \"./types\";\n\nexport type GoogleDiscoveryCatalogOperationInput = BaseCatalogOperationInput & {\n  providerData: GoogleDiscoveryToolProviderData;\n};\n\nconst googleDiscoveryServerSpecs = (\n  operation: GoogleDiscoveryCatalogOperationInput | undefined,\n): NonNullable<NonNullable<Scope[\"defaults\"]>[\"servers\"]> | undefined => {\n  const rootUrl = operation?.providerData.invocation.rootUrl;\n  if (!rootUrl) {\n    return undefined;\n  }\n\n  const servicePath = operation?.providerData.invocation.servicePath ?? \"\";\n  return [\n    {\n      url: new URL(servicePath || \"\", rootUrl).toString(),\n    },\n  ];\n};\n\nconst createHttpCapabilityFromGoogleDiscovery = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\" | \"kind\" | \"name\" | \"namespace\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  serviceScopeId: ReturnType<typeof ScopeIdSchema.make>;\n  operation: GoogleDiscoveryCatalogOperationInput;\n  importer: JsonSchemaImporter;\n}) => {\n  const toolPath = toolPathSegments(\n    input.source,\n    input.operation.providerData.toolId,\n  );\n  const capabilityId = CapabilityIdSchema.make(\n    `cap_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n    })}`,\n  );\n  const executableId = ExecutableIdSchema.make(\n    `exec_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n      protocol: \"http\",\n    })}`,\n  );\n  const inputSchema = input.operation.inputSchema ?? {};\n  const outputSchema = input.operation.outputSchema ?? {};\n\n  const authSchemeId =\n    input.operation.providerData.invocation.scopes.length > 0\n      ? SecuritySchemeSymbolIdSchema.make(\n          `security_${stableHash({\n            sourceId: input.source.id,\n            scopes: input.operation.providerData.invocation.scopes,\n          })}`,\n        )\n      : undefined;\n\n  if (authSchemeId && !input.catalog.symbols[authSchemeId]) {\n    const scopeDescriptions = Object.fromEntries(\n      input.operation.providerData.invocation.scopes.map((scope) => [\n        scope,\n        input.operation.providerData.invocation.scopeDescriptions?.[scope] ??\n          scope,\n      ]),\n    );\n    mutableRecord(input.catalog.symbols)[authSchemeId] = {\n      id: authSchemeId,\n      kind: \"securityScheme\",\n      schemeType: \"oauth2\",\n      docs: docsFrom({\n        summary: \"OAuth 2.0\",\n        description: \"Imported from Google Discovery scopes.\",\n      }),\n      oauth: {\n        flows: {},\n        scopes: scopeDescriptions,\n      },\n      synthetic: false,\n      provenance: provenanceFor(input.documentId, \"#/googleDiscovery/security\"),\n    } satisfies SecuritySchemeSymbol;\n  }\n\n  input.operation.providerData.invocation.parameters.forEach((parameter) => {\n      const parameterId = ParameterSymbolIdSchema.make(\n        `param_${stableHash({\n          capabilityId,\n          location: parameter.location,\n          name: parameter.name,\n        })}`,\n      );\n      const parameterSchema =\n        groupedSchemaForParameter(\n          inputSchema,\n          parameter.location,\n          parameter.name,\n        ) ??\n        (parameter.repeated\n          ? {\n              type: \"array\",\n              items: {\n                type: parameter.type === \"integer\" ? \"integer\" : \"string\",\n                ...(parameter.enum ? { enum: parameter.enum } : {}),\n              },\n            }\n          : {\n              type: parameter.type === \"integer\" ? \"integer\" : \"string\",\n              ...(parameter.enum ? { enum: parameter.enum } : {}),\n            });\n\n      mutableRecord(input.catalog.symbols)[parameterId] = {\n        id: parameterId,\n        kind: \"parameter\",\n        name: parameter.name,\n        location: parameter.location,\n        required: parameter.required,\n        ...(docsFrom({\n          description: parameter.description,\n        })\n          ? {\n              docs: docsFrom({\n                description: parameter.description,\n              })!,\n            }\n          : {}),\n        schemaShapeId: input.importer.importSchema(\n          parameterSchema,\n          `#/googleDiscovery/${input.operation.providerData.toolId}/parameter/${parameter.location}/${parameter.name}`,\n          inputSchema,\n        ),\n        synthetic: false,\n        provenance: provenanceFor(\n          input.documentId,\n          `#/googleDiscovery/${input.operation.providerData.toolId}/parameter/${parameter.location}/${parameter.name}`,\n        ),\n      } satisfies ParameterSymbol;\n    });\n\n  const requestBodyId =\n    input.operation.providerData.invocation.requestSchemaId ||\n    requestBodySchemaFromInput(inputSchema) !== undefined\n      ? RequestBodySymbolIdSchema.make(\n          `request_body_${stableHash({ capabilityId })}`,\n        )\n      : undefined;\n\n  if (requestBodyId) {\n    const requestBodySchema =\n      requestBodySchemaFromInput(inputSchema) ?? inputSchema;\n    mutableRecord(input.catalog.symbols)[requestBodyId] = {\n      id: requestBodyId,\n      kind: \"requestBody\",\n      contents: [\n        {\n          mediaType: \"application/json\",\n          shapeId: input.importer.importSchema(\n            requestBodySchema,\n            `#/googleDiscovery/${input.operation.providerData.toolId}/requestBody`,\n            inputSchema,\n          ),\n        },\n      ],\n      synthetic: false,\n      provenance: provenanceFor(\n        input.documentId,\n        `#/googleDiscovery/${input.operation.providerData.toolId}/requestBody`,\n      ),\n    };\n  }\n\n  const responseId = ResponseSymbolIdSchema.make(\n    `response_${stableHash({ capabilityId })}`,\n  );\n  mutableRecord(input.catalog.symbols)[responseId] = {\n    id: responseId,\n    kind: \"response\",\n    ...(docsFrom({\n      description: input.operation.description,\n    })\n      ? {\n          docs: docsFrom({\n            description: input.operation.description,\n          })!,\n        }\n      : {}),\n    ...(input.operation.outputSchema !== undefined\n      ? {\n          contents: [\n            {\n              mediaType: \"application/json\",\n              shapeId: input.importer.importSchema(\n                outputSchema,\n                `#/googleDiscovery/${input.operation.providerData.toolId}/response`,\n                outputSchema,\n              ),\n            },\n          ],\n        }\n      : {}),\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/googleDiscovery/${input.operation.providerData.toolId}/response`,\n    ),\n  } satisfies ResponseSymbol;\n\n  const traits: Array<\"upload\" | \"download\"> = [];\n  if (input.operation.providerData.invocation.supportsMediaUpload) {\n    traits.push(\"upload\");\n  }\n  if (input.operation.providerData.invocation.supportsMediaDownload) {\n    traits.push(\"download\");\n  }\n\n  const responseSetId = responseSetFromSingleResponse({\n    catalog: input.catalog,\n    responseId,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/googleDiscovery/${input.operation.providerData.toolId}/responseSet`,\n    ),\n    traits,\n  });\n\n  const callShapeId =\n    input.operation.inputSchema !== undefined\n      ? input.importer.importSchema(\n          input.operation.inputSchema,\n          `#/googleDiscovery/${input.operation.providerData.toolId}/call`,\n          input.operation.inputSchema,\n        )\n      : input.importer.importSchema(\n          {\n            type: \"object\",\n            additionalProperties: false,\n          },\n          `#/googleDiscovery/${input.operation.providerData.toolId}/call`,\n        );\n\n  mutableRecord(input.catalog.executables)[executableId] = {\n    id: executableId,\n    capabilityId,\n    scopeId: input.serviceScopeId,\n    adapterKey: \"google_discovery\",\n    bindingVersion: EXECUTABLE_BINDING_VERSION,\n    binding: input.operation.providerData,\n    projection: {\n      responseSetId,\n      callShapeId,\n    },\n    display: {\n      protocol: \"http\",\n      method: input.operation.providerData.invocation.method.toUpperCase(),\n      pathTemplate: input.operation.providerData.invocation.path,\n      operationId: input.operation.providerData.methodId,\n      group: input.operation.providerData.group,\n      leaf: input.operation.providerData.leaf,\n      rawToolId: input.operation.providerData.rawToolId,\n      title: input.operation.title ?? null,\n      summary: input.operation.description ?? null,\n    },\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/googleDiscovery/${input.operation.providerData.toolId}/executable`,\n    ),\n  } satisfies Executable;\n\n  const effect = input.operation.effect;\n  const auth: AuthRequirement = authSchemeId\n    ? {\n        kind: \"scheme\",\n        schemeId: authSchemeId,\n        scopes: input.operation.providerData.invocation.scopes,\n      }\n    : { kind: \"none\" };\n\n  mutableRecord(input.catalog.capabilities)[capabilityId] = {\n    id: capabilityId,\n    serviceScopeId: input.serviceScopeId,\n    surface: {\n      toolPath,\n      ...(input.operation.title ? { title: input.operation.title } : {}),\n      ...(input.operation.description\n        ? { summary: input.operation.description }\n        : {}),\n      tags: [\n        \"google\",\n        input.operation.providerData.service,\n        input.operation.providerData.version,\n      ],\n    },\n    semantics: {\n      effect,\n      safe: effect === \"read\",\n      idempotent: effect === \"read\" || effect === \"delete\",\n      destructive: effect === \"delete\",\n    },\n    auth,\n    interaction: interactionForEffect(effect),\n    executableIds: [executableId],\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/googleDiscovery/${input.operation.providerData.toolId}/capability`,\n    ),\n  } satisfies Capability;\n};\n\nexport const createGoogleDiscoveryCatalogFragment = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly GoogleDiscoveryCatalogOperationInput[];\n}) =>\n  buildCatalogFragment({\n    source: input.source,\n    documents: input.documents,\n    serviceScopeDefaults: (() => {\n      const servers = googleDiscoveryServerSpecs(input.operations[0]);\n      return servers ? { servers } : undefined;\n    })(),\n    registerOperations: ({ catalog, documentId, serviceScopeId, importer }) => {\n      for (const operation of input.operations) {\n        createHttpCapabilityFromGoogleDiscovery({\n          catalog,\n          source: input.source,\n          documentId,\n          serviceScopeId,\n          operation,\n          importer,\n        });\n      }\n    },\n  });\n\nexport const createGoogleDiscoveryCatalogSnapshot = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly GoogleDiscoveryCatalogOperationInput[];\n}): CatalogSnapshotV1 =>\n  createCatalogSnapshotV1FromFragments({\n    import: createCatalogImportMetadata({\n      source: input.source,\n      adapterKey: \"google_discovery\",\n    }),\n    fragments: [createGoogleDiscoveryCatalogFragment(input)],\n  });\n"
  },
  {
    "path": "packages/sources/google-discovery/src/discovery.ts",
    "content": "import {\n  executeHttpProbe,\n  namespaceFromSourceName,\n  noneAuthInference,\n  supportedAuthInference,\n  trimOrNull,\n  type SourceAuthInference,\n  type SourceDiscoveryProbeInput,\n  type SourceDiscoveryResult,\n} from \"@executor/source-core\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\n\nimport { extractGoogleDiscoveryManifest } from \"./document\";\n\nconst googleDiscoveryEndpoint = (input: {\n  rootUrl: string;\n  servicePath: string;\n}): string => {\n  try {\n    return new URL(input.servicePath || \"\", input.rootUrl).toString();\n  } catch {\n    return input.rootUrl;\n  }\n};\n\nconst inferGoogleDiscoveryAuth = (input: {\n  scopes: ReadonlyArray<string>;\n}): SourceAuthInference =>\n  input.scopes.length > 0\n    ? supportedAuthInference(\"oauth2\", {\n        confidence: \"high\",\n        reason: \"Google Discovery document declares OAuth scopes\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        parameterName: null,\n        parameterLocation: null,\n        oauthAuthorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n        oauthTokenUrl: \"https://oauth2.googleapis.com/token\",\n        oauthScopes: [...input.scopes],\n      })\n    : noneAuthInference(\n        \"Google Discovery document does not declare OAuth scopes\",\n        \"medium\",\n      );\n\nexport const detectGoogleDiscoverySource = (\n  input: SourceDiscoveryProbeInput,\n): Effect.Effect<SourceDiscoveryResult | null, never, never> =>\n  Effect.gen(function* () {\n    const response = yield* Effect.either(executeHttpProbe({\n      method: \"GET\",\n      url: input.normalizedUrl,\n      headers: input.headers,\n    }));\n\n    if (Either.isLeft(response)) {\n      return null;\n    }\n\n    if (response.right.status < 200 || response.right.status >= 300) {\n      return null;\n    }\n\n    const manifest = yield* Effect.either(\n      extractGoogleDiscoveryManifest(input.normalizedUrl, response.right.text),\n    );\n    if (Either.isLeft(manifest)) {\n      return null;\n    }\n\n    const endpoint = googleDiscoveryEndpoint({\n      rootUrl: manifest.right.rootUrl,\n      servicePath: manifest.right.servicePath,\n    });\n    const name = trimOrNull(manifest.right.title)\n      ?? `${manifest.right.service}.${manifest.right.versionName}.googleapis.com`;\n    const oauthScopes = Object.keys(manifest.right.oauthScopes ?? {});\n\n    return {\n      detectedKind: \"google_discovery\",\n      confidence: \"high\",\n      endpoint,\n      specUrl: input.normalizedUrl,\n      name,\n      namespace: namespaceFromSourceName(manifest.right.service),\n      transport: null,\n      authInference: inferGoogleDiscoveryAuth({\n        scopes: oauthScopes,\n      }),\n      toolCount: manifest.right.methods.length,\n      warnings: [],\n    } satisfies SourceDiscoveryResult;\n  }).pipe(Effect.catchAll(() => Effect.succeed(null)));\n"
  },
  {
    "path": "packages/sources/google-discovery/src/document.ts",
    "content": "import { sha256Hex } from \"@executor/codemode-core\";\nimport * as Effect from \"effect/Effect\";\n\nimport type {\n  GoogleDiscoveryHttpMethod,\n  GoogleDiscoveryManifestMethod,\n  GoogleDiscoveryMethodParameter,\n  GoogleDiscoverySchemaRefTable,\n  GoogleDiscoveryToolManifest,\n} from \"./types\";\n\ntype JsonObject = Record<string, unknown>;\n\ntype DiscoveryParameter = {\n  location?: unknown;\n  type?: unknown;\n  required?: unknown;\n  repeated?: unknown;\n  description?: unknown;\n  enum?: unknown;\n  default?: unknown;\n  $ref?: unknown;\n  items?: unknown;\n};\n\ntype DiscoverySchema = {\n  id?: unknown;\n  type?: unknown;\n  description?: unknown;\n  properties?: unknown;\n  items?: unknown;\n  additionalProperties?: unknown;\n  enum?: unknown;\n  format?: unknown;\n  readOnly?: unknown;\n  default?: unknown;\n  $ref?: unknown;\n};\n\ntype DiscoveryMethod = {\n  id?: unknown;\n  description?: unknown;\n  httpMethod?: unknown;\n  path?: unknown;\n  flatPath?: unknown;\n  parameters?: unknown;\n  request?: unknown;\n  response?: unknown;\n  scopes?: unknown;\n  mediaUpload?: unknown;\n  supportsMediaDownload?: unknown;\n};\n\ntype DiscoveryResource = {\n  methods?: unknown;\n  resources?: unknown;\n};\n\ntype DiscoveryDocument = {\n  name?: unknown;\n  version?: unknown;\n  title?: unknown;\n  description?: unknown;\n  rootUrl?: unknown;\n  servicePath?: unknown;\n  batchPath?: unknown;\n  documentationLink?: unknown;\n  resources?: unknown;\n  methods?: unknown;\n  schemas?: unknown;\n  auth?: unknown;\n};\n\nconst asRecord = (value: unknown): JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? value as JsonObject\n    : {};\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n\nconst asBoolean = (value: unknown): boolean | null =>\n  typeof value === \"boolean\" ? value : null;\n\nconst asStringArray = (value: unknown): ReadonlyArray<string> =>\n  Array.isArray(value)\n    ? value.flatMap((entry) => {\n      const stringValue = asString(entry);\n      return stringValue ? [stringValue] : [];\n    })\n    : [];\n\nconst parseJson = (value: string | undefined): unknown | undefined => {\n  if (!value) {\n    return undefined;\n  }\n\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    return undefined;\n  }\n};\n\nconst contentHash = (value: string): string =>\n  sha256Hex(value);\n\nconst escapeJsonPointerSegment = (value: string): string =>\n  value.replaceAll(\"~\", \"~0\").replaceAll(\"/\", \"~1\");\n\nconst schemaRefKey = (schemaId: string): string =>\n  `#/$defs/google/${escapeJsonPointerSegment(schemaId)}`;\n\nconst normalizeHttpMethod = (value: unknown): GoogleDiscoveryHttpMethod => {\n  const method = asString(value)?.toLowerCase();\n  switch (method) {\n    case \"get\":\n    case \"put\":\n    case \"post\":\n    case \"delete\":\n    case \"patch\":\n    case \"head\":\n    case \"options\":\n      return method;\n    default:\n      throw new Error(`Unsupported Google Discovery HTTP method: ${String(value)}`);\n  }\n};\n\nconst googleSchemaToJsonSchema = (input: {\n  schema: DiscoverySchema | DiscoveryParameter | unknown;\n  topLevelSchemas: Readonly<Record<string, DiscoverySchema>>;\n}): unknown => {\n  const schema = asRecord(input.schema) as DiscoverySchema;\n  const ref = asString(schema.$ref);\n  if (ref) {\n    return { $ref: schemaRefKey(ref) };\n  }\n\n  const description = asString(schema.description);\n  const format = asString(schema.format);\n  const type = asString(schema.type);\n  const enumValues = asStringArray(schema.enum);\n  const defaultValue =\n    typeof schema.default === \"string\"\n      || typeof schema.default === \"number\"\n      || typeof schema.default === \"boolean\"\n      ? schema.default\n      : undefined;\n  const readOnly = asBoolean(schema.readOnly);\n\n  const base: Record<string, unknown> = {\n    ...(description ? { description } : {}),\n    ...(format ? { format } : {}),\n    ...(enumValues.length > 0 ? { enum: [...enumValues] } : {}),\n    ...(defaultValue !== undefined ? { default: defaultValue } : {}),\n    ...(readOnly === true ? { readOnly: true } : {}),\n  };\n\n  if (type === \"any\") {\n    return base;\n  }\n\n  if (type === \"array\") {\n    const items = googleSchemaToJsonSchema({\n      schema: schema.items,\n      topLevelSchemas: input.topLevelSchemas,\n    });\n    return {\n      ...base,\n      type: \"array\",\n      items: items ?? {},\n    };\n  }\n\n  const properties = asRecord(schema.properties);\n  const additionalProperties = schema.additionalProperties;\n  if (\n    type === \"object\"\n    || Object.keys(properties).length > 0\n    || additionalProperties !== undefined\n  ) {\n    const convertedProperties = Object.fromEntries(\n      Object.entries(properties).map(([key, propertySchema]) => [\n        key,\n        googleSchemaToJsonSchema({\n          schema: propertySchema,\n          topLevelSchemas: input.topLevelSchemas,\n        }),\n      ]),\n    );\n\n    const convertedAdditionalProperties =\n      additionalProperties === undefined\n        ? undefined\n        : additionalProperties === true\n          ? true\n          : googleSchemaToJsonSchema({\n            schema: additionalProperties,\n            topLevelSchemas: input.topLevelSchemas,\n          });\n\n    return {\n      ...base,\n      type: \"object\",\n      ...(Object.keys(convertedProperties).length > 0\n        ? { properties: convertedProperties }\n        : {}),\n      ...(convertedAdditionalProperties !== undefined\n        ? { additionalProperties: convertedAdditionalProperties }\n        : {}),\n    };\n  }\n\n  if (type === \"boolean\" || type === \"number\" || type === \"integer\" || type === \"string\") {\n    return {\n      ...base,\n      type,\n    };\n  }\n\n  return Object.keys(base).length > 0 ? base : {};\n};\n\nconst parameterToJsonSchema = (input: {\n  parameter: DiscoveryParameter;\n  topLevelSchemas: Readonly<Record<string, DiscoverySchema>>;\n}): unknown => {\n  const schema = googleSchemaToJsonSchema({\n    schema: input.parameter,\n    topLevelSchemas: input.topLevelSchemas,\n  });\n  const repeated = input.parameter.repeated === true;\n  if (!repeated) {\n    return schema;\n  }\n\n  return {\n    type: \"array\",\n    items: schema,\n  };\n};\n\nconst methodRequestSchemaJson = (input: {\n  method: DiscoveryMethod;\n  topLevelSchemas: Readonly<Record<string, DiscoverySchema>>;\n}): string | undefined => {\n  const methodRecord = asRecord(input.method);\n  const parameters = asRecord(methodRecord.parameters);\n  const properties: Record<string, unknown> = {};\n  const required: string[] = [];\n\n  for (const [name, rawParameter] of Object.entries(parameters)) {\n    const parameter = asRecord(rawParameter) as DiscoveryParameter;\n    properties[name] = parameterToJsonSchema({\n      parameter,\n      topLevelSchemas: input.topLevelSchemas,\n    });\n    if (parameter.required === true) {\n      required.push(name);\n    }\n  }\n\n  const requestRef = asString(asRecord(methodRecord.request).$ref);\n  if (requestRef) {\n    const requestSchema = input.topLevelSchemas[requestRef];\n    if (requestSchema) {\n      properties.body = googleSchemaToJsonSchema({\n        schema: requestSchema,\n        topLevelSchemas: input.topLevelSchemas,\n      });\n    } else {\n      properties.body = { $ref: schemaRefKey(requestRef) };\n    }\n  }\n\n  if (Object.keys(properties).length === 0) {\n    return undefined;\n  }\n\n  return JSON.stringify({\n    type: \"object\",\n    properties,\n    ...(required.length > 0 ? { required } : {}),\n    additionalProperties: false,\n  });\n};\n\nconst methodResponseSchemaJson = (input: {\n  method: DiscoveryMethod;\n  topLevelSchemas: Readonly<Record<string, DiscoverySchema>>;\n}): string | undefined => {\n  const responseRef = asString(asRecord(asRecord(input.method).response).$ref);\n  if (!responseRef) {\n    return undefined;\n  }\n\n  const responseSchema = input.topLevelSchemas[responseRef];\n  const schemaJson = responseSchema\n    ? googleSchemaToJsonSchema({\n      schema: responseSchema,\n      topLevelSchemas: input.topLevelSchemas,\n    })\n    : { $ref: schemaRefKey(responseRef) };\n\n  return JSON.stringify(schemaJson);\n};\n\nconst parameterRecordFromMethod = (\n  method: DiscoveryMethod,\n): ReadonlyArray<GoogleDiscoveryMethodParameter> =>\n  Object.entries(asRecord(asRecord(method).parameters))\n    .flatMap(([name, rawParameter]) => {\n      const parameter = asRecord(rawParameter) as DiscoveryParameter;\n      const location = asString(parameter.location);\n      if (location !== \"path\" && location !== \"query\" && location !== \"header\") {\n        return [];\n      }\n\n      return [{\n        name,\n        location,\n        required: parameter.required === true,\n        repeated: parameter.repeated === true,\n        description: asString(parameter.description),\n        type: asString(parameter.type) ?? asString(parameter.$ref),\n        ...(asStringArray(parameter.enum).length > 0\n          ? { enum: [...asStringArray(parameter.enum)] }\n          : {}),\n        ...(asString(parameter.default) ? { default: asString(parameter.default)! } : {}),\n      } satisfies GoogleDiscoveryMethodParameter];\n    });\n\nconst scopesRecordFromDocument = (\n  document: DiscoveryDocument,\n): Record<string, string> | undefined => {\n  const scopes = asRecord(\n    asRecord(\n      asRecord(document.auth).oauth2,\n    ).scopes,\n  );\n\n  const normalized = Object.fromEntries(\n    Object.entries(scopes).flatMap(([scope, rawValue]) => {\n      const description = asString(asRecord(rawValue).description) ?? \"\";\n      return [[scope, description]];\n    }),\n  );\n\n  return Object.keys(normalized).length > 0 ? normalized : undefined;\n};\n\nconst manifestMethodFromDiscoveryMethod = (input: {\n  service: string;\n  version: string;\n  rootUrl: string;\n  servicePath: string;\n  topLevelSchemas: Readonly<Record<string, DiscoverySchema>>;\n  method: DiscoveryMethod;\n}): GoogleDiscoveryManifestMethod | null => {\n  const methodId = asString(input.method.id);\n  const path = asString(input.method.path);\n  if (!methodId || !path) {\n    return null;\n  }\n\n  const method = normalizeHttpMethod(input.method.httpMethod);\n  const rawToolId = methodId;\n  const toolId = rawToolId.startsWith(`${input.service}.`)\n    ? rawToolId.slice(input.service.length + 1)\n    : rawToolId;\n  const segments = toolId.split(\".\").filter((segment) => segment.length > 0);\n  const leaf = segments.at(-1) ?? toolId;\n  const group = segments.length > 1 ? segments.slice(0, -1).join(\".\") : null;\n  const responseRef = asString(asRecord(asRecord(input.method).response).$ref);\n  const requestRef = asString(asRecord(asRecord(input.method).request).$ref);\n  const mediaUpload = asRecord(input.method.mediaUpload);\n\n  return {\n    toolId,\n    rawToolId,\n    methodId,\n    name: toolId,\n    description: asString(input.method.description),\n    group,\n    leaf,\n    method,\n    path,\n    flatPath: asString(input.method.flatPath),\n    parameters: parameterRecordFromMethod(input.method),\n    requestSchemaId: requestRef,\n    responseSchemaId: responseRef,\n    scopes: [...asStringArray(input.method.scopes)],\n    supportsMediaUpload: Object.keys(mediaUpload).length > 0,\n    supportsMediaDownload: asBoolean(input.method.supportsMediaDownload) === true,\n    ...(methodRequestSchemaJson({\n      method: input.method,\n      topLevelSchemas: input.topLevelSchemas,\n    })\n      ? {\n        inputSchema: parseJson(\n          methodRequestSchemaJson({\n            method: input.method,\n            topLevelSchemas: input.topLevelSchemas,\n          }),\n        ),\n      }\n      : {}),\n    ...(methodResponseSchemaJson({\n      method: input.method,\n      topLevelSchemas: input.topLevelSchemas,\n    })\n      ? {\n        outputSchema: parseJson(\n          methodResponseSchemaJson({\n            method: input.method,\n            topLevelSchemas: input.topLevelSchemas,\n          }),\n        ),\n      }\n      : {}),\n  };\n};\n\nconst collectDiscoveryMethods = (input: {\n  service: string;\n  version: string;\n  rootUrl: string;\n  servicePath: string;\n  topLevelSchemas: Readonly<Record<string, DiscoverySchema>>;\n  resource: DiscoveryResource | JsonObject | unknown;\n}): ReadonlyArray<GoogleDiscoveryManifestMethod> => {\n  const resource = asRecord(input.resource) as DiscoveryResource;\n  const methods = Object.values(asRecord(resource.methods)).flatMap((method) => {\n    try {\n      const manifestMethod = manifestMethodFromDiscoveryMethod({\n        service: input.service,\n        version: input.version,\n        rootUrl: input.rootUrl,\n        servicePath: input.servicePath,\n        topLevelSchemas: input.topLevelSchemas,\n        method: asRecord(method) as DiscoveryMethod,\n      });\n      return manifestMethod ? [manifestMethod] : [];\n    } catch {\n      return [];\n    }\n  });\n  const nested = Object.values(asRecord(resource.resources)).flatMap((nestedResource) =>\n    collectDiscoveryMethods({\n      ...input,\n      resource: nestedResource,\n    }));\n\n  return [...methods, ...nested];\n};\n\nexport const extractGoogleDiscoveryManifest = (\n  sourceName: string,\n  discoveryInput: string | JsonObject,\n): Effect.Effect<GoogleDiscoveryToolManifest, Error, never> =>\n  Effect.try({\n    try: () => {\n      const document = typeof discoveryInput === \"string\"\n        ? JSON.parse(discoveryInput) as DiscoveryDocument\n        : discoveryInput as DiscoveryDocument;\n\n      const service = asString(document.name);\n      const versionName = asString(document.version);\n      const rootUrl = asString(document.rootUrl);\n      const servicePath = typeof document.servicePath === \"string\" ? document.servicePath : \"\";\n\n      if (!service || !versionName || !rootUrl) {\n        throw new Error(`Invalid Google Discovery document for ${sourceName}`);\n      }\n\n      const schemas = Object.fromEntries(\n        Object.entries(asRecord(document.schemas)).map(([schemaId, rawSchema]) => [\n          schemaId,\n          asRecord(rawSchema) as DiscoverySchema,\n        ]),\n      );\n      const schemaRefTable = Object.fromEntries(\n        Object.entries(schemas).map(([schemaId, schema]) => [\n          schemaRefKey(schemaId),\n          JSON.stringify(\n            googleSchemaToJsonSchema({\n              schema,\n              topLevelSchemas: schemas,\n            }),\n          ),\n        ]),\n      ) satisfies GoogleDiscoverySchemaRefTable;\n      const methods = [\n        ...Object.values(asRecord(document.methods)).flatMap((method) => {\n          const manifestMethod = manifestMethodFromDiscoveryMethod({\n            service,\n            version: versionName,\n            rootUrl,\n            servicePath,\n            topLevelSchemas: schemas,\n            method: asRecord(method) as DiscoveryMethod,\n          });\n          return manifestMethod ? [manifestMethod] : [];\n        }),\n        ...Object.values(asRecord(document.resources)).flatMap((resource) =>\n          collectDiscoveryMethods({\n            service,\n            version: versionName,\n            rootUrl,\n            servicePath,\n            topLevelSchemas: schemas,\n            resource,\n          })),\n      ].sort((left, right) => left.toolId.localeCompare(right.toolId));\n\n      const sourceHash = contentHash(\n        typeof discoveryInput === \"string\"\n          ? discoveryInput\n          : JSON.stringify(discoveryInput),\n      );\n\n      return {\n        version: 1,\n        sourceHash,\n        service,\n        versionName,\n        title: asString(document.title),\n        description: asString(document.description),\n        rootUrl,\n        servicePath,\n        batchPath: asString(document.batchPath),\n        documentationLink: asString(document.documentationLink),\n        ...(Object.keys(schemaRefTable).length > 0 ? { schemaRefTable } : {}),\n        ...(scopesRecordFromDocument(document)\n          ? { oauthScopes: scopesRecordFromDocument(document)! }\n          : {}),\n        methods,\n      };\n    },\n    catch: (cause) =>\n      cause instanceof Error\n        ? cause\n        : new Error(`Failed to extract Google Discovery manifest: ${String(cause)}`),\n  });\n\nexport const compileGoogleDiscoveryToolDefinitions = (\n  manifest: GoogleDiscoveryToolManifest,\n): Array<GoogleDiscoveryManifestMethod> => [...manifest.methods];\n"
  },
  {
    "path": "packages/sources/google-discovery/src/index.ts",
    "content": "export {\n  extractGoogleDiscoveryManifest,\n  compileGoogleDiscoveryToolDefinitions,\n} from \"./document\";\nexport { detectGoogleDiscoverySource } from \"./discovery\";\nexport { GoogleDiscoveryLocalConfigBindingSchema } from \"./local-config\";\nexport * from \"./catalog\";\nexport {\n  buildGoogleDiscoveryToolPresentation,\n  createGoogleDiscoveryToolFromDefinition,\n  decodeGoogleDiscoverySchemaRefTableJson,\n  googleDiscoveryProviderDataFromDefinition,\n  type CreateGoogleDiscoveryToolFromDefinitionInput,\n} from \"./tools\";\nexport {\n  GoogleDiscoveryHttpMethodSchema,\n  GoogleDiscoveryParameterLocationSchema,\n  GoogleDiscoveryMethodParameterSchema,\n  GoogleDiscoveryInvocationPayloadSchema,\n  GoogleDiscoveryToolProviderDataSchema,\n  GoogleDiscoveryManifestMethodSchema,\n  GoogleDiscoverySchemaRefTableSchema,\n  GoogleDiscoveryToolManifestSchema,\n  type GoogleDiscoveryHttpMethod,\n  type GoogleDiscoveryParameterLocation,\n  type GoogleDiscoveryMethodParameter,\n  type GoogleDiscoveryInvocationPayload,\n  type GoogleDiscoveryToolProviderData,\n  type GoogleDiscoveryManifestMethod,\n  type GoogleDiscoveryToolDefinition,\n  type GoogleDiscoverySchemaRefTable,\n  type GoogleDiscoveryToolManifest,\n} from \"./types\";\nexport * from \"./adapter\";\n"
  },
  {
    "path": "packages/sources/google-discovery/src/local-config.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport { StringMapSchema } from \"@executor/source-core\";\n\nexport const GoogleDiscoveryLocalConfigBindingSchema = Schema.Struct({\n  service: Schema.String,\n  version: Schema.String,\n  discoveryUrl: Schema.optional(Schema.NullOr(Schema.String)),\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n  scopes: Schema.optional(Schema.Array(Schema.String)),\n});\n"
  },
  {
    "path": "packages/sources/google-discovery/src/tools.test.ts",
    "content": "import { createServer } from \"node:http\";\n\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { makeToolInvokerFromTools } from \"@executor/codemode-core\";\n\nimport * as Effect from \"effect/Effect\";\n\nimport {\n  buildGoogleDiscoveryToolPresentation,\n  compileGoogleDiscoveryToolDefinitions,\n  createGoogleDiscoveryToolFromDefinition,\n  extractGoogleDiscoveryManifest,\n} from \"./index\";\n\nconst fetchLiveDiscoveryDocument = async (url: string): Promise<string> => {\n  const response = await fetch(url, {\n    signal: AbortSignal.timeout(20_000),\n  });\n  if (!response.ok) {\n    throw new Error(`Failed to fetch ${url}: ${response.status}`);\n  }\n\n  return response.text();\n};\n\nconst withJsonServer = async <T>(handler: (input: {\n  baseUrl: string;\n  requests: Array<{\n    method: string;\n    url: string;\n    headers: Record<string, string | string[] | undefined>;\n    body: string;\n  }>;\n}) => Promise<T>): Promise<T> => {\n  const requests: Array<{\n    method: string;\n    url: string;\n    headers: Record<string, string | string[] | undefined>;\n    body: string;\n  }> = [];\n  const server = createServer(async (request, response) => {\n    const chunks: Buffer[] = [];\n    for await (const chunk of request) {\n      chunks.push(Buffer.from(chunk));\n    }\n    requests.push({\n      method: request.method ?? \"GET\",\n      url: request.url ?? \"/\",\n      headers: request.headers,\n      body: Buffer.concat(chunks).toString(\"utf8\"),\n    });\n\n    response.statusCode = 200;\n    response.setHeader(\"content-type\", \"application/json\");\n    response.end(\n      JSON.stringify({\n        range: \"Sheet1!A1:B2\",\n        values: [[\"ok\"]],\n      }),\n    );\n  });\n\n  await new Promise<void>((resolve, reject) => {\n    server.listen(0, \"127.0.0.1\", (error?: Error) => {\n      if (error) {\n        reject(error);\n        return;\n      }\n      resolve();\n    });\n  });\n\n  try {\n    const address = server.address();\n    if (!address || typeof address === \"string\") {\n      throw new Error(\"Failed to resolve local test server address\");\n    }\n    return await handler({\n      baseUrl: `http://127.0.0.1:${address.port}`,\n      requests,\n    });\n  } finally {\n    await new Promise<void>((resolve, reject) => {\n      server.close((error) => {\n        if (error) {\n          reject(error);\n          return;\n        }\n        resolve();\n      });\n    });\n  }\n};\n\ndescribe(\"google discovery tools\", () => {\n  it(\"extracts a real Google Sheets discovery document into compact tools\", () =>\n    Effect.gen(function* () {\n      const discoveryDocument = yield* Effect.tryPromise({\n        try: () =>\n          fetchLiveDiscoveryDocument(\n            \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n          ),\n        catch: (cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      });\n\n      const manifest = yield* extractGoogleDiscoveryManifest(\n        \"Google Sheets\",\n        discoveryDocument,\n      );\n      const definitions = compileGoogleDiscoveryToolDefinitions(manifest);\n      const valuesGet = definitions.find(\n        (definition) => definition.toolId === \"spreadsheets.values.get\",\n      );\n\n      expect(manifest.service).toBe(\"sheets\");\n      expect(manifest.versionName).toBe(\"v4\");\n      expect(definitions.length).toBeGreaterThan(10);\n      expect(valuesGet).toBeDefined();\n      expect(valuesGet?.method).toBe(\"get\");\n      expect(JSON.stringify(valuesGet?.inputSchema)).toContain(\"\\\"spreadsheetId\\\"\");\n      expect(JSON.stringify(valuesGet?.outputSchema)).toContain(\"\\\"values\\\"\");\n      expect(Object.keys(manifest.schemaRefTable ?? {})).toContain(\n        \"#/$defs/google/ValueRange\",\n      );\n    }).pipe(Effect.runPromise));\n\n  it(\"materializes schema refs for projected tool presentation from a real Google discovery document\", () =>\n    Effect.gen(function* () {\n      const discoveryDocument = yield* Effect.tryPromise({\n        try: () =>\n          fetchLiveDiscoveryDocument(\n            \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n          ),\n        catch: (cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n      });\n\n      const manifest = yield* extractGoogleDiscoveryManifest(\n        \"Google Sheets\",\n        discoveryDocument,\n      );\n      const definitions = compileGoogleDiscoveryToolDefinitions(manifest);\n      const batchUpdate = definitions.find(\n        (definition) => definition.toolId === \"spreadsheets.batchUpdate\",\n      );\n\n      expect(batchUpdate).toBeDefined();\n\n      const presentation = buildGoogleDiscoveryToolPresentation({\n        manifest,\n        definition: batchUpdate!,\n      });\n\n      expect(presentation.inputTypePreview).toContain(\"spreadsheetId: string\");\n      expect(presentation.inputTypePreview).toContain(\"repeatCell?\");\n      expect(presentation.outputTypePreview).toContain(\"spreadsheetId\");\n      expect(presentation.inputSchema).toMatchObject({\n        type: \"object\",\n        properties: {\n          spreadsheetId: {\n            type: \"string\",\n          },\n          body: {\n            type: \"object\",\n          },\n        },\n      });\n      expect(JSON.stringify(presentation.inputSchema)).toContain(\"\\\"repeatCell\\\"\");\n      expect(JSON.stringify(presentation.outputSchema)).toContain(\"\\\"spreadsheetId\\\"\");\n    }).pipe(Effect.runPromise));\n\n  it(\"invokes a tool compiled from a real Google discovery document\", () =>\n    Effect.tryPromise({\n      try: async () => {\n        const discoveryDocument = await fetchLiveDiscoveryDocument(\n          \"https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest\",\n        );\n        const manifest = await Effect.runPromise(\n          extractGoogleDiscoveryManifest(\"Google Sheets\", discoveryDocument),\n        );\n        const definitions = compileGoogleDiscoveryToolDefinitions(manifest);\n        const valuesGet = definitions.find(\n          (definition) => definition.toolId === \"spreadsheets.values.get\",\n        );\n        if (!valuesGet) {\n          throw new Error(\"Expected sheets.spreadsheets.values.get to exist\");\n        }\n\n        await withJsonServer(async ({ baseUrl, requests }) => {\n          const tool = createGoogleDiscoveryToolFromDefinition({\n            definition: valuesGet,\n            service: manifest.service,\n            version: manifest.versionName,\n            rootUrl: manifest.rootUrl,\n            servicePath: manifest.servicePath,\n            path: \"google.sheets.spreadsheets.values.get\",\n            sourceKey: \"src_google_sheets\",\n            schemaRefTable: manifest.schemaRefTable,\n            baseUrl,\n            credentialPlacements: {\n              headers: {\n                authorization: \"Bearer live-test-token\",\n              },\n            },\n          });\n\n          const result = await Effect.runPromise(\n            makeToolInvokerFromTools({\n              tools: {\n                \"google.sheets.spreadsheets.values.get\": tool,\n              },\n            }).invoke({\n              path: \"google.sheets.spreadsheets.values.get\",\n              args: {\n                spreadsheetId: \"sheet123\",\n                range: \"Sheet1!A1:B2\",\n                majorDimension: \"ROWS\",\n              },\n            }),\n          );\n\n          expect(result).toEqual({\n            range: \"Sheet1!A1:B2\",\n            values: [[\"ok\"]],\n          });\n          expect(requests).toHaveLength(1);\n          expect(requests[0]?.method).toBe(\"GET\");\n          expect(requests[0]?.url).toContain(\n            \"/v4/spreadsheets/sheet123/values/Sheet1!A1%3AB2\",\n          );\n          expect(requests[0]?.url).toContain(\"majorDimension=ROWS\");\n          expect(requests[0]?.headers.authorization).toBe(\"Bearer live-test-token\");\n        });\n      },\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    }));\n});\n"
  },
  {
    "path": "packages/sources/google-discovery/src/tools.ts",
    "content": "import {\n  FetchHttpClient,\n  HttpClient,\n  type HttpClientResponse,\n  HttpClientRequest,\n} from \"@effect/platform\";\nimport {\n  applyCookiePlacementsToHeaders,\n  applyHttpQueryPlacementsToUrl,\n  applyJsonBodyPlacements,\n  standardSchemaFromJsonSchema,\n  typeSignatureFromSchema,\n  toTool,\n  type HttpRequestPlacements,\n  type ToolMetadata,\n} from \"@executor/codemode-core\";\nimport { sourceCoreEffectError } from \"@executor/source-core\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Schema from \"effect/Schema\";\n\nimport type {\n  GoogleDiscoveryManifestMethod,\n  GoogleDiscoverySchemaRefTable,\n  GoogleDiscoveryToolDefinition,\n} from \"./types\";\nimport {\n  GoogleDiscoveryToolProviderDataSchema,\n} from \"./types\";\nimport * as Either from \"effect/Either\";\n\nconst decodeGoogleDiscoveryToolProviderDataJson = Schema.decodeUnknownEither(\n  GoogleDiscoveryToolProviderDataSchema,\n);\n\nexport const googleDiscoveryProviderDataFromDefinition = (\n  input: {\n    service: string;\n    version: string;\n    rootUrl: string;\n    servicePath: string;\n    oauthScopes?: Readonly<Record<string, string>>;\n    definition: GoogleDiscoveryManifestMethod;\n  },\n): typeof GoogleDiscoveryToolProviderDataSchema.Type => ({\n    kind: \"google_discovery\",\n    service: input.service,\n    version: input.version,\n    toolId: input.definition.toolId,\n    rawToolId: input.definition.rawToolId,\n    methodId: input.definition.methodId,\n    group: input.definition.group,\n    leaf: input.definition.leaf,\n    invocation: {\n      method: input.definition.method,\n      path: input.definition.path,\n      flatPath: input.definition.flatPath,\n      rootUrl: input.rootUrl,\n      servicePath: input.servicePath,\n      parameters: input.definition.parameters,\n      requestSchemaId: input.definition.requestSchemaId,\n      responseSchemaId: input.definition.responseSchemaId,\n      scopes: input.definition.scopes,\n      ...(input.oauthScopes\n        ? {\n            scopeDescriptions: Object.fromEntries(\n              input.definition.scopes.flatMap((scope) =>\n                input.oauthScopes?.[scope] !== undefined\n                  ? [[scope, input.oauthScopes[scope]!]]\n                  : [],\n              ),\n            ),\n          }\n        : {}),\n      supportsMediaUpload: input.definition.supportsMediaUpload,\n      supportsMediaDownload: input.definition.supportsMediaDownload,\n    },\n  });\n\nconst decodeGoogleDiscoverySchemaRefTableJson = Schema.decodeUnknownEither(\n  Schema.parseJson(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.Unknown,\n    }),\n  ),\n);\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? value as Record<string, unknown>\n    : {};\n\nconst normalizeCredentialPlacements = (input: {\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n}): HttpRequestPlacements => ({\n  headers: {\n    ...input.credentialHeaders,\n    ...input.credentialPlacements?.headers,\n  },\n  queryParams: input.credentialPlacements?.queryParams,\n  cookies: input.credentialPlacements?.cookies,\n  bodyValues: input.credentialPlacements?.bodyValues,\n});\n\nconst setNestedSchemaProperty = (\n  target: Record<string, unknown>,\n  path: readonly string[],\n  value: unknown,\n): void => {\n  if (path.length === 0) {\n    return;\n  }\n\n  const [head, ...rest] = path;\n  if (!head) {\n    return;\n  }\n\n  if (rest.length === 0) {\n    target[head] = value;\n    return;\n  }\n\n  const next = asRecord(target[head]);\n  target[head] = next;\n  setNestedSchemaProperty(next, rest, value);\n};\n\nconst materializeSchemaWithRefDefinitions = (input: {\n  schema: unknown;\n  refTable?: Readonly<Record<string, unknown>>;\n}): Record<string, unknown> => {\n  if (input.schema === undefined || input.schema === null) {\n    return {};\n  }\n\n  const rootSchema = asRecord(input.schema);\n\n  if (!input.refTable || Object.keys(input.refTable).length === 0) {\n    return rootSchema;\n  }\n\n  const defsRoot = asRecord(rootSchema.$defs);\n  for (const [ref, value] of Object.entries(input.refTable)) {\n    if (!ref.startsWith(\"#/$defs/\")) {\n      continue;\n    }\n\n    const materializedValue =\n      typeof value === \"string\"\n        ? (() => {\n          try {\n            return JSON.parse(value) as unknown;\n          } catch {\n            return value;\n          }\n        })()\n        : value;\n\n    const path = ref\n      .slice(\"#/$defs/\".length)\n      .split(\"/\")\n      .filter((segment) => segment.length > 0);\n\n    setNestedSchemaProperty(defsRoot, path, materializedValue);\n  }\n\n  return Object.keys(defsRoot).length > 0\n    ? { ...rootSchema, $defs: defsRoot }\n    : rootSchema;\n};\n\nconst decodeResponseBody = (response: HttpClientResponse.HttpClientResponse) =>\n  Effect.gen(function* () {\n    const contentType = response.headers[\"content-type\"]?.toLowerCase() ?? \"\";\n    const text = yield* response.text.pipe(\n      Effect.mapError((cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n      ),\n    );\n\n    if (text.trim().length === 0) {\n      return null;\n    }\n\n    if (contentType.includes(\"application/json\") || contentType.includes(\"+json\")) {\n      try {\n        return JSON.parse(text) as unknown;\n      } catch {\n        return text;\n      }\n    }\n\n    return text;\n  });\n\nconst stringValuesFromParameter = (\n  value: unknown,\n  repeated: boolean,\n): string[] => {\n  if (value === undefined || value === null) {\n    return [];\n  }\n\n  if (Array.isArray(value)) {\n    const normalized = value\n      .flatMap((entry) =>\n        entry === undefined || entry === null ? [] : [String(entry)],\n      );\n    return repeated ? normalized : [normalized.join(\",\")];\n  }\n\n  if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n    return [String(value)];\n  }\n\n  return [JSON.stringify(value)];\n};\n\nconst replacePathParameters = (input: {\n  pathTemplate: string;\n  args: Record<string, unknown>;\n  parameters: ReadonlyArray<GoogleDiscoveryManifestMethod[\"parameters\"][number]>;\n}): string =>\n  input.pathTemplate.replaceAll(/\\{([^}]+)\\}/g, (_, name: string) => {\n    const parameter = input.parameters.find(\n      (entry) => entry.location === \"path\" && entry.name === name,\n    );\n    const rawValue = input.args[name];\n    if ((rawValue === undefined || rawValue === null) && parameter?.required) {\n      throw new Error(`Missing required path parameter: ${name}`);\n    }\n\n    const values = stringValuesFromParameter(rawValue, false);\n    if (values.length === 0) {\n      return \"\";\n    }\n\n    return encodeURIComponent(values[0]!);\n  });\n\nconst resolveBaseUrl = (input: {\n  rootUrl: string;\n  servicePath: string;\n  baseUrl?: string | undefined;\n}): string => {\n  if (input.baseUrl) {\n    return new URL(input.baseUrl).toString();\n  }\n\n  return new URL(input.servicePath || \"\", input.rootUrl).toString();\n};\n\nconst buildGoogleDiscoveryRequest = (input: {\n  definition: GoogleDiscoveryToolDefinition;\n  args: Record<string, unknown>;\n  defaultHeaders: Readonly<Record<string, string>>;\n  credentialPlacements: HttpRequestPlacements;\n  baseUrl?: string | undefined;\n  providerData: typeof GoogleDiscoveryToolProviderDataSchema.Type;\n}): {\n  method: string;\n  url: URL;\n  headers: Record<string, string>;\n  body?: string;\n} => {\n  const providerData = decodeGoogleDiscoveryToolProviderDataJson(input.providerData);\n  if (Either.isLeft(providerData)) {\n    throw new Error(\"Invalid Google Discovery provider data\");\n  }\n\n  const invocation = providerData.right.invocation;\n  const resolvedPath = replacePathParameters({\n    pathTemplate: invocation.path,\n    args: input.args,\n    parameters: input.definition.parameters,\n  });\n  const url = new URL(\n    resolvedPath.replace(/^\\//, \"\"),\n    resolveBaseUrl({\n      rootUrl: invocation.rootUrl,\n      servicePath: invocation.servicePath,\n      baseUrl: input.baseUrl,\n    }),\n  );\n  const headers: Record<string, string> = {\n    ...input.defaultHeaders,\n  };\n\n  for (const parameter of input.definition.parameters) {\n    if (parameter.location === \"path\") {\n      continue;\n    }\n\n    const rawValue = input.args[parameter.name];\n    if ((rawValue === undefined || rawValue === null) && parameter.required) {\n      throw new Error(`Missing required ${parameter.location} parameter: ${parameter.name}`);\n    }\n\n    const values = stringValuesFromParameter(rawValue, parameter.repeated);\n    if (values.length === 0) {\n      continue;\n    }\n\n    switch (parameter.location) {\n      case \"query\":\n        for (const value of values) {\n          url.searchParams.append(parameter.name, value);\n        }\n        break;\n      case \"header\":\n        headers[parameter.name] = parameter.repeated ? values.join(\",\") : values[0]!;\n        break;\n    }\n  }\n\n  const urlWithAuth = applyHttpQueryPlacementsToUrl({\n    url,\n    queryParams: input.credentialPlacements.queryParams,\n  });\n  const headersWithCookies = applyCookiePlacementsToHeaders({\n    headers,\n    cookies: input.credentialPlacements.cookies,\n  });\n  for (const [key, value] of Object.entries(input.credentialPlacements.headers ?? {})) {\n    headersWithCookies[key] = value;\n  }\n\n  let body: string | undefined;\n  if (input.definition.requestSchemaId !== null) {\n    const rawBody = input.args.body;\n    const bodyValues = input.credentialPlacements.bodyValues ?? {};\n    const hasBodyValues = Object.keys(bodyValues).length > 0;\n    if (rawBody !== undefined || hasBodyValues) {\n      body = JSON.stringify(\n        applyJsonBodyPlacements({\n          body: rawBody !== undefined ? rawBody : {},\n          bodyValues,\n          label: `${input.definition.method.toUpperCase()} ${input.definition.path}`,\n        }),\n      );\n      if (!(\"content-type\" in headersWithCookies)) {\n        headersWithCookies[\"content-type\"] = \"application/json\";\n      }\n    }\n  }\n\n  return {\n    method: input.definition.method.toUpperCase(),\n    url: urlWithAuth,\n    headers: headersWithCookies,\n    ...(body !== undefined ? { body } : {}),\n  };\n};\n\nexport type CreateGoogleDiscoveryToolFromDefinitionInput = {\n  definition: GoogleDiscoveryToolDefinition;\n  service: string;\n  version: string;\n  rootUrl: string;\n  servicePath: string;\n  oauthScopes?: Readonly<Record<string, string>>;\n  path: string;\n  sourceKey: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  schemaRefTable?: Readonly<GoogleDiscoverySchemaRefTable>;\n  baseUrl?: string;\n  httpClientLayer?: Layer.Layer<HttpClient.HttpClient, never, never>;\n};\n\nexport type GoogleDiscoveryToolPresentation = {\n  inputTypePreview: string;\n  outputTypePreview: string;\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n  providerData: typeof GoogleDiscoveryToolProviderDataSchema.Type;\n};\n\nexport const buildGoogleDiscoveryToolPresentation = (input: {\n  manifest: {\n    service: string;\n    versionName: string;\n    rootUrl: string;\n    servicePath: string;\n    oauthScopes?: Readonly<Record<string, string>>;\n    schemaRefTable?: Readonly<GoogleDiscoverySchemaRefTable>;\n  };\n  definition: GoogleDiscoveryToolDefinition;\n}): GoogleDiscoveryToolPresentation => {\n  const refTable = Object.fromEntries(\n    Object.entries(input.manifest.schemaRefTable ?? {}).map(([ref, value]) => {\n      try {\n        return [ref, JSON.parse(value) as unknown];\n      } catch {\n        return [ref, value];\n      }\n    }),\n  );\n  const inputSchema =\n    input.definition.inputSchema === undefined\n      ? undefined\n      : materializeSchemaWithRefDefinitions({\n          schema: input.definition.inputSchema,\n          refTable,\n        });\n  const outputSchema =\n    input.definition.outputSchema === undefined\n      ? undefined\n      : materializeSchemaWithRefDefinitions({\n          schema: input.definition.outputSchema,\n          refTable,\n        });\n\n  return {\n    inputTypePreview: typeSignatureFromSchema(inputSchema, \"unknown\", Infinity),\n    outputTypePreview: typeSignatureFromSchema(outputSchema, \"unknown\", Infinity),\n    ...(inputSchema !== undefined ? { inputSchema } : {}),\n    ...(outputSchema !== undefined ? { outputSchema } : {}),\n    providerData: googleDiscoveryProviderDataFromDefinition({\n      service: input.manifest.service,\n      version: input.manifest.versionName,\n      rootUrl: input.manifest.rootUrl,\n      servicePath: input.manifest.servicePath,\n      oauthScopes: input.manifest.oauthScopes,\n      definition: input.definition,\n    }),\n  };\n};\n\nexport const createGoogleDiscoveryToolFromDefinition = (\n  input: CreateGoogleDiscoveryToolFromDefinitionInput,\n) => {\n  const presentation = buildGoogleDiscoveryToolPresentation({\n    manifest: {\n      service: input.service,\n      versionName: input.version,\n      rootUrl: input.rootUrl,\n      servicePath: input.servicePath,\n      oauthScopes: input.oauthScopes,\n      schemaRefTable: input.schemaRefTable,\n    },\n    definition: input.definition,\n  });\n  const providerData = presentation.providerData;\n  const credentialPlacements = normalizeCredentialPlacements({\n    credentialHeaders: input.credentialHeaders,\n    credentialPlacements: input.credentialPlacements,\n  });\n  const httpClientLayer = input.httpClientLayer ?? FetchHttpClient.layer;\n\n  const metadata: ToolMetadata = {\n    interaction: input.definition.method === \"get\" || input.definition.method === \"head\"\n      ? \"auto\"\n      : \"required\",\n    contract: {\n      inputTypePreview: presentation.inputTypePreview,\n      outputTypePreview: presentation.outputTypePreview,\n      ...(presentation.inputSchema !== undefined\n        ? { inputSchema: presentation.inputSchema }\n        : {}),\n      ...(presentation.outputSchema !== undefined\n        ? { outputSchema: presentation.outputSchema }\n        : {}),\n    },\n    sourceKey: input.sourceKey,\n    providerKind: \"google_discovery\",\n    providerData,\n  };\n\n  return toTool({\n    tool: {\n      description: input.definition.description ?? undefined,\n      inputSchema: standardSchemaFromJsonSchema(presentation.inputSchema ?? {}),\n      execute: (args: unknown) =>\n        Effect.runPromise(\n          Effect.gen(function* () {\n            const request = buildGoogleDiscoveryRequest({\n              definition: input.definition,\n              args: asRecord(args),\n              defaultHeaders: input.defaultHeaders ?? {},\n              credentialPlacements,\n              baseUrl: input.baseUrl,\n              providerData,\n            });\n            let clientRequest = HttpClientRequest.make(\n              request.method as Parameters<typeof HttpClientRequest.make>[0],\n            )(request.url, {\n              headers: request.headers,\n            });\n\n            if (request.body !== undefined) {\n              clientRequest = HttpClientRequest.bodyText(\n                clientRequest,\n                request.body,\n                request.headers[\"content-type\"],\n              );\n            }\n\n            const client = yield* HttpClient.HttpClient;\n            const response = yield* client.execute(clientRequest).pipe(\n              Effect.mapError((cause) =>\n                cause instanceof Error ? cause : new Error(String(cause)),\n              ),\n            );\n            const body = yield* decodeResponseBody(response);\n\n            if (response.status < 200 || response.status >= 300) {\n              return yield* sourceCoreEffectError(\"google-discovery/tools\", \n                  `Google Discovery request failed with HTTP ${response.status}: ${typeof body === \"string\" ? body : JSON.stringify(body)}`,\n                );\n            }\n\n            return body;\n          }).pipe(Effect.provide(httpClientLayer)),\n        ),\n    },\n    metadata,\n  });\n};\n\nexport {\n  decodeGoogleDiscoverySchemaRefTableJson,\n};\n"
  },
  {
    "path": "packages/sources/google-discovery/src/types.ts",
    "content": "import { Schema } from \"effect\";\n\nexport const GOOGLE_DISCOVERY_HTTP_METHODS = [\n  \"get\",\n  \"put\",\n  \"post\",\n  \"delete\",\n  \"patch\",\n  \"head\",\n  \"options\",\n] as const;\n\nexport const GoogleDiscoveryHttpMethodSchema = Schema.Literal(\n  ...GOOGLE_DISCOVERY_HTTP_METHODS,\n);\n\nexport const GoogleDiscoveryParameterLocationSchema = Schema.Literal(\n  \"path\",\n  \"query\",\n  \"header\",\n);\n\nexport const GoogleDiscoveryMethodParameterSchema = Schema.Struct({\n  name: Schema.String,\n  location: GoogleDiscoveryParameterLocationSchema,\n  required: Schema.Boolean,\n  repeated: Schema.Boolean,\n  description: Schema.NullOr(Schema.String),\n  type: Schema.NullOr(Schema.String),\n  enum: Schema.optional(Schema.Array(Schema.String)),\n  default: Schema.optional(Schema.String),\n});\n\nexport const GoogleDiscoveryInvocationPayloadSchema = Schema.Struct({\n  method: GoogleDiscoveryHttpMethodSchema,\n  path: Schema.String,\n  flatPath: Schema.NullOr(Schema.String),\n  rootUrl: Schema.String,\n  servicePath: Schema.String,\n  parameters: Schema.Array(GoogleDiscoveryMethodParameterSchema),\n  requestSchemaId: Schema.NullOr(Schema.String),\n  responseSchemaId: Schema.NullOr(Schema.String),\n  scopes: Schema.Array(Schema.String),\n  scopeDescriptions: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n  supportsMediaUpload: Schema.Boolean,\n  supportsMediaDownload: Schema.Boolean,\n});\n\nexport const GoogleDiscoveryToolProviderDataSchema = Schema.Struct({\n  kind: Schema.Literal(\"google_discovery\"),\n  service: Schema.String,\n  version: Schema.String,\n  toolId: Schema.String,\n  rawToolId: Schema.String,\n  methodId: Schema.String,\n  group: Schema.NullOr(Schema.String),\n  leaf: Schema.String,\n  invocation: GoogleDiscoveryInvocationPayloadSchema,\n});\n\nexport const GoogleDiscoveryManifestMethodSchema = Schema.Struct({\n  toolId: Schema.String,\n  rawToolId: Schema.String,\n  methodId: Schema.String,\n  name: Schema.String,\n  description: Schema.NullOr(Schema.String),\n  group: Schema.NullOr(Schema.String),\n  leaf: Schema.String,\n  method: GoogleDiscoveryHttpMethodSchema,\n  path: Schema.String,\n  flatPath: Schema.NullOr(Schema.String),\n  parameters: Schema.Array(GoogleDiscoveryMethodParameterSchema),\n  requestSchemaId: Schema.NullOr(Schema.String),\n  responseSchemaId: Schema.NullOr(Schema.String),\n  scopes: Schema.Array(Schema.String),\n  supportsMediaUpload: Schema.Boolean,\n  supportsMediaDownload: Schema.Boolean,\n  inputSchema: Schema.optional(Schema.Unknown),\n  outputSchema: Schema.optional(Schema.Unknown),\n});\n\nexport const GoogleDiscoverySchemaRefTableSchema = Schema.Record({\n  key: Schema.String,\n  value: Schema.String,\n});\n\nexport const GoogleDiscoveryToolManifestSchema = Schema.Struct({\n  version: Schema.Literal(1),\n  sourceHash: Schema.String,\n  service: Schema.String,\n  versionName: Schema.String,\n  title: Schema.NullOr(Schema.String),\n  description: Schema.NullOr(Schema.String),\n  rootUrl: Schema.String,\n  servicePath: Schema.String,\n  batchPath: Schema.NullOr(Schema.String),\n  documentationLink: Schema.NullOr(Schema.String),\n  oauthScopes: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n  schemaRefTable: Schema.optional(GoogleDiscoverySchemaRefTableSchema),\n  methods: Schema.Array(GoogleDiscoveryManifestMethodSchema),\n});\n\nexport type GoogleDiscoveryHttpMethod = typeof GoogleDiscoveryHttpMethodSchema.Type;\nexport type GoogleDiscoveryParameterLocation =\n  typeof GoogleDiscoveryParameterLocationSchema.Type;\nexport type GoogleDiscoveryMethodParameter =\n  typeof GoogleDiscoveryMethodParameterSchema.Type;\nexport type GoogleDiscoveryInvocationPayload =\n  typeof GoogleDiscoveryInvocationPayloadSchema.Type;\nexport type GoogleDiscoveryToolProviderData =\n  typeof GoogleDiscoveryToolProviderDataSchema.Type;\nexport type GoogleDiscoveryManifestMethod =\n  typeof GoogleDiscoveryManifestMethodSchema.Type;\nexport type GoogleDiscoverySchemaRefTable =\n  typeof GoogleDiscoverySchemaRefTableSchema.Type;\nexport type GoogleDiscoveryToolManifest =\n  typeof GoogleDiscoveryToolManifestSchema.Type;\n\nexport type GoogleDiscoveryToolDefinition = GoogleDiscoveryManifestMethod;\n"
  },
  {
    "path": "packages/sources/google-discovery/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/graphql/package.json",
    "content": "{\n  \"name\": \"@executor/source-graphql\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\"\n  },\n  \"dependencies\": {\n    \"@executor/ir\": \"workspace:*\",\n    \"@executor/source-core\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\",\n    \"graphql\": \"^16.12.0\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/sources/graphql/src/adapter.ts",
    "content": "import {\n  applyCookiePlacementsToHeaders,\n  applyHttpQueryPlacementsToUrl,\n  applyJsonBodyPlacements,\n} from \"@executor/codemode-core\";\nimport {\n  GraphqlToolProviderDataSchema,\n  type GraphqlToolProviderData,\n} from \"./provider-data\";\nimport { detectGraphqlSource } from \"./discovery\";\nimport {\n  createGraphqlCatalogFragment,\n  type GraphqlCatalogOperationInput,\n} from \"./catalog\";\nimport {\n  buildGraphqlToolPresentation,\n  compileGraphqlToolDefinitions,\n  extractGraphqlManifest,\n  GRAPHQL_INTROSPECTION_QUERY,\n} from \"./graphql-tools\";\nimport { GraphqlLocalConfigBindingSchema } from \"./local-config\";\nimport {\n  ConnectHttpAuthSchema,\n  ConnectHttpImportAuthSchema,\n  createSourceCatalogSyncResult,\n  decodeBindingConfig,\n  decodeExecutableBindingPayload,\n  decodeSourceBindingPayload,\n  emptySourceBindingState,\n  encodeBindingConfig,\n  isSourceCredentialRequiredError,\n  looksLikeGraphqlEndpoint,\n  OptionalNullableStringSchema,\n  SourceCredentialRequiredError,\n  SourceConnectCommonFieldsSchema,\n  StringMapSchema,\n  createCatalogImportMetadata,\n  EXECUTABLE_BINDING_VERSION,\n  sourceCoreEffectError,\n  type Source,\n  type SourceAdapter,\n} from \"@executor/source-core\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nconst GraphqlConnectPayloadSchema = Schema.extend(\n  SourceConnectCommonFieldsSchema,\n  Schema.extend(\n    ConnectHttpImportAuthSchema,\n    Schema.Struct({\n      kind: Schema.Literal(\"graphql\"),\n      auth: Schema.optional(ConnectHttpAuthSchema),\n    }),\n  ),\n);\n\nconst GraphqlExecutorAddInputSchema = Schema.extend(\n  ConnectHttpImportAuthSchema,\n  Schema.Struct({\n    kind: Schema.Literal(\"graphql\"),\n    endpoint: Schema.String,\n    name: OptionalNullableStringSchema,\n    namespace: OptionalNullableStringSchema,\n    auth: Schema.optional(ConnectHttpAuthSchema),\n  }),\n);\n\nconst GraphqlBindingConfigSchema = Schema.Struct({\n  defaultHeaders: Schema.NullOr(StringMapSchema),\n});\n\ntype GraphqlBindingConfig = typeof GraphqlBindingConfigSchema.Type;\n\nconst GraphqlSourceBindingPayloadSchema = Schema.Struct({\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n});\n\nconst GRAPHQL_BINDING_CONFIG_VERSION = 1;\nconst GRAPHQL_INTROSPECTION_TIMEOUT_MS = 15_000;\n\nconst bindingHasAnyField = (\n  value: unknown,\n  fields: readonly string[],\n): boolean =>\n  value !== null &&\n  typeof value === \"object\" &&\n  !Array.isArray(value) &&\n  fields.some((field) => Object.prototype.hasOwnProperty.call(value, field));\n\nconst graphqlBindingConfigFromSource = (\n  source: Pick<Source, \"id\" | \"bindingVersion\" | \"binding\">,\n): Effect.Effect<GraphqlBindingConfig, Error, never> =>\n  Effect.gen(function* () {\n    if (\n      bindingHasAnyField(source.binding, [\n        \"transport\",\n        \"queryParams\",\n        \"headers\",\n      ])\n    ) {\n      return yield* sourceCoreEffectError(\"graphql/adapter\", \"GraphQL sources cannot define MCP transport settings\");\n    }\n    if (bindingHasAnyField(source.binding, [\"specUrl\"])) {\n      return yield* sourceCoreEffectError(\"graphql/adapter\", \"GraphQL sources cannot define specUrl\");\n    }\n\n    const bindingConfig = yield* decodeSourceBindingPayload({\n      sourceId: source.id,\n      label: \"GraphQL\",\n      version: source.bindingVersion,\n      expectedVersion: GRAPHQL_BINDING_CONFIG_VERSION,\n      schema: GraphqlSourceBindingPayloadSchema,\n      value: source.binding,\n      allowedKeys: [\"defaultHeaders\"],\n    });\n\n    return {\n      defaultHeaders: bindingConfig.defaultHeaders ?? null,\n    } satisfies GraphqlBindingConfig;\n  });\n\nconst fetchGraphqlIntrospectionDocumentWithHeaders = (input: {\n  url: string;\n  headers?: Readonly<Record<string, string>>;\n  queryParams?: Readonly<Record<string, string>>;\n  cookies?: Readonly<Record<string, string>>;\n  bodyValues?: Readonly<Record<string, string>>;\n}): Effect.Effect<string, Error, never> =>\n  Effect.tryPromise({\n    try: async () => {\n      let response: Response;\n      try {\n        response = await fetch(\n          applyHttpQueryPlacementsToUrl({\n            url: input.url,\n            queryParams: input.queryParams,\n          }).toString(),\n          {\n            method: \"POST\",\n            headers: applyCookiePlacementsToHeaders({\n              headers: {\n                \"content-type\": \"application/json\",\n                ...input.headers,\n              },\n              cookies: input.cookies,\n            }),\n            body: JSON.stringify(\n              applyJsonBodyPlacements({\n                body: {\n                  query: GRAPHQL_INTROSPECTION_QUERY,\n                  operationName: \"IntrospectionQuery\",\n                },\n                bodyValues: input.bodyValues,\n                label: `GraphQL introspection ${input.url}`,\n              }),\n            ),\n            signal: AbortSignal.timeout(GRAPHQL_INTROSPECTION_TIMEOUT_MS),\n          },\n        );\n      } catch (cause) {\n        if (\n          cause instanceof Error &&\n          (cause.name === \"AbortError\" || cause.name === \"TimeoutError\")\n        ) {\n          throw new Error(\n            `GraphQL introspection timed out after ${GRAPHQL_INTROSPECTION_TIMEOUT_MS}ms`,\n          );\n        }\n        throw cause;\n      }\n      const text = await response.text();\n\n      let parsed: unknown;\n      try {\n        parsed = JSON.parse(text) as unknown;\n      } catch (cause) {\n        throw new Error(\n          `GraphQL introspection endpoint did not return JSON: ${cause instanceof Error ? cause.message : String(cause)}`,\n        );\n      }\n\n      if (!response.ok) {\n        if (response.status === 401 || response.status === 403) {\n          throw new SourceCredentialRequiredError(\n            \"import\",\n            `GraphQL introspection requires credentials (status ${response.status})`,\n          );\n        }\n        throw new Error(\n          `GraphQL introspection failed with status ${response.status}`,\n        );\n      }\n\n      return JSON.stringify(parsed, null, 2);\n    },\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nconst graphqlCatalogOperationFromDefinition = (input: {\n  definition: ReturnType<typeof compileGraphqlToolDefinitions>[number];\n  manifest: Parameters<typeof buildGraphqlToolPresentation>[0][\"manifest\"];\n}): GraphqlCatalogOperationInput => {\n  const presentation = buildGraphqlToolPresentation({\n    manifest: input.manifest,\n    definition: input.definition,\n  });\n\n  return {\n    toolId: input.definition.toolId,\n    title: input.definition.name,\n    description: input.definition.description,\n    effect: input.definition.operationType === \"query\" ? \"read\" : \"write\",\n    inputSchema: presentation.inputSchema,\n    outputSchema: presentation.outputSchema,\n    providerData: presentation.providerData as GraphqlToolProviderData,\n  };\n};\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.trim().length > 0 ? value : null;\n\nconst asStringRecord = (value: unknown): Record<string, string> =>\n  Object.fromEntries(\n    Object.entries(asRecord(value)).flatMap(([key, entry]) =>\n      typeof entry === \"string\" ? [[key, entry]] : [],\n    ),\n  );\n\nconst responseHeadersRecord = (response: Response): Record<string, string> => {\n  const headers: Record<string, string> = {};\n  response.headers.forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n};\n\nconst parseGraphqlResponseBody = async (\n  response: Response,\n): Promise<unknown> => {\n  const contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n  if (contentType.includes(\"application/json\")) {\n    return response.json();\n  }\n\n  return response.text();\n};\n\nconst withoutUndefinedEntries = (\n  record: Readonly<Record<string, unknown>>,\n): Record<string, unknown> =>\n  Object.fromEntries(\n    Object.entries(record).filter(([, value]) => value !== undefined),\n  );\n\nexport const graphqlSourceAdapter = {\n  key: \"graphql\",\n  displayName: \"GraphQL\",\n  catalogKind: \"imported\",\n  connectStrategy: \"direct\",\n  credentialStrategy: \"credential_managed\",\n  bindingConfigVersion: GRAPHQL_BINDING_CONFIG_VERSION,\n  providerKey: \"generic_graphql\",\n  defaultImportAuthPolicy: \"reuse_runtime\",\n  connectPayloadSchema: GraphqlConnectPayloadSchema,\n  executorAddInputSchema: GraphqlExecutorAddInputSchema,\n  executorAddHelpText: [\"endpoint is the GraphQL HTTP endpoint.\"],\n  executorAddInputSignatureWidth: 320,\n  localConfigBindingSchema: GraphqlLocalConfigBindingSchema,\n  localConfigBindingFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(graphqlBindingConfigFromSource(source), (bindingConfig) => ({\n        defaultHeaders: bindingConfig.defaultHeaders,\n      })),\n    ),\n  serializeBindingConfig: (source) =>\n    encodeBindingConfig({\n      adapterKey: \"graphql\",\n      version: GRAPHQL_BINDING_CONFIG_VERSION,\n      payloadSchema: GraphqlBindingConfigSchema,\n      payload: Effect.runSync(graphqlBindingConfigFromSource(source)),\n    }),\n  deserializeBindingConfig: ({ id, bindingConfigJson }) =>\n    Effect.map(\n      decodeBindingConfig({\n        sourceId: id,\n        label: \"GraphQL\",\n        adapterKey: \"graphql\",\n        version: GRAPHQL_BINDING_CONFIG_VERSION,\n        payloadSchema: GraphqlBindingConfigSchema,\n        value: bindingConfigJson,\n      }),\n      ({ version, payload }) => ({\n        version,\n        payload,\n      }),\n    ),\n  bindingStateFromSource: (source) =>\n    Effect.map(graphqlBindingConfigFromSource(source), (bindingConfig) => ({\n      ...emptySourceBindingState,\n      defaultHeaders: bindingConfig.defaultHeaders,\n    })),\n  sourceConfigFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(graphqlBindingConfigFromSource(source), (bindingConfig) => ({\n        kind: \"graphql\",\n        endpoint: source.endpoint,\n        defaultHeaders: bindingConfig.defaultHeaders,\n      })),\n    ),\n  validateSource: (source) =>\n    Effect.gen(function* () {\n      const bindingConfig = yield* graphqlBindingConfigFromSource(source);\n\n      return {\n        ...source,\n        bindingVersion: GRAPHQL_BINDING_CONFIG_VERSION,\n        binding: {\n          defaultHeaders: bindingConfig.defaultHeaders,\n        },\n      };\n    }),\n  shouldAutoProbe: (source) =>\n    source.enabled &&\n    (source.status === \"draft\" || source.status === \"probing\"),\n  discoveryPriority: ({ normalizedUrl }) =>\n    looksLikeGraphqlEndpoint(normalizedUrl) ? 400 : 150,\n  detectSource: ({ normalizedUrl, headers }) =>\n    detectGraphqlSource({\n      normalizedUrl,\n      headers,\n    }),\n  syncCatalog: ({ source, resolveAuthMaterialForSlot }) =>\n    Effect.gen(function* () {\n      const bindingConfig = yield* graphqlBindingConfigFromSource(source);\n      const auth = yield* resolveAuthMaterialForSlot(\"import\");\n      const graphqlDocument =\n        yield* fetchGraphqlIntrospectionDocumentWithHeaders({\n          url: source.endpoint,\n          headers: {\n            ...bindingConfig.defaultHeaders,\n            ...auth.headers,\n          },\n          queryParams: auth.queryParams,\n          cookies: auth.cookies,\n          bodyValues: auth.bodyValues,\n        }).pipe(\n          Effect.withSpan(\"graphql.introspection.fetch\", {\n            kind: \"client\",\n            attributes: {\n              \"executor.source.id\": source.id,\n              \"executor.source.endpoint\": source.endpoint,\n            },\n          }),\n          Effect.mapError((cause) =>\n            isSourceCredentialRequiredError(cause)\n              ? cause\n              : new Error(\n                  `Failed fetching GraphQL introspection for ${source.id}: ${cause.message}`,\n                ),\n          ),\n        );\n\n      const manifest = yield* extractGraphqlManifest(\n        source.name,\n        graphqlDocument,\n      ).pipe(\n        Effect.withSpan(\"graphql.manifest.extract\", {\n          attributes: {\n            \"executor.source.id\": source.id,\n          },\n        }),\n        Effect.mapError((cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n        ),\n      );\n      yield* Effect.annotateCurrentSpan(\n        \"graphql.tool.count\",\n        manifest.tools.length,\n      );\n\n      const definitions = yield* Effect.sync(() =>\n        compileGraphqlToolDefinitions(manifest),\n      ).pipe(\n        Effect.withSpan(\"graphql.definitions.compile\", {\n          attributes: {\n            \"executor.source.id\": source.id,\n            \"graphql.tool.count\": manifest.tools.length,\n          },\n        }),\n      );\n      yield* Effect.annotateCurrentSpan(\n        \"graphql.definition.count\",\n        definitions.length,\n      );\n      const operations = yield* Effect.sync(() =>\n        definitions.map((definition) =>\n          graphqlCatalogOperationFromDefinition({\n            definition,\n            manifest,\n          }),\n        ),\n      ).pipe(\n        Effect.withSpan(\"graphql.operations.build\", {\n          attributes: {\n            \"executor.source.id\": source.id,\n            \"graphql.definition.count\": definitions.length,\n          },\n        }),\n      );\n      const now = Date.now();\n      const fragment = yield* Effect.sync(() =>\n        createGraphqlCatalogFragment({\n          source,\n          documents: [\n            {\n              documentKind: \"graphql_introspection\",\n              documentKey: source.endpoint,\n              contentText: graphqlDocument,\n              fetchedAt: now,\n            },\n          ],\n          operations,\n        }),\n      ).pipe(\n        Effect.withSpan(\"graphql.snapshot.build\", {\n          attributes: {\n            \"executor.source.id\": source.id,\n            \"graphql.operation.count\": operations.length,\n          },\n        }),\n      );\n\n      return createSourceCatalogSyncResult({\n        fragment,\n        importMetadata: createCatalogImportMetadata({\n          source,\n          adapterKey: \"graphql\",\n        }),\n        sourceHash: manifest.sourceHash,\n      });\n    }).pipe(\n      Effect.withSpan(\"graphql.syncCatalog\", {\n        attributes: {\n          \"executor.source.id\": source.id,\n          \"executor.source.endpoint\": source.endpoint,\n        },\n      }),\n    ),\n  invoke: (input) =>\n    Effect.tryPromise({\n      try: async () => {\n        const bindingConfig = Effect.runSync(\n          graphqlBindingConfigFromSource(input.source),\n        );\n        const providerData = decodeExecutableBindingPayload({\n          executableId: input.executable.id,\n          label: \"GraphQL\",\n          version: input.executable.bindingVersion,\n          expectedVersion: EXECUTABLE_BINDING_VERSION,\n          schema: GraphqlToolProviderDataSchema,\n          value: input.executable.binding,\n        }) as GraphqlToolProviderData;\n        const args = asRecord(input.args);\n        const headers = applyCookiePlacementsToHeaders({\n          headers: {\n            \"content-type\": \"application/json\",\n            ...bindingConfig.defaultHeaders,\n            ...input.auth.headers,\n            ...asStringRecord(args.headers),\n          },\n          cookies: input.auth.cookies,\n        });\n        const endpoint = applyHttpQueryPlacementsToUrl({\n          url: input.source.endpoint,\n          queryParams: input.auth.queryParams,\n        }).toString();\n\n        const isRawRequest =\n          providerData.toolKind === \"request\" ||\n          typeof providerData.operationDocument !== \"string\" ||\n          providerData.operationDocument.trim().length === 0;\n        const query = isRawRequest\n          ? (() => {\n              const value = asString(args.query);\n              if (value === null) {\n                throw new Error(\"GraphQL request tools require args.query\");\n              }\n              return value;\n            })()\n          : providerData.operationDocument!;\n        const variables = isRawRequest\n          ? args.variables !== undefined\n            ? asRecord(args.variables)\n            : undefined\n          : withoutUndefinedEntries(\n              Object.fromEntries(\n                Object.entries(args).filter(([key]) => key !== \"headers\"),\n              ),\n            );\n        const operationName = isRawRequest\n          ? (asString(args.operationName) ?? undefined)\n          : (providerData.operationName ?? undefined);\n\n        const response = await fetch(endpoint, {\n          method: \"POST\",\n          headers,\n          body: JSON.stringify({\n            query,\n            ...(variables ? { variables } : {}),\n            ...(operationName ? { operationName } : {}),\n          }),\n        });\n        const body = await parseGraphqlResponseBody(response);\n        const bodyRecord = asRecord(body);\n        const errors = Array.isArray(bodyRecord.errors)\n          ? bodyRecord.errors\n          : [];\n        const rootField =\n          providerData.fieldName ?? providerData.leaf ?? providerData.toolId;\n        const dataRecord = asRecord(bodyRecord.data);\n\n        return {\n          data: isRawRequest ? body : (dataRecord[rootField] ?? null),\n          error:\n            errors.length > 0 ? errors : response.status >= 400 ? body : null,\n          headers: responseHeadersRecord(response),\n          status: response.status,\n        };\n      },\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    }),\n} satisfies SourceAdapter;\n"
  },
  {
    "path": "packages/sources/graphql/src/catalog.ts",
    "content": "import { createCatalogSnapshotV1FromFragments } from \"@executor/ir/catalog\";\nimport {\n  CapabilityIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ResponseSymbolIdSchema,\n  ScopeIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  Capability,\n  CatalogSnapshotV1,\n  ResponseSymbol,\n  Executable,\n} from \"@executor/ir/model\";\nimport {\n  type BaseCatalogOperationInput,\n  type CatalogFragmentBuilder,\n  type CatalogSourceDocumentInput,\n  type JsonSchemaImporter,\n  type Source,\n  EXECUTABLE_BINDING_VERSION,\n  asJsonRecord,\n  buildCatalogFragment,\n  createCatalogImportMetadata,\n  docsFrom,\n  interactionForEffect,\n  mutableRecord,\n  provenanceFor,\n  responseSetFromSingleResponse,\n  schemaWithMergedDefs,\n  stableHash,\n  toolPathSegments,\n} from \"@executor/source-core\";\n\nimport type { GraphqlToolProviderData } from \"./provider-data\";\n\nexport type GraphqlCatalogOperationInput = BaseCatalogOperationInput & {\n  providerData: GraphqlToolProviderData;\n};\n\nconst graphqlErrorItemsJsonSchema = (): Record<string, unknown> => ({\n  type: \"array\",\n  items: {\n    type: \"object\",\n    properties: {\n      message: {\n        type: \"string\",\n        description: \"GraphQL error message.\",\n      },\n      path: {\n        type: \"array\",\n        description: \"Path to the field that produced the error.\",\n        items: {\n          anyOf: [{ type: \"string\" }, { type: \"number\" }],\n        },\n      },\n      locations: {\n        type: \"array\",\n        description: \"Source locations for the error in the GraphQL document.\",\n        items: {\n          type: \"object\",\n          properties: {\n            line: { type: \"number\" },\n            column: { type: \"number\" },\n          },\n          required: [\"line\", \"column\"],\n          additionalProperties: false,\n        },\n      },\n      extensions: {\n        type: \"object\",\n        description: \"Additional provider-specific GraphQL error metadata.\",\n        additionalProperties: true,\n      },\n    },\n    required: [\"message\"],\n    additionalProperties: true,\n  },\n});\n\nconst graphqlProjectedResultDataSchema = (input: {\n  toolKind: \"request\" | \"field\";\n  outputSchema: unknown;\n}): Record<string, unknown> => {\n  if (input.toolKind !== \"field\") {\n    return asJsonRecord(input.outputSchema);\n  }\n\n  const outputSchema = asJsonRecord(input.outputSchema);\n  const dataSchema = asJsonRecord(asJsonRecord(outputSchema.properties).data);\n\n  return Object.keys(dataSchema).length > 0\n    ? schemaWithMergedDefs(dataSchema, input.outputSchema)\n    : outputSchema;\n};\n\nconst graphqlProjectedResultErrorSchema = (input: {\n  toolKind: \"request\" | \"field\";\n  outputSchema: unknown;\n}): Record<string, unknown> => {\n  if (input.toolKind !== \"field\") {\n    return graphqlErrorItemsJsonSchema();\n  }\n\n  const outputSchema = asJsonRecord(input.outputSchema);\n  const errorsSchema = asJsonRecord(\n    asJsonRecord(outputSchema.properties).errors,\n  );\n\n  return Object.keys(errorsSchema).length > 0\n    ? schemaWithMergedDefs(errorsSchema, input.outputSchema)\n    : graphqlErrorItemsJsonSchema();\n};\n\nconst createGraphqlCapability = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\" | \"name\" | \"namespace\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  serviceScopeId: ReturnType<typeof ScopeIdSchema.make>;\n  operation: GraphqlCatalogOperationInput;\n  importer: JsonSchemaImporter;\n}) => {\n  const toolPath = toolPathSegments(\n    input.source,\n    input.operation.providerData.toolId,\n  );\n  const capabilityId = CapabilityIdSchema.make(\n    `cap_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n    })}`,\n  );\n  const executableId = ExecutableIdSchema.make(\n    `exec_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n      protocol: \"graphql\",\n    })}`,\n  );\n  const callShapeId =\n    input.operation.inputSchema !== undefined\n      ? input.importer.importSchema(\n          input.operation.inputSchema,\n          `#/graphql/${input.operation.providerData.toolId}/call`,\n        )\n      : input.importer.importSchema(\n          {\n            type: \"object\",\n            additionalProperties: true,\n          },\n          `#/graphql/${input.operation.providerData.toolId}/call`,\n        );\n  const resultDataShapeId =\n    input.operation.outputSchema !== undefined\n      ? input.importer.importSchema(\n          graphqlProjectedResultDataSchema({\n            toolKind: input.operation.providerData.toolKind,\n            outputSchema: input.operation.outputSchema,\n          }),\n          `#/graphql/${input.operation.providerData.toolId}/data`,\n        )\n      : input.importer.importSchema(\n          {\n            type: \"object\",\n            additionalProperties: true,\n          },\n          `#/graphql/${input.operation.providerData.toolId}/data`,\n        );\n  const resultErrorShapeId = input.importer.importSchema(\n    graphqlProjectedResultErrorSchema({\n      toolKind: input.operation.providerData.toolKind,\n      outputSchema: input.operation.outputSchema,\n    }),\n    `#/graphql/${input.operation.providerData.toolId}/errors`,\n  );\n\n  const responseId = ResponseSymbolIdSchema.make(\n    `response_${stableHash({ capabilityId })}`,\n  );\n  mutableRecord(input.catalog.symbols)[responseId] = {\n    id: responseId,\n    kind: \"response\",\n    ...(docsFrom({\n      description: input.operation.description,\n    })\n      ? {\n          docs: docsFrom({\n            description: input.operation.description,\n          })!,\n        }\n      : {}),\n    contents: [\n      {\n        mediaType: \"application/json\",\n        shapeId: resultDataShapeId,\n      },\n    ],\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/graphql/${input.operation.providerData.toolId}/response`,\n    ),\n  } satisfies ResponseSymbol;\n\n  const responseSetId = responseSetFromSingleResponse({\n    catalog: input.catalog,\n    responseId,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/graphql/${input.operation.providerData.toolId}/responseSet`,\n    ),\n  });\n\n  mutableRecord(input.catalog.executables)[executableId] = {\n    id: executableId,\n    capabilityId,\n    scopeId: input.serviceScopeId,\n    adapterKey: \"graphql\",\n    bindingVersion: EXECUTABLE_BINDING_VERSION,\n    binding: input.operation.providerData,\n    projection: {\n      responseSetId,\n      callShapeId,\n      resultDataShapeId,\n      resultErrorShapeId,\n    },\n    display: {\n      protocol: \"graphql\",\n      method: input.operation.providerData.operationType ?? \"query\",\n      pathTemplate:\n        input.operation.providerData.fieldName ??\n        input.operation.providerData.leaf ??\n        input.operation.providerData.toolId,\n      operationId:\n        input.operation.providerData.fieldName ??\n        input.operation.providerData.leaf ??\n        input.operation.providerData.toolId,\n      group: input.operation.providerData.group,\n      leaf: input.operation.providerData.leaf,\n      rawToolId: input.operation.providerData.toolId,\n      title: input.operation.title ?? null,\n      summary: input.operation.description ?? null,\n    },\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/graphql/${input.operation.providerData.toolId}/executable`,\n    ),\n  } satisfies Executable;\n\n  const effect = input.operation.effect;\n\n  mutableRecord(input.catalog.capabilities)[capabilityId] = {\n    id: capabilityId,\n    serviceScopeId: input.serviceScopeId,\n    surface: {\n      toolPath,\n      ...(input.operation.title ? { title: input.operation.title } : {}),\n      ...(input.operation.description\n        ? { summary: input.operation.description }\n        : {}),\n      ...(input.operation.providerData.group\n        ? { tags: [input.operation.providerData.group] }\n        : {}),\n    },\n    semantics: {\n      effect,\n      safe: effect === \"read\",\n      idempotent: effect === \"read\",\n      destructive: false,\n    },\n    auth: { kind: \"none\" },\n    interaction: interactionForEffect(effect),\n    executableIds: [executableId],\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/graphql/${input.operation.providerData.toolId}/capability`,\n    ),\n  } satisfies Capability;\n};\n\nexport const createGraphqlCatalogFragment = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly GraphqlCatalogOperationInput[];\n}) =>\n  buildCatalogFragment({\n    source: input.source,\n    documents: input.documents,\n    resourceDialectUri: \"https://spec.graphql.org/\",\n    registerOperations: ({ catalog, documentId, serviceScopeId, importer }) => {\n      for (const operation of input.operations) {\n        createGraphqlCapability({\n          catalog,\n          source: input.source,\n          documentId,\n          serviceScopeId,\n          operation,\n          importer,\n        });\n      }\n    },\n  });\n\nexport const createGraphqlCatalogSnapshot = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly GraphqlCatalogOperationInput[];\n}): CatalogSnapshotV1 =>\n  createCatalogSnapshotV1FromFragments({\n    import: createCatalogImportMetadata({\n      source: input.source,\n      adapterKey: \"graphql\",\n    }),\n    fragments: [createGraphqlCatalogFragment(input)],\n  });\n"
  },
  {
    "path": "packages/sources/graphql/src/discovery.ts",
    "content": "import {\n  defaultNameFromEndpoint,\n  executeHttpProbe,\n  isRecord,\n  looksLikeGraphqlEndpoint,\n  namespaceFromSourceName,\n  noneAuthInference,\n  parseChallengeAuthInference,\n  tryParseJson,\n  type SourceDiscoveryProbeInput,\n  type SourceDiscoveryResult,\n} from \"@executor/source-core\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\n\nimport { GRAPHQL_INTROSPECTION_QUERY } from \"./graphql-tools\";\n\nexport const detectGraphqlSource = (\n  input: SourceDiscoveryProbeInput,\n): Effect.Effect<SourceDiscoveryResult | null, never, never> =>\n  Effect.gen(function* () {\n    const response = yield* Effect.either(executeHttpProbe({\n      method: \"POST\",\n      url: input.normalizedUrl,\n      headers: {\n        accept: \"application/graphql-response+json, application/json\",\n        \"content-type\": \"application/json\",\n        ...input.headers,\n      },\n      body: JSON.stringify({ query: GRAPHQL_INTROSPECTION_QUERY }),\n    }));\n\n    if (Either.isLeft(response)) {\n      return null;\n    }\n\n    const parsed = tryParseJson(response.right.text);\n    const contentType = (response.right.headers[\"content-type\"] ?? \"\").toLowerCase();\n    const data = isRecord(parsed) && isRecord(parsed.data) ? parsed.data : null;\n    if (data && isRecord(data.__schema)) {\n      const name = defaultNameFromEndpoint(input.normalizedUrl);\n      return {\n        detectedKind: \"graphql\",\n        confidence: \"high\",\n        endpoint: input.normalizedUrl,\n        specUrl: null,\n        name,\n        namespace: namespaceFromSourceName(name),\n        transport: null,\n        authInference: noneAuthInference(\n          \"GraphQL introspection succeeded without an advertised auth requirement\",\n          \"medium\",\n        ),\n        toolCount: null,\n        warnings: [],\n      } satisfies SourceDiscoveryResult;\n    }\n\n    const errors = isRecord(parsed) && Array.isArray(parsed.errors)\n      ? parsed.errors\n      : [];\n    const graphqlErrors = errors\n      .map((error) => isRecord(error) ? (typeof error.message === \"string\" ? error.message : null) : null)\n      .filter((message): message is string => message !== null);\n\n    const mediumConfidenceGraphql =\n      contentType.includes(\"application/graphql-response+json\")\n      || (looksLikeGraphqlEndpoint(input.normalizedUrl) && response.right.status >= 400 && response.right.status < 500)\n      || graphqlErrors.some((message) => /introspection|graphql|query/i.test(message));\n\n    if (!mediumConfidenceGraphql) {\n      return null;\n    }\n\n    const name = defaultNameFromEndpoint(input.normalizedUrl);\n    return {\n      detectedKind: \"graphql\",\n      confidence: data ? \"high\" : \"medium\",\n      endpoint: input.normalizedUrl,\n      specUrl: null,\n      name,\n      namespace: namespaceFromSourceName(name),\n      transport: null,\n      authInference:\n        response.right.status === 401 || response.right.status === 403\n          ? parseChallengeAuthInference(\n              response.right.headers,\n              \"GraphQL endpoint rejected introspection and did not advertise a concrete auth scheme\",\n            )\n          : noneAuthInference(\n              graphqlErrors.length > 0\n                ? `GraphQL endpoint responded with errors during introspection: ${graphqlErrors[0]}`\n                : \"GraphQL endpoint shape detected\",\n              \"medium\",\n            ),\n      toolCount: null,\n      warnings: graphqlErrors.length > 0 ? [graphqlErrors[0]!] : [],\n    } satisfies SourceDiscoveryResult;\n  }).pipe(Effect.catchAll(() => Effect.succeed(null)));\n"
  },
  {
    "path": "packages/sources/graphql/src/graphql-tools.ts",
    "content": "import {\n  applyCookiePlacementsToHeaders,\n  applyHttpQueryPlacementsToUrl,\n  applyJsonBodyPlacements,\n  sha256Hex,\n  standardSchemaFromJsonSchema,\n  toTool,\n  type HttpRequestPlacements,\n  type ToolDescriptor,\n  type ToolMap,\n  type ToolMetadata,\n  type ToolPath,\n  typeSignatureFromSchema,\n} from \"@executor/codemode-core\";\nimport { sourceCoreEffectError } from \"@executor/source-core\";\nimport {\n  GraphqlToolProviderDataSchema,\n  type GraphqlToolProviderData,\n} from \"./provider-data\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\nimport {\n  buildClientSchema,\n  getIntrospectionQuery,\n  getNamedType,\n  isEnumType,\n  isInputObjectType,\n  isInterfaceType,\n  isLeafType,\n  isListType,\n  isNonNullType,\n  isObjectType,\n  isScalarType,\n  isUnionType,\n  type GraphQLArgument,\n  type GraphQLInputObjectType,\n  type GraphQLInputType,\n  type GraphQLNamedType,\n  type GraphQLOutputType,\n  type GraphQLSchema,\n  type IntrospectionQuery,\n} from \"graphql\";\nimport * as HashMap from \"effect/HashMap\";\nimport * as Option from \"effect/Option\";\n\ntype JsonSchema = Record<string, unknown>;\ntype GraphqlSchemaRefTable = Record<string, string>;\n\ntype GraphqlOperationType = \"query\" | \"mutation\";\n\nconst GRAPHQL_PRESENTATION_TYPE_MAX_LENGTH = 320;\n\ntype GraphqlManifestToolBase = {\n  toolId: string;\n  rawToolId: string | null;\n  toolName: string;\n  description: string | null;\n  inputSchema?: JsonSchema;\n  outputSchema?: JsonSchema;\n  exampleInput?: unknown;\n};\n\nexport type GraphqlRequestToolManifestEntry = GraphqlManifestToolBase & {\n  kind: \"request\";\n};\n\nexport type GraphqlFieldToolManifestEntry = GraphqlManifestToolBase & {\n  kind: \"field\";\n  group: GraphqlOperationType;\n  leaf: string;\n  fieldName: string;\n  operationType: GraphqlOperationType;\n  operationName: string;\n  operationDocument: string;\n  searchTerms: readonly string[];\n};\n\nexport type GraphqlToolManifestEntry =\n  | GraphqlRequestToolManifestEntry\n  | GraphqlFieldToolManifestEntry;\n\nexport type GraphqlToolManifest = {\n  version: 2;\n  sourceHash: string;\n  queryTypeName: string | null;\n  mutationTypeName: string | null;\n  subscriptionTypeName: string | null;\n  schemaRefTable?: GraphqlSchemaRefTable;\n  tools: readonly GraphqlToolManifestEntry[];\n};\n\nexport type GraphqlToolDefinition = {\n  toolId: string;\n  rawToolId: string | null;\n  name: string;\n  description: string;\n  group: string | null;\n  leaf: string | null;\n  fieldName: string | null;\n  operationType: GraphqlOperationType | null;\n  operationName: string | null;\n  operationDocument: string | null;\n  searchTerms: readonly string[];\n};\n\nexport type GraphqlToolPresentation = {\n  inputTypePreview: string;\n  outputTypePreview: string;\n  inputSchema?: JsonSchema;\n  outputSchema?: JsonSchema;\n  exampleInput?: unknown;\n  providerData: GraphqlToolProviderData;\n};\n\ntype GraphqlToolPresentationResolver = {\n  resolve(definition: GraphqlToolDefinition): GraphqlToolPresentation;\n};\n\ntype SelectedGraphqlOutput = {\n  selectionSet: string;\n  schema: JsonSchema;\n};\n\ntype GraphqlHttpInvocation = {\n  endpoint: string;\n  path: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  query: string;\n  variables?: Record<string, unknown>;\n  operationName?: string;\n  requestHeaders?: Record<string, string>;\n};\n\nconst BLOCKED_RESPONSE_HEADER_NAMES = new Set([\n  \"authorization\",\n  \"authentication-info\",\n  \"cookie\",\n  \"proxy-authenticate\",\n  \"proxy-authorization\",\n  \"set-cookie\",\n  \"set-cookie2\",\n  \"www-authenticate\",\n  \"x-api-key\",\n  \"x-auth-token\",\n  \"x-csrf-token\",\n]);\n\nconst PREFERRED_LEAF_FIELD_NAMES = [\n  \"id\",\n  \"identifier\",\n  \"key\",\n  \"slug\",\n  \"name\",\n  \"title\",\n  \"number\",\n  \"url\",\n  \"state\",\n  \"status\",\n  \"success\",\n] as const;\n\nconst PREFERRED_NESTED_FIELD_NAMES = [\n  \"node\",\n  \"nodes\",\n  \"edge\",\n  \"edges\",\n  \"pageInfo\",\n  \"viewer\",\n  \"user\",\n  \"users\",\n  \"team\",\n  \"teams\",\n  \"project\",\n  \"projects\",\n  \"organization\",\n  \"issue\",\n  \"issues\",\n  \"creator\",\n  \"assignee\",\n  \"items\",\n] as const;\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.trim().length > 0 ? value : null;\n\nconst asStringRecord = (value: unknown): Record<string, string> => {\n  const record = asRecord(value);\n  const normalized: Record<string, string> = {};\n\n  for (const [key, entry] of Object.entries(record)) {\n    if (typeof entry === \"string\") {\n      normalized[key] = entry;\n    }\n  }\n\n  return normalized;\n};\n\nconst sanitizeResponseHeaders = (\n  headers: Readonly<Record<string, string>>,\n): Record<string, string> => {\n  const sanitized: Record<string, string> = {};\n\n  for (const [rawName, rawValue] of Object.entries(headers)) {\n    const name = rawName.trim().toLowerCase();\n    if (name.length === 0 || BLOCKED_RESPONSE_HEADER_NAMES.has(name)) {\n      continue;\n    }\n\n    sanitized[name] = rawValue;\n  }\n\n  return sanitized;\n};\n\nconst normalizeHttpUrl = (value: string): string => {\n  const trimmed = value.trim();\n  if (trimmed.length === 0) {\n    throw new Error(\"GraphQL endpoint is empty\");\n  }\n\n  const parsed = new URL(trimmed);\n  if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n    throw new Error(\"GraphQL endpoint must be http or https\");\n  }\n\n  return parsed.toString();\n};\n\nconst graphqlToolError = (message: string, cause?: unknown): Error =>\n  new Error(cause instanceof Error ? `${message}: ${cause.message}` : message);\n\nconst parseGraphqlResponseBody = async (\n  response: Response,\n): Promise<unknown> => {\n  const contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n  if (contentType.includes(\"application/json\")) {\n    return await response.json();\n  }\n\n  return await response.text();\n};\n\nconst hasGraphqlErrors = (value: unknown): boolean =>\n  Array.isArray(asRecord(value).errors);\n\nconst splitWords = (value: string): Array<string> =>\n  value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, \"$1 $2\")\n    .replace(/[^a-zA-Z0-9]+/g, \" \")\n    .trim()\n    .split(/\\s+/)\n    .filter((part) => part.length > 0);\n\nconst toCamelCase = (value: string): string => {\n  const words = splitWords(value).map((part) => part.toLowerCase());\n  if (words.length === 0) {\n    return \"tool\";\n  }\n\n  const [first, ...rest] = words;\n  return `${first}${rest.map((part) => `${part[0]?.toUpperCase() ?? \"\"}${part.slice(1)}`).join(\"\")}`;\n};\n\nconst toPascalCase = (value: string): string => {\n  const camel = toCamelCase(value);\n  return `${camel[0]?.toUpperCase() ?? \"\"}${camel.slice(1)}`;\n};\n\nconst toTitleCase = (value: string): string =>\n  splitWords(value)\n    .map((part) => `${part[0]?.toUpperCase() ?? \"\"}${part.slice(1)}`)\n    .join(\" \");\n\nconst withSchemaDescription = (\n  schema: JsonSchema,\n  description: string | null | undefined,\n): JsonSchema => {\n  const trimmed = description?.trim();\n  return trimmed ? { ...schema, description: trimmed } : schema;\n};\n\nconst withSchemaDefault = (schema: JsonSchema, value: unknown): JsonSchema =>\n  value !== undefined ? { ...schema, default: value } : schema;\n\nconst withSchemaDeprecation = (\n  schema: JsonSchema,\n  deprecationReason: string | null | undefined,\n): JsonSchema => {\n  const trimmed = deprecationReason?.trim();\n  return trimmed\n    ? { ...schema, deprecated: true, \"x-deprecationReason\": trimmed }\n    : schema;\n};\n\nconst introspectionQueryFromDocument = (\n  documentText: string,\n): IntrospectionQuery => {\n  let parsed: unknown;\n  try {\n    parsed = JSON.parse(documentText) as unknown;\n  } catch (cause) {\n    throw new Error(\n      `GraphQL document is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`,\n    );\n  }\n\n  const record = asRecord(parsed);\n  if (Array.isArray(record.errors) && record.errors.length > 0) {\n    const messages = record.errors\n      .map((entry) => asString(asRecord(entry).message))\n      .filter((message): message is string => message !== null);\n    throw new Error(\n      messages.length > 0\n        ? `GraphQL introspection returned errors: ${messages.join(\"; \")}`\n        : \"GraphQL introspection returned errors\",\n    );\n  }\n\n  const data = record.data;\n  if (!data || typeof data !== \"object\" || !(\"__schema\" in data)) {\n    throw new Error(\"GraphQL introspection document is missing data.__schema\");\n  }\n\n  return data as IntrospectionQuery;\n};\n\nconst GRAPHQL_REQUEST_INPUT_SCHEMA = {\n  type: \"object\",\n  properties: {\n    query: {\n      type: \"string\",\n      description: \"GraphQL query or mutation document.\",\n    },\n    variables: {\n      type: \"object\",\n      description: \"Optional GraphQL variables.\",\n      additionalProperties: true,\n    },\n    operationName: {\n      type: \"string\",\n      description: \"Optional GraphQL operation name.\",\n    },\n    headers: {\n      type: \"object\",\n      description: \"Optional per-request headers.\",\n      additionalProperties: {\n        type: \"string\",\n      },\n    },\n  },\n  required: [\"query\"],\n  additionalProperties: false,\n} as const;\n\nconst GRAPHQL_REQUEST_OUTPUT_SCHEMA = {\n  type: \"object\",\n  properties: {\n    status: {\n      type: \"number\",\n    },\n    headers: {\n      type: \"object\",\n      additionalProperties: {\n        type: \"string\",\n      },\n    },\n    body: {},\n  },\n  required: [\"status\", \"headers\", \"body\"],\n  additionalProperties: false,\n} as const;\n\nexport const GRAPHQL_INTROSPECTION_QUERY = getIntrospectionQuery({\n  descriptions: true,\n  inputValueDeprecation: true,\n  schemaDescription: true,\n});\n\nconst scalarInputSchema = (name: string): JsonSchema => {\n  switch (name) {\n    case \"String\":\n    case \"ID\":\n    case \"Date\":\n    case \"DateTime\":\n    case \"DateTimeOrDuration\":\n    case \"Duration\":\n    case \"UUID\":\n    case \"TimelessDate\":\n    case \"TimelessDateOrDuration\":\n    case \"URI\":\n      return { type: \"string\" };\n    case \"Int\":\n    case \"Float\":\n      return { type: \"number\" };\n    case \"Boolean\":\n      return { type: \"boolean\" };\n    case \"JSONObject\":\n      return {\n        type: \"object\",\n        additionalProperties: true,\n      };\n    case \"JSONString\":\n      return { type: \"string\" };\n    case \"JSON\":\n      return {};\n    default:\n      return {};\n  }\n};\n\nconst scalarExampleValue = (name: string): unknown => {\n  switch (name) {\n    case \"String\":\n      return \"value\";\n    case \"ID\":\n      return \"id\";\n    case \"Date\":\n      return \"2026-03-08\";\n    case \"DateTime\":\n    case \"DateTimeOrDuration\":\n      return \"2026-03-08T00:00:00.000Z\";\n    case \"UUID\":\n      return \"00000000-0000-0000-0000-000000000000\";\n    case \"TimelessDate\":\n    case \"TimelessDateOrDuration\":\n      return \"2026-03-08\";\n    case \"Duration\":\n      return \"P1D\";\n    case \"URI\":\n      return \"https://example.com\";\n    case \"Int\":\n      return 1;\n    case \"Float\":\n      return 1.5;\n    case \"Boolean\":\n      return true;\n    case \"JSONObject\":\n      return {};\n    case \"JSONString\":\n      return \"{}\";\n    default:\n      return {};\n  }\n};\n\nconst GRAPHQL_SCHEMA_REF_PREFIX = \"#/$defs/graphql\";\n\nconst graphqlScalarRef = (name: string): string =>\n  `${GRAPHQL_SCHEMA_REF_PREFIX}/scalars/${name}`;\n\nconst graphqlEnumRef = (name: string): string =>\n  `${GRAPHQL_SCHEMA_REF_PREFIX}/enums/${name}`;\n\nconst graphqlInputObjectRef = (name: string): string =>\n  `${GRAPHQL_SCHEMA_REF_PREFIX}/input/${name}`;\n\nconst graphqlOutputTypeRef = (name: string, depth: number): string =>\n  `${GRAPHQL_SCHEMA_REF_PREFIX}/output/${depth === 0 ? name : `${name}__depth${depth}`}`;\n\nconst schemaRef = (ref: string): JsonSchema => ({\n  $ref: ref,\n});\n\nconst typenameOnlyObjectSchema = (): JsonSchema => ({\n  type: \"object\",\n  properties: {\n    __typename: { type: \"string\" },\n  },\n  required: [\"__typename\"],\n  additionalProperties: false,\n});\n\nconst createGraphqlSchemaRefTableBuilder = () => {\n  const refTable: GraphqlSchemaRefTable = {};\n  const outputSelectionsByRef = new Map<string, SelectedGraphqlOutput>();\n\n  const defineRefSchema = (ref: string, schema: JsonSchema): void => {\n    refTable[ref] = JSON.stringify(schema);\n  };\n\n  const ensureScalarRef = (name: string): JsonSchema => {\n    const ref = graphqlScalarRef(name);\n    if (!(ref in refTable)) {\n      defineRefSchema(ref, scalarInputSchema(name));\n    }\n\n    return schemaRef(ref);\n  };\n\n  const ensureEnumRef = (\n    name: string,\n    values: readonly string[],\n  ): JsonSchema => {\n    const ref = graphqlEnumRef(name);\n    if (!(ref in refTable)) {\n      defineRefSchema(ref, {\n        type: \"string\",\n        enum: [...values],\n      });\n    }\n\n    return schemaRef(ref);\n  };\n\n  const ensureInputObjectRef = (\n    namedType: GraphQLInputObjectType,\n  ): JsonSchema => {\n    const ref = graphqlInputObjectRef(namedType.name);\n    if (!(ref in refTable)) {\n      defineRefSchema(ref, {});\n\n      const fields = Object.values(namedType.getFields());\n      const properties = Object.fromEntries(\n        fields.map((field) => {\n          const schema = inputSchemaForType(field.type);\n          const enriched = withSchemaDeprecation(\n            withSchemaDefault(\n              withSchemaDescription(schema, field.description),\n              field.defaultValue,\n            ),\n            field.deprecationReason,\n          );\n          return [field.name, enriched];\n        }),\n      );\n      const required = fields\n        .filter(\n          (field) =>\n            isNonNullType(field.type) && field.defaultValue === undefined,\n        )\n        .map((field) => field.name);\n\n      defineRefSchema(ref, {\n        type: \"object\",\n        properties,\n        ...(required.length > 0 ? { required } : {}),\n        additionalProperties: false,\n      });\n    }\n\n    return schemaRef(ref);\n  };\n\n  const inputSchemaForType = (type: GraphQLInputType): JsonSchema => {\n    if (isNonNullType(type)) {\n      return inputSchemaForType(type.ofType);\n    }\n\n    if (isListType(type)) {\n      return {\n        type: \"array\",\n        items: inputSchemaForType(type.ofType),\n      };\n    }\n\n    const namedType = getNamedType(type);\n    if (isScalarType(namedType)) {\n      return ensureScalarRef(namedType.name);\n    }\n\n    if (isEnumType(namedType)) {\n      return ensureEnumRef(\n        namedType.name,\n        namedType.getValues().map((value) => value.name),\n      );\n    }\n\n    if (isInputObjectType(namedType)) {\n      return ensureInputObjectRef(namedType);\n    }\n\n    return {};\n  };\n\n  const selectedOutputForNamedType = (\n    namedType: GraphQLNamedType,\n    depth: number,\n  ): SelectedGraphqlOutput => {\n    if (isScalarType(namedType)) {\n      return {\n        selectionSet: \"\",\n        schema: ensureScalarRef(namedType.name),\n      };\n    }\n\n    if (isEnumType(namedType)) {\n      return {\n        selectionSet: \"\",\n        schema: ensureEnumRef(\n          namedType.name,\n          namedType.getValues().map((value) => value.name),\n        ),\n      };\n    }\n\n    const ref = graphqlOutputTypeRef(namedType.name, depth);\n    const cached = outputSelectionsByRef.get(ref);\n    if (cached) {\n      return cached;\n    }\n\n    if (isUnionType(namedType)) {\n      const result = {\n        selectionSet: \"{ __typename }\",\n        schema: schemaRef(ref),\n      } satisfies SelectedGraphqlOutput;\n      outputSelectionsByRef.set(ref, result);\n      defineRefSchema(ref, typenameOnlyObjectSchema());\n      return result;\n    }\n\n    if (!isObjectType(namedType) && !isInterfaceType(namedType)) {\n      return {\n        selectionSet: \"{ __typename }\",\n        schema: typenameOnlyObjectSchema(),\n      };\n    }\n\n    const fallback = {\n      selectionSet: \"{ __typename }\",\n      schema: schemaRef(ref),\n    } satisfies SelectedGraphqlOutput;\n    outputSelectionsByRef.set(ref, fallback);\n\n    if (depth >= 2) {\n      defineRefSchema(ref, typenameOnlyObjectSchema());\n      return fallback;\n    }\n\n    const fields = Object.values(namedType.getFields()).filter(\n      (field) => !field.name.startsWith(\"__\"),\n    );\n    const leafFields = fields.filter((field) =>\n      isLeafType(getNamedType(field.type)),\n    );\n    const nestedFields = fields.filter(\n      (field) => !isLeafType(getNamedType(field.type)),\n    );\n\n    const selectedLeafFields = pickPreferredFields({\n      fields: leafFields,\n      preferredNames: PREFERRED_LEAF_FIELD_NAMES,\n      limit: 3,\n    });\n    const selectedNestedFields = pickPreferredFields({\n      fields: nestedFields,\n      preferredNames: PREFERRED_NESTED_FIELD_NAMES,\n      limit: 2,\n    });\n    const selectedFields = dedupeFields([\n      ...selectedLeafFields,\n      ...selectedNestedFields,\n    ]);\n\n    if (selectedFields.length === 0) {\n      defineRefSchema(ref, typenameOnlyObjectSchema());\n      return fallback;\n    }\n\n    const selectionParts: string[] = [];\n    const properties: Record<string, JsonSchema> = {};\n    const required: string[] = [];\n\n    for (const field of selectedFields) {\n      const selected = selectedOutputForType(field.type, depth + 1);\n      const propertySchema = withSchemaDeprecation(\n        withSchemaDescription(selected.schema, field.description),\n        field.deprecationReason,\n      );\n\n      properties[field.name] = propertySchema;\n      required.push(field.name);\n      selectionParts.push(\n        selected.selectionSet.length > 0\n          ? `${field.name} ${selected.selectionSet}`\n          : field.name,\n      );\n    }\n\n    properties.__typename = { type: \"string\" };\n    required.push(\"__typename\");\n    selectionParts.push(\"__typename\");\n\n    defineRefSchema(ref, {\n      type: \"object\",\n      properties,\n      required,\n      additionalProperties: false,\n    });\n\n    const result = {\n      selectionSet: `{ ${selectionParts.join(\" \")} }`,\n      schema: schemaRef(ref),\n    } satisfies SelectedGraphqlOutput;\n    outputSelectionsByRef.set(ref, result);\n    return result;\n  };\n\n  const selectedOutputForType = (\n    type: GraphQLOutputType,\n    depth = 0,\n  ): SelectedGraphqlOutput => {\n    if (isNonNullType(type)) {\n      return selectedOutputForType(type.ofType, depth);\n    }\n\n    if (isListType(type)) {\n      const selectedItem = selectedOutputForType(type.ofType, depth);\n      return {\n        selectionSet: selectedItem.selectionSet,\n        schema: {\n          type: \"array\",\n          items: selectedItem.schema,\n        },\n      };\n    }\n\n    return selectedOutputForNamedType(getNamedType(type), depth);\n  };\n\n  return {\n    refTable,\n    inputSchemaForType,\n    selectedOutputForType,\n  };\n};\n\nconst exampleValueForGraphqlInputType = (\n  type: GraphQLInputType,\n  depth = 0,\n): unknown => {\n  if (isNonNullType(type)) {\n    return exampleValueForGraphqlInputType(type.ofType, depth);\n  }\n\n  if (isListType(type)) {\n    return [exampleValueForGraphqlInputType(type.ofType, depth + 1)];\n  }\n\n  const namedType = getNamedType(type);\n  if (isScalarType(namedType)) {\n    return scalarExampleValue(namedType.name);\n  }\n\n  if (isEnumType(namedType)) {\n    return namedType.getValues()[0]?.name ?? \"VALUE\";\n  }\n\n  if (isInputObjectType(namedType)) {\n    if (depth >= 2) {\n      return {};\n    }\n\n    const fields = Object.values(namedType.getFields());\n    const requiredFields = fields.filter(\n      (field) => isNonNullType(field.type) && field.defaultValue === undefined,\n    );\n    const fieldsForExample =\n      requiredFields.length > 0 ? requiredFields : fields.slice(0, 1);\n\n    return Object.fromEntries(\n      fieldsForExample.map((field) => [\n        field.name,\n        field.defaultValue ??\n          exampleValueForGraphqlInputType(field.type, depth + 1),\n      ]),\n    );\n  }\n\n  return {};\n};\n\nconst dedupeFields = <T extends { name: string }>(\n  fields: readonly T[],\n): T[] => {\n  const seen = new Set<string>();\n  const deduped: T[] = [];\n\n  for (const field of fields) {\n    if (seen.has(field.name)) {\n      continue;\n    }\n\n    seen.add(field.name);\n    deduped.push(field);\n  }\n\n  return deduped;\n};\n\nconst pickPreferredFields = <T extends { name: string }>(input: {\n  fields: readonly T[];\n  preferredNames: readonly string[];\n  limit: number;\n}): T[] => {\n  const matches = input.preferredNames\n    .map((name) => input.fields.find((field) => field.name === name))\n    .filter((field): field is T => field !== undefined);\n\n  if (matches.length >= input.limit) {\n    return dedupeFields(matches).slice(0, input.limit);\n  }\n\n  return dedupeFields([...matches, ...input.fields]).slice(0, input.limit);\n};\n\nconst printGraphqlType = (type: GraphQLInputType): string => {\n  if (isNonNullType(type)) {\n    return `${printGraphqlType(type.ofType)}!`;\n  }\n\n  if (isListType(type)) {\n    return `[${printGraphqlType(type.ofType)}]`;\n  }\n\n  return type.name;\n};\n\nconst inputSchemaForFieldArguments = (\n  args: readonly GraphQLArgument[],\n  bundleBuilder: ReturnType<typeof createGraphqlSchemaRefTableBuilder>,\n): JsonSchema => {\n  const properties = Object.fromEntries(\n    args.map((arg) => {\n      const schema = bundleBuilder.inputSchemaForType(arg.type);\n      const enriched = withSchemaDeprecation(\n        withSchemaDefault(\n          withSchemaDescription(schema, arg.description),\n          arg.defaultValue,\n        ),\n        arg.deprecationReason,\n      );\n      return [arg.name, enriched];\n    }),\n  );\n  const required = args\n    .filter((arg) => isNonNullType(arg.type) && arg.defaultValue === undefined)\n    .map((arg) => arg.name);\n\n  return {\n    type: \"object\",\n    properties: {\n      ...properties,\n      headers: {\n        type: \"object\",\n        description: \"Optional per-request headers.\",\n        additionalProperties: {\n          type: \"string\",\n        },\n      },\n    },\n    ...(required.length > 0 ? { required } : {}),\n    additionalProperties: false,\n  };\n};\n\nconst outputEnvelopeSchemaForField = (\n  fieldType: GraphQLOutputType,\n  bundleBuilder: ReturnType<typeof createGraphqlSchemaRefTableBuilder>,\n): JsonSchema => {\n  const selectedOutput = bundleBuilder.selectedOutputForType(fieldType);\n\n  return {\n    type: \"object\",\n    properties: {\n      data: withSchemaDescription(\n        selectedOutput.schema,\n        \"Value returned for the selected GraphQL field.\",\n      ),\n      errors: {\n        type: \"array\",\n        items: {\n          type: \"object\",\n          properties: {\n            message: {\n              type: \"string\",\n              description: \"GraphQL error message.\",\n            },\n            path: {\n              type: \"array\",\n              description: \"Path to the field that produced the error.\",\n              items: {\n                anyOf: [\n                  { type: \"string\" },\n                  { type: \"number\" },\n                ],\n              },\n            },\n            locations: {\n              type: \"array\",\n              description: \"Source locations for the error in the GraphQL document.\",\n              items: {\n                type: \"object\",\n                properties: {\n                  line: { type: \"number\" },\n                  column: { type: \"number\" },\n                },\n                required: [\"line\", \"column\"],\n                additionalProperties: false,\n              },\n            },\n            extensions: {\n              type: \"object\",\n              description: \"Additional provider-specific GraphQL error metadata.\",\n              additionalProperties: true,\n            },\n          },\n          required: [\"message\"],\n          additionalProperties: true,\n        },\n      },\n    },\n    required: [\"data\", \"errors\"],\n    additionalProperties: false,\n  };\n};\n\nconst exampleInputForField = (\n  args: readonly GraphQLArgument[],\n): Record<string, unknown> | undefined => {\n  if (args.length === 0) {\n    return {};\n  }\n\n  const requiredArgs = args.filter(\n    (arg) => isNonNullType(arg.type) && arg.defaultValue === undefined,\n  );\n  const argsForExample =\n    requiredArgs.length > 0 ? requiredArgs : args.slice(0, 1);\n  const example = Object.fromEntries(\n    argsForExample.map((arg) => [\n      arg.name,\n      arg.defaultValue ?? exampleValueForGraphqlInputType(arg.type),\n    ]),\n  );\n\n  return example;\n};\n\nconst buildGraphqlFieldOperationDocument = (input: {\n  operationType: GraphqlOperationType;\n  fieldName: string;\n  args: readonly GraphQLArgument[];\n  fieldType: GraphQLOutputType;\n  bundleBuilder: ReturnType<typeof createGraphqlSchemaRefTableBuilder>;\n}): { operationName: string; operationDocument: string } => {\n  const selectedOutput = input.bundleBuilder.selectedOutputForType(\n    input.fieldType,\n  );\n  const operationName = `${toPascalCase(input.operationType)}${toPascalCase(input.fieldName)}`;\n  const variableDefinitions = input.args\n    .map((arg) => `$${arg.name}: ${printGraphqlType(arg.type)}`)\n    .join(\", \");\n  const fieldArguments = input.args\n    .map((arg) => `${arg.name}: $${arg.name}`)\n    .join(\", \");\n  const fieldCall =\n    fieldArguments.length > 0\n      ? `${input.fieldName}(${fieldArguments})`\n      : input.fieldName;\n  const selectionSuffix =\n    selectedOutput.selectionSet.length > 0\n      ? ` ${selectedOutput.selectionSet}`\n      : \"\";\n\n  return {\n    operationName,\n    operationDocument: `${input.operationType} ${operationName}${variableDefinitions.length > 0 ? `(${variableDefinitions})` : \"\"} { ${fieldCall}${selectionSuffix} }`,\n  };\n};\n\nconst defaultDescriptionForField = (input: {\n  operationType: GraphqlOperationType;\n  fieldName: string;\n  description: string | null | undefined;\n}): string => {\n  const trimmed = input.description?.trim();\n  if (trimmed) {\n    return trimmed;\n  }\n\n  return `Execute the GraphQL ${input.operationType} field '${input.fieldName}'.`;\n};\n\nconst requestToolManifestEntry = (\n  sourceName: string,\n): GraphqlRequestToolManifestEntry => ({\n  kind: \"request\",\n  toolId: \"request\",\n  rawToolId: \"request\",\n  toolName: \"GraphQL request\",\n  description: `Execute a raw GraphQL request against ${sourceName}.`,\n  inputSchema: GRAPHQL_REQUEST_INPUT_SCHEMA,\n  outputSchema: GRAPHQL_REQUEST_OUTPUT_SCHEMA,\n  exampleInput: {\n    query: \"query { __typename }\",\n  },\n});\n\ntype GraphqlFieldToolDraft = Omit<GraphqlFieldToolManifestEntry, \"toolId\"> & {\n  toolId: string;\n};\n\nconst resolveGraphqlFieldToolIds = (\n  drafts: readonly GraphqlFieldToolDraft[],\n): GraphqlFieldToolManifestEntry[] => {\n  const staged = drafts.map((draft) => ({ ...draft }));\n  const requestToolId = \"request\";\n\n  const applyDuplicates = (\n    factory: (draft: GraphqlFieldToolDraft) => string,\n  ): void => {\n    const buckets = new Map<string, GraphqlFieldToolDraft[]>();\n\n    for (const draft of staged) {\n      const bucket = buckets.get(draft.toolId) ?? [];\n      bucket.push(draft);\n      buckets.set(draft.toolId, bucket);\n    }\n\n    for (const [toolId, bucket] of buckets.entries()) {\n      if (bucket.length < 2 && toolId !== requestToolId) {\n        continue;\n      }\n\n      for (const draft of bucket) {\n        draft.toolId = factory(draft);\n      }\n    }\n  };\n\n  applyDuplicates(\n    (draft) => `${draft.leaf}${toPascalCase(draft.operationType)}`,\n  );\n  applyDuplicates(\n    (draft) =>\n      `${draft.leaf}${toPascalCase(draft.operationType)}${sha256Hex(`${draft.group}:${draft.fieldName}`).slice(0, 6)}`,\n  );\n\n  return staged\n    .sort(\n      (left, right) =>\n        left.toolId.localeCompare(right.toolId) ||\n        left.fieldName.localeCompare(right.fieldName) ||\n        left.operationType.localeCompare(right.operationType),\n    )\n    .map((draft) => ({ ...draft }));\n};\n\nconst fieldToolDraftsFromRootType = (input: {\n  rootType:\n    | ReturnType<GraphQLSchema[\"getQueryType\"]>\n    | ReturnType<GraphQLSchema[\"getMutationType\"]>;\n  operationType: GraphqlOperationType;\n  bundleBuilder: ReturnType<typeof createGraphqlSchemaRefTableBuilder>;\n}): GraphqlFieldToolDraft[] => {\n  if (!input.rootType) {\n    return [];\n  }\n\n  return Object.values(input.rootType.getFields())\n    .filter((field) => !field.name.startsWith(\"__\"))\n    .map((field) => {\n      const leaf = toCamelCase(field.name);\n      const outputSchema = outputEnvelopeSchemaForField(\n        field.type,\n        input.bundleBuilder,\n      );\n      const inputSchema = inputSchemaForFieldArguments(\n        field.args,\n        input.bundleBuilder,\n      );\n      const { operationName, operationDocument } =\n        buildGraphqlFieldOperationDocument({\n          operationType: input.operationType,\n          fieldName: field.name,\n          args: field.args,\n          fieldType: field.type,\n          bundleBuilder: input.bundleBuilder,\n        });\n\n      return {\n        kind: \"field\",\n        toolId: leaf,\n        rawToolId: field.name,\n        toolName: toTitleCase(field.name),\n        description: defaultDescriptionForField({\n          operationType: input.operationType,\n          fieldName: field.name,\n          description: field.description,\n        }),\n        group: input.operationType,\n        leaf,\n        fieldName: field.name,\n        operationType: input.operationType,\n        operationName,\n        operationDocument,\n        inputSchema,\n        outputSchema,\n        exampleInput: exampleInputForField(field.args),\n        searchTerms: [\n          input.operationType,\n          field.name,\n          ...field.args.map((arg) => arg.name),\n          getNamedType(field.type).name,\n        ],\n      } satisfies GraphqlFieldToolDraft;\n    });\n};\n\nexport const createGraphqlSourceHash = (documentText: string): string =>\n  sha256Hex(documentText);\n\nexport const extractGraphqlManifest = (\n  sourceName: string,\n  documentText: string,\n): Effect.Effect<GraphqlToolManifest, Error, never> =>\n  Effect.try({\n    try: () => {\n      const introspection = introspectionQueryFromDocument(documentText);\n      const schema = buildClientSchema(introspection);\n      const sourceHash = createGraphqlSourceHash(documentText);\n      const bundleBuilder = createGraphqlSchemaRefTableBuilder();\n      const fieldTools = resolveGraphqlFieldToolIds([\n        ...fieldToolDraftsFromRootType({\n          rootType: schema.getQueryType(),\n          operationType: \"query\",\n          bundleBuilder,\n        }),\n        ...fieldToolDraftsFromRootType({\n          rootType: schema.getMutationType(),\n          operationType: \"mutation\",\n          bundleBuilder,\n        }),\n      ]);\n\n      return {\n        version: 2,\n        sourceHash,\n        queryTypeName: schema.getQueryType()?.name ?? null,\n        mutationTypeName: schema.getMutationType()?.name ?? null,\n        subscriptionTypeName: schema.getSubscriptionType()?.name ?? null,\n        ...(Object.keys(bundleBuilder.refTable).length > 0\n          ? { schemaRefTable: bundleBuilder.refTable }\n          : {}),\n        tools: [...fieldTools, requestToolManifestEntry(sourceName)],\n      } satisfies GraphqlToolManifest;\n    },\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n  });\n\nexport const compileGraphqlToolDefinitions = (\n  manifest: GraphqlToolManifest,\n): Array<GraphqlToolDefinition> =>\n  manifest.tools.map((tool) => ({\n    toolId: tool.toolId,\n    rawToolId: tool.rawToolId,\n    name: tool.toolName,\n    description: tool.description ?? `Execute ${tool.toolName}.`,\n    group: tool.kind === \"field\" ? tool.group : null,\n    leaf: tool.kind === \"field\" ? tool.leaf : null,\n    fieldName: tool.kind === \"field\" ? tool.fieldName : null,\n    operationType: tool.kind === \"field\" ? tool.operationType : null,\n    operationName: tool.kind === \"field\" ? tool.operationName : null,\n    operationDocument: tool.kind === \"field\" ? tool.operationDocument : null,\n    searchTerms:\n      tool.kind === \"field\"\n        ? tool.searchTerms\n        : [\"request\", \"graphql\", \"query\", \"mutation\"],\n  }));\n\nconst materializedSchemaRefDefinitions = (refTable?: GraphqlSchemaRefTable): JsonSchema | undefined => {\n  if (!refTable || Object.keys(refTable).length === 0) {\n    return undefined;\n  }\n\n  const defsRoot: JsonSchema = {};\n  for (const [ref, value] of Object.entries(refTable)) {\n    if (!ref.startsWith(\"#/$defs/\")) {\n      continue;\n    }\n\n    const materializedValue = typeof value === \"string\"\n      ? (() => {\n          try {\n            return JSON.parse(value) as unknown;\n          } catch {\n            return value;\n          }\n        })()\n      : value;\n    const path = ref\n      .slice(\"#/$defs/\".length)\n      .split(\"/\")\n      .filter((segment) => segment.length > 0);\n    setNestedSchemaProperty(defsRoot, path, materializedValue);\n  }\n\n  return Object.keys(defsRoot).length > 0 ? defsRoot : undefined;\n};\n\nconst materializeManifestSchema = (input: {\n  schema: JsonSchema | undefined;\n  defsRoot: JsonSchema | undefined;\n  cache: WeakMap<object, JsonSchema>;\n}): JsonSchema | undefined => {\n  if (input.schema === undefined) {\n    return undefined;\n  }\n\n  if (input.defsRoot === undefined) {\n    return input.schema;\n  }\n\n  const cached = input.cache.get(input.schema);\n  if (cached) {\n    return cached;\n  }\n\n  const existingDefs = input.schema.$defs;\n  const materialized = existingDefs && typeof existingDefs === \"object\" && !Array.isArray(existingDefs)\n    ? { ...input.schema, $defs: { ...input.defsRoot, ...existingDefs } }\n    : { ...input.schema, $defs: input.defsRoot };\n\n  input.cache.set(input.schema, materialized);\n  return materialized;\n};\n\nconst graphqlToolPresentationResolverCache = new WeakMap<GraphqlToolManifest, GraphqlToolPresentationResolver>();\n\nconst graphqlToolPresentationResolver = (\n  manifest: GraphqlToolManifest,\n): GraphqlToolPresentationResolver => {\n  const cached = graphqlToolPresentationResolverCache.get(manifest);\n  if (cached) {\n    return cached;\n  }\n\n  const toolEntriesById = HashMap.fromIterable(\n    manifest.tools.map((tool) => [tool.toolId, tool] as const),\n  );\n  const defsRoot = materializedSchemaRefDefinitions(manifest.schemaRefTable);\n  const schemaCache = new WeakMap<object, JsonSchema>();\n  const presentationCache = new Map<string, GraphqlToolPresentation>();\n\n  const resolver: GraphqlToolPresentationResolver = {\n    resolve(definition) {\n      const existing = presentationCache.get(definition.toolId);\n      if (existing) {\n        return existing;\n      }\n\n      const entry = Option.getOrUndefined(HashMap.get(toolEntriesById, definition.toolId));\n      const inputSchema = materializeManifestSchema({\n        schema: entry?.inputSchema,\n        defsRoot,\n        cache: schemaCache,\n      });\n      const outputSchema = materializeManifestSchema({\n        schema: entry?.outputSchema,\n        defsRoot,\n        cache: schemaCache,\n      });\n\n      const presentation = {\n        inputTypePreview: typeSignatureFromSchema(\n          inputSchema,\n          \"unknown\",\n          GRAPHQL_PRESENTATION_TYPE_MAX_LENGTH,\n        ),\n        outputTypePreview: typeSignatureFromSchema(\n          outputSchema,\n          \"unknown\",\n          GRAPHQL_PRESENTATION_TYPE_MAX_LENGTH,\n        ),\n        ...(inputSchema !== undefined ? { inputSchema } : {}),\n        ...(outputSchema !== undefined ? { outputSchema } : {}),\n        ...(entry?.exampleInput !== undefined\n          ? { exampleInput: entry.exampleInput }\n          : {}),\n        providerData: {\n          kind: \"graphql\",\n          toolKind: entry?.kind ?? \"request\",\n          toolId: definition.toolId,\n          rawToolId: definition.rawToolId,\n          group: definition.group,\n          leaf: definition.leaf,\n          fieldName: definition.fieldName,\n          operationType: definition.operationType,\n          operationName: definition.operationName,\n          operationDocument: definition.operationDocument,\n          queryTypeName: manifest.queryTypeName,\n          mutationTypeName: manifest.mutationTypeName,\n          subscriptionTypeName: manifest.subscriptionTypeName,\n        } satisfies GraphqlToolProviderData,\n      } satisfies GraphqlToolPresentation;\n\n      presentationCache.set(definition.toolId, presentation);\n      return presentation;\n    },\n  };\n\n  graphqlToolPresentationResolverCache.set(manifest, resolver);\n  return resolver;\n};\n\nexport const buildGraphqlToolPresentation = (input: {\n  manifest: GraphqlToolManifest;\n  definition: GraphqlToolDefinition;\n}): GraphqlToolPresentation => {\n  return graphqlToolPresentationResolver(input.manifest).resolve(input.definition);\n};\n\nconst decodeGraphqlToolProviderData = Schema.decodeUnknownEither(\n  GraphqlToolProviderDataSchema,\n);\n\nexport const decodeGraphqlSchemaRefTableJson = Schema.decodeUnknownEither(\n  Schema.parseJson(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.Unknown,\n    }),\n  ),\n);\n\nconst setNestedSchemaProperty = (\n  target: Record<string, unknown>,\n  path: readonly string[],\n  value: unknown,\n): void => {\n  if (path.length === 0) {\n    return;\n  }\n\n  const [head, ...rest] = path;\n  if (!head) {\n    return;\n  }\n\n  if (rest.length === 0) {\n    target[head] = value;\n    return;\n  }\n\n  const next = asRecord(target[head]);\n  target[head] = next;\n  setNestedSchemaProperty(next, rest, value);\n};\n\nconst materializeSchemaWithRefDefinitions = (input: {\n  schema: unknown;\n  refTable?: Readonly<Record<string, unknown>>;\n}): Record<string, unknown> => {\n  if (input.schema === undefined || input.schema === null) {\n    return {};\n  }\n\n  const rootSchema = asRecord(input.schema);\n\n  if (!input.refTable || Object.keys(input.refTable).length === 0) {\n    return rootSchema;\n  }\n\n  const defsRoot = asRecord(rootSchema.$defs);\n  for (const [ref, value] of Object.entries(input.refTable)) {\n    if (!ref.startsWith(\"#/$defs/\")) {\n      continue;\n    }\n\n    const materializedValue =\n      typeof value === \"string\"\n        ? (() => {\n            try {\n              return JSON.parse(value) as unknown;\n            } catch {\n              return value;\n            }\n          })()\n        : value;\n    const path = ref\n      .slice(\"#/$defs/\".length)\n      .split(\"/\")\n      .filter((segment) => segment.length > 0);\n    setNestedSchemaProperty(defsRoot, path, materializedValue);\n  }\n\n  return Object.keys(defsRoot).length > 0\n    ? { ...rootSchema, $defs: defsRoot }\n    : rootSchema;\n};\n\nexport const createGraphqlToolFromPersistedOperation = (input: {\n  path: string;\n  sourceKey: string;\n  endpoint: string;\n  description?: string;\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n  exampleInput?: unknown;\n  providerData: unknown;\n  schemaRefTable?: Readonly<Record<string, unknown>>;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n}) => {\n  const decodedProviderData = decodeGraphqlToolProviderData(\n    input.providerData,\n  );\n  if (Either.isLeft(decodedProviderData)) {\n    throw new Error(\"Invalid GraphQL provider data\");\n  }\n\n  const providerData = decodedProviderData.right;\n  const inputSchema = materializeSchemaWithRefDefinitions({\n    schema: input.inputSchema,\n    refTable: input.schemaRefTable,\n  });\n\n  const metadata: ToolMetadata = {\n    interaction:\n      providerData.toolKind === \"request\"\n        ? \"auto\"\n        : providerData.operationType === \"query\"\n          ? \"auto\"\n          : \"required\",\n    contract: {\n      inputTypePreview: typeSignatureFromSchema(\n        input.inputSchema,\n        \"unknown\",\n        GRAPHQL_PRESENTATION_TYPE_MAX_LENGTH,\n      ),\n      outputTypePreview: typeSignatureFromSchema(\n        input.outputSchema,\n        \"unknown\",\n        GRAPHQL_PRESENTATION_TYPE_MAX_LENGTH,\n      ),\n      ...(input.inputSchema !== undefined\n        ? { inputSchema: input.inputSchema }\n        : {}),\n      ...(input.outputSchema !== undefined\n        ? { outputSchema: input.outputSchema }\n        : {}),\n      ...(input.exampleInput !== undefined\n        ? { exampleInput: input.exampleInput }\n        : {}),\n    },\n    sourceKey: input.sourceKey,\n    providerKind: \"graphql\",\n    providerData,\n  };\n\n  return toTool({\n    tool: {\n      description: input.description,\n      inputSchema: standardSchemaFromJsonSchema(inputSchema),\n      execute: (args: unknown) => {\n        if (\n          providerData.toolKind === \"field\" &&\n          providerData.fieldName &&\n          providerData.operationType &&\n          providerData.operationName &&\n          providerData.operationDocument\n        ) {\n          return Effect.runPromise(\n            invokeGraphqlFieldTool({\n              entry: {\n                fieldName: providerData.fieldName,\n                operationName: providerData.operationName,\n                operationDocument: providerData.operationDocument,\n              },\n              endpoint: input.endpoint,\n              path: input.path,\n              defaultHeaders: input.defaultHeaders,\n              credentialHeaders: input.credentialHeaders,\n              credentialPlacements: input.credentialPlacements,\n              args,\n            }),\n          );\n        }\n\n        return Effect.runPromise(\n          invokeRawGraphqlTool({\n            endpoint: input.endpoint,\n            path: input.path,\n            defaultHeaders: input.defaultHeaders,\n            credentialHeaders: input.credentialHeaders,\n            credentialPlacements: input.credentialPlacements,\n            args,\n          }),\n        );\n      },\n    },\n    metadata,\n  });\n};\n\nexport const graphqlToolDescriptorFromDefinition = (input: {\n  manifest: GraphqlToolManifest;\n  definition: GraphqlToolDefinition;\n  path: string;\n  sourceKey: string;\n  includeSchemas: boolean;\n}): ToolDescriptor => {\n  const presentation = buildGraphqlToolPresentation({\n    manifest: input.manifest,\n    definition: input.definition,\n  });\n\n  return {\n    path: asToolPath(input.path),\n    sourceKey: input.sourceKey,\n    description: input.definition.description,\n    interaction:\n      input.definition.operationType === \"query\" ? \"auto\" : \"required\",\n    contract: {\n      inputTypePreview: presentation.inputTypePreview,\n      outputTypePreview: presentation.outputTypePreview,\n      ...(input.includeSchemas && presentation.inputSchema !== undefined\n        ? { inputSchema: presentation.inputSchema }\n        : {}),\n      ...(input.includeSchemas && presentation.outputSchema !== undefined\n        ? { outputSchema: presentation.outputSchema }\n        : {}),\n      ...(presentation.exampleInput !== undefined\n        ? { exampleInput: presentation.exampleInput }\n        : {}),\n    },\n    providerKind: \"graphql\",\n    providerData: presentation.providerData,\n  };\n};\n\nconst invokeGraphqlHttpRequest = (input: GraphqlHttpInvocation) =>\n  Effect.gen(function* () {\n    const endpoint = applyHttpQueryPlacementsToUrl({\n      url: input.endpoint,\n      queryParams: input.credentialPlacements?.queryParams,\n    }).toString();\n    const requestBody = applyJsonBodyPlacements({\n      body: {\n        query: input.query,\n        ...(input.variables !== undefined\n          ? { variables: input.variables }\n          : {}),\n        ...(input.operationName\n          ? { operationName: input.operationName }\n          : {}),\n      },\n      bodyValues: input.credentialPlacements?.bodyValues,\n      label: `GraphQL ${input.path}`,\n    });\n    const headers = applyCookiePlacementsToHeaders({\n      headers: {\n        \"content-type\": \"application/json\",\n        ...input.defaultHeaders,\n        ...input.requestHeaders,\n        ...input.credentialHeaders,\n        ...input.credentialPlacements?.headers,\n      },\n      cookies: input.credentialPlacements?.cookies,\n    });\n\n    const response = yield* Effect.tryPromise({\n      try: () =>\n        fetch(endpoint, {\n          method: \"POST\",\n          headers: new Headers(headers),\n          body: JSON.stringify(requestBody),\n        }),\n      catch: (cause) =>\n        graphqlToolError(`GraphQL request failed for ${input.path}`, cause),\n    });\n    const body = yield* Effect.tryPromise({\n      try: () => parseGraphqlResponseBody(response),\n      catch: (cause) =>\n        graphqlToolError(\n          `Failed decoding GraphQL response for ${input.path}`,\n          cause,\n        ),\n    });\n\n    const responseHeaders: Record<string, string> = {};\n    response.headers.forEach((value, key) => {\n      responseHeaders[key] = value;\n    });\n\n    return {\n      status: response.status,\n      headers: sanitizeResponseHeaders(responseHeaders),\n      body,\n      isError: response.status >= 400 || hasGraphqlErrors(body),\n    };\n  });\n\nconst invokeRawGraphqlTool = (input: {\n  endpoint: string;\n  path: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  args: unknown;\n}) =>\n  Effect.gen(function* () {\n    const record = asRecord(input.args);\n    const query = asString(record.query);\n    if (query === null) {\n      return yield* sourceCoreEffectError(\"graphql/graphql-tools\", `GraphQL query must be a non-empty string for ${input.path}`);\n    }\n\n    return yield* invokeGraphqlHttpRequest({\n      endpoint: input.endpoint,\n      path: input.path,\n      defaultHeaders: input.defaultHeaders,\n      credentialHeaders: input.credentialHeaders,\n      credentialPlacements: input.credentialPlacements,\n      query,\n      variables:\n        record.variables !== undefined ? asRecord(record.variables) : undefined,\n      operationName: asString(record.operationName) ?? undefined,\n      requestHeaders: asStringRecord(record.headers),\n    });\n  });\n\nconst withoutUndefinedEntries = (\n  record: Readonly<Record<string, unknown>>,\n): Record<string, unknown> =>\n  Object.fromEntries(\n    Object.entries(record).filter(([, value]) => value !== undefined),\n  );\n\nconst invokeGraphqlFieldTool = (input: {\n  entry: Pick<\n    GraphqlFieldToolManifestEntry,\n    \"fieldName\" | \"operationName\" | \"operationDocument\"\n  >;\n  endpoint: string;\n  path: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  args: unknown;\n}) =>\n  Effect.gen(function* () {\n    const record = asRecord(input.args);\n    const requestHeaders = asStringRecord(record.headers);\n    const variables = withoutUndefinedEntries(\n      Object.fromEntries(\n        Object.entries(record).filter(([key]) => key !== \"headers\"),\n      ),\n    );\n    const response = yield* invokeGraphqlHttpRequest({\n      endpoint: input.endpoint,\n      path: input.path,\n      defaultHeaders: input.defaultHeaders,\n      credentialHeaders: input.credentialHeaders,\n      credentialPlacements: input.credentialPlacements,\n      query: input.entry.operationDocument,\n      variables,\n      operationName: input.entry.operationName,\n      requestHeaders,\n    });\n    const bodyRecord = asRecord(response.body);\n    const dataRecord = asRecord(bodyRecord.data);\n    const errors = Array.isArray(bodyRecord.errors) ? bodyRecord.errors : [];\n\n    return {\n      data: dataRecord[input.entry.fieldName] ?? null,\n      errors,\n      isError: response.status >= 400 || errors.length > 0,\n    };\n  });\n\nexport const createGraphqlToolsFromManifest = (input: {\n  manifest: GraphqlToolManifest;\n  endpoint: string;\n  namespace: string;\n  sourceKey: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n}): ToolMap => {\n  const endpoint = normalizeHttpUrl(input.endpoint);\n  const definitions = compileGraphqlToolDefinitions(input.manifest);\n\n  return Object.fromEntries(\n    definitions.map((definition) => {\n      const presentation = buildGraphqlToolPresentation({\n        manifest: input.manifest,\n        definition,\n      });\n      const path = input.namespace\n        ? `${input.namespace}.${definition.toolId}`\n        : definition.toolId;\n\n      return [\n        path,\n        createGraphqlToolFromPersistedOperation({\n          path,\n          sourceKey: input.sourceKey,\n          endpoint,\n          description: definition.description,\n          inputSchema: presentation.inputSchema,\n          outputSchema: presentation.outputSchema,\n          exampleInput: presentation.exampleInput,\n          providerData: presentation.providerData,\n          schemaRefTable: input.manifest.schemaRefTable,\n          defaultHeaders: input.defaultHeaders,\n          credentialHeaders: input.credentialHeaders,\n          credentialPlacements: input.credentialPlacements,\n        }),\n      ] as const;\n    }),\n  );\n};\n"
  },
  {
    "path": "packages/sources/graphql/src/index.ts",
    "content": "export {\n  GraphqlOperationTypeSchema,\n  GraphqlToolKindSchema,\n  GraphqlToolProviderDataSchema,\n  type GraphqlOperationType,\n  type GraphqlToolKind,\n  type GraphqlToolProviderData,\n} from \"./provider-data\";\nexport { detectGraphqlSource } from \"./discovery\";\nexport { GraphqlLocalConfigBindingSchema } from \"./local-config\";\nexport * from \"./catalog\";\nexport * from \"./graphql-tools\";\nexport * from \"./adapter\";\n"
  },
  {
    "path": "packages/sources/graphql/src/local-config.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport { StringMapSchema } from \"@executor/source-core\";\n\nexport const GraphqlLocalConfigBindingSchema = Schema.Struct({\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n});\n"
  },
  {
    "path": "packages/sources/graphql/src/provider-data.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nexport const GraphqlToolKindSchema = Schema.Literal(\"request\", \"field\");\n\nexport const GraphqlOperationTypeSchema = Schema.Literal(\"query\", \"mutation\");\n\nexport const GraphqlToolProviderDataSchema = Schema.Struct({\n  kind: Schema.Literal(\"graphql\"),\n  toolKind: GraphqlToolKindSchema,\n  toolId: Schema.String,\n  rawToolId: Schema.NullOr(Schema.String),\n  group: Schema.NullOr(Schema.String),\n  leaf: Schema.NullOr(Schema.String),\n  fieldName: Schema.NullOr(Schema.String),\n  operationType: Schema.NullOr(GraphqlOperationTypeSchema),\n  operationName: Schema.NullOr(Schema.String),\n  operationDocument: Schema.NullOr(Schema.String),\n  queryTypeName: Schema.NullOr(Schema.String),\n  mutationTypeName: Schema.NullOr(Schema.String),\n  subscriptionTypeName: Schema.NullOr(Schema.String),\n});\n\nexport type GraphqlToolKind = typeof GraphqlToolKindSchema.Type;\nexport type GraphqlOperationType = typeof GraphqlOperationTypeSchema.Type;\nexport type GraphqlToolProviderData = typeof GraphqlToolProviderDataSchema.Type;\n"
  },
  {
    "path": "packages/sources/graphql/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/mcp/CHANGELOG.md",
    "content": "# @executor/source-mcp\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n- @executor/runtime-ses@null\n"
  },
  {
    "path": "packages/sources/mcp/package.json",
    "content": "{\n  \"name\": \"@executor/source-mcp\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"scripts\": {\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@executor/auth-mcp-oauth\": \"workspace:*\",\n    \"@executor/ir\": \"workspace:*\",\n    \"@executor/source-core\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"@executor/runtime-ses\": \"workspace:*\",\n    \"@modelcontextprotocol/sdk\": \"^1.26.0\",\n    \"effect\": \"catalog:\"\n  },\n  \"devDependencies\": {\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\",\n    \"zod\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/sources/mcp/src/adapter.ts",
    "content": "import {\n  applyCookiePlacementsToHeaders,\n  type ToolExecutionContext,\n  type ToolInput,\n  type ToolPath,\n} from \"@executor/codemode-core\";\nimport { createPooledMcpConnector } from \"./connection-pool\";\nimport { createSdkMcpConnector, isMcpStdioTransport } from \"./connection\";\nimport {\n  createMcpToolsFromManifest,\n  discoverMcpToolsFromConnector,\n  type McpToolManifest,\n  type McpToolManifestEntry,\n} from \"./tools\";\nimport { detectMcpSource } from \"./discovery\";\nimport {\n  createMcpCatalogFragment,\n  type McpCatalogOperationInput,\n} from \"./catalog\";\nimport { McpLocalConfigBindingSchema } from \"./local-config\";\nimport type { McpServerMetadata } from \"./manifest\";\nimport {\n  contentHash,\n  createSourceCatalogSyncResult,\n  decodeBindingConfig,\n  decodeExecutableBindingPayload,\n  decodeSourceBindingPayload,\n  emptySourceBindingState,\n  encodeBindingConfig,\n  looksLikeGraphqlEndpoint,\n  McpConnectFieldsSchema,\n  OptionalNullableStringSchema,\n  SourceTransportSchema,\n  StringArraySchema,\n  StringMapSchema,\n  createCatalogImportMetadata,\n  EXECUTABLE_BINDING_VERSION,\n  sourceCoreEffectError,\n  type Source,\n  type SourceAdapter,\n  type SourceCatalogSyncResult,\n  type SourceTransport,\n} from \"@executor/source-core\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nconst headersWithAuthCookies = (input: {\n  headers: Readonly<Record<string, string>>;\n  authHeaders: Readonly<Record<string, string>>;\n  authCookies: Readonly<Record<string, string>>;\n}): Record<string, string> =>\n  applyCookiePlacementsToHeaders({\n    headers: {\n      ...input.headers,\n      ...input.authHeaders,\n    },\n    cookies: input.authCookies,\n  });\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst asToolPath = (value: string): ToolPath => value as ToolPath;\n\nconst namespaceFromSourceName = (name: string): string => {\n  const normalized = name\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \".\")\n    .replace(/^\\.+|\\.+$/g, \"\");\n\n  return normalized.length > 0 ? normalized : \"source\";\n};\n\nconst mcpAdapterError = (message: string, cause?: unknown): Error =>\n  sourceCoreEffectError(\n    \"mcp/adapter\",\n    cause === undefined\n      ? message\n      : `${message}: ${cause instanceof Error ? cause.message : String(cause)}`,\n  );\n\nconst OptionalNullableStringArraySchema = Schema.optional(\n  Schema.NullOr(StringArraySchema),\n);\n\nconst McpConnectPayloadSchema = Schema.extend(\n  McpConnectFieldsSchema,\n  Schema.Struct({\n    kind: Schema.Literal(\"mcp\"),\n    endpoint: OptionalNullableStringSchema,\n    name: OptionalNullableStringSchema,\n    namespace: OptionalNullableStringSchema,\n  }),\n);\n\nconst McpExecutorAddInputSchema = Schema.extend(\n  McpConnectFieldsSchema,\n  Schema.Struct({\n    kind: Schema.optional(Schema.Literal(\"mcp\")),\n    endpoint: OptionalNullableStringSchema,\n    name: OptionalNullableStringSchema,\n    namespace: OptionalNullableStringSchema,\n  }),\n);\n\nconst McpBindingConfigSchema = Schema.Struct({\n  transport: Schema.NullOr(SourceTransportSchema),\n  queryParams: Schema.NullOr(StringMapSchema),\n  headers: Schema.NullOr(StringMapSchema),\n  command: Schema.NullOr(Schema.String),\n  args: Schema.NullOr(StringArraySchema),\n  env: Schema.NullOr(StringMapSchema),\n  cwd: Schema.NullOr(Schema.String),\n});\n\ntype McpBindingConfig = typeof McpBindingConfigSchema.Type;\n\nconst McpSourceBindingPayloadSchema = Schema.Struct({\n  transport: Schema.optional(Schema.NullOr(SourceTransportSchema)),\n  queryParams: Schema.optional(Schema.NullOr(StringMapSchema)),\n  headers: Schema.optional(Schema.NullOr(StringMapSchema)),\n  command: Schema.optional(Schema.NullOr(Schema.String)),\n  args: OptionalNullableStringArraySchema,\n  env: Schema.optional(Schema.NullOr(StringMapSchema)),\n  cwd: Schema.optional(Schema.NullOr(Schema.String)),\n});\n\nconst McpExecutableBindingSchema = Schema.Struct({\n  toolId: Schema.String,\n  toolName: Schema.String,\n  displayTitle: Schema.String,\n  title: Schema.NullOr(Schema.String),\n  description: Schema.NullOr(Schema.String),\n  annotations: Schema.NullOr(Schema.Unknown),\n  execution: Schema.NullOr(Schema.Unknown),\n  icons: Schema.NullOr(Schema.Unknown),\n  meta: Schema.NullOr(Schema.Unknown),\n  rawTool: Schema.NullOr(Schema.Unknown),\n  server: Schema.NullOr(Schema.Unknown),\n});\n\ntype McpExecutableBinding = typeof McpExecutableBindingSchema.Type;\n\nconst MCP_BINDING_CONFIG_VERSION = 1;\n\nconst bindingHasAnyField = (\n  value: unknown,\n  fields: readonly string[],\n): boolean =>\n  value !== null &&\n  typeof value === \"object\" &&\n  !Array.isArray(value) &&\n  fields.some((field) => Object.prototype.hasOwnProperty.call(value, field));\n\nconst trimOrNull = (value: string | null | undefined): string | null => {\n  if (value === null || value === undefined) {\n    return null;\n  }\n\n  const trimmed = value.trim();\n  return trimmed.length > 0 ? trimmed : null;\n};\n\nconst normalizeStringArray = (\n  value: ReadonlyArray<string> | null | undefined,\n): string[] | null => {\n  if (!value || value.length === 0) {\n    return null;\n  }\n\n  const normalized = value\n    .map((entry) => entry.trim())\n    .filter((entry) => entry.length > 0);\n\n  return normalized.length > 0 ? normalized : null;\n};\n\nconst normalizeMcpBindingConfig = (\n  bindingConfig: {\n    transport?: SourceTransport | null | undefined;\n    queryParams?: Record<string, string> | null | undefined;\n    headers?: Record<string, string> | null | undefined;\n    command?: string | null | undefined;\n    args?: ReadonlyArray<string> | null | undefined;\n    env?: Record<string, string> | null | undefined;\n    cwd?: string | null | undefined;\n  },\n): Effect.Effect<McpBindingConfig, Error, never> =>\n  Effect.gen(function* () {\n    const command = trimOrNull(bindingConfig.command);\n    const isStdio = isMcpStdioTransport({\n      transport: bindingConfig.transport ?? undefined,\n      command: command ?? undefined,\n    });\n\n    if (isStdio) {\n      if (command === null) {\n        return yield* sourceCoreEffectError(\"mcp/adapter\", \"MCP stdio transport requires a command\");\n      }\n\n      if (bindingConfig.queryParams && Object.keys(bindingConfig.queryParams).length > 0) {\n        return yield* sourceCoreEffectError(\"mcp/adapter\", \"MCP stdio transport does not support query params\");\n      }\n\n      if (bindingConfig.headers && Object.keys(bindingConfig.headers).length > 0) {\n        return yield* sourceCoreEffectError(\"mcp/adapter\", \"MCP stdio transport does not support request headers\");\n      }\n\n      return {\n        transport: \"stdio\",\n        queryParams: null,\n        headers: null,\n        command,\n        args: normalizeStringArray(bindingConfig.args),\n        env: bindingConfig.env ?? null,\n        cwd: trimOrNull(bindingConfig.cwd),\n      } satisfies McpBindingConfig;\n    }\n    if (\n      command !== null ||\n      bindingConfig.args ||\n      bindingConfig.env ||\n      trimOrNull(bindingConfig.cwd) !== null\n    ) {\n      return yield* sourceCoreEffectError(\"mcp/adapter\", 'MCP process settings require transport: \"stdio\"');\n    }\n\n    return {\n      transport: bindingConfig.transport ?? null,\n      queryParams: bindingConfig.queryParams ?? null,\n      headers: bindingConfig.headers ?? null,\n      command: null,\n      args: null,\n      env: null,\n      cwd: null,\n    } satisfies McpBindingConfig;\n  });\n\nconst mcpBindingConfigFromSource = (\n  source: Pick<Source, \"id\" | \"bindingVersion\" | \"binding\">,\n): Effect.Effect<McpBindingConfig, Error, never> =>\n  Effect.gen(function* () {\n    if (bindingHasAnyField(source.binding, [\"specUrl\"])) {\n      return yield* sourceCoreEffectError(\"mcp/adapter\", \"MCP sources cannot define specUrl\");\n    }\n    if (bindingHasAnyField(source.binding, [\"defaultHeaders\"])) {\n      return yield* sourceCoreEffectError(\"mcp/adapter\", \"MCP sources cannot define HTTP source settings\");\n    }\n\n    const bindingConfig = yield* decodeSourceBindingPayload({\n      sourceId: source.id,\n      label: \"MCP\",\n      version: source.bindingVersion,\n      expectedVersion: MCP_BINDING_CONFIG_VERSION,\n      schema: McpSourceBindingPayloadSchema,\n      value: source.binding,\n      allowedKeys: [\"transport\", \"queryParams\", \"headers\", \"command\", \"args\", \"env\", \"cwd\"],\n    });\n\n    return yield* normalizeMcpBindingConfig(bindingConfig);\n  });\n\nconst effectFromMcpManifestEntry = (\n  entry: McpToolManifestEntry,\n): McpCatalogOperationInput[\"effect\"] =>\n  entry.annotations?.readOnlyHint === true ? \"read\" : \"write\";\n\nconst mcpCatalogOperationFromManifestEntry = (input: {\n  entry: McpToolManifestEntry;\n  server: McpServerMetadata | null | undefined;\n}): McpCatalogOperationInput => ({\n  toolId: input.entry.toolId,\n  title: input.entry.displayTitle ?? input.entry.title ?? input.entry.toolName,\n  description: input.entry.description ?? null,\n  effect: effectFromMcpManifestEntry(input.entry),\n  inputSchema: input.entry.inputSchema,\n  outputSchema: input.entry.outputSchema,\n  providerData: {\n    toolId: input.entry.toolId,\n    toolName: input.entry.toolName,\n    displayTitle:\n      input.entry.displayTitle ?? input.entry.title ?? input.entry.toolName,\n    title: input.entry.title ?? null,\n    description: input.entry.description ?? null,\n    annotations: input.entry.annotations ?? null,\n    execution: input.entry.execution ?? null,\n    icons: input.entry.icons ?? null,\n    meta: input.entry.meta ?? null,\n    rawTool: input.entry.rawTool ?? null,\n    server: input.server ?? null,\n  },\n});\n\nexport const catalogSyncResultFromMcpManifest = (input: {\n  source: Source;\n  endpoint: string;\n  manifest: McpToolManifest;\n}): SourceCatalogSyncResult => {\n  const now = Date.now();\n  const manifestJson = JSON.stringify(input.manifest);\n  const manifestHash = contentHash(manifestJson);\n\n  return createSourceCatalogSyncResult({\n    fragment: createMcpCatalogFragment({\n      source: input.source,\n      documents: [\n        {\n          documentKind: \"mcp_manifest\",\n          documentKey: input.endpoint,\n          contentText: manifestJson,\n          fetchedAt: now,\n        },\n      ],\n      operations: input.manifest.tools.map((entry) =>\n        mcpCatalogOperationFromManifestEntry({\n          entry,\n          server: input.manifest.server,\n        }),\n      ),\n    }),\n    importMetadata: createCatalogImportMetadata({\n      source: input.source,\n      adapterKey: \"mcp\",\n    }),\n    sourceHash: manifestHash,\n  });\n};\n\nexport const mcpSourceAdapter = {\n  key: \"mcp\",\n  displayName: \"MCP\",\n  catalogKind: \"imported\",\n  connectStrategy: \"interactive\",\n  credentialStrategy: \"adapter_defined\",\n  bindingConfigVersion: MCP_BINDING_CONFIG_VERSION,\n  providerKey: \"generic_mcp\",\n  defaultImportAuthPolicy: \"reuse_runtime\",\n  connectPayloadSchema: McpConnectPayloadSchema,\n  executorAddInputSchema: McpExecutorAddInputSchema,\n  executorAddHelpText: [\n    'Omit kind or set kind: \"mcp\". For remote servers, provide endpoint plus optional transport/queryParams/headers.',\n    'For local servers, set transport: \"stdio\" and provide command plus optional args/env/cwd.',\n  ],\n  executorAddInputSignatureWidth: 240,\n  localConfigBindingSchema: McpLocalConfigBindingSchema,\n  localConfigBindingFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(mcpBindingConfigFromSource(source), (bindingConfig) => ({\n        transport: bindingConfig.transport,\n        queryParams: bindingConfig.queryParams,\n        headers: bindingConfig.headers,\n        command: bindingConfig.command,\n        args: bindingConfig.args,\n        env: bindingConfig.env,\n        cwd: bindingConfig.cwd,\n      })),\n    ),\n  serializeBindingConfig: (source) =>\n    encodeBindingConfig({\n      adapterKey: \"mcp\",\n      version: MCP_BINDING_CONFIG_VERSION,\n      payloadSchema: McpBindingConfigSchema,\n      payload: Effect.runSync(mcpBindingConfigFromSource(source)),\n    }),\n  deserializeBindingConfig: ({ id, bindingConfigJson }) =>\n    Effect.map(\n      decodeBindingConfig({\n        sourceId: id,\n        label: \"MCP\",\n        adapterKey: \"mcp\",\n        version: MCP_BINDING_CONFIG_VERSION,\n        payloadSchema: McpBindingConfigSchema,\n        value: bindingConfigJson,\n      }),\n      ({ version, payload }) => ({\n        version,\n        payload,\n      }),\n    ),\n  bindingStateFromSource: (source) =>\n    Effect.map(mcpBindingConfigFromSource(source), (bindingConfig) => ({\n      ...emptySourceBindingState,\n      transport: bindingConfig.transport,\n      queryParams: bindingConfig.queryParams,\n      headers: bindingConfig.headers,\n      command: bindingConfig.command,\n      args: bindingConfig.args,\n      env: bindingConfig.env,\n      cwd: bindingConfig.cwd,\n    })),\n  sourceConfigFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(mcpBindingConfigFromSource(source), (bindingConfig) => ({\n        kind: \"mcp\",\n        endpoint: source.endpoint,\n        transport: bindingConfig.transport,\n        queryParams: bindingConfig.queryParams,\n        headers: bindingConfig.headers,\n        command: bindingConfig.command,\n        args: bindingConfig.args,\n        env: bindingConfig.env,\n        cwd: bindingConfig.cwd,\n      })),\n    ),\n  validateSource: (source) =>\n    Effect.gen(function* () {\n      const bindingConfig = yield* mcpBindingConfigFromSource(source);\n\n      return {\n        ...source,\n        bindingVersion: MCP_BINDING_CONFIG_VERSION,\n        binding: {\n          transport: bindingConfig.transport,\n          queryParams: bindingConfig.queryParams,\n          headers: bindingConfig.headers,\n          command: bindingConfig.command,\n          args: bindingConfig.args,\n          env: bindingConfig.env,\n          cwd: bindingConfig.cwd,\n        },\n      };\n    }),\n  shouldAutoProbe: () => false,\n  discoveryPriority: ({ normalizedUrl }) =>\n    looksLikeGraphqlEndpoint(normalizedUrl) ? 350 : 125,\n  detectSource: ({ normalizedUrl, headers }) =>\n    detectMcpSource({\n      normalizedUrl,\n      headers,\n    }),\n  syncCatalog: ({ source, resolveAuthMaterialForSlot }) =>\n    Effect.gen(function* () {\n      const bindingConfig = yield* mcpBindingConfigFromSource(source);\n      const auth = yield* resolveAuthMaterialForSlot(\"import\");\n      const connector = createSdkMcpConnector({\n        endpoint: source.endpoint,\n        transport: bindingConfig.transport ?? undefined,\n        queryParams: {\n          ...bindingConfig.queryParams,\n          ...auth.queryParams,\n        },\n        headers: headersWithAuthCookies({\n          headers: bindingConfig.headers ?? {},\n          authHeaders: auth.headers,\n          authCookies: auth.cookies,\n        }),\n        authProvider: auth.authProvider,\n        command: bindingConfig.command ?? undefined,\n        args: bindingConfig.args ?? undefined,\n        env: bindingConfig.env ?? undefined,\n        cwd: bindingConfig.cwd ?? undefined,\n      });\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect: connector,\n        namespace: source.namespace ?? namespaceFromSourceName(source.name),\n        sourceKey: source.id,\n      }).pipe(\n        Effect.mapError(\n          (cause) =>\n            new Error(\n              `Failed discovering MCP tools for ${source.id}: ${cause.message}`,\n            ),\n        ),\n      );\n\n      return catalogSyncResultFromMcpManifest({\n        source,\n        endpoint: source.endpoint,\n        manifest: discovered.manifest,\n      });\n    }),\n  invoke: (input) =>\n    Effect.gen(function* () {\n        if (input.executable.adapterKey !== \"mcp\") {\n          return yield* sourceCoreEffectError(\n            \"mcp/adapter\",\n            `Expected MCP executable binding, got ${input.executable.adapterKey}`,\n          );\n        }\n        const providerData = (yield* Effect.try({\n          try: () =>\n            decodeExecutableBindingPayload({\n              executableId: input.executable.id,\n              label: \"MCP\",\n              version: input.executable.bindingVersion,\n              expectedVersion: EXECUTABLE_BINDING_VERSION,\n              schema: McpExecutableBindingSchema,\n              value: input.executable.binding,\n            }) as McpExecutableBinding,\n          catch: (cause) =>\n            mcpAdapterError(\"Failed decoding MCP executable binding\", cause),\n        })) as McpExecutableBinding;\n\n        const bindingConfig = yield* mcpBindingConfigFromSource(input.source);\n        const connector = createPooledMcpConnector({\n          connect: createSdkMcpConnector({\n            endpoint: input.source.endpoint,\n            transport: bindingConfig.transport ?? undefined,\n            queryParams: {\n              ...bindingConfig.queryParams,\n              ...input.auth.queryParams,\n            },\n            headers: headersWithAuthCookies({\n              headers: bindingConfig.headers ?? {},\n              authHeaders: input.auth.headers,\n              authCookies: input.auth.cookies,\n            }),\n            authProvider: input.auth.authProvider,\n            command: bindingConfig.command ?? undefined,\n            args: bindingConfig.args ?? undefined,\n            env: bindingConfig.env ?? undefined,\n            cwd: bindingConfig.cwd ?? undefined,\n          }),\n          runId:\n            typeof input.context?.runId === \"string\" && input.context.runId.length > 0\n              ? input.context.runId\n              : undefined,\n          sourceKey: input.source.id,\n        });\n        const tools = createMcpToolsFromManifest({\n          manifest: {\n            version: 2,\n            tools: [\n              {\n                toolId: providerData.toolName,\n                toolName: providerData.toolName,\n                displayTitle:\n                  input.capability.surface.title ??\n                  input.executable.display?.title ??\n                  providerData.toolName,\n                title:\n                  input.capability.surface.title ??\n                  input.executable.display?.title ??\n                  null,\n                description:\n                  input.capability.surface.summary ??\n                  input.capability.surface.description ??\n                  input.executable.display?.summary ??\n                  `MCP tool: ${providerData.toolName}`,\n                annotations: null,\n                execution: null,\n                icons: null,\n                meta: null,\n                rawTool: null,\n                inputSchema: input.descriptor.contract?.inputSchema,\n                outputSchema: input.descriptor.contract?.outputSchema,\n              },\n            ],\n          },\n          connect: connector,\n          sourceKey: input.source.id,\n        });\n        const entry = tools[providerData.toolName] as ToolInput | undefined;\n        const definition =\n          entry &&\n          typeof entry === \"object\" &&\n          entry !== null &&\n          \"tool\" in entry\n            ? entry.tool\n            : entry;\n\n        if (!definition) {\n          return yield* sourceCoreEffectError(\n            \"mcp/adapter\",\n            `Missing MCP tool definition for ${providerData.toolName}`,\n          );\n        }\n\n        const inputShape = input.executable.projection.callShapeId\n          ? input.catalog.symbols[input.executable.projection.callShapeId]\n          : undefined;\n        const payload =\n          inputShape?.kind === \"shape\" && inputShape.node.type !== \"object\"\n            ? asRecord(input.args).input\n            : input.args;\n        const executionContext: ToolExecutionContext | undefined =\n          input.onElicitation\n            ? {\n                path: asToolPath(input.descriptor.path),\n                sourceKey: input.source.id,\n                metadata: {\n                  sourceKey: input.source.id,\n                  interaction: input.descriptor.interaction,\n                  contract: {\n                    ...(input.descriptor.contract?.inputSchema !== undefined\n                      ? { inputSchema: input.descriptor.contract.inputSchema }\n                      : {}),\n                    ...(input.descriptor.contract?.outputSchema !== undefined\n                      ? { outputSchema: input.descriptor.contract.outputSchema }\n                      : {}),\n                  },\n                  providerKind: input.descriptor.providerKind,\n                  providerData: input.descriptor.providerData,\n                },\n                invocation: input.context,\n                onElicitation: input.onElicitation,\n              }\n            : undefined;\n        const result = yield* Effect.tryPromise({\n          try: async () =>\n            await definition.execute(\n              asRecord(payload),\n              executionContext,\n            ),\n          catch: (cause) =>\n            mcpAdapterError(\n              `Failed invoking MCP tool ${providerData.toolName}`,\n              cause,\n            ),\n        });\n        const resultRecord = asRecord(result);\n        const isError = resultRecord.isError === true;\n\n        return {\n          data: isError ? null : (result ?? null),\n          error: isError ? result : null,\n          headers: {},\n          status: null,\n        };\n    }),\n} satisfies SourceAdapter;\n"
  },
  {
    "path": "packages/sources/mcp/src/catalog.ts",
    "content": "import { createCatalogSnapshotV1FromFragments } from \"@executor/ir/catalog\";\nimport {\n  CapabilityIdSchema,\n  DocumentIdSchema,\n  ExecutableIdSchema,\n  ResponseSymbolIdSchema,\n  ScopeIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  Capability,\n  CatalogSnapshotV1,\n  ResponseSymbol,\n  Executable,\n} from \"@executor/ir/model\";\nimport {\n  type BaseCatalogOperationInput,\n  type CatalogFragmentBuilder,\n  type CatalogSourceDocumentInput,\n  type JsonSchemaImporter,\n  type Source,\n  EXECUTABLE_BINDING_VERSION,\n  buildCatalogFragment,\n  createCatalogImportMetadata,\n  docsFrom,\n  interactionForEffect,\n  isObjectLikeJsonSchema,\n  mutableRecord,\n  provenanceFor,\n  responseSetFromSingleResponse,\n  schemaWithMergedDefs,\n  stableHash,\n  toolPathSegments,\n} from \"@executor/source-core\";\n\nimport type {\n  McpServerMetadata,\n  McpToolAnnotations,\n  McpToolExecution,\n} from \"./manifest\";\n\nexport type McpCatalogOperationInput = BaseCatalogOperationInput & {\n  providerData: {\n    toolId: string;\n    toolName: string;\n    displayTitle: string;\n    title: string | null;\n    description: string | null;\n    annotations: McpToolAnnotations | null;\n    execution: McpToolExecution | null;\n    icons: unknown[] | null;\n    meta: unknown;\n    rawTool: unknown;\n    server: McpServerMetadata | null;\n  };\n};\n\nconst mcpResumeSupport = (\n  execution: McpCatalogOperationInput[\"providerData\"][\"execution\"],\n): boolean =>\n  execution?.taskSupport === \"optional\" ||\n  execution?.taskSupport === \"required\";\n\nconst mcpSemanticsForOperation = (input: {\n  effect: McpCatalogOperationInput[\"effect\"];\n  annotations: McpCatalogOperationInput[\"providerData\"][\"annotations\"];\n}): Capability[\"semantics\"] => {\n  const safe = input.effect === \"read\";\n\n  return {\n    effect: input.effect,\n    safe,\n    idempotent: safe || input.annotations?.idempotentHint === true,\n    destructive: safe ? false : input.annotations?.destructiveHint !== false,\n  };\n};\n\nconst createMcpCapability = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\" | \"name\" | \"namespace\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  serviceScopeId: ReturnType<typeof ScopeIdSchema.make>;\n  operation: McpCatalogOperationInput;\n  importer: JsonSchemaImporter;\n}) => {\n  const toolPath = toolPathSegments(\n    input.source,\n    input.operation.providerData.toolId,\n  );\n  const capabilityId = CapabilityIdSchema.make(\n    `cap_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n    })}`,\n  );\n  const executableId = ExecutableIdSchema.make(\n    `exec_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n      protocol: \"mcp\",\n    })}`,\n  );\n  const outputShapeId =\n    input.operation.outputSchema !== undefined\n      ? input.importer.importSchema(\n          input.operation.outputSchema,\n          `#/mcp/${input.operation.providerData.toolId}/output`,\n        )\n      : undefined;\n  const callShapeId =\n    input.operation.inputSchema === undefined\n      ? input.importer.importSchema(\n          {\n            type: \"object\",\n            properties: {},\n            additionalProperties: false,\n          },\n          `#/mcp/${input.operation.providerData.toolId}/call`,\n        )\n      : isObjectLikeJsonSchema(input.operation.inputSchema)\n        ? input.importer.importSchema(\n            input.operation.inputSchema,\n            `#/mcp/${input.operation.providerData.toolId}/call`,\n            input.operation.inputSchema,\n          )\n        : input.importer.importSchema(\n            schemaWithMergedDefs(\n              {\n                type: \"object\",\n                properties: {\n                  input: input.operation.inputSchema,\n                },\n                required: [\"input\"],\n                additionalProperties: false,\n              },\n              input.operation.inputSchema,\n            ),\n            `#/mcp/${input.operation.providerData.toolId}/call`,\n          );\n  const resultStatusShapeId = input.importer.importSchema(\n    { type: \"null\" },\n    `#/mcp/${input.operation.providerData.toolId}/status`,\n  );\n\n  const responseId = ResponseSymbolIdSchema.make(\n    `response_${stableHash({ capabilityId })}`,\n  );\n  mutableRecord(input.catalog.symbols)[responseId] = {\n    id: responseId,\n    kind: \"response\",\n    ...(docsFrom({\n      description:\n        input.operation.providerData.description ?? input.operation.description,\n    })\n      ? {\n          docs: docsFrom({\n            description:\n              input.operation.providerData.description ??\n              input.operation.description,\n          })!,\n        }\n      : {}),\n    ...(outputShapeId\n      ? {\n          contents: [\n            {\n              mediaType: \"application/json\",\n              shapeId: outputShapeId,\n            },\n          ],\n        }\n      : {}),\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/mcp/${input.operation.providerData.toolId}/response`,\n    ),\n  } satisfies ResponseSymbol;\n  const responseSetId = responseSetFromSingleResponse({\n    catalog: input.catalog,\n    responseId,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/mcp/${input.operation.providerData.toolId}/responseSet`,\n    ),\n  });\n\n  mutableRecord(input.catalog.executables)[executableId] = {\n    id: executableId,\n    capabilityId,\n    scopeId: input.serviceScopeId,\n    adapterKey: \"mcp\",\n    bindingVersion: EXECUTABLE_BINDING_VERSION,\n    binding: input.operation.providerData,\n    projection: {\n      responseSetId,\n      callShapeId,\n      ...(outputShapeId ? { resultDataShapeId: outputShapeId } : {}),\n      resultStatusShapeId,\n    },\n    display: {\n      protocol: \"mcp\",\n      method: null,\n      pathTemplate: null,\n      operationId: input.operation.providerData.toolName,\n      group: null,\n      leaf: input.operation.providerData.toolName,\n      rawToolId: input.operation.providerData.toolId,\n      title: input.operation.providerData.displayTitle,\n      summary:\n        input.operation.providerData.description ??\n        input.operation.description ??\n        null,\n    },\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/mcp/${input.operation.providerData.toolId}/executable`,\n    ),\n  } satisfies Executable;\n\n  const interaction = interactionForEffect(input.operation.effect);\n  mutableRecord(input.catalog.capabilities)[capabilityId] = {\n    id: capabilityId,\n    serviceScopeId: input.serviceScopeId,\n    surface: {\n      toolPath,\n      title: input.operation.providerData.displayTitle,\n      ...(input.operation.providerData.description\n        ? { summary: input.operation.providerData.description }\n        : {}),\n    },\n    semantics: mcpSemanticsForOperation({\n      effect: input.operation.effect,\n      annotations: input.operation.providerData.annotations,\n    }),\n    auth: { kind: \"none\" },\n    interaction: {\n      ...interaction,\n      resume: {\n        supported: mcpResumeSupport(input.operation.providerData.execution),\n      },\n    },\n    executableIds: [executableId],\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/mcp/${input.operation.providerData.toolId}/capability`,\n    ),\n  } satisfies Capability;\n};\n\nexport const createMcpCatalogFragment = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly McpCatalogOperationInput[];\n}) =>\n  buildCatalogFragment({\n    source: input.source,\n    documents: input.documents,\n    registerOperations: ({ catalog, documentId, serviceScopeId, importer }) => {\n      for (const operation of input.operations) {\n        createMcpCapability({\n          catalog,\n          source: input.source,\n          documentId,\n          serviceScopeId,\n          operation,\n          importer,\n        });\n      }\n    },\n  });\n\nexport const createMcpCatalogSnapshot = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly McpCatalogOperationInput[];\n}): CatalogSnapshotV1 =>\n  createCatalogSnapshotV1FromFragments({\n    import: createCatalogImportMetadata({\n      source: input.source,\n      adapterKey: \"mcp\",\n    }),\n    fragments: [createMcpCatalogFragment(input)],\n  });\n"
  },
  {
    "path": "packages/sources/mcp/src/connection-pool.ts",
    "content": "import * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Exit from \"effect/Exit\";\nimport * as Scope from \"effect/Scope\";\n\nimport type { McpConnection, McpConnector } from \"./tools\";\n\nexport class McpConnectionPoolError extends Data.TaggedError(\"McpConnectionPoolError\")<{\n  readonly operation: \"connect\" | \"close\";\n  readonly message: string;\n  readonly cause: unknown;\n}> {}\n\ntype PoolEntry = {\n  scope: Scope.CloseableScope;\n  connection: McpConnector;\n};\n\nconst pooledRuns = new Map<string, Map<string, PoolEntry>>();\n\nconst mcpConnectionPoolError = (input: {\n  operation: \"connect\" | \"close\";\n  message: string;\n  cause: unknown;\n}): McpConnectionPoolError => new McpConnectionPoolError(input);\n\nconst deletePoolEntry = (runId: string, sourceKey: string, entry: PoolEntry) => {\n  const runEntries = pooledRuns.get(runId);\n  if (!runEntries || runEntries.get(sourceKey) !== entry) {\n    return;\n  }\n\n  runEntries.delete(sourceKey);\n  if (runEntries.size === 0) {\n    pooledRuns.delete(runId);\n  }\n};\n\nconst closePooledConnection = (\n  connection: McpConnection,\n): Effect.Effect<void, never, never> =>\n  Effect.tryPromise({\n    try: () => Promise.resolve(connection.close?.()),\n    catch: (cause) =>\n      mcpConnectionPoolError({\n        operation: \"close\",\n        message: \"Failed closing pooled MCP connection\",\n        cause,\n      }),\n  }).pipe(Effect.ignore);\n\nconst createPoolEntry = (connect: McpConnector): PoolEntry => {\n  const scope = Effect.runSync(Scope.make());\n  const connection = Effect.runSync(\n    Effect.cached(\n      Effect.acquireRelease(\n        connect.pipe(\n          Effect.mapError((cause) =>\n            mcpConnectionPoolError({\n              operation: \"connect\",\n              message: \"Failed creating pooled MCP connection\",\n              cause,\n            })),\n        ),\n        closePooledConnection,\n      ).pipe(Scope.extend(scope)),\n    ),\n  );\n\n  return {\n    scope,\n    connection,\n  };\n};\n\nconst getOrCreatePoolEntry = (input: {\n  runId: string;\n  sourceKey: string;\n  connect: McpConnector;\n}): PoolEntry => {\n  const existing = pooledRuns.get(input.runId)?.get(input.sourceKey);\n  if (existing) {\n    return existing;\n  }\n\n  let runEntries = pooledRuns.get(input.runId);\n  if (!runEntries) {\n    runEntries = new Map<string, PoolEntry>();\n    pooledRuns.set(input.runId, runEntries);\n  }\n\n  const entry = createPoolEntry(input.connect);\n  entry.connection = entry.connection.pipe(\n    Effect.tapError(() =>\n      Effect.sync(() => {\n        deletePoolEntry(input.runId, input.sourceKey, entry);\n      }).pipe(\n        Effect.zipRight(closePoolEntry(entry)),\n      )),\n  );\n  runEntries.set(input.sourceKey, entry);\n  return entry;\n};\n\nconst closePoolEntry = (entry: PoolEntry): Effect.Effect<void, never, never> =>\n  Scope.close(entry.scope, Exit.void).pipe(Effect.ignore);\n\nexport const createPooledMcpConnector = (input: {\n  connect: McpConnector;\n  runId?: string;\n  sourceKey?: string;\n}): McpConnector => {\n  if (!input.runId || !input.sourceKey) {\n    return input.connect;\n  }\n\n  return Effect.gen(function* () {\n    const entry = getOrCreatePoolEntry({\n      runId: input.runId!,\n      sourceKey: input.sourceKey!,\n      connect: input.connect,\n    });\n    const connection = yield* entry.connection;\n    return {\n      client: connection.client,\n      close: async () => undefined,\n    };\n  });\n};\n\nexport const clearMcpConnectionPoolRun = (\n  runId: string,\n): Effect.Effect<void, never, never> => {\n  const runEntries = pooledRuns.get(runId);\n  if (!runEntries) {\n    return Effect.void;\n  }\n\n  pooledRuns.delete(runId);\n  return Effect.forEach([...runEntries.values()], closePoolEntry, {\n    discard: true,\n  });\n};\n\nexport const clearAllMcpConnectionPools = (): Effect.Effect<void, never, never> => {\n  const runEntries = [...pooledRuns.values()].flatMap((entries) => [...entries.values()]);\n  pooledRuns.clear();\n  return Effect.forEach(runEntries, closePoolEntry, {\n    discard: true,\n  });\n};\n"
  },
  {
    "path": "packages/sources/mcp/src/connection.ts",
    "content": "import type { OAuthClientProvider } from \"@modelcontextprotocol/sdk/client/auth.js\";\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { McpConnection, McpConnector } from \"./tools\";\n\nexport type McpTransportPreference = \"auto\" | \"streamable-http\" | \"sse\" | \"stdio\";\n\nexport type CreateSdkMcpConnectorInput = {\n  endpoint?: string;\n  transport?: McpTransportPreference;\n  queryParams?: Record<string, string>;\n  headers?: Record<string, string>;\n  authProvider?: OAuthClientProvider;\n  clientName?: string;\n  clientVersion?: string;\n  command?: string;\n  args?: ReadonlyArray<string>;\n  env?: Record<string, string>;\n  cwd?: string;\n};\n\nexport class McpConnectionError extends Data.TaggedError(\"McpConnectionError\")<{\n  readonly transport: McpTransportPreference;\n  readonly message: string;\n  readonly cause: unknown;\n}> {}\n\nexport const isMcpStdioTransport = (\n  input: Pick<CreateSdkMcpConnectorInput, \"transport\" | \"command\">,\n): boolean =>\n  input.transport === \"stdio\"\n  || (typeof input.command === \"string\" && input.command.trim().length > 0);\n\nconst mcpConnectionError = (input: {\n  transport: McpTransportPreference;\n  message: string;\n  cause: unknown;\n}): McpConnectionError => new McpConnectionError(input);\n\nconst createEndpoint = (input: {\n  endpoint: string | undefined;\n  queryParams: Record<string, string>;\n  transport: Exclude<McpTransportPreference, \"stdio\">;\n}): Effect.Effect<URL, McpConnectionError, never> =>\n  Effect.try({\n    try: () => {\n      if (!input.endpoint) {\n        throw new Error(\"MCP endpoint is required for HTTP/SSE transports\");\n      }\n\n      const url = new URL(input.endpoint);\n\n      for (const [key, value] of Object.entries(input.queryParams)) {\n        url.searchParams.set(key, value);\n      }\n\n      return url;\n    },\n    catch: (cause) =>\n      mcpConnectionError({\n        transport: input.transport,\n        message: \"Failed building MCP endpoint URL\",\n        cause,\n      }),\n  });\n\ntype FetchInput = Parameters<typeof fetch>[0];\ntype FetchInit = Parameters<typeof fetch>[1];\n\nconst mergeHeadersForFetch = (\n  input: FetchInput,\n  init: FetchInit,\n  headers: Record<string, string>,\n): Promise<Response> => {\n  const mergedHeaders = new Headers(init?.headers ?? {});\n\n  for (const [key, value] of Object.entries(headers)) {\n    mergedHeaders.set(key, value);\n  }\n\n  return fetch(input, {\n    ...init,\n    headers: mergedHeaders,\n  });\n};\n\nconst connectionFromClient = (client: Client): McpConnection => ({\n  client,\n  close: () => client.close(),\n});\n\nconst closeClient = (client: Client): Effect.Effect<void, never, never> =>\n  Effect.tryPromise({\n    try: () => client.close(),\n    catch: (cause) =>\n      mcpConnectionError({\n        transport: \"auto\",\n        message: \"Failed closing MCP client\",\n        cause,\n      }),\n  }).pipe(Effect.ignore);\n\ntype DynamicImport = <TModule>(specifier: string) => Promise<TModule>;\n\nconst dynamicImport = new Function(\n  \"specifier\",\n  \"return import(specifier)\",\n) as DynamicImport;\n\nconst loadStdioClientTransport = (): Effect.Effect<\n  typeof import(\"@modelcontextprotocol/sdk/client/stdio.js\").StdioClientTransport,\n  McpConnectionError,\n  never\n> =>\n  Effect.tryPromise({\n    try: async () =>\n      (await dynamicImport<typeof import(\"@modelcontextprotocol/sdk/client/stdio.js\")>(\n        \"@modelcontextprotocol/sdk/client/stdio.js\",\n      )).StdioClientTransport,\n    catch: (cause) =>\n      mcpConnectionError({\n        transport: \"stdio\",\n        message: \"Failed loading MCP stdio transport\",\n        cause,\n      }),\n  });\n\nconst connectClient = (input: {\n  createClient: () => Client;\n  transport: McpTransportPreference;\n  createTransport: () => Parameters<Client[\"connect\"]>[0];\n}): Effect.Effect<McpConnection, McpConnectionError, never> =>\n  Effect.gen(function* () {\n    const client = input.createClient();\n    const transportInstance = input.createTransport();\n\n    return yield* Effect.tryPromise({\n      try: () => client.connect(transportInstance),\n      catch: (cause) =>\n        mcpConnectionError({\n          transport: input.transport,\n          message: `Failed connecting to MCP server via ${input.transport}`,\n          cause,\n        }),\n    }).pipe(\n      Effect.as(connectionFromClient(client)),\n      Effect.onError(() => closeClient(client)),\n    );\n  });\n\nexport const createSdkMcpConnector = (\n  input: CreateSdkMcpConnectorInput,\n): McpConnector => {\n  const headers = input.headers ?? {};\n  const transport = isMcpStdioTransport(input)\n    ? \"stdio\"\n    : (input.transport ?? \"auto\");\n  const requestInit = Object.keys(headers).length > 0\n    ? { headers }\n    : undefined;\n\n  const createClient = () =>\n    new Client(\n      {\n        name: input.clientName ?? \"executor-codemode-mcp\",\n        version: input.clientVersion ?? \"0.1.0\",\n      },\n      { capabilities: { elicitation: { form: {}, url: {} } } },\n    );\n\n  return Effect.gen(function* () {\n    if (transport === \"stdio\") {\n      const command = input.command?.trim();\n      if (!command) {\n        return yield* mcpConnectionError({\n          transport: \"stdio\",\n          message: \"MCP stdio transport requires a command\",\n          cause: new Error(\"Missing MCP stdio command\"),\n        });\n      }\n\n      const StdioClientTransport = yield* loadStdioClientTransport();\n      return yield* connectClient({\n        createClient,\n        transport: \"stdio\",\n        createTransport: () =>\n          new StdioClientTransport({\n            command,\n            args: input.args ? [...input.args] : undefined,\n            env: input.env,\n            cwd: input.cwd?.trim().length ? input.cwd.trim() : undefined,\n          }),\n      });\n    }\n\n    const endpoint = yield* createEndpoint({\n      endpoint: input.endpoint,\n      queryParams: input.queryParams ?? {},\n      transport,\n    });\n\n    const connectStreamableHttp = connectClient({\n      createClient,\n      transport: \"streamable-http\",\n      createTransport: () =>\n        new StreamableHTTPClientTransport(endpoint, {\n          requestInit,\n          authProvider: input.authProvider,\n        }),\n    });\n\n    if (transport === \"streamable-http\") {\n      return yield* connectStreamableHttp;\n    }\n\n    const connectSse = connectClient({\n      createClient,\n      transport: \"sse\",\n      createTransport: () =>\n        new SSEClientTransport(endpoint, {\n          authProvider: input.authProvider,\n          requestInit,\n          eventSourceInit: requestInit\n            ? {\n                fetch: (requestInput: FetchInput, requestOptions: FetchInit) =>\n                  mergeHeadersForFetch(requestInput, requestOptions, headers),\n              }\n            : undefined,\n        }),\n    });\n\n    if (transport === \"sse\") {\n      return yield* connectSse;\n    }\n\n    return yield* connectStreamableHttp.pipe(\n      Effect.catchAll(() => connectSse),\n    );\n  });\n};\n"
  },
  {
    "path": "packages/sources/mcp/src/discovery.ts",
    "content": "import {\n  defaultNameFromEndpoint,\n  namespaceFromSourceName,\n  noneAuthInference,\n  supportedAuthInference,\n  type SourceDiscoveryProbeInput,\n  type SourceDiscoveryResult,\n} from \"@executor/source-core\";\nimport { startMcpOAuthAuthorization } from \"@executor/auth-mcp-oauth\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\n\nimport { createSdkMcpConnector } from \"./connection\";\nimport { discoverMcpToolsFromConnector } from \"./tools\";\n\nexport const detectMcpSource = (\n  input: SourceDiscoveryProbeInput,\n): Effect.Effect<SourceDiscoveryResult | null, never, never> =>\n  Effect.gen(function* () {\n    const connector = createSdkMcpConnector({\n      endpoint: input.normalizedUrl,\n      headers: input.headers,\n      transport: \"auto\",\n    });\n\n    const discovered = yield* Effect.either(discoverMcpToolsFromConnector({\n      connect: connector,\n      sourceKey: \"discovery\",\n      namespace: namespaceFromSourceName(defaultNameFromEndpoint(input.normalizedUrl)),\n    }));\n\n    if (Either.isRight(discovered)) {\n      const name = defaultNameFromEndpoint(input.normalizedUrl);\n      return {\n        detectedKind: \"mcp\",\n        confidence: \"high\",\n        endpoint: input.normalizedUrl,\n        specUrl: null,\n        name,\n        namespace: namespaceFromSourceName(name),\n        transport: \"auto\",\n        authInference: noneAuthInference(\n          \"MCP tool discovery succeeded without an advertised auth requirement\",\n          \"medium\",\n        ),\n        toolCount: discovered.right.manifest.tools.length,\n        warnings: [],\n      } satisfies SourceDiscoveryResult;\n    }\n\n    const oauthProbe = yield* Effect.either(startMcpOAuthAuthorization({\n      endpoint: input.normalizedUrl,\n      redirectUrl: \"http://127.0.0.1/executor/discovery/oauth/callback\",\n      state: \"source-discovery\",\n    }));\n\n    if (Either.isLeft(oauthProbe)) {\n      return null;\n    }\n\n    const name = defaultNameFromEndpoint(input.normalizedUrl);\n    return {\n      detectedKind: \"mcp\",\n      confidence: \"high\",\n      endpoint: input.normalizedUrl,\n      specUrl: null,\n      name,\n      namespace: namespaceFromSourceName(name),\n      transport: \"auto\",\n      authInference: supportedAuthInference(\"oauth2\", {\n        confidence: \"high\",\n        reason: \"MCP endpoint advertised OAuth during discovery\",\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        parameterName: null,\n        parameterLocation: null,\n        oauthAuthorizationUrl: oauthProbe.right.authorizationUrl,\n        oauthTokenUrl: oauthProbe.right.authorizationServerUrl,\n        oauthScopes: [],\n      }),\n      toolCount: null,\n      warnings: [\"OAuth is required before MCP tools can be listed.\"],\n    } satisfies SourceDiscoveryResult;\n  }).pipe(Effect.catchAll(() => Effect.succeed(null)));\n"
  },
  {
    "path": "packages/sources/mcp/src/elicitation-bridge.ts",
    "content": "import {\n  ElicitRequestSchema,\n  UrlElicitationRequiredError,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport * as Either from \"effect/Either\";\nimport * as Option from \"effect/Option\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Schema from \"effect/Schema\";\n\nimport type {\n  ElicitationRequest,\n  ElicitationResponse,\n  ToolExecutionContext,\n  ToolPath,\n} from \"@executor/codemode-core\";\n\nconst UnknownRecordSchema = Schema.Record({\n  key: Schema.String,\n  value: Schema.Unknown,\n});\n\nconst decodeUnknownRecordOption = Schema.decodeUnknownOption(UnknownRecordSchema);\n\nexport const readUnknownRecord = (input: unknown): Record<string, unknown> => {\n  const decoded = decodeUnknownRecordOption(input);\n  return Option.isSome(decoded) ? decoded.value : {};\n};\n\nconst RawMcpElicitationParamsSchema = Schema.Struct({\n  mode: Schema.optional(Schema.Union(Schema.Literal(\"form\"), Schema.Literal(\"url\"))),\n  message: Schema.optional(Schema.String),\n  requestedSchema: Schema.optional(UnknownRecordSchema),\n  url: Schema.optional(Schema.String),\n  elicitationId: Schema.optional(Schema.String),\n  id: Schema.optional(Schema.String),\n});\n\nconst decodeMcpElicitationParamsEither = Schema.decodeUnknownEither(\n  RawMcpElicitationParamsSchema,\n);\n\nexport const readMcpElicitationRequest = (input: unknown): ElicitationRequest => {\n  const decoded = decodeMcpElicitationParamsEither(input);\n  if (Either.isLeft(decoded)) {\n    throw new Error(\n      `Invalid MCP elicitation request params: ${ParseResult.TreeFormatter.formatErrorSync(decoded.left)}`,\n    );\n  }\n\n  const params = decoded.right;\n  const message = params.message ?? \"\";\n\n  if (params.mode === \"url\") {\n    return {\n      mode: \"url\",\n      message,\n      url: params.url ?? \"\",\n      elicitationId: params.elicitationId ?? params.id ?? \"\",\n    };\n  }\n\n  return {\n    mode: \"form\",\n    message,\n    requestedSchema: params.requestedSchema ?? {},\n  };\n};\n\nexport const toMcpElicitationResponse = (\n  response: ElicitationResponse,\n): { action: \"accept\" | \"decline\" | \"cancel\"; content?: Record<string, unknown> } =>\n  response.action === \"accept\"\n    ? {\n        action: \"accept\",\n        ...(response.content ? { content: response.content } : {}),\n      }\n    : { action: response.action };\n\ntype McpClientWithElicitationHandler = {\n  setRequestHandler: (\n    schema: typeof ElicitRequestSchema,\n    handler: (request: { params: unknown }) => Promise<unknown>,\n  ) => void;\n};\n\nexport const hasElicitationRequestHandler = (\n  value: unknown,\n): value is McpClientWithElicitationHandler =>\n  typeof (value as { setRequestHandler?: unknown }).setRequestHandler === \"function\";\n\nexport const createInteractionId = (input: {\n  path: ToolPath;\n  invocation?: ToolExecutionContext[\"invocation\"];\n  elicitation: ElicitationRequest;\n  sequence?: number;\n}): string => {\n  if (input.elicitation.mode === \"url\" && input.elicitation.elicitationId.length > 0) {\n    return input.elicitation.elicitationId;\n  }\n\n  const parts = [\n    input.invocation?.runId,\n    input.invocation?.callId,\n    input.path,\n    \"mcp\",\n    typeof input.sequence === \"number\" ? String(input.sequence) : undefined,\n  ].filter(\n    (part): part is string => typeof part === \"string\" && part.length > 0,\n  );\n\n  return parts.join(\":\");\n};\n\nexport const isUrlElicitationRequiredError = (\n  cause: unknown,\n): cause is UrlElicitationRequiredError =>\n  cause instanceof UrlElicitationRequiredError\n  && Array.isArray(cause.elicitations)\n  && cause.elicitations.length > 0;\n"
  },
  {
    "path": "packages/sources/mcp/src/elicitation-form.test.ts",
    "content": "import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { InMemoryTransport } from \"@modelcontextprotocol/sdk/inMemory.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport { z } from \"zod/v4\";\n\nimport { makeToolInvokerFromTools } from \"@executor/codemode-core\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\n\nimport {\n  createMcpConnectorFromClient,\n  discoverMcpToolsFromConnector,\n} from \"./tools\";\n\ntype McpTestPair = {\n  server: McpServer;\n  client: Client;\n};\n\nconst registerFormGatedEchoTool = (server: McpServer) => {\n  server.registerTool(\n    \"gated_echo\",\n    {\n      description: \"Asks for approval before echoing\",\n      inputSchema: {\n        value: z.string(),\n      },\n    },\n    async ({ value }: { value: string }) => {\n      const response = await server.server.elicitInput({\n        mode: \"form\",\n        message: `Approve gated echo for ${value}?`,\n        requestedSchema: {\n          type: \"object\",\n          properties: {\n            approve: {\n              type: \"boolean\",\n              title: \"Approve\",\n            },\n          },\n          required: [\"approve\"],\n        },\n      });\n\n      if (\n        response.action !== \"accept\"\n        || !response.content\n        || response.content.approve !== true\n      ) {\n        return {\n          content: [{ type: \"text\", text: \"denied\" }],\n        };\n      }\n\n      return {\n        content: [{ type: \"text\", text: `approved:${value}` }],\n      };\n    },\n  );\n};\n\nconst makeFormElicitationPair = Effect.acquireRelease(\n  Effect.promise<McpTestPair>(async () => {\n    const server = new McpServer(\n      { name: \"codemode-mcp-form-elicitation-test-server\", version: \"1.0.0\" },\n      { capabilities: {} },\n    );\n\n    registerFormGatedEchoTool(server);\n\n    const client = new Client(\n      { name: \"codemode-mcp-form-elicitation-test-client\", version: \"1.0.0\" },\n      { capabilities: { elicitation: { form: {} } } },\n    );\n\n    const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();\n    await Promise.all([\n      server.connect(serverTransport),\n      client.connect(clientTransport),\n    ]);\n\n    return {\n      server,\n      client,\n    };\n  }),\n  ({ server, client }) =>\n    Effect.tryPromise({\n      try: async () => {\n        await client.close();\n        await server.close();\n      },\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\ndescribe(\"codemode-mcp form elicitation\", () => {\n  it.scoped(\"executes form elicitation through runtime callback\", () =>\n    Effect.gen(function* () {\n      const pair = yield* makeFormElicitationPair;\n      const elicitationMessages: string[] = [];\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect: createMcpConnectorFromClient(pair.client),\n        namespace: \"source.form\",\n        sourceKey: \"mcp.form\",\n      });\n\n      const output = yield* makeSesExecutor().execute(\n        'return await tools.source.form.gated_echo({ value: \"from-form\" });',\n        makeToolInvokerFromTools({\n          tools: discovered.tools,\n          onElicitation: ({ elicitation }) =>\n            Effect.gen(function* () {\n              yield* Effect.sync(() => {\n                elicitationMessages.push(elicitation.message);\n              });\n\n              return {\n                action: \"accept\" as const,\n                content: {\n                  approve: true,\n                },\n              };\n            }),\n        }),\n      );\n\n      expect(output.result).toEqual({\n        content: [{ type: \"text\", text: \"approved:from-form\" }],\n      });\n      expect(elicitationMessages).toHaveLength(1);\n      expect(elicitationMessages[0]).toContain(\"Approve gated echo for from-form?\");\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/sources/mcp/src/elicitation.url.test.ts",
    "content": "import { randomUUID } from \"node:crypto\";\n\nimport { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport { z } from \"zod/v4\";\n\nimport { makeToolInvokerFromTools } from \"@executor/codemode-core\";\nimport { makeSesExecutor } from \"@executor/runtime-ses\";\n\nimport { createSdkMcpConnector } from \"./connection\";\nimport { discoverMcpToolsFromConnector } from \"./tools\";\n\ntype UrlMcpServer = {\n  endpoint: string;\n  close: () => Promise<void>;\n};\n\nconst registerBlockingUrlTool = (server: McpServer) => {\n  server.registerTool(\n    \"url_blocking_echo\",\n    {\n      description: \"Requests URL elicitation and continues after accept\",\n      inputSchema: {\n        value: z.string(),\n      },\n    },\n    async ({ value }: { value: string }) => {\n      const response = await server.server.elicitInput({\n        mode: \"url\",\n        message: `Open the URL to approve ${value}`,\n        url: `https://example.com/approve?value=${encodeURIComponent(value)}`,\n        elicitationId: `blocking-${value}`,\n      });\n\n      if (response.action !== \"accept\") {\n        return {\n          content: [{ type: \"text\", text: \"denied\" }],\n        };\n      }\n\n      return {\n        content: [{ type: \"text\", text: `approved:${value}` }],\n      };\n    },\n  );\n};\n\nconst registerNonBlockingUrlTool = (server: McpServer) => {\n  const seenValues = new Set<string>();\n\n  server.registerTool(\n    \"url_retry_echo\",\n    {\n      description: \"Throws URL elicitation required once, then succeeds\",\n      inputSchema: {\n        value: z.string(),\n      },\n    },\n    async ({ value }: { value: string }) => {\n      if (!seenValues.has(value)) {\n        seenValues.add(value);\n\n        throw new UrlElicitationRequiredError([\n          {\n            mode: \"url\",\n            message: `Authorize and then retry for ${value}`,\n            url: `https://example.com/retry?value=${encodeURIComponent(value)}`,\n            elicitationId: `retry-${value}`,\n          },\n        ]);\n      }\n\n      return {\n        content: [{ type: \"text\", text: `approved-after-retry:${value}` }],\n      };\n    },\n  );\n};\n\nconst makeUrlElicitationServer = (mode: \"blocking\" | \"non_blocking\") =>\n  Effect.acquireRelease(\n    Effect.promise<UrlMcpServer>(\n      () =>\n        new Promise<UrlMcpServer>((resolve, reject) => {\n          const app = createMcpExpressApp({ host: \"127.0.0.1\" });\n          const transports: Record<string, StreamableHTTPServerTransport> = {};\n\n          const createServer = () => {\n            const server = new McpServer(\n              {\n                name: `codemode-mcp-url-${mode}-test-server`,\n                version: \"1.0.0\",\n              },\n              {\n                capabilities: {\n                  tools: {},\n                },\n              },\n            );\n\n            if (mode === \"blocking\") {\n              registerBlockingUrlTool(server);\n            } else {\n              registerNonBlockingUrlTool(server);\n            }\n\n            return server;\n          };\n\n          app.post(\"/mcp\", async (req: any, res: any) => {\n            const sessionIdHeader = req.headers[\"mcp-session-id\"];\n            const sessionId =\n              typeof sessionIdHeader === \"string\"\n                ? sessionIdHeader\n                : Array.isArray(sessionIdHeader)\n                  ? sessionIdHeader[0]\n                  : undefined;\n\n            try {\n              let transport: StreamableHTTPServerTransport;\n\n              if (sessionId && transports[sessionId]) {\n                transport = transports[sessionId];\n              } else {\n                transport = new StreamableHTTPServerTransport({\n                  sessionIdGenerator: () => randomUUID(),\n                  onsessioninitialized: (newSessionId) => {\n                    transports[newSessionId] = transport;\n                  },\n                });\n\n                transport.onclose = () => {\n                  const closedSessionId = transport.sessionId;\n                  if (closedSessionId && transports[closedSessionId]) {\n                    delete transports[closedSessionId];\n                  }\n                };\n\n                const server = createServer();\n                await server.connect(transport);\n              }\n\n              await transport.handleRequest(req, res, req.body);\n            } catch (error) {\n              if (!res.headersSent) {\n                res.status(500).json({\n                  jsonrpc: \"2.0\",\n                  error: {\n                    code: -32603,\n                    message:\n                      error instanceof Error ? error.message : \"Internal server error\",\n                  },\n                  id: null,\n                });\n              }\n            }\n          });\n\n          app.get(\"/mcp\", async (req: any, res: any) => {\n            const sessionIdHeader = req.headers[\"mcp-session-id\"];\n            const sessionId =\n              typeof sessionIdHeader === \"string\"\n                ? sessionIdHeader\n                : Array.isArray(sessionIdHeader)\n                  ? sessionIdHeader[0]\n                  : undefined;\n\n            if (!sessionId || !transports[sessionId]) {\n              res.status(400).send(\"Invalid or missing session ID\");\n              return;\n            }\n\n            await transports[sessionId].handleRequest(req, res);\n          });\n\n          app.delete(\"/mcp\", async (req: any, res: any) => {\n            const sessionIdHeader = req.headers[\"mcp-session-id\"];\n            const sessionId =\n              typeof sessionIdHeader === \"string\"\n                ? sessionIdHeader\n                : Array.isArray(sessionIdHeader)\n                  ? sessionIdHeader[0]\n                  : undefined;\n\n            if (!sessionId || !transports[sessionId]) {\n              res.status(400).send(\"Invalid or missing session ID\");\n              return;\n            }\n\n            const transport = transports[sessionId];\n            await transport.handleRequest(req, res, req.body);\n            await transport.close();\n            delete transports[sessionId];\n          });\n\n          const listener = app.listen(0, \"127.0.0.1\", () => {\n            const address = listener.address();\n            if (!address || typeof address === \"string\") {\n              reject(new Error(\"failed to resolve MCP test server address\"));\n              return;\n            }\n\n            resolve({\n              endpoint: `http://127.0.0.1:${address.port}/mcp`,\n              close: async () => {\n                for (const transport of Object.values(transports)) {\n                  await transport.close().catch(() => undefined);\n                }\n\n                await new Promise<void>((closeResolve, closeReject) => {\n                  listener.close((error: Error | undefined) => {\n                    if (error) {\n                      closeReject(error);\n                      return;\n                    }\n                    closeResolve();\n                  });\n                });\n              },\n            });\n          });\n\n          listener.once(\"error\", reject);\n        }),\n    ),\n    (server: UrlMcpServer) =>\n      Effect.tryPromise({\n        try: () => server.close(),\n        catch: (error: unknown) =>\n          error instanceof Error ? error : new Error(String(error)),\n      }).pipe(Effect.orDie),\n  );\n\ndescribe(\"codemode-mcp URL elicitation\", () => {\n  it.scoped(\"supports blocking URL mode elicitation from URL source\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeUrlElicitationServer(\"blocking\");\n      const elicitations: Array<{ mode: string | undefined; message: string }> = [];\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect: createSdkMcpConnector({\n          endpoint: server.endpoint,\n          transport: \"streamable-http\",\n        }),\n        namespace: \"source.url\",\n        sourceKey: \"mcp.url\",\n      });\n\n      const output = yield* makeSesExecutor().execute(\n        'return await tools.source.url.url_blocking_echo({ value: \"from-url-blocking\" });',\n        makeToolInvokerFromTools({\n          tools: discovered.tools,\n          onElicitation: ({ elicitation }) =>\n            Effect.gen(function* () {\n              yield* Effect.sync(() => {\n                elicitations.push({\n                  mode: elicitation.mode,\n                  message: elicitation.message,\n                });\n              });\n\n              return {\n                action: \"accept\" as const,\n              };\n            }),\n        }),\n      );\n\n      expect(output.result).toEqual({\n        content: [{ type: \"text\", text: \"approved:from-url-blocking\" }],\n      });\n      expect(elicitations).toHaveLength(1);\n      expect(elicitations[0].mode).toBe(\"url\");\n      expect(elicitations[0].message).toContain(\"Open the URL to approve from-url-blocking\");\n    }),\n  );\n\n  it.scoped(\"supports non-blocking URL mode retry when server returns URL required error\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeUrlElicitationServer(\"non_blocking\");\n      const elicitations: Array<{ mode: string | undefined; message: string }> = [];\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect: createSdkMcpConnector({\n          endpoint: server.endpoint,\n          transport: \"streamable-http\",\n        }),\n        namespace: \"source.url\",\n        sourceKey: \"mcp.url\",\n      });\n\n      const output = yield* makeSesExecutor().execute(\n        'return await tools.source.url.url_retry_echo({ value: \"from-url-retry\" });',\n        makeToolInvokerFromTools({\n          tools: discovered.tools,\n          onElicitation: ({ elicitation }) =>\n            Effect.gen(function* () {\n              yield* Effect.sync(() => {\n                elicitations.push({\n                  mode: elicitation.mode,\n                  message: elicitation.message,\n                });\n              });\n\n              return {\n                action: \"accept\" as const,\n              };\n            }),\n        }),\n      );\n\n      expect(output.result).toEqual({\n        content: [{ type: \"text\", text: \"approved-after-retry:from-url-retry\" }],\n      });\n      expect(elicitations).toHaveLength(1);\n      expect(elicitations[0].mode).toBe(\"url\");\n      expect(elicitations[0].message).toContain(\"Authorize and then retry for from-url-retry\");\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/sources/mcp/src/index.ts",
    "content": "export {\n  clearAllMcpConnectionPools,\n  clearMcpConnectionPoolRun,\n  createPooledMcpConnector,\n  McpConnectionPoolError,\n} from \"./connection-pool\";\nexport {\n  createSdkMcpConnector,\n  type CreateSdkMcpConnectorInput,\n  McpConnectionError,\n  type McpTransportPreference,\n  isMcpStdioTransport,\n} from \"./connection\";\nexport { detectMcpSource } from \"./discovery\";\nexport { McpLocalConfigBindingSchema } from \"./local-config\";\nexport * from \"./catalog\";\nexport {\n  McpToolsError,\n  createMcpConnectorFromClient,\n  createMcpToolsFromManifest,\n  discoverMcpToolsFromClient,\n  discoverMcpToolsFromConnector,\n  extractMcpToolManifestFromListToolsResult,\n  type McpClientLike,\n  type McpConnection,\n  type McpConnector,\n  type McpDiscoveryElicitationContext,\n  type McpToolManifest,\n  type McpToolManifestEntry,\n} from \"./tools\";\nexport type {\n  McpListToolsMetadata,\n  McpServerCapabilities,\n  McpServerInfo,\n  McpServerMetadata,\n  McpToolAnnotations,\n  McpToolExecution,\n} from \"./manifest\";\nexport * from \"./adapter\";\n"
  },
  {
    "path": "packages/sources/mcp/src/local-config.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport {\n  SourceTransportSchema,\n  StringArraySchema,\n  StringMapSchema,\n} from \"@executor/source-core\";\n\nexport const McpLocalConfigBindingSchema = Schema.Struct({\n  transport: Schema.optional(Schema.NullOr(SourceTransportSchema)),\n  queryParams: Schema.optional(Schema.NullOr(StringMapSchema)),\n  headers: Schema.optional(Schema.NullOr(StringMapSchema)),\n  command: Schema.optional(Schema.NullOr(Schema.String)),\n  args: Schema.optional(Schema.NullOr(StringArraySchema)),\n  env: Schema.optional(Schema.NullOr(StringMapSchema)),\n  cwd: Schema.optional(Schema.NullOr(Schema.String)),\n});\n"
  },
  {
    "path": "packages/sources/mcp/src/manifest.ts",
    "content": "import * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\n\nimport type { ToolPath } from \"@executor/codemode-core\";\n\nexport type McpToolAnnotations = {\n  title: string | null;\n  readOnlyHint: boolean | null;\n  destructiveHint: boolean | null;\n  idempotentHint: boolean | null;\n  openWorldHint: boolean | null;\n};\n\nexport type McpToolExecution = {\n  taskSupport: \"forbidden\" | \"optional\" | \"required\" | null;\n};\n\nexport type McpServerInfo = {\n  name: string;\n  version: string;\n  title: string | null;\n  description: string | null;\n  websiteUrl: string | null;\n  icons: unknown[] | null;\n};\n\nexport type McpServerCapabilities = {\n  experimental: Record<string, unknown> | null;\n  logging: boolean;\n  completions: boolean;\n  prompts: {\n    listChanged: boolean;\n  } | null;\n  resources: {\n    subscribe: boolean;\n    listChanged: boolean;\n  } | null;\n  tools: {\n    listChanged: boolean;\n  } | null;\n  tasks: {\n    list: boolean;\n    cancel: boolean;\n    toolCall: boolean;\n  } | null;\n};\n\nexport type McpServerMetadata = {\n  info: McpServerInfo | null;\n  capabilities: McpServerCapabilities | null;\n  instructions: string | null;\n  rawInfo: unknown;\n  rawCapabilities: unknown;\n};\n\nexport type McpListToolsMetadata = {\n  nextCursor: string | null;\n  meta: unknown;\n  rawResult: unknown;\n};\n\nexport type McpToolManifestEntry = {\n  toolId: string;\n  toolName: string;\n  description: string | null;\n  title?: string | null;\n  displayTitle?: string | null;\n  annotations?: McpToolAnnotations | null;\n  execution?: McpToolExecution | null;\n  icons?: unknown[] | null;\n  meta?: unknown;\n  rawTool?: unknown;\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n};\n\nexport type McpToolManifest = {\n  version: 2;\n  server?: McpServerMetadata | null;\n  listTools?: McpListToolsMetadata | null;\n  tools: readonly McpToolManifestEntry[];\n};\n\nconst sanitizeToolId = (value: string): string => {\n  const normalized = value\n    .trim()\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, \"_\")\n    .replace(/^_+|_+$/g, \"\");\n\n  return normalized.length > 0 ? normalized : \"tool\";\n};\n\nconst uniqueToolId = (value: string, byBase: Map<string, number>): string => {\n  const base = sanitizeToolId(value);\n  const count = (byBase.get(base) ?? 0) + 1;\n  byBase.set(base, count);\n\n  return count === 1 ? base : `${base}_${count}`;\n};\n\nconst asObject = (value: unknown): Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst asOptionalObject = (value: unknown): Record<string, unknown> | null => {\n  const objectValue = asObject(value);\n  return Object.keys(objectValue).length > 0 ? objectValue : null;\n};\n\nconst hasOwn = (value: Record<string, unknown>, key: string): boolean =>\n  Object.prototype.hasOwnProperty.call(value, key);\n\nconst asString = (value: unknown): string | null =>\n  typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n\nconst asBoolean = (value: unknown): boolean | null =>\n  typeof value === \"boolean\" ? value : null;\n\nconst asUnknownArray = (value: unknown): unknown[] | null =>\n  Array.isArray(value) ? value : null;\n\nconst ToolAnnotationsSchema = Schema.Struct({\n  title: Schema.optional(Schema.NullOr(Schema.String)),\n  readOnlyHint: Schema.optional(Schema.Boolean),\n  destructiveHint: Schema.optional(Schema.Boolean),\n  idempotentHint: Schema.optional(Schema.Boolean),\n  openWorldHint: Schema.optional(Schema.Boolean),\n});\n\nconst ToolExecutionSchema = Schema.Struct({\n  taskSupport: Schema.optional(\n    Schema.Literal(\"forbidden\", \"optional\", \"required\"),\n  ),\n});\n\nconst ListedMcpToolSchema = Schema.Struct({\n  name: Schema.String,\n  title: Schema.optional(Schema.NullOr(Schema.String)),\n  description: Schema.optional(Schema.NullOr(Schema.String)),\n  inputSchema: Schema.optional(Schema.Unknown),\n  parameters: Schema.optional(Schema.Unknown),\n  outputSchema: Schema.optional(Schema.Unknown),\n  annotations: Schema.optional(ToolAnnotationsSchema),\n  execution: Schema.optional(ToolExecutionSchema),\n  icons: Schema.optional(Schema.Unknown),\n  _meta: Schema.optional(Schema.Unknown),\n});\n\nconst ListToolsResultSchema = Schema.Struct({\n  tools: Schema.Array(ListedMcpToolSchema),\n  nextCursor: Schema.optional(Schema.NullOr(Schema.String)),\n  _meta: Schema.optional(Schema.Unknown),\n});\n\nconst decodeListToolsResultOption = Schema.decodeUnknownOption(ListToolsResultSchema);\n\nconst readListedTools = (value: unknown): ReadonlyArray<typeof ListedMcpToolSchema.Type> => {\n  const decoded = decodeListToolsResultOption(value);\n  if (Option.isNone(decoded)) {\n    return [];\n  }\n\n  return decoded.value.tools;\n};\n\nconst normalizeToolAnnotations = (value: unknown): McpToolAnnotations | null => {\n  const objectValue = asOptionalObject(value);\n  if (objectValue === null) {\n    return null;\n  }\n\n  const annotations = {\n    title: asString(objectValue.title),\n    readOnlyHint: asBoolean(objectValue.readOnlyHint),\n    destructiveHint: asBoolean(objectValue.destructiveHint),\n    idempotentHint: asBoolean(objectValue.idempotentHint),\n    openWorldHint: asBoolean(objectValue.openWorldHint),\n  } satisfies McpToolAnnotations;\n\n  return Object.values(annotations).some((entry) => entry !== null)\n    ? annotations\n    : null;\n};\n\nconst normalizeToolExecution = (value: unknown): McpToolExecution | null => {\n  const objectValue = asOptionalObject(value);\n  if (objectValue === null) {\n    return null;\n  }\n\n  const taskSupport = objectValue.taskSupport;\n  if (\n    taskSupport !== \"forbidden\"\n    && taskSupport !== \"optional\"\n    && taskSupport !== \"required\"\n  ) {\n    return null;\n  }\n\n  return {\n    taskSupport,\n  };\n};\n\nconst normalizeServerInfo = (value: unknown): McpServerInfo | null => {\n  const objectValue = asOptionalObject(value);\n  const name = objectValue ? asString(objectValue.name) : null;\n  const version = objectValue ? asString(objectValue.version) : null;\n  if (name === null || version === null) {\n    return null;\n  }\n\n  return {\n    name,\n    version,\n    title: asString(objectValue?.title),\n    description: asString(objectValue?.description),\n    websiteUrl: asString(objectValue?.websiteUrl),\n    icons: asUnknownArray(objectValue?.icons),\n  };\n};\n\nconst normalizeServerCapabilities = (value: unknown): McpServerCapabilities | null => {\n  const objectValue = asOptionalObject(value);\n  if (objectValue === null) {\n    return null;\n  }\n\n  const prompts = asObject(objectValue.prompts);\n  const resources = asObject(objectValue.resources);\n  const tools = asObject(objectValue.tools);\n  const tasks = asObject(objectValue.tasks);\n  const taskRequests = asObject(tasks.requests);\n  const taskToolRequests = asObject(taskRequests.tools);\n\n  return {\n    experimental:\n      hasOwn(objectValue, \"experimental\")\n        ? asObject(objectValue.experimental)\n        : null,\n    logging: hasOwn(objectValue, \"logging\"),\n    completions: hasOwn(objectValue, \"completions\"),\n    prompts:\n      !hasOwn(objectValue, \"prompts\")\n        ? null\n        : {\n            listChanged: asBoolean(prompts.listChanged) ?? false,\n          },\n    resources:\n      !hasOwn(objectValue, \"resources\")\n        ? null\n        : {\n            subscribe: asBoolean(resources.subscribe) ?? false,\n            listChanged: asBoolean(resources.listChanged) ?? false,\n          },\n    tools:\n      !hasOwn(objectValue, \"tools\")\n        ? null\n        : {\n            listChanged: asBoolean(tools.listChanged) ?? false,\n          },\n    tasks:\n      !hasOwn(objectValue, \"tasks\")\n        ? null\n        : {\n            list: hasOwn(tasks, \"list\"),\n            cancel: hasOwn(tasks, \"cancel\"),\n            toolCall: hasOwn(taskToolRequests, \"call\"),\n          },\n  };\n};\n\nconst normalizeServerMetadata = (input?: {\n  serverInfo?: unknown;\n  serverCapabilities?: unknown;\n  instructions?: string | null | undefined;\n}): McpServerMetadata | null => {\n  const info = normalizeServerInfo(input?.serverInfo);\n  const capabilities = normalizeServerCapabilities(input?.serverCapabilities);\n  const instructions = asString(input?.instructions);\n  const rawInfo = input?.serverInfo ?? null;\n  const rawCapabilities = input?.serverCapabilities ?? null;\n\n  if (\n    info === null\n    && capabilities === null\n    && instructions === null\n    && rawInfo === null\n    && rawCapabilities === null\n  ) {\n    return null;\n  }\n\n  return {\n    info,\n    capabilities,\n    instructions,\n    rawInfo,\n    rawCapabilities,\n  };\n};\n\nexport const extractMcpToolManifestFromListToolsResult = (\n  listToolsResult: unknown,\n  metadata?: {\n    serverInfo?: unknown;\n    serverCapabilities?: unknown;\n    instructions?: string | null | undefined;\n  },\n): McpToolManifest => {\n  const byBase = new Map<string, number>();\n  const rawListTools = asObject(listToolsResult);\n  const rawListedTools = Array.isArray(rawListTools.tools) ? rawListTools.tools : [];\n\n  const tools = readListedTools(listToolsResult)\n    .map((tool, index): McpToolManifestEntry | null => {\n      const toolName = tool.name.trim();\n      if (toolName.length === 0) {\n        return null;\n      }\n\n      const title = asString(tool.title);\n      const annotations = normalizeToolAnnotations(tool.annotations);\n      const displayTitle = title ?? annotations?.title ?? toolName;\n\n      return {\n        toolId: uniqueToolId(toolName, byBase),\n        toolName,\n        title,\n        displayTitle,\n        description: tool.description ?? null,\n        annotations,\n        execution: normalizeToolExecution(tool.execution),\n        icons: asUnknownArray(tool.icons),\n        meta: tool._meta ?? null,\n        rawTool: rawListedTools[index] ?? null,\n        inputSchema: tool.inputSchema ?? tool.parameters,\n        outputSchema: tool.outputSchema,\n      };\n    })\n    .filter((tool): tool is McpToolManifestEntry => tool !== null);\n\n  return {\n    version: 2,\n    server: normalizeServerMetadata(metadata),\n    listTools: {\n      nextCursor: asString(rawListTools.nextCursor),\n      meta: rawListTools._meta ?? null,\n      rawResult: listToolsResult,\n    },\n    tools,\n  };\n};\n\nexport const joinToolPath = (namespace: string | undefined, toolId: string): ToolPath => {\n  if (!namespace || namespace.trim().length === 0) {\n    return toolId as ToolPath;\n  }\n\n  return `${namespace}.${toolId}` as ToolPath;\n};\n"
  },
  {
    "path": "packages/sources/mcp/src/tools.test.ts",
    "content": "import { createMcpExpressApp } from \"@modelcontextprotocol/sdk/server/express.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StreamableHTTPServerTransport } from \"@modelcontextprotocol/sdk/server/streamableHttp.js\";\nimport { UrlElicitationRequiredError } from \"@modelcontextprotocol/sdk/types.js\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { assertInstanceOf, assertTrue } from \"@effect/vitest/utils\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport { z } from \"zod/v4\";\n\nimport type {\n  ToolDefinition,\n  ToolInput,\n  ToolMap,\n  ToolPath,\n} from \"@executor/codemode-core\";\n\nimport { createSdkMcpConnector } from \"./connection\";\nimport {\n  McpToolsError,\n  discoverMcpToolsFromConnector,\n  extractMcpToolManifestFromListToolsResult,\n} from \"./tools\";\n\nconst resolveToolDefinition = (value: ToolInput): ToolDefinition =>\n  typeof value === \"object\" && value !== null && \"tool\" in value\n    ? value\n    : { tool: value };\n\nconst resolveToolExecutor = (\n  tools: ToolMap,\n  path: string,\n): ((args: unknown) => Promise<unknown>) => {\n  const candidate = tools[path];\n  if (!candidate) {\n    throw new Error(`Missing tool path: ${path}`);\n  }\n\n  const resolved = resolveToolDefinition(candidate);\n  if (!resolved.tool.execute) {\n    throw new Error(`Tool has no execute function: ${path}`);\n  }\n\n  return (args: unknown) => Promise.resolve(resolved.tool.execute?.(args));\n};\n\ntype RealMcpServer = {\n  endpoint: string;\n  seenValues: string[];\n  close: () => Promise<void>;\n};\n\nconst makeRealMcpServer = Effect.acquireRelease(\n  Effect.promise<RealMcpServer>(\n    () =>\n      new Promise<RealMcpServer>((resolve, reject) => {\n        const seenValues: string[] = [];\n\n        const createServerForRequest = () => {\n          const mcp = new McpServer(\n            {\n              name: \"codemode-mcp-test-server\",\n              version: \"1.0.0\",\n            },\n            {\n              capabilities: {\n                tools: {},\n              },\n            },\n          );\n\n          mcp.registerTool(\n            \"echo\",\n            {\n              description: \"Echoes the input value\",\n              inputSchema: {\n                value: z.string(),\n              },\n            },\n            async ({ value }: { value: string }) => {\n              seenValues.push(value);\n              return {\n                content: [{ type: \"text\", text: `echo:${value}` }],\n              };\n            },\n          );\n\n          const transport = new StreamableHTTPServerTransport({\n            sessionIdGenerator: undefined,\n          });\n\n          return { mcp, transport };\n        };\n\n        const app = createMcpExpressApp({ host: \"127.0.0.1\" });\n\n        const handle = async (req: any, res: any, parsedBody?: unknown) => {\n          const { mcp, transport } = createServerForRequest();\n          try {\n            await mcp.connect(transport);\n            await transport.handleRequest(req, res, parsedBody);\n          } finally {\n            await transport.close().catch(() => undefined);\n            await mcp.close().catch(() => undefined);\n          }\n        };\n\n        app.post(\"/mcp\", async (req: any, res: any) => {\n          await handle(req, res, req.body);\n        });\n\n        app.get(\"/mcp\", async (req: any, res: any) => {\n          await handle(req, res);\n        });\n\n        app.delete(\"/mcp\", async (req: any, res: any) => {\n          await handle(req, res, req.body);\n        });\n\n        const listener = app.listen(0, \"127.0.0.1\", () => {\n          const address = listener.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"failed to resolve MCP test server address\"));\n            return;\n          }\n\n          resolve({\n            endpoint: `http://127.0.0.1:${address.port}/mcp`,\n            seenValues,\n            close: async () => {\n              await new Promise<void>((closeResolve, closeReject) => {\n                listener.close((error: Error | undefined) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n                  closeResolve();\n                });\n              });\n            },\n          });\n        });\n\n        listener.once(\"error\", reject);\n      }),\n  ),\n  (server: RealMcpServer) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\n\ndescribe(\"codemode-mcp\", () => {\n  it.effect(\"extracts stable unique MCP tool ids\", () =>\n    Effect.gen(function* () {\n      const manifest = extractMcpToolManifestFromListToolsResult({\n        tools: [\n          { name: \"Read File\", description: \"Reads a file\" },\n          { name: \"Read.File\", description: \"Also reads a file\" },\n          { name: \"List Users\", description: null },\n        ],\n      });\n\n      expect(manifest.version).toBe(2);\n      expect(manifest.tools.map((tool) => tool.toolId)).toEqual([\n        \"read_file\",\n        \"read_file_2\",\n        \"list_users\",\n      ]);\n      expect(manifest.tools[0]?.toolName).toBe(\"Read File\");\n    }),\n  );\n\n  it.effect(\"preserves MCP annotations and server introspection metadata\", () =>\n    Effect.gen(function* () {\n      const manifest = extractMcpToolManifestFromListToolsResult(\n        {\n          tools: [\n            {\n              name: \"Read File\",\n              title: \"Read File\",\n              description: \"Read a file from memory\",\n              inputSchema: {\n                type: \"object\",\n                properties: {\n                  path: {\n                    type: \"string\",\n                  },\n                },\n                required: [\"path\"],\n              },\n              outputSchema: {\n                type: \"object\",\n                properties: {\n                  content: {\n                    type: \"string\",\n                  },\n                },\n                required: [\"content\"],\n              },\n              annotations: {\n                title: \"Read File (Annotated)\",\n                readOnlyHint: true,\n                destructiveHint: false,\n                idempotentHint: true,\n                openWorldHint: false,\n              },\n              execution: {\n                taskSupport: \"optional\",\n              },\n              icons: [{\n                src: \"https://example.test/icon.png\",\n                mimeType: \"image/png\",\n              }],\n              _meta: {\n                category: \"filesystem\",\n              },\n            },\n          ],\n          nextCursor: \"cursor_2\",\n          _meta: {\n            page: 1,\n          },\n        },\n        {\n          serverInfo: {\n            name: \"mcp-test-server\",\n            version: \"1.2.3\",\n            title: \"Executor MCP\",\n            description: \"Test server\",\n            websiteUrl: \"https://example.test/mcp\",\n          },\n          serverCapabilities: {\n            tools: {\n              listChanged: true,\n            },\n            tasks: {\n              list: {},\n              requests: {\n                tools: {\n                  call: {},\n                },\n              },\n            },\n          },\n          instructions: \"Use the tools carefully.\",\n        },\n      );\n\n      expect(manifest.version).toBe(2);\n      expect(manifest.tools[0]).toMatchObject({\n        toolId: \"read_file\",\n        toolName: \"Read File\",\n        title: \"Read File\",\n        displayTitle: \"Read File\",\n        annotations: {\n          title: \"Read File (Annotated)\",\n          readOnlyHint: true,\n          destructiveHint: false,\n          idempotentHint: true,\n          openWorldHint: false,\n        },\n        execution: {\n          taskSupport: \"optional\",\n        },\n        meta: {\n          category: \"filesystem\",\n        },\n      });\n      expect(manifest.tools[0]?.rawTool).toMatchObject({\n        name: \"Read File\",\n      });\n      expect(manifest.server).toMatchObject({\n        info: {\n          name: \"mcp-test-server\",\n          version: \"1.2.3\",\n          title: \"Executor MCP\",\n        },\n        capabilities: {\n          tools: {\n            listChanged: true,\n          },\n          tasks: {\n            list: true,\n            cancel: false,\n            toolCall: true,\n          },\n        },\n        instructions: \"Use the tools carefully.\",\n      });\n      expect(manifest.listTools).toMatchObject({\n        nextCursor: \"cursor_2\",\n        meta: {\n          page: 1,\n        },\n      });\n    }),\n  );\n\n  it.effect(\"discovers MCP tools and invokes via connector\", () =>\n    Effect.gen(function* () {\n      let connectCalls = 0;\n      let closeCalls = 0;\n      const callInputs: Array<{ name: string; arguments: Record<string, unknown> }> = [];\n\n      const connect = Effect.sync(() => {\n        connectCalls += 1;\n\n        return {\n          client: {\n            listTools: async () => ({\n              tools: [\n                {\n                  name: \"Echo\",\n                  title: \"Echo\",\n                  description: \"Echo payload\",\n                  inputSchema: {\n                    type: \"object\",\n                    properties: {\n                      value: { type: \"string\" },\n                    },\n                  },\n                  annotations: {\n                    readOnlyHint: true,\n                    destructiveHint: false,\n                    idempotentHint: true,\n                  },\n                  _meta: {\n                    category: \"demo\",\n                  },\n                },\n              ],\n            }),\n            callTool: async (input: { name: string; arguments?: Record<string, unknown> }) => {\n              callInputs.push({\n                name: input.name,\n                arguments: input.arguments ?? {},\n              });\n\n              return {\n                content: [{ type: \"text\", text: \"ok\" }],\n                isError: false,\n              };\n            },\n            getServerVersion: () => ({\n              name: \"mcp-demo-server\",\n              version: \"1.0.0\",\n              title: \"Demo Server\",\n            }),\n            getServerCapabilities: () => ({\n              tools: {\n                listChanged: true,\n              },\n            }),\n          },\n          close: async () => {\n            closeCalls += 1;\n          },\n        };\n      });\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect,\n        namespace: \"source.mcp\",\n        sourceKey: \"mcp.demo\",\n      });\n\n      expect(connectCalls).toBe(1);\n      expect(closeCalls).toBe(1);\n      expect(discovered.manifest.tools).toHaveLength(1);\n      expect(discovered.manifest.server?.info?.name).toBe(\"mcp-demo-server\");\n      expect(discovered.manifest.tools[0]?.annotations?.readOnlyHint).toBe(true);\n      expect(Object.keys(discovered.tools)).toEqual([\"source.mcp.echo\"]);\n\n      const toolDefinition = resolveToolDefinition(discovered.tools[\"source.mcp.echo\"]!);\n      expect(toolDefinition.metadata?.sourceKey).toBe(\"mcp.demo\");\n      expect(JSON.stringify(toolDefinition.metadata?.contract?.inputSchema)).toContain(\"value\");\n\n      const invoke = resolveToolExecutor(discovered.tools, \"source.mcp.echo\");\n      const invocationResult = yield* Effect.promise(() => invoke({ value: \"hello\" }));\n\n      expect(invocationResult).toEqual({\n        content: [{ type: \"text\", text: \"ok\" }],\n        isError: false,\n      });\n      expect(connectCalls).toBe(2);\n      expect(closeCalls).toBe(2);\n      expect(callInputs).toEqual([\n        {\n          name: \"Echo\",\n          arguments: { value: \"hello\" },\n        },\n      ]);\n    }),\n  );\n\n  it.scoped(\"discovers and invokes against a real streamable MCP server\", () =>\n    Effect.gen(function* () {\n      const realServer = yield* makeRealMcpServer;\n\n      const connect = createSdkMcpConnector({\n        endpoint: realServer.endpoint,\n        transport: \"streamable-http\",\n      });\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect,\n        namespace: \"source.real\",\n        sourceKey: \"mcp.real\",\n      });\n\n      expect(Object.keys(discovered.tools)).toEqual([\"source.real.echo\"]);\n\n      const toolDefinition = resolveToolDefinition(discovered.tools[\"source.real.echo\"]!);\n      expect(toolDefinition.metadata?.sourceKey).toBe(\"mcp.real\");\n\n      const invoke = resolveToolExecutor(discovered.tools, \"source.real.echo\");\n      const invocationResult = yield* Effect.promise(() => invoke({ value: \"from-test\" }));\n\n      expect(invocationResult).toEqual({\n        content: [{ type: \"text\", text: \"echo:from-test\" }],\n      });\n      expect(realServer.seenValues).toEqual([\"from-test\"]);\n    }),\n  );\n\n\n  it.effect(\"returns typed errors when listing tools fails\", () =>\n    Effect.gen(function* () {\n      const outcome = yield* Effect.either(\n        discoverMcpToolsFromConnector({\n          connect: Effect.succeed({\n            client: {\n              listTools: async () => {\n                throw new Error(\"nope\");\n              },\n              callTool: async () => ({ ok: true }),\n            },\n            close: async () => undefined,\n          }),\n        }),\n      );\n\n      assertTrue(Either.isLeft(outcome));\n      assertInstanceOf(outcome.left, McpToolsError);\n      expect(outcome.left.stage).toBe(\"list_tools\");\n    }),\n  );\n\n  it.effect(\"supports URL elicitation while discovering MCP tools\", () =>\n    Effect.gen(function* () {\n      let attempts = 0;\n      const elicitationMessages: Array<string> = [];\n\n      const discovered = yield* discoverMcpToolsFromConnector({\n        connect: Effect.succeed({\n          client: {\n            listTools: async () => {\n              attempts += 1;\n\n              if (attempts === 1) {\n                throw new UrlElicitationRequiredError([\n                  {\n                    mode: \"url\",\n                    message: \"Authorize tool discovery\",\n                    url: \"https://example.com/authorize-discovery\",\n                    elicitationId: \"discover-auth\",\n                  },\n                ]);\n              }\n\n              return {\n                tools: [\n                  {\n                    name: \"Echo\",\n                    description: \"Echo payload\",\n                    inputSchema: {\n                      type: \"object\",\n                      properties: {\n                        value: { type: \"string\" },\n                      },\n                    },\n                  },\n                ],\n              };\n            },\n            callTool: async () => ({ ok: true }),\n          },\n          close: async () => undefined,\n        }),\n        namespace: \"source.mcp\",\n        sourceKey: \"mcp.discovery\",\n        mcpDiscoveryElicitation: {\n          onElicitation: ({ elicitation }) =>\n            Effect.sync(() => {\n              elicitationMessages.push(elicitation.message);\n              return {\n                action: \"accept\" as const,\n              };\n            }),\n          path: \"executor.sources.add\" as ToolPath,\n          sourceKey: \"executor\",\n          args: {\n            endpoint: \"https://example.com/mcp\",\n          },\n        },\n      });\n\n      expect(attempts).toBe(2);\n      expect(elicitationMessages).toEqual([\"Authorize tool discovery\"]);\n      expect(Object.keys(discovered.tools)).toEqual([\"source.mcp.echo\"]);\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/sources/mcp/src/tools.ts",
    "content": "import { ElicitRequestSchema } from \"@modelcontextprotocol/sdk/types.js\";\nimport * as Data from \"effect/Data\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Cause from \"effect/Cause\";\nimport * as Exit from \"effect/Exit\";\nimport * as PartitionedSemaphore from \"effect/PartitionedSemaphore\";\n\nimport {\n  standardSchemaFromJsonSchema,\n  toTool,\n  type ElicitationRequest,\n  type ElicitationResponse,\n  type ToolInvocationContext,\n  type ToolExecutionContext,\n  type ToolMap,\n  type ToolMetadata,\n  type ToolPath,\n  unknownInputSchema,\n} from \"@executor/codemode-core\";\n\nimport {\n  createInteractionId,\n  hasElicitationRequestHandler,\n  isUrlElicitationRequiredError,\n  readMcpElicitationRequest,\n  readUnknownRecord,\n  toMcpElicitationResponse,\n} from \"./elicitation-bridge\";\nimport {\n  extractMcpToolManifestFromListToolsResult,\n  joinToolPath,\n  type McpToolManifest,\n  type McpToolManifestEntry,\n} from \"./manifest\";\n\nexport type { McpToolManifest, McpToolManifestEntry };\nexport { extractMcpToolManifestFromListToolsResult };\n\nexport type McpClientLike = {\n  listTools: () => Promise<unknown>;\n  callTool: (input: {\n    name: string;\n    arguments?: Record<string, unknown>;\n  }) => Promise<unknown>;\n  getServerCapabilities?: () => unknown;\n  getServerVersion?: () => unknown;\n  getInstructions?: () => string | undefined;\n};\n\nexport type McpConnection = {\n  client: McpClientLike;\n  close?: () => Promise<void>;\n};\n\nexport type McpConnector = Effect.Effect<McpConnection, unknown, never>;\n\nexport type McpDiscoveryElicitationContext = {\n  onElicitation: NonNullable<ToolExecutionContext[\"onElicitation\"]>;\n  path: ToolPath;\n  sourceKey: string;\n  args: Record<string, unknown>;\n  metadata?: ToolMetadata;\n  invocation?: ToolInvocationContext;\n};\n\ntype McpDiscoveryStage = \"connect\" | \"list_tools\" | \"call_tool\";\n\nexport class McpToolsError extends Data.TaggedError(\"McpToolsError\")<{\n  stage: McpDiscoveryStage;\n  message: string;\n  details: string | null;\n}> {}\n\nconst EXECUTION_SUSPENDED_SENTINEL = \"__EXECUTION_SUSPENDED__\";\n\nconst causeText = (cause: unknown): string => {\n  if (cause instanceof Error) {\n    return `${cause.message}\\n${cause.stack ?? \"\"}`;\n  }\n\n  if (typeof cause === \"string\") {\n    return cause;\n  }\n\n  try {\n    return JSON.stringify(cause);\n  } catch {\n    return String(cause);\n  }\n};\n\nconst isExecutionSuspendedCause = (cause: unknown): boolean =>\n  causeText(cause).includes(EXECUTION_SUSPENDED_SENTINEL);\n\nconst toDetails = (cause: unknown): string =>\n  cause instanceof Error ? cause.message : String(cause);\n\nconst inputSchemaFromManifest = (inputSchema: unknown) => {\n  if (inputSchema === undefined || inputSchema === null) {\n    return unknownInputSchema;\n  }\n\n  try {\n    return standardSchemaFromJsonSchema(inputSchema, {\n      vendor: \"mcp\",\n      fallback: unknownInputSchema,\n    });\n  } catch {\n    return unknownInputSchema;\n  }\n};\n\nconst closeConnection = (connection: McpConnection): Effect.Effect<void> =>\n  Effect.tryPromise({\n    try: () => connection.close?.() ?? Promise.resolve(),\n    catch: (cause) =>\n      cause instanceof Error ? cause : new Error(String(cause ?? \"mcp connection close failed\")),\n  }).pipe(\n    Effect.asVoid,\n    Effect.catchAll(() => Effect.void),\n  );\n\nconst withConnectionEffect = <A, E>(input: {\n  connect: McpConnector;\n  onConnectError: (cause: unknown) => McpToolsError;\n  run: (connection: McpConnection) => Effect.Effect<A, E>;\n}): Effect.Effect<A, E | McpToolsError> =>\n  Effect.acquireUseRelease(\n    input.connect.pipe(Effect.mapError(input.onConnectError)),\n    input.run,\n    closeConnection,\n  );\n\nconst elicitationClientSemaphore = PartitionedSemaphore.makeUnsafe<McpClientLike>({\n  permits: 1,\n});\n\nconst withElicitationClientLock = <A, E>(\n  client: McpClientLike,\n  effect: Effect.Effect<A, E>,\n): Effect.Effect<A, E> => elicitationClientSemaphore.withPermits(client, 1)(effect);\n\nconst resolveElicitationResponse = (input: {\n  toolName: string;\n  onElicitation: NonNullable<ToolExecutionContext[\"onElicitation\"]>;\n  interactionId: string;\n  path: ToolPath;\n  sourceKey: string;\n  args: Record<string, unknown>;\n  executionContext?: ToolExecutionContext;\n  elicitation: ElicitationRequest;\n}): Effect.Effect<ElicitationResponse, McpToolsError> =>\n  input.onElicitation({\n    interactionId: input.interactionId,\n    path: input.path,\n    sourceKey: input.sourceKey,\n    args: input.args,\n    metadata: input.executionContext?.metadata,\n    context: input.executionContext?.invocation,\n    elicitation: input.elicitation,\n  }).pipe(\n    Effect.mapError((cause) =>\n      isExecutionSuspendedCause(cause)\n        ? (cause as McpToolsError)\n        : new McpToolsError({\n            stage: \"call_tool\",\n            message: `Failed resolving elicitation for ${input.toolName}`,\n            details: toDetails(cause),\n          })),\n  );\n\nconst installMcpElicitationHandler = (input: {\n  client: McpClientLike;\n  toolName: string;\n  onElicitation: NonNullable<ToolExecutionContext[\"onElicitation\"]>;\n  path: ToolPath;\n  sourceKey: string;\n  args: Record<string, unknown>;\n  executionContext?: ToolExecutionContext;\n}): Effect.Effect<void, McpToolsError> => {\n  const client = input.client;\n  if (!hasElicitationRequestHandler(client)) {\n    return Effect.succeed(undefined);\n  }\n\n  return Effect.try({\n    try: () => {\n      let sequence = 0;\n      client.setRequestHandler(ElicitRequestSchema, (request: { params: unknown }) => {\n        sequence += 1;\n\n        return Effect.runPromise(\n          Effect.try({\n            try: () => readMcpElicitationRequest(request.params),\n            catch: (cause) =>\n              new McpToolsError({\n                stage: \"call_tool\",\n                message: `Failed parsing MCP elicitation for ${input.toolName}`,\n                details: toDetails(cause),\n              }),\n          }).pipe(\n            Effect.flatMap((elicitation) =>\n              resolveElicitationResponse({\n                toolName: input.toolName,\n                onElicitation: input.onElicitation,\n                interactionId: createInteractionId({\n                  path: input.path,\n                  invocation: input.executionContext?.invocation,\n                  elicitation,\n                  sequence,\n                }),\n                path: input.path,\n                sourceKey: input.sourceKey,\n                args: input.args,\n                executionContext: input.executionContext,\n                elicitation,\n              }),\n            ),\n            Effect.map(toMcpElicitationResponse),\n            Effect.catchAll((error) => {\n              if (isExecutionSuspendedCause(error)) {\n                return Effect.fail(error);\n              }\n\n              console.error(\n                `[mcp-tools] elicitation failed for ${input.toolName}, treating as cancel:`,\n                error instanceof Error ? error.message : String(error),\n              );\n              return Effect.succeed({ action: \"cancel\" as const });\n            }),\n          ),\n        );\n      });\n    },\n    catch: (cause) =>\n      cause instanceof McpToolsError\n        ? cause\n        : new McpToolsError({\n            stage: \"call_tool\",\n            message: `Failed installing elicitation handler for ${input.toolName}`,\n            details: toDetails(cause),\n          }),\n  });\n};\n\nconst resolveUrlElicitations = (input: {\n  cause: {\n    elicitations: ReadonlyArray<ElicitationRequest>;\n  };\n  toolName: string;\n  onElicitation: NonNullable<ToolExecutionContext[\"onElicitation\"]>;\n  path: ToolPath;\n  sourceKey: string;\n  args: Record<string, unknown>;\n  executionContext?: ToolExecutionContext;\n}): Effect.Effect<void, McpToolsError> =>\n  Effect.forEach(\n    input.cause.elicitations,\n    (elicitation) =>\n      resolveElicitationResponse({\n        toolName: input.toolName,\n        onElicitation: input.onElicitation,\n        interactionId: createInteractionId({\n          path: input.path,\n          invocation: input.executionContext?.invocation,\n          elicitation,\n        }),\n        path: input.path,\n        sourceKey: input.sourceKey,\n        args: input.args,\n        executionContext: input.executionContext,\n        elicitation,\n      }).pipe(\n        Effect.flatMap((response) =>\n          response.action === \"accept\"\n            ? Effect.succeed(undefined)\n            : Effect.fail(\n                new McpToolsError({\n                  stage: \"call_tool\",\n                  message: `URL elicitation was not accepted for ${input.toolName}`,\n                  details: response.action,\n                }),\n              )),\n      ),\n    { discard: true },\n  );\n\nconst callMcpTool = (input: {\n  client: McpClientLike;\n  toolName: string;\n  args: Record<string, unknown>;\n}): Effect.Effect<unknown, unknown> =>\n  Effect.tryPromise({\n    try: () =>\n      input.client.callTool({\n        name: input.toolName,\n        arguments: input.args,\n      }),\n    catch: (cause) => cause,\n  });\n\nconst toToolExecutionContext = (\n  input: McpDiscoveryElicitationContext | undefined,\n): ToolExecutionContext | undefined =>\n  input\n    ? {\n        path: input.path,\n        sourceKey: input.sourceKey,\n        metadata: input.metadata,\n        invocation: input.invocation,\n        onElicitation: input.onElicitation,\n      }\n    : undefined;\n\nconst runMcpListToolsEffect = (input: {\n  connection: McpConnection;\n  mcpDiscoveryElicitation?: McpDiscoveryElicitationContext;\n}): Effect.Effect<unknown, McpToolsError> =>\n  Effect.gen(function* () {\n    const executionContext = toToolExecutionContext(input.mcpDiscoveryElicitation);\n\n    if (input.mcpDiscoveryElicitation) {\n      yield* installMcpElicitationHandler({\n        client: input.connection.client,\n        toolName: \"tools/list\",\n        onElicitation: input.mcpDiscoveryElicitation.onElicitation,\n        path: input.mcpDiscoveryElicitation.path,\n        sourceKey: input.mcpDiscoveryElicitation.sourceKey,\n        args: input.mcpDiscoveryElicitation.args,\n        executionContext,\n      });\n    }\n\n    let retries = 0;\n    while (true) {\n      const attempt = yield* Effect.either(\n        Effect.tryPromise({\n          try: () => input.connection.client.listTools(),\n          catch: (cause) => cause,\n        }),\n      );\n\n      if (Either.isRight(attempt)) {\n        return attempt.right;\n      }\n\n      if (isExecutionSuspendedCause(attempt.left)) {\n        return yield* (attempt.left as McpToolsError);\n      }\n\n      if (\n        input.mcpDiscoveryElicitation\n        && isUrlElicitationRequiredError(attempt.left)\n        && retries < 2\n      ) {\n        yield* resolveUrlElicitations({\n          cause: attempt.left,\n          toolName: \"tools/list\",\n          onElicitation: input.mcpDiscoveryElicitation.onElicitation,\n          path: input.mcpDiscoveryElicitation.path,\n          sourceKey: input.mcpDiscoveryElicitation.sourceKey,\n          args: input.mcpDiscoveryElicitation.args,\n          executionContext,\n        });\n        retries += 1;\n        continue;\n      }\n\n      return yield* new McpToolsError({\n          stage: \"list_tools\",\n          message: \"Failed listing MCP tools\",\n          details: toDetails(attempt.left),\n        });\n    }\n  });\n\nconst runMcpToolCallEffect = (input: {\n  connection: McpConnection;\n  toolName: string;\n  path: ToolPath;\n  sourceKey: string;\n  args: Record<string, unknown>;\n  executionContext?: ToolExecutionContext;\n}): Effect.Effect<unknown, McpToolsError> =>\n  Effect.gen(function* () {\n    const onElicitation = input.executionContext?.onElicitation;\n    if (onElicitation) {\n      yield* installMcpElicitationHandler({\n        client: input.connection.client,\n        toolName: input.toolName,\n        onElicitation,\n        path: input.path,\n        sourceKey: input.sourceKey,\n        args: input.args,\n        executionContext: input.executionContext,\n      });\n    }\n\n    let retries = 0;\n    while (true) {\n      const attempt = yield* Effect.either(\n        callMcpTool({\n          client: input.connection.client,\n          toolName: input.toolName,\n          args: input.args,\n        }),\n      );\n\n      if (Either.isRight(attempt)) {\n        return attempt.right;\n      }\n\n      if (isExecutionSuspendedCause(attempt.left)) {\n        return yield* (attempt.left as McpToolsError);\n      }\n\n      if (\n        onElicitation\n        && isUrlElicitationRequiredError(attempt.left)\n        && retries < 2\n      ) {\n        yield* resolveUrlElicitations({\n          cause: attempt.left,\n          toolName: input.toolName,\n          onElicitation,\n          path: input.path,\n          sourceKey: input.sourceKey,\n          args: input.args,\n          executionContext: input.executionContext,\n        });\n        retries += 1;\n        continue;\n      }\n\n      return yield* new McpToolsError({\n          stage: \"call_tool\",\n          message: `Failed invoking MCP tool: ${input.toolName}`,\n          details: toDetails(attempt.left),\n        });\n    }\n  });\n\nexport const createMcpConnectorFromClient = (\n  client: McpClientLike,\n): McpConnector =>\n  Effect.succeed({\n    client,\n    close: async () => undefined,\n  });\n\nexport const createMcpToolsFromManifest = (input: {\n  manifest: McpToolManifest;\n  connect: McpConnector;\n  namespace?: string;\n  sourceKey?: string;\n}): ToolMap => {\n  const sourceKey = input.sourceKey ?? \"mcp.generated\";\n\n  return Object.fromEntries(\n    input.manifest.tools.map((entry) => {\n      const path = joinToolPath(input.namespace, entry.toolId);\n\n      return [\n        path,\n        toTool({\n          tool: {\n            description: entry.description ?? `MCP tool: ${entry.toolName}`,\n            inputSchema: inputSchemaFromManifest(entry.inputSchema),\n            execute: async (args: unknown, executionContext?: ToolExecutionContext) => {\n              const exit = await Effect.runPromiseExit(\n                withConnectionEffect({\n                  connect: input.connect,\n                  onConnectError: (cause) =>\n                    new McpToolsError({\n                      stage: \"connect\",\n                      message: `Failed connecting to MCP server for ${entry.toolName}`,\n                      details: toDetails(cause),\n                    }),\n                  run: (connection) => {\n                    const payloadArgs = readUnknownRecord(args);\n                    const callEffect = runMcpToolCallEffect({\n                      connection,\n                      toolName: entry.toolName,\n                      path,\n                      sourceKey,\n                      args: payloadArgs,\n                      executionContext,\n                    });\n\n                    return executionContext?.onElicitation\n                      ? withElicitationClientLock(connection.client, callEffect)\n                      : callEffect;\n                  },\n                }),\n              );\n              if (Exit.isSuccess(exit)) return exit.value;\n              throw Cause.squash(exit.cause);\n            },\n          },\n          metadata: {\n            sourceKey,\n            contract: {\n              ...(entry.inputSchema !== undefined\n                ? { inputSchema: entry.inputSchema }\n                : {}),\n              ...(entry.outputSchema !== undefined\n                ? { outputSchema: entry.outputSchema }\n                : {}),\n            },\n          },\n        }),\n      ] as const;\n    }),\n  );\n};\n\nexport const discoverMcpToolsFromConnector = (input: {\n  connect: McpConnector;\n  namespace?: string;\n  sourceKey?: string;\n  mcpDiscoveryElicitation?: McpDiscoveryElicitationContext;\n}): Effect.Effect<{ manifest: McpToolManifest; tools: ToolMap }, McpToolsError> =>\n  Effect.gen(function* () {\n    const listed = yield* withConnectionEffect({\n      connect: input.connect,\n      onConnectError: (cause) =>\n        new McpToolsError({\n          stage: \"connect\",\n          message: \"Failed connecting to MCP server\",\n          details: toDetails(cause),\n        }),\n      run: (connection) => {\n        const listEffect = runMcpListToolsEffect({\n          connection,\n          mcpDiscoveryElicitation: input.mcpDiscoveryElicitation,\n        });\n\n        const settledListEffect = input.mcpDiscoveryElicitation\n          ? withElicitationClientLock(connection.client, listEffect)\n          : listEffect;\n\n        return Effect.map(settledListEffect, (listed) => ({\n          listed,\n          serverInfo: connection.client.getServerVersion?.(),\n          serverCapabilities: connection.client.getServerCapabilities?.(),\n          instructions: connection.client.getInstructions?.(),\n        }));\n      },\n    });\n\n    const manifest = extractMcpToolManifestFromListToolsResult(\n      listed.listed,\n      {\n        serverInfo: listed.serverInfo,\n        serverCapabilities: listed.serverCapabilities,\n        instructions: listed.instructions,\n      },\n    );\n\n    return {\n      manifest,\n      tools: createMcpToolsFromManifest({\n        manifest,\n        connect: input.connect,\n        namespace: input.namespace,\n        sourceKey: input.sourceKey,\n      }),\n    };\n  });\n\nexport const discoverMcpToolsFromClient = (input: {\n  client: McpClientLike;\n  namespace?: string;\n  sourceKey?: string;\n}): Effect.Effect<{ manifest: McpToolManifest; tools: ToolMap }, McpToolsError> =>\n  discoverMcpToolsFromConnector({\n    connect: createMcpConnectorFromClient(input.client),\n    namespace: input.namespace,\n    sourceKey: input.sourceKey,\n  });\n"
  },
  {
    "path": "packages/sources/mcp/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\", \"DOM\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/mcp/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    include: [\"src/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "packages/sources/openapi/CHANGELOG.md",
    "content": "# @executor/source-openapi\n\n## null\n\n### Patch Changes\n\n- @executor/codemode-core@null\n"
  },
  {
    "path": "packages/sources/openapi/openapi-extractor-rs/.gitignore",
    "content": "target/\n"
  },
  {
    "path": "packages/sources/openapi/openapi-extractor-rs/Cargo.toml",
    "content": "[package]\nname = \"openapi-extractor-rs\"\nversion = \"0.1.0\"\nedition = \"2024\"\n\n[lib]\ncrate-type = [\"cdylib\", \"rlib\"]\n\n[dependencies]\nclap = { version = \"4.5.40\", features = [\"derive\"] }\nserde = { version = \"1.0.228\", features = [\"derive\"] }\nserde_json = \"1.0.145\"\nserde_yaml = \"0.9.34\"\nsha2 = \"0.10.9\"\n\n[target.'cfg(target_arch = \"wasm32\")'.dependencies]\nwasm-bindgen = \"0.2.114\"\n"
  },
  {
    "path": "packages/sources/openapi/openapi-extractor-rs/build-wasm.sh",
    "content": "#!/usr/bin/env bash\nset -euo pipefail\n\nROOT_DIR=\"$(cd \"$(dirname \"$0\")/..\" && pwd)\"\nCRATE_DIR=\"$ROOT_DIR/openapi-extractor-rs\"\nOUT_DIR=\"$ROOT_DIR/src/openapi-extractor-wasm\"\n\ncd \"$CRATE_DIR\"\n\nrustup target add wasm32-unknown-unknown >/dev/null\n\ncargo build --release --target wasm32-unknown-unknown\n\nwasm-bindgen \\\n  --target web \\\n  --out-dir \"$OUT_DIR\" \\\n  --out-name openapi_extractor \\\n  \"$CRATE_DIR/target/wasm32-unknown-unknown/release/openapi_extractor_rs.wasm\"\n\nrm -rf \"$CRATE_DIR/target\"\n"
  },
  {
    "path": "packages/sources/openapi/openapi-extractor-rs/src/lib.rs",
    "content": "use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, VecDeque};\n\nuse serde::Serialize;\nuse serde_json::{Map, Value, json};\nuse sha2::{Digest, Sha256};\n\n#[cfg(target_arch = \"wasm32\")]\nuse wasm_bindgen::prelude::*;\n\nconst OPEN_API_HTTP_METHODS: [&str; 8] = [\n    \"get\",\n    \"put\",\n    \"post\",\n    \"delete\",\n    \"patch\",\n    \"head\",\n    \"options\",\n    \"trace\",\n];\n\nconst OPEN_API_PARAMETER_LOCATIONS: [&str; 4] = [\"path\", \"query\", \"header\", \"cookie\"];\n\n#[derive(Serialize, Clone)]\nstruct OpenApiToolParameter {\n    name: String,\n    location: String,\n    required: bool,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiToolRequestBody {\n    required: bool,\n    content_types: Vec<String>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiInvocationPayload {\n    method: String,\n    path_template: String,\n    parameters: Vec<OpenApiToolParameter>,\n    request_body: Option<OpenApiToolRequestBody>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct DiscoveryTypingPayload {\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    input_schema: Option<Value>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    output_schema: Option<Value>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    ref_hint_keys: Option<Vec<String>>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiExample {\n    value_json: String,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    media_type: Option<String>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    label: Option<String>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiParameterDocumentation {\n    name: String,\n    location: String,\n    required: bool,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    description: Option<String>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    examples: Option<Vec<OpenApiExample>>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiRequestBodyDocumentation {\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    description: Option<String>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    examples: Option<Vec<OpenApiExample>>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiResponseDocumentation {\n    status_code: String,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    description: Option<String>,\n    content_types: Vec<String>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    examples: Option<Vec<OpenApiExample>>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiToolDocumentation {\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    summary: Option<String>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    deprecated: Option<bool>,\n    parameters: Vec<OpenApiParameterDocumentation>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    request_body: Option<OpenApiRequestBodyDocumentation>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    response: Option<OpenApiResponseDocumentation>,\n}\n\n#[derive(Serialize, Clone)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiExtractedTool {\n    tool_id: String,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    operation_id: Option<String>,\n    tags: Vec<String>,\n    name: String,\n    description: Option<String>,\n    method: String,\n    path: String,\n    invocation: OpenApiInvocationPayload,\n    operation_hash: String,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    typing: Option<DiscoveryTypingPayload>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    documentation: Option<OpenApiToolDocumentation>,\n}\n\n#[derive(Serialize)]\n#[serde(rename_all = \"camelCase\")]\nstruct OpenApiToolManifest {\n    version: u8,\n    source_hash: String,\n    tools: Vec<OpenApiExtractedTool>,\n    #[serde(skip_serializing_if = \"Option::is_none\")]\n    ref_hint_table: Option<BTreeMap<String, String>>,\n}\n\npub fn extract_manifest_json(\n    source_name: &str,\n    openapi_document_text: &str,\n    pretty: bool,\n) -> Result<String, String> {\n    let spec = parse_openapi_document(openapi_document_text)?;\n    let manifest = extract_openapi_manifest(source_name, &spec)?;\n\n    if pretty {\n        serde_json::to_string_pretty(&manifest).map_err(|error| format!(\"serialize manifest: {error}\"))\n    } else {\n        serde_json::to_string(&manifest).map_err(|error| format!(\"serialize manifest: {error}\"))\n    }\n}\n\n#[cfg(target_arch = \"wasm32\")]\n#[wasm_bindgen]\npub fn extract_manifest_json_wasm(\n    source_name: &str,\n    openapi_document_text: &str,\n) -> Result<String, JsValue> {\n    extract_manifest_json(source_name, openapi_document_text, false)\n        .map_err(|error| JsValue::from_str(&error))\n}\n\nfn parse_openapi_document(input: &str) -> Result<Value, String> {\n    let text = input.trim();\n    if text.is_empty() {\n        return Err(\"OpenAPI document is empty\".to_string());\n    }\n\n    match serde_json::from_str::<Value>(text) {\n        Ok(value) => Ok(value),\n        Err(_) => serde_yaml::from_str::<Value>(text)\n            .map_err(|error| format!(\"Unable to parse OpenAPI document as JSON or YAML: {error}\")),\n    }\n}\n\nfn as_object(value: &Value) -> Option<&Map<String, Value>> {\n    value.as_object()\n}\n\nfn as_trimmed_string(value: Option<&Value>) -> Option<String> {\n    let candidate = value?.as_str()?.trim();\n    if candidate.is_empty() {\n        return None;\n    }\n\n    Some(candidate.to_string())\n}\n\nfn response_status_rank(status_code: &str) -> i32 {\n    if status_code.len() == 3\n        && status_code.starts_with('2')\n        && status_code.chars().all(|character| character.is_ascii_digit())\n    {\n        return 0;\n    }\n\n    if status_code == \"default\" {\n        return 1;\n    }\n\n    2\n}\n\nfn to_stable_value(value: &Value) -> Value {\n    match value {\n        Value::Array(items) => Value::Array(items.iter().map(to_stable_value).collect()),\n        Value::Object(object) => {\n            let mut keys: Vec<&String> = object.keys().collect();\n            keys.sort();\n\n            let mut stable = Map::new();\n            for key in keys {\n                if let Some(item) = object.get(key) {\n                    stable.insert(key.clone(), to_stable_value(item));\n                }\n            }\n\n            Value::Object(stable)\n        }\n        Value::Number(number) => {\n            if let Some(float_value) = number.as_f64()\n                && float_value.is_finite()\n                && float_value.fract() == 0.0\n            {\n                if float_value >= 0.0 && float_value <= u64::MAX as f64 {\n                    let unsigned = float_value as u64;\n                    if unsigned as f64 == float_value {\n                        return Value::Number(serde_json::Number::from(unsigned));\n                    }\n                }\n\n                if float_value >= i64::MIN as f64 && float_value <= i64::MAX as f64 {\n                    let signed = float_value as i64;\n                    if signed as f64 == float_value {\n                        return Value::Number(serde_json::Number::from(signed));\n                    }\n                }\n            }\n\n            Value::Number(number.clone())\n        }\n        _ => value.clone(),\n    }\n}\n\nfn hash_unknown(value: &Value) -> Result<String, String> {\n    let stable_json =\n        serde_json::to_string(&to_stable_value(value)).map_err(|error| format!(\"hash json: {error}\"))?;\n\n    let mut hasher = Sha256::new();\n    hasher.update(stable_json.as_bytes());\n    Ok(format!(\"{:x}\", hasher.finalize()))\n}\n\nfn encode_stable_json(value: &Value) -> Result<String, String> {\n    serde_json::to_string(&to_stable_value(value)).map_err(|error| format!(\"encode stable json: {error}\"))\n}\n\nfn to_extracted_tool_parameter_from_record(record: &Map<String, Value>) -> Option<OpenApiToolParameter> {\n    let name = record.get(\"name\")?.as_str()?.trim();\n\n    if name.is_empty() {\n        return None;\n    }\n\n    let location = record.get(\"in\")?.as_str()?;\n    if !OPEN_API_PARAMETER_LOCATIONS.contains(&location) {\n        return None;\n    }\n\n    let required = location == \"path\" || record.get(\"required\").and_then(Value::as_bool) == Some(true);\n\n    Some(OpenApiToolParameter {\n        name: name.to_string(),\n        location: location.to_string(),\n        required,\n    })\n}\n\nfn to_extracted_tool_parameter(root: &Value, value: &Value) -> Option<OpenApiToolParameter> {\n    let record = resolve_local_reference_object(root, value)?;\n    to_extracted_tool_parameter_from_record(&record)\n}\n\nfn merge_parameters(root: &Value, path_item: &Map<String, Value>, operation: &Map<String, Value>) -> Vec<OpenApiToolParameter> {\n    let mut merged: Vec<OpenApiToolParameter> = collect_parameter_record_by_key(root, path_item, operation)\n        .into_values()\n        .filter_map(|record| to_extracted_tool_parameter_from_record(&record))\n        .collect();\n    merged.sort_by(|left, right| {\n        left.location\n            .cmp(&right.location)\n            .then_with(|| left.name.cmp(&right.name))\n    });\n    merged\n}\n\nfn extract_request_body(root: &Value, operation: &Map<String, Value>) -> Option<OpenApiToolRequestBody> {\n    let request_body = resolve_request_body_record(root, operation)?;\n    let content = request_body.get(\"content\").and_then(as_object);\n\n    Some(OpenApiToolRequestBody {\n        required: request_body.get(\"required\").and_then(Value::as_bool) == Some(true),\n        content_types: collect_content_types(content),\n    })\n}\n\nfn build_invocation_metadata(\n    root: &Value,\n    method: &str,\n    path_value: &str,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n) -> OpenApiInvocationPayload {\n    OpenApiInvocationPayload {\n        method: method.to_string(),\n        path_template: path_value.to_string(),\n        parameters: merge_parameters(root, path_item, operation),\n        request_body: extract_request_body(root, operation),\n    }\n}\n\nfn collect_ref_keys(value: &Value, refs: &mut BTreeSet<String>) {\n    match value {\n        Value::Array(items) => {\n            for item in items {\n                collect_ref_keys(item, refs);\n            }\n        }\n        Value::Object(record) => {\n            if let Some(reference) = record.get(\"$ref\").and_then(Value::as_str)\n                && reference.starts_with(\"#/\")\n            {\n                refs.insert(reference.to_string());\n            }\n\n            for nested in record.values() {\n                collect_ref_keys(nested, refs);\n            }\n        }\n        _ => {}\n    }\n}\n\nfn resolve_json_pointer<'a>(root: &'a Value, pointer: &str) -> Option<&'a Value> {\n    if !pointer.starts_with(\"#/\") {\n        return None;\n    }\n\n    let mut current = root;\n    for part in pointer[2..].split('/') {\n        let decoded = part.replace(\"~1\", \"/\").replace(\"~0\", \"~\");\n        let next = current.as_object()?.get(&decoded)?;\n        current = next;\n    }\n\n    Some(current)\n}\n\nfn resolve_local_reference_value(\n    root: &Value,\n    value: &Value,\n    active_refs: &HashSet<String>,\n) -> Value {\n    let Some(record) = as_object(value) else {\n        return value.clone();\n    };\n\n    let Some(reference) = record.get(\"$ref\").and_then(Value::as_str) else {\n        return value.clone();\n    };\n\n    if !reference.starts_with(\"#/\") || active_refs.contains(reference) {\n        return value.clone();\n    }\n\n    let Some(resolved) = resolve_json_pointer(root, reference) else {\n        return value.clone();\n    };\n\n    let mut next_active_refs = active_refs.clone();\n    next_active_refs.insert(reference.to_string());\n\n    let mut resolved_value = resolve_local_reference_value(root, resolved, &next_active_refs);\n\n    if let Some(resolved_record) = resolved_value.as_object_mut() {\n        for (key, nested) in record {\n            if key != \"$ref\" {\n                resolved_record.insert(key.clone(), nested.clone());\n            }\n        }\n        return resolved_value;\n    }\n\n    value.clone()\n}\n\nfn resolve_local_reference_object(root: &Value, value: &Value) -> Option<Map<String, Value>> {\n    as_object(&resolve_local_reference_value(root, value, &HashSet::new())).cloned()\n}\n\nfn collect_parameter_record_by_key(\n    root: &Value,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n) -> HashMap<String, Map<String, Value>> {\n    let mut records = HashMap::new();\n\n    let mut add_parameters = |candidate: Option<&Value>| {\n        let Some(items) = candidate.and_then(Value::as_array) else {\n            return;\n        };\n\n        for item in items {\n            let Some(record) = resolve_local_reference_object(root, item) else {\n                continue;\n            };\n\n            let Some(parameter) = to_extracted_tool_parameter_from_record(&record) else {\n                continue;\n            };\n\n            records.insert(\n                format!(\"{}:{}\", parameter.location, parameter.name),\n                record,\n            );\n        }\n    };\n\n    add_parameters(path_item.get(\"parameters\"));\n    add_parameters(operation.get(\"parameters\"));\n\n    records\n}\n\nfn resolve_request_body_record(root: &Value, operation: &Map<String, Value>) -> Option<Map<String, Value>> {\n    resolve_local_reference_object(root, operation.get(\"requestBody\")?)\n}\n\nfn collect_content_types(content: Option<&Map<String, Value>>) -> Vec<String> {\n    let mut content_types = content\n        .map(|object| object.keys().cloned().collect::<Vec<String>>())\n        .unwrap_or_default();\n    content_types.sort();\n    content_types\n}\n\nfn pick_content_entry(content: Option<&Value>) -> Option<(String, Map<String, Value>)> {\n    let content_record = as_object(content?)?;\n\n    let mut keys: Vec<String> = content_record.keys().cloned().collect();\n    keys.sort();\n\n    let mut preferred = Vec::with_capacity(keys.len() + 1);\n    preferred.push(\"application/json\".to_string());\n    preferred.extend(keys);\n\n    let mut seen = HashSet::new();\n    for media_type in preferred {\n        if !seen.insert(media_type.clone()) {\n            continue;\n        }\n\n        let Some(media_type_value) = content_record.get(&media_type).and_then(as_object) else {\n            continue;\n        };\n\n        return Some((media_type, media_type_value.clone()));\n    }\n\n    None\n}\n\nfn pick_example_values(value: &Value, label: Option<String>, media_type: Option<String>) -> Result<Vec<OpenApiExample>, String> {\n    let mut examples = Vec::new();\n    let Some(record) = as_object(value) else {\n        return Ok(examples);\n    };\n\n    if let Some(example_value) = record.get(\"example\") {\n        examples.push(OpenApiExample {\n            value_json: encode_stable_json(example_value)?,\n            media_type: media_type.clone(),\n            label: label.clone(),\n        });\n    }\n\n    if let Some(example_values) = record.get(\"examples\").and_then(Value::as_object) {\n        let mut keys: Vec<String> = example_values.keys().cloned().collect();\n        keys.sort();\n\n        for key in keys {\n            let Some(example_entry) = example_values.get(&key) else {\n                continue;\n            };\n            let example_record = as_object(example_entry)\n                .and_then(|entry| entry.get(\"value\"))\n                .unwrap_or(example_entry);\n\n            examples.push(OpenApiExample {\n                value_json: encode_stable_json(example_record)?,\n                media_type: media_type.clone(),\n                label: Some(key),\n            });\n        }\n    }\n\n    Ok(examples)\n}\n\nfn extract_examples_from_schema(schema: Option<&Value>) -> Result<Vec<OpenApiExample>, String> {\n    let Some(schema_value) = schema else {\n        return Ok(Vec::new());\n    };\n\n    pick_example_values(schema_value, None, None)\n}\n\nfn extract_examples_from_media_type(\n    media_type: &str,\n    media_type_record: &Map<String, Value>,\n) -> Result<Vec<OpenApiExample>, String> {\n    let direct = pick_example_values(\n        &Value::Object(media_type_record.clone()),\n        None,\n        Some(media_type.to_string()),\n    )?;\n    if !direct.is_empty() {\n        return Ok(direct);\n    }\n\n    extract_examples_from_schema(media_type_record.get(\"schema\")).map(|examples| {\n        examples\n            .into_iter()\n            .map(|mut example| {\n                example.media_type = Some(media_type.to_string());\n                example\n            })\n            .collect()\n    })\n}\n\nfn pick_preferred_response_record(\n    root: &Value,\n    operation: &Map<String, Value>,\n) -> Option<(String, Map<String, Value>)> {\n    let responses = as_object(operation.get(\"responses\")?)?;\n    let mut response_codes: Vec<String> = responses.keys().cloned().collect();\n    response_codes.sort_by(|left, right| {\n        response_status_rank(left)\n            .cmp(&response_status_rank(right))\n            .then_with(|| left.cmp(right))\n    });\n\n    for response_code in response_codes {\n        let Some(response) = responses.get(&response_code) else {\n            continue;\n        };\n        let Some(response_record) = resolve_local_reference_object(root, response) else {\n            continue;\n        };\n\n        return Some((response_code, response_record));\n    }\n\n    None\n}\n\nfn pick_schema_from_content(content: Option<&Value>) -> Option<Value> {\n    if let Some((_media_type, media_type_value)) = pick_content_entry(content) {\n        if let Some(schema) = media_type_value.get(\"schema\") {\n            return Some(schema.clone());\n        }\n    }\n\n    None\n}\n\nfn extract_request_body_schema(root: &Value, operation: &Map<String, Value>) -> Option<Value> {\n    let request_body = resolve_request_body_record(root, operation)?;\n    pick_schema_from_content(request_body.get(\"content\"))\n}\n\nfn extract_response_schema(root: &Value, operation: &Map<String, Value>) -> Option<Value> {\n    let (_status_code, response) = pick_preferred_response_record(root, operation)?;\n    pick_schema_from_content(response.get(\"content\"))\n}\n\nfn collect_parameter_schema_by_key(\n    root: &Value,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n) -> HashMap<String, Value> {\n    let mut schemas = HashMap::new();\n\n    for (key, record) in collect_parameter_record_by_key(root, path_item, operation) {\n        let Some(schema) = record.get(\"schema\") else {\n            continue;\n        };\n\n        schemas.insert(key, schema.clone());\n    }\n\n    schemas\n}\n\nfn build_input_schema(\n    root: &Value,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n    invocation: &OpenApiInvocationPayload,\n) -> Option<Value> {\n    let parameter_schema_by_key = collect_parameter_schema_by_key(root, path_item, operation);\n\n    let mut properties = Map::new();\n    let mut required = BTreeSet::new();\n\n    for parameter in &invocation.parameters {\n        let key = format!(\"{}:{}\", parameter.location, parameter.name);\n        let schema = parameter_schema_by_key\n            .get(&key)\n            .cloned()\n            .unwrap_or_else(|| json!({ \"type\": \"string\" }));\n\n        properties.insert(parameter.name.clone(), schema);\n\n        if parameter.required {\n            required.insert(parameter.name.clone());\n        }\n    }\n\n    let request_body_schema = extract_request_body_schema(root, operation);\n    if let Some(schema) = request_body_schema {\n        properties.insert(\"body\".to_string(), schema);\n\n        if invocation\n            .request_body\n            .as_ref()\n            .map(|request_body| request_body.required)\n            == Some(true)\n        {\n            required.insert(\"body\".to_string());\n        }\n    }\n\n    if properties.is_empty() {\n        return None;\n    }\n\n    let required_list: Vec<String> = required.into_iter().collect();\n\n    Some(json!({\n        \"type\": \"object\",\n        \"properties\": properties,\n        \"required\": required_list,\n        \"additionalProperties\": false,\n    }))\n}\n\nfn build_tool_typing(\n    root: &Value,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n    invocation: &OpenApiInvocationPayload,\n) -> Result<Option<DiscoveryTypingPayload>, String> {\n    let input_schema = build_input_schema(root, path_item, operation, invocation);\n    let output_schema = extract_response_schema(root, operation);\n\n    if input_schema.is_none() && output_schema.is_none() {\n        return Ok(None);\n    }\n\n    let mut refs = BTreeSet::new();\n    if let Some(schema) = &input_schema {\n        collect_ref_keys(schema, &mut refs);\n    }\n\n    if let Some(schema) = &output_schema {\n        collect_ref_keys(schema, &mut refs);\n    }\n\n    let ref_hint_keys = if refs.is_empty() {\n        None\n    } else {\n        Some(refs.into_iter().collect())\n    };\n\n    Ok(Some(DiscoveryTypingPayload {\n        input_schema: input_schema\n            .as_ref()\n            .map(to_stable_value),\n        output_schema: output_schema\n            .as_ref()\n            .map(to_stable_value),\n        ref_hint_keys,\n    }))\n}\n\nfn build_parameter_documentation(\n    root: &Value,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n    invocation: &OpenApiInvocationPayload,\n) -> Result<Vec<OpenApiParameterDocumentation>, String> {\n    let records_by_key = collect_parameter_record_by_key(root, path_item, operation);\n\n    invocation\n        .parameters\n        .iter()\n        .map(|parameter| {\n            let key = format!(\"{}:{}\", parameter.location, parameter.name);\n            let record = records_by_key.get(&key);\n\n            let mut examples = record\n                .map(|item| pick_example_values(&Value::Object(item.clone()), None, None))\n                .transpose()?\n                .unwrap_or_default();\n\n            if examples.is_empty() {\n                examples = extract_examples_from_schema(record.and_then(|item| item.get(\"schema\")))?;\n            }\n\n            Ok(OpenApiParameterDocumentation {\n                name: parameter.name.clone(),\n                location: parameter.location.clone(),\n                required: parameter.required,\n                description: record.and_then(|item| as_trimmed_string(item.get(\"description\"))),\n                examples: if examples.is_empty() { None } else { Some(examples) },\n            })\n        })\n        .collect()\n}\n\nfn build_request_body_documentation(\n    root: &Value,\n    operation: &Map<String, Value>,\n) -> Result<Option<OpenApiRequestBodyDocumentation>, String> {\n    let Some(request_body) = resolve_request_body_record(root, operation) else {\n        return Ok(None);\n    };\n\n    let examples = if let Some((media_type, media_type_record)) = pick_content_entry(request_body.get(\"content\")) {\n        extract_examples_from_media_type(&media_type, &media_type_record)?\n    } else {\n        Vec::new()\n    };\n\n    Ok(Some(OpenApiRequestBodyDocumentation {\n        description: as_trimmed_string(request_body.get(\"description\")),\n        examples: if examples.is_empty() { None } else { Some(examples) },\n    }))\n}\n\nfn build_response_documentation(\n    root: &Value,\n    operation: &Map<String, Value>,\n) -> Result<Option<OpenApiResponseDocumentation>, String> {\n    let Some((status_code, response)) = pick_preferred_response_record(root, operation) else {\n        return Ok(None);\n    };\n\n    let content = response.get(\"content\").and_then(as_object);\n    let content_types = collect_content_types(content);\n    let examples = if let Some((media_type, media_type_record)) = pick_content_entry(response.get(\"content\")) {\n        extract_examples_from_media_type(&media_type, &media_type_record)?\n    } else {\n        Vec::new()\n    };\n\n    Ok(Some(OpenApiResponseDocumentation {\n        status_code,\n        description: as_trimmed_string(response.get(\"description\")),\n        content_types,\n        examples: if examples.is_empty() { None } else { Some(examples) },\n    }))\n}\n\nfn build_tool_documentation(\n    root: &Value,\n    path_item: &Map<String, Value>,\n    operation: &Map<String, Value>,\n    invocation: &OpenApiInvocationPayload,\n) -> Result<Option<OpenApiToolDocumentation>, String> {\n    let summary = as_trimmed_string(operation.get(\"summary\"));\n    let deprecated = operation.get(\"deprecated\").and_then(Value::as_bool);\n    let parameters = build_parameter_documentation(root, path_item, operation, invocation)?;\n    let request_body = build_request_body_documentation(root, operation)?;\n    let response = build_response_documentation(root, operation)?;\n\n    if summary.is_none() && deprecated.is_none() && parameters.is_empty() && request_body.is_none() && response.is_none() {\n        return Ok(None);\n    }\n\n    Ok(Some(OpenApiToolDocumentation {\n        summary,\n        deprecated,\n        parameters,\n        request_body,\n        response,\n    }))\n}\n\nfn build_ref_hint_table(open_api_spec: &Value, initial_ref_keys: &[String]) -> Result<BTreeMap<String, String>, String> {\n    let mut queue = VecDeque::new();\n    let mut queued = HashSet::new();\n\n    for ref_key in initial_ref_keys {\n        if queued.insert(ref_key.clone()) {\n            queue.push_back(ref_key.clone());\n        }\n    }\n\n    let mut seen = HashSet::new();\n    let mut table = BTreeMap::new();\n\n    while let Some(ref_key) = queue.pop_front() {\n        if !seen.insert(ref_key.clone()) {\n            continue;\n        }\n\n        let Some(resolved) = resolve_json_pointer(open_api_spec, &ref_key) else {\n            continue;\n        };\n\n        table.insert(ref_key.clone(), encode_stable_json(resolved)?);\n\n        let mut nested = BTreeSet::new();\n        collect_ref_keys(resolved, &mut nested);\n        for nested_ref in nested {\n            if !seen.contains(&nested_ref) {\n                queue.push_back(nested_ref);\n            }\n        }\n    }\n\n    Ok(table)\n}\n\nfn normalize_path_for_tool_id(path_value: &str) -> String {\n    let trimmed = path_value.trim();\n    let no_leading = trimmed.strip_prefix('/').unwrap_or(trimmed);\n\n    let mut normalized = String::new();\n    let mut last_was_underscore = false;\n\n    for character in no_leading.chars() {\n        if character.is_ascii_alphanumeric() {\n            normalized.push(character);\n            last_was_underscore = false;\n            continue;\n        }\n\n        if !last_was_underscore {\n            normalized.push('_');\n            last_was_underscore = true;\n        }\n    }\n\n    let without_edges = normalized.trim_matches('_').to_lowercase();\n    if without_edges.is_empty() {\n        return \"root\".to_string();\n    }\n\n    without_edges\n}\n\nfn build_operation_id(operation: &Map<String, Value>) -> Option<String> {\n    as_trimmed_string(operation.get(\"operationId\"))\n}\n\nfn build_tags(operation: &Map<String, Value>) -> Vec<String> {\n    operation\n        .get(\"tags\")\n        .and_then(Value::as_array)\n        .map(|items| {\n            items\n                .iter()\n                .filter_map(|item| item.as_str().map(str::trim))\n                .filter(|item| !item.is_empty())\n                .map(ToOwned::to_owned)\n                .collect::<Vec<String>>()\n        })\n        .unwrap_or_default()\n}\n\n\nfn build_tool_id(method: &str, path_value: &str, operation: &Map<String, Value>) -> String {\n    if let Some(operation_id) = build_operation_id(operation) {\n        return operation_id;\n    }\n\n    format!(\"{}_{}\", method, normalize_path_for_tool_id(path_value))\n}\n\nfn build_tool_name(method: &str, path_value: &str, operation: &Map<String, Value>) -> String {\n    if let Some(summary) = as_trimmed_string(operation.get(\"summary\")) {\n        return summary;\n    }\n\n    if let Some(operation_id) = build_operation_id(operation) {\n        return operation_id;\n    }\n\n    format!(\"{} {}\", method.to_uppercase(), path_value)\n}\n\nfn build_tool_description(operation: &Map<String, Value>) -> Option<String> {\n    as_trimmed_string(operation.get(\"description\")).or_else(|| as_trimmed_string(operation.get(\"summary\")))\n}\n\nfn ensure_unique_tool_ids(source_name: &str, tools: &[OpenApiExtractedTool]) -> Result<(), String> {\n    let mut seen = HashSet::new();\n\n    for tool in tools {\n        if !seen.insert(tool.tool_id.clone()) {\n            return Err(format!(\n                \"OpenAPI extraction failed for '{source_name}': duplicate toolId {} ({})\",\n                tool.tool_id,\n                tool.path\n            ));\n        }\n    }\n\n    Ok(())\n}\n\nfn extract_openapi_manifest(source_name: &str, openapi_spec: &Value) -> Result<OpenApiToolManifest, String> {\n    let spec_record = as_object(openapi_spec)\n        .ok_or_else(|| format!(\"OpenAPI extraction failed for '{source_name}': spec must be object\"))?;\n\n    let Some(paths) = spec_record.get(\"paths\").and_then(as_object) else {\n        return Ok(OpenApiToolManifest {\n            version: 2,\n            source_hash: hash_unknown(openapi_spec)?,\n            tools: Vec::new(),\n            ref_hint_table: None,\n        });\n    };\n\n    let mut path_keys: Vec<String> = paths.keys().cloned().collect();\n    path_keys.sort();\n\n    let mut tools = Vec::new();\n\n    for path_value in path_keys {\n        let Some(path_item) = paths.get(&path_value).and_then(as_object) else {\n            continue;\n        };\n\n        for method in OPEN_API_HTTP_METHODS {\n            let Some(operation) = path_item.get(method).and_then(as_object) else {\n                continue;\n            };\n\n            let invocation = build_invocation_metadata(openapi_spec, method, &path_value, path_item, operation);\n            let typing = build_tool_typing(openapi_spec, path_item, operation, &invocation)?;\n            let documentation = build_tool_documentation(openapi_spec, path_item, operation, &invocation)?;\n\n            let operation_hash_input = json!({\n                \"method\": method,\n                \"path\": path_value,\n                \"operation\": operation,\n                \"invocation\": invocation,\n            });\n\n            tools.push(OpenApiExtractedTool {\n                tool_id: build_tool_id(method, &path_value, operation),\n                operation_id: build_operation_id(operation),\n                tags: build_tags(operation),\n                name: build_tool_name(method, &path_value, operation),\n                description: build_tool_description(operation),\n                method: method.to_string(),\n                path: path_value.clone(),\n                invocation,\n                operation_hash: hash_unknown(&operation_hash_input)?,\n                typing,\n                documentation,\n            });\n        }\n    }\n\n    tools.sort_by(|left, right| {\n        left.tool_id\n            .to_lowercase()\n            .cmp(&right.tool_id.to_lowercase())\n            .then_with(|| left.tool_id.cmp(&right.tool_id))\n    });\n    ensure_unique_tool_ids(source_name, &tools)?;\n\n    let direct_ref_keys: Vec<String> = tools\n        .iter()\n        .flat_map(|tool| {\n            tool.typing\n                .as_ref()\n                .and_then(|typing| typing.ref_hint_keys.clone())\n                .unwrap_or_default()\n        })\n        .collect();\n\n    let ref_hint_table = build_ref_hint_table(openapi_spec, &direct_ref_keys)?;\n\n    Ok(OpenApiToolManifest {\n        version: 2,\n        source_hash: hash_unknown(openapi_spec)?,\n        tools,\n        ref_hint_table: if ref_hint_table.is_empty() {\n            None\n        } else {\n            Some(ref_hint_table)\n        },\n    })\n}\n"
  },
  {
    "path": "packages/sources/openapi/openapi-extractor-rs/src/main.rs",
    "content": "use std::fs;\nuse std::io::{self, Read, Write};\n\nuse clap::Parser;\n\n#[derive(Parser, Debug)]\n#[command(name = \"openapi-extractor-rs\")]\nstruct Cli {\n    #[arg(long)]\n    source_name: String,\n    #[arg(long)]\n    input: String,\n    #[arg(long)]\n    output: Option<String>,\n    #[arg(long, default_value_t = false)]\n    pretty: bool,\n}\n\nfn main() {\n    if let Err(error) = run() {\n        eprintln!(\"{error}\");\n        std::process::exit(1);\n    }\n}\n\nfn run() -> Result<(), String> {\n    let args = Cli::parse();\n    let source_text = read_input_text(&args.input)?;\n\n    let output_json =\n        openapi_extractor_rs::extract_manifest_json(&args.source_name, &source_text, args.pretty)?;\n\n    if let Some(path) = args.output {\n        fs::write(path, output_json).map_err(|error| format!(\"write output file: {error}\"))?;\n    } else {\n        let mut stdout = io::stdout().lock();\n        stdout\n            .write_all(output_json.as_bytes())\n            .map_err(|error| format!(\"write stdout: {error}\"))?;\n        stdout\n            .write_all(b\"\\n\")\n            .map_err(|error| format!(\"write stdout newline: {error}\"))?;\n    }\n\n    Ok(())\n}\n\nfn read_input_text(input: &str) -> Result<String, String> {\n    if input == \"-\" {\n        let mut buffer = String::new();\n        io::stdin()\n            .read_to_string(&mut buffer)\n            .map_err(|error| format!(\"read stdin: {error}\"))?;\n        return Ok(buffer);\n    }\n\n    fs::read_to_string(input).map_err(|error| format!(\"read input file '{input}': {error}\"))\n}\n"
  },
  {
    "path": "packages/sources/openapi/package.json",
    "content": "{\n  \"name\": \"@executor/source-openapi\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./src/index.ts\"\n  },\n  \"files\": [\n    \"src\"\n  ],\n  \"scripts\": {\n    \"extractor:build\": \"./openapi-extractor-rs/build-wasm.sh\",\n    \"typecheck\": \"bunx tsc --noEmit -p tsconfig.json\",\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest\"\n  },\n  \"dependencies\": {\n    \"@effect/platform\": \"catalog:\",\n    \"@executor/ir\": \"workspace:*\",\n    \"@executor/source-core\": \"workspace:*\",\n    \"@executor/codemode-core\": \"workspace:*\",\n    \"effect\": \"catalog:\",\n    \"yaml\": \"^2.8.1\"\n  },\n  \"devDependencies\": {\n    \"@effect/platform-node\": \"^0.104.1\",\n    \"@effect/vitest\": \"catalog:\",\n    \"@types/node\": \"catalog:\",\n    \"bun-types\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  },\n  \"version\": \"0.0.0\"\n}\n"
  },
  {
    "path": "packages/sources/openapi/src/adapter.ts",
    "content": "import {\n  FetchHttpClient,\n  HttpClient,\n  HttpClientRequest,\n} from \"@effect/platform\";\nimport {\n  applyCookiePlacementsToHeaders,\n  applyHttpQueryPlacementsToUrl,\n  applyJsonBodyPlacements,\n} from \"@executor/codemode-core\";\nimport { buildOpenApiToolPresentation } from \"./tool-presentation\";\nimport { compileOpenApiToolDefinitions } from \"./definitions\";\nimport { detectOpenApiSource } from \"./discovery\";\nimport {\n  httpBodyModeFromContentType,\n  serializeOpenApiParameterValue,\n  serializeOpenApiRequestBody,\n  withSerializedQueryEntries,\n} from \"./http-serialization\";\nimport { OpenApiLocalConfigBindingSchema } from \"./local-config\";\nimport {\n  OpenApiToolProviderDataSchema,\n  type OpenApiRefHintTable,\n  type OpenApiToolProviderData,\n} from \"./types\";\nimport {\n  createOpenApiCatalogFragment,\n  type OpenApiCatalogOperationInput,\n} from \"./catalog\";\nimport { extractOpenApiManifest } from \"./extraction\";\nimport {\n  ConnectHttpAuthSchema,\n  ConnectHttpImportAuthSchema,\n  createSourceCatalogSyncResult,\n  decodeBindingConfig,\n  decodeExecutableBindingPayload,\n  decodeSourceBindingPayload,\n  emptySourceBindingState,\n  encodeBindingConfig,\n  isSourceCredentialRequiredError,\n  looksLikeGraphqlEndpoint,\n  OptionalNullableStringSchema,\n  SourceCredentialRequiredError,\n  SourceConnectCommonFieldsSchema,\n  StringMapSchema,\n  createCatalogImportMetadata,\n  EXECUTABLE_BINDING_VERSION,\n  sourceCoreEffectError,\n  type Source,\n  type SourceAdapter,\n} from \"@executor/source-core\";\nimport * as Effect from \"effect/Effect\";\nimport * as Schema from \"effect/Schema\";\n\nconst OpenApiConnectPayloadSchema = Schema.extend(\n  SourceConnectCommonFieldsSchema,\n  Schema.extend(\n    ConnectHttpImportAuthSchema,\n    Schema.Struct({\n      kind: Schema.Literal(\"openapi\"),\n      specUrl: Schema.Trim.pipe(Schema.nonEmptyString()),\n      auth: Schema.optional(ConnectHttpAuthSchema),\n    }),\n  ),\n);\n\nconst OpenApiExecutorAddInputSchema = Schema.extend(\n  ConnectHttpImportAuthSchema,\n  Schema.Struct({\n    kind: Schema.Literal(\"openapi\"),\n    endpoint: Schema.String,\n    specUrl: Schema.String,\n    name: OptionalNullableStringSchema,\n    namespace: OptionalNullableStringSchema,\n    auth: Schema.optional(ConnectHttpAuthSchema),\n  }),\n);\n\nconst OpenApiBindingConfigSchema = Schema.Struct({\n  specUrl: Schema.Trim.pipe(Schema.nonEmptyString()),\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n});\n\nconst OpenApiSourceBindingPayloadSchema = Schema.Struct({\n  specUrl: Schema.optional(Schema.String),\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n});\n\ntype OpenApiBindingConfig = {\n  specUrl: string;\n  defaultHeaders: typeof StringMapSchema.Type | null;\n};\n\nconst OPENAPI_BINDING_CONFIG_VERSION = 1;\n\nconst bindingHasAnyField = (\n  value: unknown,\n  fields: readonly string[],\n): boolean =>\n  value !== null &&\n  typeof value === \"object\" &&\n  !Array.isArray(value) &&\n  fields.some((field) => Object.prototype.hasOwnProperty.call(value, field));\n\nconst openApiBindingConfigFromSource = (\n  source: Pick<Source, \"id\" | \"bindingVersion\" | \"binding\">,\n): Effect.Effect<OpenApiBindingConfig, Error, never> =>\n  Effect.gen(function* () {\n    if (\n      bindingHasAnyField(source.binding, [\n        \"transport\",\n        \"queryParams\",\n        \"headers\",\n      ])\n    ) {\n      return yield* sourceCoreEffectError(\"openapi/adapter\", \"OpenAPI sources cannot define MCP transport settings\");\n    }\n\n    const bindingConfig = yield* decodeSourceBindingPayload({\n      sourceId: source.id,\n      label: \"OpenAPI\",\n      version: source.bindingVersion,\n      expectedVersion: OPENAPI_BINDING_CONFIG_VERSION,\n      schema: OpenApiSourceBindingPayloadSchema,\n      value: source.binding,\n      allowedKeys: [\"specUrl\", \"defaultHeaders\"],\n    });\n\n    const specUrl =\n      typeof bindingConfig.specUrl === \"string\"\n        ? bindingConfig.specUrl.trim()\n        : \"\";\n    if (specUrl.length === 0) {\n      return yield* sourceCoreEffectError(\"openapi/adapter\", \"OpenAPI sources require specUrl\");\n    }\n\n    return {\n      specUrl,\n      defaultHeaders: bindingConfig.defaultHeaders ?? null,\n    } satisfies OpenApiBindingConfig;\n  });\n\nconst fetchOpenApiDocumentWithHeaders = (input: {\n  url: string;\n  headers?: Readonly<Record<string, string>>;\n  queryParams?: Readonly<Record<string, string>>;\n  cookies?: Readonly<Record<string, string>>;\n}): Effect.Effect<string, Error, never> =>\n  Effect.gen(function* () {\n    const client = yield* HttpClient.HttpClient;\n    const request = HttpClientRequest.get(\n      applyHttpQueryPlacementsToUrl({\n        url: input.url,\n        queryParams: input.queryParams,\n      }).toString(),\n    ).pipe(\n      HttpClientRequest.setHeaders(\n        applyCookiePlacementsToHeaders({\n          headers: input.headers ?? {},\n          cookies: input.cookies,\n        }),\n      ),\n    );\n    const response = yield* client\n      .execute(request)\n      .pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n        ),\n      );\n\n    if (response.status === 401 || response.status === 403) {\n      return yield* new SourceCredentialRequiredError(\n          \"import\",\n          `OpenAPI spec fetch requires credentials (status ${response.status})`,\n        );\n    }\n    if (response.status < 200 || response.status >= 300) {\n      return yield* sourceCoreEffectError(\"openapi/adapter\", `OpenAPI spec fetch failed with status ${response.status}`);\n    }\n\n    return yield* response.text.pipe(\n      Effect.mapError((cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n      ),\n    );\n  }).pipe(Effect.provide(FetchHttpClient.layer));\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\ntype OpenApiToolArgs = Record<string, unknown>;\ntype OpenApiToolParameter =\n  OpenApiToolProviderData[\"invocation\"][\"parameters\"][number];\n\nconst parameterContainerKeys: Record<\n  OpenApiToolParameter[\"location\"],\n  Array<string>\n> = {\n  path: [\"path\", \"pathParams\", \"params\"],\n  query: [\"query\", \"queryParams\", \"params\"],\n  header: [\"headers\", \"header\"],\n  cookie: [\"cookies\", \"cookie\"],\n};\n\nconst readParameterValue = (\n  args: OpenApiToolArgs,\n  parameter: OpenApiToolParameter,\n): unknown => {\n  const directValue = args[parameter.name];\n  if (directValue !== undefined) {\n    return directValue;\n  }\n\n  for (const key of parameterContainerKeys[parameter.location]) {\n    const container = args[key];\n    if (\n      typeof container !== \"object\" ||\n      container === null ||\n      Array.isArray(container)\n    ) {\n      continue;\n    }\n\n    const nestedValue = (container as Record<string, unknown>)[parameter.name];\n    if (nestedValue !== undefined) {\n      return nestedValue;\n    }\n  }\n\n  return undefined;\n};\n\nconst replacePathTemplate = (\n  pathTemplate: string,\n  args: OpenApiToolArgs,\n  payload: OpenApiToolProviderData[\"invocation\"],\n): string => {\n  let resolvedPath = pathTemplate;\n\n  for (const parameter of payload.parameters) {\n    if (parameter.location !== \"path\") {\n      continue;\n    }\n\n    const parameterValue = readParameterValue(args, parameter);\n    if (parameterValue === undefined || parameterValue === null) {\n      if (parameter.required) {\n        throw new Error(`Missing required path parameter: ${parameter.name}`);\n      }\n      continue;\n    }\n\n    const serialized = serializeOpenApiParameterValue(\n      parameter,\n      parameterValue,\n    );\n    resolvedPath = resolvedPath.replaceAll(\n      `{${parameter.name}}`,\n      serialized.kind === \"path\"\n        ? serialized.value\n        : encodeURIComponent(String(parameterValue)),\n    );\n  }\n\n  const unresolvedPathParameters = [...resolvedPath.matchAll(/\\{([^{}]+)\\}/g)]\n    .map((match) => match[1])\n    .filter(\n      (value): value is string => typeof value === \"string\" && value.length > 0,\n    );\n\n  for (const parameterName of unresolvedPathParameters) {\n    const parameterValue =\n      args[parameterName] ??\n      (typeof args.path === \"object\" &&\n      args.path !== null &&\n      !Array.isArray(args.path)\n        ? (args.path as Record<string, unknown>)[parameterName]\n        : undefined) ??\n      (typeof args.pathParams === \"object\" &&\n      args.pathParams !== null &&\n      !Array.isArray(args.pathParams)\n        ? (args.pathParams as Record<string, unknown>)[parameterName]\n        : undefined) ??\n      (typeof args.params === \"object\" &&\n      args.params !== null &&\n      !Array.isArray(args.params)\n        ? (args.params as Record<string, unknown>)[parameterName]\n        : undefined);\n\n    if (parameterValue === undefined || parameterValue === null) {\n      continue;\n    }\n\n    resolvedPath = resolvedPath.replaceAll(\n      `{${parameterName}}`,\n      encodeURIComponent(String(parameterValue)),\n    );\n  }\n\n  const stillUnresolved = [...resolvedPath.matchAll(/\\{([^{}]+)\\}/g)]\n    .map((match) => match[1])\n    .filter(\n      (value): value is string => typeof value === \"string\" && value.length > 0,\n    );\n  if (stillUnresolved.length > 0) {\n    const names = [...new Set(stillUnresolved)].sort().join(\", \");\n    throw new Error(`Unresolved path parameters after substitution: ${names}`);\n  }\n\n  return resolvedPath;\n};\n\nconst responseHeadersRecord = (response: Response): Record<string, string> => {\n  const headers: Record<string, string> = {};\n  response.headers.forEach((value, key) => {\n    headers[key] = value;\n  });\n  return headers;\n};\n\nconst decodeResponseBody = async (response: Response): Promise<unknown> => {\n  if (response.status === 204) {\n    return null;\n  }\n\n  const bodyMode = httpBodyModeFromContentType(\n    response.headers.get(\"content-type\"),\n  );\n  if (bodyMode === \"json\") {\n    return response.json();\n  }\n  if (bodyMode === \"bytes\") {\n    return new Uint8Array(await response.arrayBuffer());\n  }\n\n  return response.text();\n};\n\nconst resolveOpenApiBaseUrl = (input: {\n  endpoint: string;\n  providerData: OpenApiToolProviderData;\n}): string => {\n  const server =\n    input.providerData.servers?.[0] ?? input.providerData.documentServers?.[0];\n  if (!server) {\n    return new URL(input.endpoint).toString();\n  }\n\n  const expanded = Object.entries(server.variables ?? {}).reduce(\n    (url, [name, value]) => url.replaceAll(`{${name}}`, value),\n    server.url,\n  );\n\n  return new URL(expanded, input.endpoint).toString();\n};\n\nconst resolveRequestUrl = (baseUrl: string, resolvedPath: string): URL => {\n  try {\n    return new URL(resolvedPath);\n  } catch {\n    const resolved = new URL(baseUrl);\n    const basePath =\n      resolved.pathname === \"/\"\n        ? \"\"\n        : resolved.pathname.endsWith(\"/\")\n          ? resolved.pathname.slice(0, -1)\n          : resolved.pathname;\n    const pathPart = resolvedPath.startsWith(\"/\")\n      ? resolvedPath\n      : `/${resolvedPath}`;\n\n    resolved.pathname = `${basePath}${pathPart}`.replace(/\\/{2,}/g, \"/\");\n    resolved.search = \"\";\n    resolved.hash = \"\";\n    return resolved;\n  }\n};\n\nconst openApiCatalogOperationFromDefinition = (input: {\n  definition: ReturnType<typeof compileOpenApiToolDefinitions>[number];\n  refHintTable?: Readonly<OpenApiRefHintTable>;\n}): OpenApiCatalogOperationInput => {\n  const presentation = buildOpenApiToolPresentation({\n    definition: input.definition,\n    refHintTable: input.refHintTable,\n  });\n  const method = input.definition.method.toUpperCase();\n\n  return {\n    toolId: input.definition.toolId,\n    title: input.definition.name,\n    description: input.definition.description,\n    effect:\n      method === \"GET\" || method === \"HEAD\"\n        ? \"read\"\n        : method === \"DELETE\"\n          ? \"delete\"\n          : \"write\",\n    inputSchema: presentation.inputSchema,\n    outputSchema: presentation.outputSchema,\n    providerData: presentation.providerData as OpenApiToolProviderData,\n  };\n};\n\nexport const openApiSourceAdapter = {\n  key: \"openapi\",\n  displayName: \"OpenAPI\",\n  catalogKind: \"imported\",\n  connectStrategy: \"direct\",\n  credentialStrategy: \"credential_managed\",\n  bindingConfigVersion: OPENAPI_BINDING_CONFIG_VERSION,\n  providerKey: \"generic_http\",\n  defaultImportAuthPolicy: \"reuse_runtime\",\n  connectPayloadSchema: OpenApiConnectPayloadSchema,\n  executorAddInputSchema: OpenApiExecutorAddInputSchema,\n  executorAddHelpText: [\n    \"endpoint is the base API URL. specUrl is the OpenAPI document URL.\",\n  ],\n  executorAddInputSignatureWidth: 420,\n  localConfigBindingSchema: OpenApiLocalConfigBindingSchema,\n  localConfigBindingFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(openApiBindingConfigFromSource(source), (bindingConfig) => ({\n        specUrl: bindingConfig.specUrl,\n        defaultHeaders: bindingConfig.defaultHeaders,\n      })),\n    ),\n  serializeBindingConfig: (source) =>\n    encodeBindingConfig({\n      adapterKey: \"openapi\",\n      version: OPENAPI_BINDING_CONFIG_VERSION,\n      payloadSchema: OpenApiBindingConfigSchema,\n      payload: Effect.runSync(openApiBindingConfigFromSource(source)),\n    }),\n  deserializeBindingConfig: ({ id, bindingConfigJson }) =>\n    Effect.map(\n      decodeBindingConfig({\n        sourceId: id,\n        label: \"OpenAPI\",\n        adapterKey: \"openapi\",\n        version: OPENAPI_BINDING_CONFIG_VERSION,\n        payloadSchema: OpenApiBindingConfigSchema,\n        value: bindingConfigJson,\n      }),\n      ({ version, payload }) => ({\n        version,\n        payload: {\n          specUrl: payload.specUrl,\n          defaultHeaders: payload.defaultHeaders ?? null,\n        },\n      }),\n    ),\n  bindingStateFromSource: (source) =>\n    Effect.map(openApiBindingConfigFromSource(source), (bindingConfig) => ({\n      ...emptySourceBindingState,\n      specUrl: bindingConfig.specUrl,\n      defaultHeaders: bindingConfig.defaultHeaders,\n    })),\n  sourceConfigFromSource: (source) =>\n    Effect.runSync(\n      Effect.map(openApiBindingConfigFromSource(source), (bindingConfig) => ({\n        kind: \"openapi\",\n        endpoint: source.endpoint,\n        specUrl: bindingConfig.specUrl,\n        defaultHeaders: bindingConfig.defaultHeaders,\n      })),\n    ),\n  validateSource: (source) =>\n    Effect.gen(function* () {\n      const bindingConfig = yield* openApiBindingConfigFromSource(source);\n      return {\n        ...source,\n        bindingVersion: OPENAPI_BINDING_CONFIG_VERSION,\n        binding: {\n          specUrl: bindingConfig.specUrl,\n          defaultHeaders: bindingConfig.defaultHeaders,\n        },\n      };\n    }),\n  shouldAutoProbe: (source) =>\n    source.enabled &&\n    (source.status === \"draft\" || source.status === \"probing\"),\n  discoveryPriority: ({ normalizedUrl }) =>\n    looksLikeGraphqlEndpoint(normalizedUrl) ? 50 : 250,\n  detectSource: ({ normalizedUrl, headers }) =>\n    detectOpenApiSource({\n      normalizedUrl,\n      headers,\n    }),\n  syncCatalog: ({ source, resolveAuthMaterialForSlot }) =>\n    Effect.gen(function* () {\n      const bindingConfig = yield* openApiBindingConfigFromSource(source);\n\n      const auth = yield* resolveAuthMaterialForSlot(\"import\");\n      const openApiDocument = yield* fetchOpenApiDocumentWithHeaders({\n        url: bindingConfig.specUrl,\n        headers: {\n          ...bindingConfig.defaultHeaders,\n          ...auth.headers,\n        },\n        queryParams: auth.queryParams,\n        cookies: auth.cookies,\n      }).pipe(\n        Effect.mapError((cause) =>\n          isSourceCredentialRequiredError(cause)\n            ? cause\n            : new Error(\n                `Failed fetching OpenAPI spec for ${source.id}: ${cause.message}`,\n              ),\n        ),\n      );\n\n      const manifest = yield* extractOpenApiManifest(\n        source.name,\n        openApiDocument,\n      ).pipe(\n        Effect.mapError((cause) =>\n          cause instanceof Error ? cause : new Error(String(cause)),\n        ),\n      );\n\n      const definitions = compileOpenApiToolDefinitions(manifest);\n      const now = Date.now();\n\n      return createSourceCatalogSyncResult({\n        fragment: createOpenApiCatalogFragment({\n          source,\n          documents: [\n            {\n              documentKind: \"openapi\",\n              documentKey: bindingConfig.specUrl,\n              contentText: openApiDocument,\n              fetchedAt: now,\n            },\n          ],\n          operations: definitions.map((definition) =>\n            openApiCatalogOperationFromDefinition({\n              definition,\n              refHintTable: manifest.refHintTable,\n            }),\n          ),\n        }),\n        importMetadata: createCatalogImportMetadata({\n          source,\n          adapterKey: \"openapi\",\n        }),\n        sourceHash: manifest.sourceHash,\n      });\n    }),\n  invoke: (input) =>\n    Effect.tryPromise({\n      try: async () => {\n        const bindingConfig = Effect.runSync(\n          openApiBindingConfigFromSource(input.source),\n        );\n        const providerData = decodeExecutableBindingPayload({\n          executableId: input.executable.id,\n          label: \"OpenAPI\",\n          version: input.executable.bindingVersion,\n          expectedVersion: EXECUTABLE_BINDING_VERSION,\n          schema: OpenApiToolProviderDataSchema,\n          value: input.executable.binding,\n        }) as OpenApiToolProviderData;\n        const args = asRecord(input.args);\n        const resolvedPath = replacePathTemplate(\n          providerData.invocation.pathTemplate,\n          args,\n          providerData.invocation,\n        );\n        const headers: Record<string, string> = {\n          ...bindingConfig.defaultHeaders,\n        };\n        const queryEntries: Array<{\n          name: string;\n          value: string;\n          allowReserved?: boolean;\n        }> = [];\n        const cookieParts: string[] = [];\n\n        for (const parameter of providerData.invocation.parameters) {\n          if (parameter.location === \"path\") {\n            continue;\n          }\n\n          const value = readParameterValue(args, parameter);\n          if (value === undefined || value === null) {\n            if (parameter.required) {\n              throw new Error(\n                `Missing required ${parameter.location} parameter ${parameter.name}`,\n              );\n            }\n            continue;\n          }\n\n          const serialized = serializeOpenApiParameterValue(parameter, value);\n          if (serialized.kind === \"query\") {\n            queryEntries.push(...serialized.entries);\n            continue;\n          }\n          if (serialized.kind === \"header\") {\n            headers[parameter.name] = serialized.value;\n            continue;\n          }\n          if (serialized.kind === \"cookie\") {\n            cookieParts.push(\n              ...serialized.pairs.map(\n                (pair) => `${pair.name}=${encodeURIComponent(pair.value)}`,\n              ),\n            );\n          }\n        }\n\n        let body: string | Uint8Array | undefined;\n        if (providerData.invocation.requestBody) {\n          const bodyValue = args.body ?? args.input;\n          if (bodyValue !== undefined) {\n            const serializedBody = serializeOpenApiRequestBody({\n              requestBody: providerData.invocation.requestBody,\n              body: applyJsonBodyPlacements({\n                body: bodyValue,\n                bodyValues: input.auth.bodyValues,\n                label: `${providerData.method.toUpperCase()} ${providerData.path}`,\n              }),\n            });\n            headers[\"content-type\"] = serializedBody.contentType;\n            body = serializedBody.body;\n          }\n        }\n\n        const requestUrl = resolveRequestUrl(\n          resolveOpenApiBaseUrl({\n            endpoint: input.source.endpoint,\n            providerData,\n          }),\n          resolvedPath,\n        );\n        const urlWithAuth = applyHttpQueryPlacementsToUrl({\n          url: requestUrl,\n          queryParams: input.auth.queryParams,\n        });\n        const finalUrl = withSerializedQueryEntries(urlWithAuth, queryEntries);\n        const requestHeaders = applyCookiePlacementsToHeaders({\n          headers: {\n            ...headers,\n            ...input.auth.headers,\n          },\n          cookies: {\n            ...input.auth.cookies,\n          },\n        });\n\n        if (cookieParts.length > 0) {\n          const existingCookie = requestHeaders.cookie;\n          requestHeaders.cookie = existingCookie\n            ? `${existingCookie}; ${cookieParts.join(\"; \")}`\n            : cookieParts.join(\"; \");\n        }\n\n        const response = await fetch(finalUrl.toString(), {\n          method: providerData.method.toUpperCase(),\n          headers: requestHeaders,\n          ...(body !== undefined\n            ? {\n                body:\n                  typeof body === \"string\" ? body : new Uint8Array(body).buffer,\n              }\n            : {}),\n        });\n        const responseBody = await decodeResponseBody(response);\n\n        return {\n          data: response.ok ? responseBody : null,\n          error: response.ok ? null : responseBody,\n          headers: responseHeadersRecord(response),\n          status: response.status,\n        };\n      },\n      catch: (cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n    }),\n} satisfies SourceAdapter;\n"
  },
  {
    "path": "packages/sources/openapi/src/catalog.ts",
    "content": "import { createCatalogSnapshotV1FromFragments } from \"@executor/ir/catalog\";\nimport {\n  CapabilityIdSchema,\n  DocumentIdSchema,\n  ExampleSymbolIdSchema,\n  ExecutableIdSchema,\n  HeaderSymbolIdSchema,\n  ParameterSymbolIdSchema,\n  RequestBodySymbolIdSchema,\n  ResponseSymbolIdSchema,\n  ScopeIdSchema,\n  SecuritySchemeSymbolIdSchema,\n} from \"@executor/ir/ids\";\nimport type {\n  AuthRequirement,\n  Capability,\n  CatalogSnapshotV1,\n  ContentSpec,\n  ParameterSymbol,\n  ResponseSet,\n  ResponseSymbol,\n  Scope,\n  SecuritySchemeSymbol,\n  Executable,\n} from \"@executor/ir/model\";\nimport {\n  type BaseCatalogOperationInput,\n  type CatalogFragmentBuilder,\n  type CatalogSourceDocumentInput,\n  type JsonSchemaImporter,\n  type Source,\n  EXECUTABLE_BINDING_VERSION,\n  buildCatalogFragment,\n  createCatalogImportMetadata,\n  docsFrom,\n  exampleSymbolFromValue,\n  groupedSchemaForParameter,\n  interactionForEffect,\n  mutableRecord,\n  preferredResponseContentTypes,\n  provenanceFor,\n  requestBodySchemaFromInput,\n  responseSetFromSingleResponse,\n  responseSetFromVariants,\n  stableHash,\n  statusMatchFromHttpStatusCode,\n  toolPathSegments,\n} from \"@executor/source-core\";\n\nimport type { OpenApiToolProviderData } from \"./types\";\n\nexport type OpenApiCatalogOperationInput = BaseCatalogOperationInput & {\n  providerData: OpenApiToolProviderData;\n};\n\nconst openApiServerSpecs = (\n  servers:\n    | OpenApiToolProviderData[\"servers\"]\n    | OpenApiToolProviderData[\"documentServers\"]\n    | undefined,\n): NonNullable<NonNullable<Scope[\"defaults\"]>[\"servers\"]> | undefined => {\n  if (!servers || servers.length === 0) {\n    return undefined;\n  }\n\n  return servers.map((server) => ({\n    url: server.url,\n    ...(server.description ? { description: server.description } : {}),\n    ...(server.variables ? { variables: server.variables } : {}),\n  }));\n};\n\nconst createOperationScope = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  parentScopeId: ReturnType<typeof ScopeIdSchema.make>;\n  operation: OpenApiCatalogOperationInput;\n  defaults: Scope[\"defaults\"];\n}) => {\n  const scopeId = ScopeIdSchema.make(\n    `scope_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n      kind: \"operation\",\n    })}`,\n  );\n\n  mutableRecord(input.catalog.scopes)[scopeId] = {\n    id: scopeId,\n    kind: \"operation\",\n    parentId: input.parentScopeId,\n    name: input.operation.title ?? input.operation.providerData.toolId,\n    docs: docsFrom({\n      summary: input.operation.title ?? input.operation.providerData.toolId,\n      description: input.operation.description ?? undefined,\n    }),\n    defaults: input.defaults,\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/openapi/${input.operation.providerData.toolId}/scope`,\n    ),\n  } satisfies Scope;\n\n  return scopeId;\n};\n\nconst ensureOpenApiSecuritySchemeSymbol = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  schemeName: string;\n  scheme?: NonNullable<OpenApiToolProviderData[\"securitySchemes\"]>[number];\n}) => {\n  const schemeId = SecuritySchemeSymbolIdSchema.make(\n    `security_${stableHash({\n      sourceId: input.source.id,\n      provider: \"openapi\",\n      schemeName: input.schemeName,\n    })}`,\n  );\n\n  if (input.catalog.symbols[schemeId]) {\n    return schemeId;\n  }\n\n  const scheme = input.scheme;\n  const httpScheme = scheme?.scheme?.toLowerCase();\n  const schemeType =\n    scheme?.schemeType === \"apiKey\"\n      ? \"apiKey\"\n      : scheme?.schemeType === \"oauth2\"\n        ? \"oauth2\"\n        : scheme?.schemeType === \"http\" && httpScheme === \"basic\"\n          ? \"basic\"\n          : scheme?.schemeType === \"http\" && httpScheme === \"bearer\"\n            ? \"bearer\"\n            : scheme?.schemeType === \"openIdConnect\"\n              ? \"custom\"\n              : scheme?.schemeType === \"http\"\n                ? \"http\"\n                : \"custom\";\n\n  const oauthFlows = Object.fromEntries(\n    Object.entries(scheme?.flows ?? {}).map(([flowName, flow]) => [\n      flowName,\n      flow,\n    ]),\n  );\n  const oauthScopes = Object.fromEntries(\n    Object.entries(scheme?.flows ?? {}).flatMap(([, flow]) =>\n      Object.entries(flow.scopes ?? {}),\n    ),\n  );\n  const description =\n    scheme?.description ??\n    (scheme?.openIdConnectUrl\n      ? `OpenID Connect: ${scheme.openIdConnectUrl}`\n      : null);\n\n  mutableRecord(input.catalog.symbols)[schemeId] = {\n    id: schemeId,\n    kind: \"securityScheme\",\n    schemeType,\n    ...(docsFrom({\n      summary: input.schemeName,\n      description,\n    })\n      ? {\n          docs: docsFrom({\n            summary: input.schemeName,\n            description,\n          })!,\n        }\n      : {}),\n    ...(scheme?.placementIn || scheme?.placementName\n      ? {\n          placement: {\n            ...(scheme?.placementIn ? { in: scheme.placementIn } : {}),\n            ...(scheme?.placementName ? { name: scheme.placementName } : {}),\n          },\n        }\n      : {}),\n    ...(schemeType === \"apiKey\" && scheme?.placementIn && scheme?.placementName\n      ? {\n          apiKey: {\n            in: scheme.placementIn,\n            name: scheme.placementName,\n          },\n        }\n      : {}),\n    ...((schemeType === \"basic\" ||\n      schemeType === \"bearer\" ||\n      schemeType === \"http\") &&\n    scheme?.scheme\n      ? {\n          http: {\n            scheme: scheme.scheme,\n            ...(scheme.bearerFormat\n              ? { bearerFormat: scheme.bearerFormat }\n              : {}),\n          },\n        }\n      : {}),\n    ...(schemeType === \"oauth2\"\n      ? {\n          oauth: {\n            ...(Object.keys(oauthFlows).length > 0\n              ? { flows: oauthFlows }\n              : {}),\n            ...(Object.keys(oauthScopes).length > 0\n              ? { scopes: oauthScopes }\n              : {}),\n          },\n        }\n      : {}),\n    ...(schemeType === \"custom\"\n      ? {\n          custom: {},\n        }\n      : {}),\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/openapi/securitySchemes/${input.schemeName}`,\n    ),\n  } satisfies SecuritySchemeSymbol;\n\n  return schemeId;\n};\n\nconst openApiAuthRequirementToIr = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  authRequirement: OpenApiToolProviderData[\"authRequirement\"] | undefined;\n  schemesByName: ReadonlyMap<\n    string,\n    NonNullable<OpenApiToolProviderData[\"securitySchemes\"]>[number]\n  >;\n}): AuthRequirement => {\n  const requirement = input.authRequirement;\n  if (!requirement) {\n    return {\n      kind: \"none\",\n    };\n  }\n\n  switch (requirement.kind) {\n    case \"none\":\n      return {\n        kind: \"none\",\n      };\n    case \"scheme\": {\n      const schemeId = ensureOpenApiSecuritySchemeSymbol({\n        catalog: input.catalog,\n        source: input.source,\n        documentId: input.documentId,\n        schemeName: requirement.schemeName,\n        scheme: input.schemesByName.get(requirement.schemeName),\n      });\n\n      return {\n        kind: \"scheme\",\n        schemeId,\n        ...(requirement.scopes && requirement.scopes.length > 0\n          ? { scopes: [...requirement.scopes] }\n          : {}),\n      };\n    }\n    case \"allOf\":\n    case \"anyOf\":\n      return {\n        kind: requirement.kind,\n        items: requirement.items.map((item) =>\n          openApiAuthRequirementToIr({\n            catalog: input.catalog,\n            source: input.source,\n            documentId: input.documentId,\n            authRequirement: item,\n            schemesByName: input.schemesByName,\n          }),\n        ),\n      };\n  }\n};\n\nconst contentSpecsFromOpenApiContents = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"kind\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  importer: JsonSchemaImporter;\n  rootSchema?: unknown;\n  contents:\n    | ReadonlyArray<\n        NonNullable<\n          NonNullable<OpenApiToolProviderData[\"responses\"]>[number][\"contents\"]\n        >[number]\n      >\n    | ReadonlyArray<\n        NonNullable<\n          NonNullable<\n            OpenApiToolProviderData[\"invocation\"][\"requestBody\"]\n          >[\"contents\"]\n        >[number]\n      >\n    | ReadonlyArray<\n        NonNullable<\n          NonNullable<\n            OpenApiToolProviderData[\"invocation\"][\"parameters\"][number][\"content\"]\n          >[number]\n        >\n      >;\n  pointerBase: string;\n}) =>\n  input.contents.map((content, contentIndex) => {\n    const exampleIds = (content.examples ?? []).map((example, exampleIndex) =>\n      exampleSymbolFromValue({\n        catalog: input.catalog,\n        source: input.source,\n        documentId: input.documentId,\n        pointer: `${input.pointerBase}/content/${contentIndex}/example/${exampleIndex}`,\n        name: example.label,\n        summary: example.label,\n        value: JSON.parse(example.valueJson) as unknown,\n      }),\n    );\n\n    return {\n      mediaType: content.mediaType,\n      ...(content.schema !== undefined\n        ? {\n            shapeId: input.importer.importSchema(\n              content.schema,\n              `${input.pointerBase}/content/${contentIndex}`,\n              input.rootSchema,\n            ),\n          }\n        : {}),\n      ...(exampleIds.length > 0 ? { exampleIds } : {}),\n    } satisfies ContentSpec;\n  });\n\nconst createOpenApiHeaderSymbol = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"kind\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  importer: JsonSchemaImporter;\n  rootSchema?: unknown;\n  pointer: string;\n  idSeed: Record<string, unknown>;\n  header: NonNullable<\n    NonNullable<OpenApiToolProviderData[\"responses\"]>[number][\"headers\"]\n  >[number];\n}) => {\n  const headerId = HeaderSymbolIdSchema.make(\n    `header_${stableHash(input.idSeed)}`,\n  );\n  const exampleIds = (input.header.examples ?? []).map((example, index) =>\n    exampleSymbolFromValue({\n      catalog: input.catalog,\n      source: input.source,\n      documentId: input.documentId,\n      pointer: `${input.pointer}/example/${index}`,\n      name: example.label,\n      summary: example.label,\n      value: JSON.parse(example.valueJson) as unknown,\n    }),\n  );\n  const contents = input.header.content\n    ? contentSpecsFromOpenApiContents({\n        catalog: input.catalog,\n        source: input.source,\n        documentId: input.documentId,\n        importer: input.importer,\n        rootSchema: input.rootSchema,\n        contents: input.header.content,\n        pointerBase: input.pointer,\n      })\n    : undefined;\n\n  mutableRecord(input.catalog.symbols)[headerId] = {\n    id: headerId,\n    kind: \"header\",\n    name: input.header.name,\n    ...(docsFrom({\n      description: input.header.description,\n    })\n      ? {\n          docs: docsFrom({\n            description: input.header.description,\n          })!,\n        }\n      : {}),\n    ...(typeof input.header.deprecated === \"boolean\"\n      ? { deprecated: input.header.deprecated }\n      : {}),\n    ...(input.header.schema !== undefined\n      ? {\n          schemaShapeId: input.importer.importSchema(\n            input.header.schema,\n            input.pointer,\n            input.rootSchema,\n          ),\n        }\n      : {}),\n    ...(contents && contents.length > 0 ? { content: contents } : {}),\n    ...(exampleIds.length > 0 ? { exampleIds } : {}),\n    ...(input.header.style ? { style: input.header.style } : {}),\n    ...(typeof input.header.explode === \"boolean\"\n      ? { explode: input.header.explode }\n      : {}),\n    synthetic: false,\n    provenance: provenanceFor(input.documentId, input.pointer),\n  };\n\n  return headerId;\n};\n\nconst createHttpCapabilityFromOpenApi = (input: {\n  catalog: CatalogFragmentBuilder;\n  source: Pick<Source, \"id\" | \"kind\" | \"name\" | \"namespace\">;\n  documentId: ReturnType<typeof DocumentIdSchema.make>;\n  serviceScopeId: ReturnType<typeof ScopeIdSchema.make>;\n  operation: OpenApiCatalogOperationInput;\n  importer: JsonSchemaImporter;\n  rootSchema?: unknown;\n}) => {\n  const toolPath = toolPathSegments(\n    input.source,\n    input.operation.providerData.toolId,\n  );\n  const capabilityId = CapabilityIdSchema.make(\n    `cap_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n    })}`,\n  );\n  const executableId = ExecutableIdSchema.make(\n    `exec_${stableHash({\n      sourceId: input.source.id,\n      toolId: input.operation.providerData.toolId,\n      protocol: \"http\",\n    })}`,\n  );\n  const inputSchema = input.operation.inputSchema ?? {};\n  const outputSchema = input.operation.outputSchema ?? {};\n  const exampleIds: Array<ReturnType<typeof ExampleSymbolIdSchema.make>> = [];\n  const schemesByName = new Map(\n    (input.operation.providerData.securitySchemes ?? []).map(\n      (scheme) => [scheme.schemeName, scheme] as const,\n    ),\n  );\n\n  input.operation.providerData.invocation.parameters.forEach((parameter) => {\n      const parameterId = ParameterSymbolIdSchema.make(\n        `param_${stableHash({\n          capabilityId,\n          location: parameter.location,\n          name: parameter.name,\n        })}`,\n      );\n      const parameterSchema = groupedSchemaForParameter(\n        inputSchema,\n        parameter.location,\n        parameter.name,\n      );\n      const matchingDocs =\n        input.operation.providerData.documentation?.parameters.find(\n          (candidate) =>\n            candidate.name === parameter.name &&\n            candidate.location === parameter.location,\n        );\n      const parameterExampleIds = (matchingDocs?.examples ?? []).map(\n        (example, index) => {\n          const parsed = JSON.parse(example.valueJson) as unknown;\n          return exampleSymbolFromValue({\n            catalog: input.catalog,\n            source: input.source,\n            documentId: input.documentId,\n            pointer: `#/openapi/${input.operation.providerData.toolId}/parameter/${parameter.location}/${parameter.name}/example/${index}`,\n            name: example.label,\n            summary: example.label,\n            value: parsed,\n          });\n        },\n      );\n      exampleIds.push(...parameterExampleIds);\n      const parameterContent = parameter.content\n        ? contentSpecsFromOpenApiContents({\n            catalog: input.catalog,\n            source: input.source,\n            documentId: input.documentId,\n            importer: input.importer,\n            rootSchema: input.rootSchema,\n            contents: parameter.content,\n            pointerBase: `#/openapi/${input.operation.providerData.toolId}/parameter/${parameter.location}/${parameter.name}`,\n          })\n        : undefined;\n      mutableRecord(input.catalog.symbols)[parameterId] = {\n        id: parameterId,\n        kind: \"parameter\",\n        name: parameter.name,\n        location: parameter.location,\n        required: parameter.required,\n        ...(docsFrom({\n          description: matchingDocs?.description ?? null,\n        })\n          ? {\n              docs: docsFrom({\n                description: matchingDocs?.description ?? null,\n              })!,\n            }\n          : {}),\n        ...(parameterSchema !== undefined &&\n        (!parameterContent || parameterContent.length === 0)\n          ? {\n              schemaShapeId: input.importer.importSchema(\n                parameterSchema,\n                `#/openapi/${input.operation.providerData.toolId}/parameter/${parameter.location}/${parameter.name}`,\n                input.rootSchema,\n              ),\n            }\n          : {}),\n        ...(parameterContent && parameterContent.length > 0\n          ? { content: parameterContent }\n          : {}),\n        ...(parameterExampleIds.length > 0\n          ? { exampleIds: parameterExampleIds }\n          : {}),\n        ...(parameter.style ? { style: parameter.style } : {}),\n        ...(typeof parameter.explode === \"boolean\"\n          ? { explode: parameter.explode }\n          : {}),\n        ...(typeof parameter.allowReserved === \"boolean\"\n          ? { allowReserved: parameter.allowReserved }\n          : {}),\n        synthetic: false,\n        provenance: provenanceFor(\n          input.documentId,\n          `#/openapi/${input.operation.providerData.toolId}/parameter/${parameter.location}/${parameter.name}`,\n        ),\n      } satisfies ParameterSymbol;\n    });\n\n  const requestBodyId = input.operation.providerData.invocation.requestBody\n    ? RequestBodySymbolIdSchema.make(\n        `request_body_${stableHash({ capabilityId })}`,\n      )\n    : undefined;\n\n  if (requestBodyId) {\n    const requestBodySchema = requestBodySchemaFromInput(inputSchema);\n    const requestBodyContents = input.operation.providerData.invocation\n      .requestBody?.contents\n      ? contentSpecsFromOpenApiContents({\n          catalog: input.catalog,\n          source: input.source,\n          documentId: input.documentId,\n          importer: input.importer,\n          rootSchema: input.rootSchema,\n          contents:\n            input.operation.providerData.invocation.requestBody.contents,\n          pointerBase: `#/openapi/${input.operation.providerData.toolId}/requestBody`,\n        })\n      : undefined;\n    const requestBodyExampleIds =\n      requestBodyContents?.flatMap((content) => content.exampleIds ?? []) ??\n      (\n        input.operation.providerData.documentation?.requestBody?.examples ?? []\n      ).map((example, index) =>\n        exampleSymbolFromValue({\n          catalog: input.catalog,\n          source: input.source,\n          documentId: input.documentId,\n          pointer: `#/openapi/${input.operation.providerData.toolId}/requestBody/example/${index}`,\n          name: example.label,\n          summary: example.label,\n          value: JSON.parse(example.valueJson) as unknown,\n        }),\n      );\n    exampleIds.push(...requestBodyExampleIds);\n    const contents: ContentSpec[] =\n      requestBodyContents && requestBodyContents.length > 0\n        ? requestBodyContents\n        : preferredResponseContentTypes(\n            input.operation.providerData.invocation.requestBody?.contentTypes,\n          ).map((mediaType) => ({\n            mediaType,\n            ...(requestBodySchema !== undefined\n              ? {\n                  shapeId: input.importer.importSchema(\n                    requestBodySchema,\n                    `#/openapi/${input.operation.providerData.toolId}/requestBody`,\n                    input.rootSchema,\n                  ),\n                }\n              : {}),\n            ...(requestBodyExampleIds.length > 0\n              ? { exampleIds: requestBodyExampleIds }\n              : {}),\n          }));\n\n    mutableRecord(input.catalog.symbols)[requestBodyId] = {\n      id: requestBodyId,\n      kind: \"requestBody\",\n      ...(docsFrom({\n        description:\n          input.operation.providerData.documentation?.requestBody\n            ?.description ?? null,\n      })\n        ? {\n            docs: docsFrom({\n              description:\n                input.operation.providerData.documentation?.requestBody\n                  ?.description ?? null,\n            })!,\n          }\n        : {}),\n      required:\n        input.operation.providerData.invocation.requestBody?.required ?? false,\n      contents,\n      synthetic: false,\n      provenance: provenanceFor(\n        input.documentId,\n        `#/openapi/${input.operation.providerData.toolId}/requestBody`,\n      ),\n    };\n  }\n\n  const openApiResponseVariants = input.operation.providerData.responses ?? [];\n  const responseSetId =\n    openApiResponseVariants.length > 0\n      ? responseSetFromVariants({\n          catalog: input.catalog,\n          variants: openApiResponseVariants.map((response, responseIndex) => {\n            const responseId = ResponseSymbolIdSchema.make(\n              `response_${stableHash({\n                capabilityId,\n                statusCode: response.statusCode,\n                responseIndex,\n              })}`,\n            );\n            const responseExampleIds = (response.examples ?? []).map(\n              (example, index) =>\n                exampleSymbolFromValue({\n                  catalog: input.catalog,\n                  source: input.source,\n                  documentId: input.documentId,\n                  pointer: `#/openapi/${input.operation.providerData.toolId}/responses/${response.statusCode}/example/${index}`,\n                  name: example.label,\n                  summary: example.label,\n                  value: JSON.parse(example.valueJson) as unknown,\n                }),\n            );\n            exampleIds.push(...responseExampleIds);\n\n            const contents =\n              response.contents && response.contents.length > 0\n                ? contentSpecsFromOpenApiContents({\n                    catalog: input.catalog,\n                    source: input.source,\n                    documentId: input.documentId,\n                    importer: input.importer,\n                    rootSchema: input.rootSchema,\n                    contents: response.contents,\n                    pointerBase: `#/openapi/${input.operation.providerData.toolId}/responses/${response.statusCode}`,\n                  })\n                : (() => {\n                    const responseShapeId =\n                      response.schema !== undefined\n                        ? input.importer.importSchema(\n                            response.schema,\n                            `#/openapi/${input.operation.providerData.toolId}/responses/${response.statusCode}`,\n                            input.rootSchema,\n                          )\n                        : undefined;\n                    const preferredContentTypes = preferredResponseContentTypes(\n                      response.contentTypes,\n                    );\n\n                    return preferredContentTypes.length > 0\n                      ? preferredContentTypes.map(\n                          (mediaType, contentIndex) => ({\n                            mediaType,\n                            ...(responseShapeId !== undefined &&\n                            contentIndex === 0\n                              ? { shapeId: responseShapeId }\n                              : {}),\n                            ...(responseExampleIds.length > 0 &&\n                            contentIndex === 0\n                              ? { exampleIds: responseExampleIds }\n                              : {}),\n                          }),\n                        )\n                      : undefined;\n                  })();\n            const headerIds = (response.headers ?? []).map(\n              (header, headerIndex) =>\n                createOpenApiHeaderSymbol({\n                  catalog: input.catalog,\n                  source: input.source,\n                  documentId: input.documentId,\n                  importer: input.importer,\n                  rootSchema: input.rootSchema,\n                  pointer: `#/openapi/${input.operation.providerData.toolId}/responses/${response.statusCode}/headers/${header.name}`,\n                  idSeed: {\n                    capabilityId,\n                    responseId,\n                    headerIndex,\n                    headerName: header.name,\n                  },\n                  header,\n                }),\n            );\n\n            mutableRecord(input.catalog.symbols)[responseId] = {\n              id: responseId,\n              kind: \"response\",\n              ...(docsFrom({\n                description:\n                  response.description ??\n                  (responseIndex === 0 ? input.operation.description : null),\n              })\n                ? {\n                    docs: docsFrom({\n                      description:\n                        response.description ??\n                        (responseIndex === 0\n                          ? input.operation.description\n                          : null),\n                    })!,\n                  }\n                : {}),\n              ...(headerIds.length > 0 ? { headerIds } : {}),\n              ...(contents && contents.length > 0 ? { contents } : {}),\n              synthetic: false,\n              provenance: provenanceFor(\n                input.documentId,\n                `#/openapi/${input.operation.providerData.toolId}/responses/${response.statusCode}`,\n              ),\n            } satisfies ResponseSymbol;\n\n            return {\n              match: statusMatchFromHttpStatusCode(response.statusCode),\n              responseId,\n            } satisfies ResponseSet[\"variants\"][number];\n          }),\n          provenance: provenanceFor(\n            input.documentId,\n            `#/openapi/${input.operation.providerData.toolId}/responseSet`,\n          ),\n        })\n      : (() => {\n          const responseId = ResponseSymbolIdSchema.make(\n            `response_${stableHash({ capabilityId })}`,\n          );\n          const responseExampleIds = (\n            input.operation.providerData.documentation?.response?.examples ?? []\n          ).map((example, index) =>\n            exampleSymbolFromValue({\n              catalog: input.catalog,\n              source: input.source,\n              documentId: input.documentId,\n              pointer: `#/openapi/${input.operation.providerData.toolId}/response/example/${index}`,\n              name: example.label,\n              summary: example.label,\n              value: JSON.parse(example.valueJson) as unknown,\n            }),\n          );\n          exampleIds.push(...responseExampleIds);\n          mutableRecord(input.catalog.symbols)[responseId] = {\n            id: responseId,\n            kind: \"response\",\n            ...(docsFrom({\n              description:\n                input.operation.providerData.documentation?.response\n                  ?.description ?? input.operation.description,\n            })\n              ? {\n                  docs: docsFrom({\n                    description:\n                      input.operation.providerData.documentation?.response\n                        ?.description ?? input.operation.description,\n                  })!,\n                }\n              : {}),\n            contents: [\n              {\n                mediaType:\n                  preferredResponseContentTypes(\n                    input.operation.providerData.documentation?.response\n                      ?.contentTypes,\n                  )[0] ?? \"application/json\",\n                ...(input.operation.outputSchema !== undefined\n                  ? {\n                      shapeId: input.importer.importSchema(\n                        outputSchema,\n                        `#/openapi/${input.operation.providerData.toolId}/response`,\n                      ),\n                    }\n                  : {}),\n                ...(responseExampleIds.length > 0\n                  ? { exampleIds: responseExampleIds }\n                  : {}),\n              },\n            ],\n            synthetic: false,\n            provenance: provenanceFor(\n              input.documentId,\n              `#/openapi/${input.operation.providerData.toolId}/response`,\n            ),\n          } satisfies ResponseSymbol;\n\n          return responseSetFromSingleResponse({\n            catalog: input.catalog,\n            responseId,\n            provenance: provenanceFor(\n              input.documentId,\n              `#/openapi/${input.operation.providerData.toolId}/responseSet`,\n            ),\n          });\n        })();\n\n  const callShapeId =\n    input.operation.inputSchema !== undefined\n      ? input.importer.importSchema(\n          input.operation.inputSchema,\n          `#/openapi/${input.operation.providerData.toolId}/call`,\n          input.operation.inputSchema,\n        )\n      : input.importer.importSchema(\n          {\n            type: \"object\",\n            additionalProperties: false,\n          },\n          `#/openapi/${input.operation.providerData.toolId}/call`,\n        );\n\n  const executable: Executable = {\n    id: executableId,\n    capabilityId,\n    scopeId: (() => {\n      const operationServers = openApiServerSpecs(\n        input.operation.providerData.servers,\n      );\n      if (!operationServers || operationServers.length === 0) {\n        return input.serviceScopeId;\n      }\n\n      return createOperationScope({\n        catalog: input.catalog,\n        source: input.source,\n        documentId: input.documentId,\n        parentScopeId: input.serviceScopeId,\n        operation: input.operation,\n        defaults: {\n          servers: operationServers,\n        },\n      });\n    })(),\n    adapterKey: \"openapi\",\n    bindingVersion: EXECUTABLE_BINDING_VERSION,\n    binding: input.operation.providerData,\n    projection: {\n      responseSetId,\n      callShapeId,\n    },\n    display: {\n      protocol: \"http\",\n      method: input.operation.providerData.invocation.method.toUpperCase(),\n      pathTemplate: input.operation.providerData.invocation.pathTemplate,\n      operationId: input.operation.providerData.operationId ?? null,\n      group: input.operation.providerData.group,\n      leaf: input.operation.providerData.leaf,\n      rawToolId: input.operation.providerData.rawToolId,\n      title: input.operation.title ?? null,\n      summary: input.operation.description ?? null,\n    },\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/openapi/${input.operation.providerData.toolId}/executable`,\n    ),\n  };\n  mutableRecord(input.catalog.executables)[executableId] = executable;\n\n  const effect = input.operation.effect;\n  const auth = openApiAuthRequirementToIr({\n    catalog: input.catalog,\n    source: input.source,\n    documentId: input.documentId,\n    authRequirement: input.operation.providerData.authRequirement,\n    schemesByName,\n  });\n  mutableRecord(input.catalog.capabilities)[capabilityId] = {\n    id: capabilityId,\n    serviceScopeId: input.serviceScopeId,\n    surface: {\n      toolPath,\n      ...(input.operation.title ? { title: input.operation.title } : {}),\n      ...(input.operation.description\n        ? { summary: input.operation.description }\n        : {}),\n      ...(input.operation.providerData.tags.length > 0\n        ? { tags: input.operation.providerData.tags }\n        : {}),\n    },\n    semantics: {\n      effect,\n      safe: effect === \"read\",\n      idempotent: effect === \"read\" || effect === \"delete\",\n      destructive: effect === \"delete\",\n    },\n    auth,\n    interaction: interactionForEffect(effect),\n    executableIds: [executableId],\n    ...(exampleIds.length > 0 ? { exampleIds } : {}),\n    synthetic: false,\n    provenance: provenanceFor(\n      input.documentId,\n      `#/openapi/${input.operation.providerData.toolId}/capability`,\n    ),\n  } satisfies Capability;\n};\n\nexport const createOpenApiCatalogFragment = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly OpenApiCatalogOperationInput[];\n}) => {\n  const rootSchema = (() => {\n    const primaryDocumentText = input.documents[0]?.contentText;\n    if (!primaryDocumentText) {\n      return undefined;\n    }\n\n    try {\n      return JSON.parse(primaryDocumentText) as unknown;\n    } catch {\n      return undefined;\n    }\n  })();\n\n  return buildCatalogFragment({\n    source: input.source,\n    documents: input.documents,\n    resourceDialectUri: \"https://json-schema.org/draft/2020-12/schema\",\n    serviceScopeDefaults: (() => {\n      const documentServers = openApiServerSpecs(\n        input.operations.find(\n          (operation) =>\n            (operation.providerData.documentServers ?? []).length > 0,\n        )?.providerData.documentServers,\n      );\n\n      return documentServers ? { servers: documentServers } : undefined;\n    })(),\n    registerOperations: ({ catalog, documentId, serviceScopeId, importer }) => {\n      for (const operation of input.operations) {\n        createHttpCapabilityFromOpenApi({\n          catalog,\n          source: input.source,\n          documentId,\n          serviceScopeId,\n          operation,\n          importer,\n          rootSchema,\n        });\n      }\n    },\n  });\n};\n\nexport const createOpenApiCatalogSnapshot = (input: {\n  source: Source;\n  documents: readonly CatalogSourceDocumentInput[];\n  operations: readonly OpenApiCatalogOperationInput[];\n}): CatalogSnapshotV1 =>\n  createCatalogSnapshotV1FromFragments({\n    import: createCatalogImportMetadata({\n      source: input.source,\n      adapterKey: \"openapi\",\n    }),\n    fragments: [createOpenApiCatalogFragment(input)],\n  });\n"
  },
  {
    "path": "packages/sources/openapi/src/definitions.ts",
    "content": "import { Schema } from \"effect\";\n\nimport {\n  DiscoveryTypingPayloadSchema,\n  OpenApiHttpMethodSchema,\n  OpenApiInvocationPayloadSchema,\n  OpenApiResponseVariantSchema,\n  OpenApiSecurityRequirementSchema,\n  OpenApiSecuritySchemeSchema,\n  OpenApiServerSchema,\n  OpenApiToolDocumentationSchema,\n  OpenApiToolProviderDataSchema,\n  type OpenApiExtractedTool,\n  type OpenApiToolManifest,\n} from \"./types\";\n\nconst VERSION_SEGMENT_REGEX = /^v\\d+(?:[._-]\\d+)?$/i;\nconst IGNORED_PATH_SEGMENTS = new Set([\"api\"]);\n\nconst splitWords = (value: string): Array<string> =>\n  value\n    .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n    .replace(/([A-Z]+)([A-Z][a-z0-9]+)/g, \"$1 $2\")\n    .replace(/[^a-zA-Z0-9]+/g, \" \")\n    .trim()\n    .split(/\\s+/)\n    .filter((part) => part.length > 0);\n\nconst normalizeWord = (value: string): string => value.toLowerCase();\n\nconst toCamelCase = (value: string): string => {\n  const words = splitWords(value).map(normalizeWord);\n  if (words.length === 0) {\n    return \"tool\";\n  }\n\n  const [first, ...rest] = words;\n  return `${first}${rest.map((part) => `${part[0]?.toUpperCase() ?? \"\"}${part.slice(1)}`).join(\"\")}`;\n};\n\nconst toPascalCase = (value: string): string => {\n  const camel = toCamelCase(value);\n  return `${camel[0]?.toUpperCase() ?? \"\"}${camel.slice(1)}`;\n};\n\nconst normalizeGroupSegment = (value: string | undefined): string | null => {\n  const candidate = value?.trim();\n  if (!candidate) {\n    return null;\n  }\n\n  return toCamelCase(candidate);\n};\n\nconst pathSegmentsFromTemplate = (pathTemplate: string): Array<string> =>\n  pathTemplate\n    .split(\"/\")\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\nconst isPathParameterSegment = (segment: string): boolean =>\n  segment.startsWith(\"{\") && segment.endsWith(\"}\");\n\nconst deriveVersionSegment = (pathTemplate: string): string | undefined =>\n  pathSegmentsFromTemplate(pathTemplate)\n    .map((segment) => segment.toLowerCase())\n    .find((segment) => VERSION_SEGMENT_REGEX.test(segment));\n\nconst derivePathGroup = (pathTemplate: string): string => {\n  for (const segment of pathSegmentsFromTemplate(pathTemplate)) {\n    const lower = segment.toLowerCase();\n    if (VERSION_SEGMENT_REGEX.test(lower)) {\n      continue;\n    }\n    if (IGNORED_PATH_SEGMENTS.has(lower)) {\n      continue;\n    }\n    if (isPathParameterSegment(segment)) {\n      continue;\n    }\n\n    return normalizeGroupSegment(segment) ?? \"root\";\n  }\n\n  return \"root\";\n};\n\nconst splitOperationIdSegments = (value: string): Array<string> =>\n  value\n    .split(/[/.]+/)\n    .map((segment) => segment.trim())\n    .filter((segment) => segment.length > 0);\n\nconst deriveLeafSeed = (tool: OpenApiExtractedTool, group: string): string => {\n  const preferredSource = tool.operationId ?? tool.toolId;\n  const segments = splitOperationIdSegments(preferredSource);\n  if (segments.length > 1) {\n    const [first, ...rest] = segments;\n    if ((normalizeGroupSegment(first) ?? first) === group && rest.length > 0) {\n      return rest.join(\" \");\n    }\n  }\n\n  return preferredSource;\n};\n\nconst fallbackLeafSeed = (tool: OpenApiExtractedTool, group: string): string => {\n  const relevantSegments = pathSegmentsFromTemplate(tool.path)\n    .filter((segment) => !VERSION_SEGMENT_REGEX.test(segment.toLowerCase()))\n    .filter((segment) => !IGNORED_PATH_SEGMENTS.has(segment.toLowerCase()))\n    .filter((segment) => !isPathParameterSegment(segment))\n    .map((segment) => normalizeGroupSegment(segment) ?? segment)\n    .filter((segment) => segment !== group);\n\n  const segmentSuffix = relevantSegments\n    .map((segment) => toPascalCase(segment))\n    .join(\"\");\n\n  return `${tool.method}${segmentSuffix || \"Operation\"}`;\n};\n\nconst deriveLeaf = (tool: OpenApiExtractedTool, group: string): string => {\n  const preferred = toCamelCase(deriveLeafSeed(tool, group));\n  if (preferred.length > 0 && preferred !== group) {\n    return preferred;\n  }\n\n  return toCamelCase(fallbackLeafSeed(tool, group));\n};\n\nconst defaultDescription = (tool: OpenApiExtractedTool): string =>\n  tool.description ?? `${tool.method.toUpperCase()} ${tool.path}`;\n\nexport const OpenApiToolDefinitionSchema = Schema.Struct({\n  toolId: Schema.String,\n  rawToolId: Schema.String,\n  operationId: Schema.optional(Schema.String),\n  name: Schema.String,\n  description: Schema.String,\n  group: Schema.String,\n  leaf: Schema.String,\n  tags: Schema.Array(Schema.String),\n  versionSegment: Schema.optional(Schema.String),\n  method: OpenApiHttpMethodSchema,\n  path: Schema.String,\n  invocation: OpenApiInvocationPayloadSchema,\n  operationHash: Schema.String,\n  typing: Schema.optional(DiscoveryTypingPayloadSchema),\n  documentation: Schema.optional(OpenApiToolDocumentationSchema),\n  responses: Schema.optional(Schema.Array(OpenApiResponseVariantSchema)),\n  authRequirement: Schema.optional(OpenApiSecurityRequirementSchema),\n  securitySchemes: Schema.optional(Schema.Array(OpenApiSecuritySchemeSchema)),\n  documentServers: Schema.optional(Schema.Array(OpenApiServerSchema)),\n  servers: Schema.optional(Schema.Array(OpenApiServerSchema)),\n});\n\nexport type OpenApiToolDefinition = typeof OpenApiToolDefinitionSchema.Type;\n\ntype MutableOpenApiToolDefinition = {\n  -readonly [Key in keyof OpenApiToolDefinition]: OpenApiToolDefinition[Key];\n};\n\nconst withResolvedToolIds = (\n  definitions: Array<Omit<OpenApiToolDefinition, \"toolId\">>,\n): Array<OpenApiToolDefinition> => {\n  const staged: Array<MutableOpenApiToolDefinition> = definitions.map((definition) => ({\n    ...definition,\n    toolId: `${definition.group}.${definition.leaf}`,\n  }));\n\n  const applyCandidates = (\n    candidates: Array<MutableOpenApiToolDefinition>,\n    factory: (definition: MutableOpenApiToolDefinition) => string,\n  ): void => {\n    const byToolId = new Map<string, Array<MutableOpenApiToolDefinition>>();\n    for (const candidate of candidates) {\n      const bucket = byToolId.get(candidate.toolId) ?? [];\n      bucket.push(candidate);\n      byToolId.set(candidate.toolId, bucket);\n    }\n\n    for (const bucket of byToolId.values()) {\n      if (bucket.length < 2) {\n        continue;\n      }\n\n      for (const definition of bucket) {\n        definition.toolId = factory(definition);\n      }\n    }\n  };\n\n  applyCandidates(staged, (definition) =>\n    definition.versionSegment\n      ? `${definition.group}.${definition.versionSegment}.${definition.leaf}`\n      : definition.toolId,\n  );\n\n  applyCandidates(staged, (definition) => {\n    const prefix = definition.versionSegment\n      ? `${definition.group}.${definition.versionSegment}`\n      : definition.group;\n    return `${prefix}.${definition.leaf}${toPascalCase(definition.method)}`;\n  });\n\n  applyCandidates(staged, (definition) => {\n    const prefix = definition.versionSegment\n      ? `${definition.group}.${definition.versionSegment}`\n      : definition.group;\n    return `${prefix}.${definition.leaf}${toPascalCase(definition.method)}${definition.operationHash.slice(0, 8)}`;\n  });\n\n  return staged;\n};\n\nexport const compileOpenApiToolDefinitions = (\n  manifest: OpenApiToolManifest,\n): Array<OpenApiToolDefinition> => {\n  const definitions = manifest.tools.map((tool) => {\n    const group = normalizeGroupSegment(tool.tags[0]) ?? derivePathGroup(tool.path);\n    const leaf = deriveLeaf(tool, group);\n\n    return {\n      rawToolId: tool.toolId,\n      operationId: tool.operationId,\n      name: tool.name,\n      description: defaultDescription(tool),\n      group,\n      leaf,\n      tags: [...tool.tags],\n      versionSegment: deriveVersionSegment(tool.path),\n      method: tool.method,\n      path: tool.path,\n      invocation: tool.invocation,\n      operationHash: tool.operationHash,\n      typing: tool.typing,\n      documentation: tool.documentation,\n      responses: tool.responses,\n      authRequirement: tool.authRequirement,\n      securitySchemes: tool.securitySchemes,\n      documentServers: tool.documentServers,\n      servers: tool.servers,\n    } satisfies Omit<OpenApiToolDefinition, \"toolId\">;\n  });\n\n  return withResolvedToolIds(definitions).sort((left, right) =>\n    left.toolId.localeCompare(right.toolId)\n    || left.rawToolId.localeCompare(right.rawToolId)\n    || left.operationHash.localeCompare(right.operationHash),\n  );\n};\n\nexport const openApiProviderDataFromDefinition = (\n  definition: OpenApiToolDefinition,\n): typeof OpenApiToolProviderDataSchema.Type => ({\n    kind: \"openapi\",\n    toolId: definition.toolId,\n    rawToolId: definition.rawToolId,\n    operationId: definition.operationId,\n    group: definition.group,\n    leaf: definition.leaf,\n    tags: definition.tags,\n    versionSegment: definition.versionSegment,\n    method: definition.method,\n    path: definition.path,\n    operationHash: definition.operationHash,\n    invocation: definition.invocation,\n    documentation: definition.documentation,\n    responses: definition.responses,\n    authRequirement: definition.authRequirement,\n    securitySchemes: definition.securitySchemes,\n    documentServers: definition.documentServers,\n    servers: definition.servers,\n  } satisfies typeof OpenApiToolProviderDataSchema.Type);\n"
  },
  {
    "path": "packages/sources/openapi/src/discovery.ts",
    "content": "import {\n  asString,\n  defaultNameFromEndpoint,\n  executeHttpProbe,\n  isRecord,\n  namespaceFromSourceName,\n  noneAuthInference,\n  supportedAuthInference,\n  type SourceAuthInference,\n  type SourceDiscoveryProbeInput,\n  type SourceDiscoveryResult,\n  trimOrNull,\n  unknownAuthInference,\n  unsupportedAuthInference,\n} from \"@executor/source-core\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\n\nimport { parseOpenApiDocument } from \"./document\";\nimport { extractOpenApiManifest } from \"./extraction\";\n\ntype OpenApiSecurityCandidate = {\n  name: string;\n  kind: \"bearer\" | \"oauth2\" | \"apiKey\" | \"basic\" | \"unknown\";\n  supported: boolean;\n  headerName: string | null;\n  prefix: string | null;\n  parameterName: string | null;\n  parameterLocation: \"header\" | \"query\" | \"cookie\" | null;\n  oauthAuthorizationUrl: string | null;\n  oauthTokenUrl: string | null;\n  oauthScopes: string[];\n  reason: string;\n};\n\nconst readLocalRef = (document: Record<string, unknown>, ref: string): unknown => {\n  if (!ref.startsWith(\"#/\")) {\n    return undefined;\n  }\n\n  let current: unknown = document;\n  for (const rawSegment of ref.slice(2).split(\"/\")) {\n    const segment = rawSegment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n    if (!isRecord(current)) {\n      return undefined;\n    }\n    current = current[segment];\n  }\n\n  return current;\n};\n\nconst resolveSecurityScheme = (\n  document: Record<string, unknown>,\n  input: unknown,\n  depth = 0,\n): Record<string, unknown> | null => {\n  if (!isRecord(input)) {\n    return null;\n  }\n\n  const ref = asString(input[\"$ref\"]);\n  if (ref && depth < 5) {\n    return resolveSecurityScheme(document, readLocalRef(document, ref), depth + 1);\n  }\n\n  return input;\n};\n\nconst collectAppliedSecurityCandidates = (document: Record<string, unknown>): Array<{\n  name: string;\n  scopes: string[];\n}> => {\n  const seen = new Set<string>();\n  const candidates: Array<{ name: string; scopes: string[] }> = [];\n\n  const addRequirementArray = (value: unknown) => {\n    if (!Array.isArray(value)) {\n      return;\n    }\n\n    for (const requirement of value) {\n      if (!isRecord(requirement)) {\n        continue;\n      }\n\n      for (const [name, scopesValue] of Object.entries(requirement)) {\n        if (name.length === 0 || seen.has(name)) {\n          continue;\n        }\n\n        seen.add(name);\n        candidates.push({\n          name,\n          scopes: Array.isArray(scopesValue)\n            ? scopesValue.filter((scope): scope is string => typeof scope === \"string\")\n            : [],\n        });\n      }\n    }\n  };\n\n  addRequirementArray(document.security);\n\n  const paths = document.paths;\n  if (!isRecord(paths)) {\n    return candidates;\n  }\n\n  for (const pathItem of Object.values(paths)) {\n    if (!isRecord(pathItem)) {\n      continue;\n    }\n\n    addRequirementArray(pathItem.security);\n\n    for (const operation of Object.values(pathItem)) {\n      if (!isRecord(operation)) {\n        continue;\n      }\n      addRequirementArray(operation.security);\n    }\n  }\n\n  return candidates;\n};\n\nconst securityCandidateFromScheme = (input: {\n  name: string;\n  scopes: string[];\n  scheme: Record<string, unknown>;\n}): OpenApiSecurityCandidate => {\n  const type = asString(input.scheme.type)?.toLowerCase() ?? \"\";\n\n  if (type === \"oauth2\") {\n    const flows = isRecord(input.scheme.flows) ? input.scheme.flows : {};\n    const flow = Object.values(flows).find(isRecord) ?? null;\n    const declaredScopes = flow && isRecord(flow.scopes)\n      ? Object.keys(flow.scopes).filter((scope) => scope.length > 0)\n      : [];\n    const oauthScopes = [...new Set([...input.scopes, ...declaredScopes])].sort();\n\n    return {\n      name: input.name,\n      kind: \"oauth2\",\n      supported: true,\n      headerName: \"Authorization\",\n      prefix: \"Bearer \",\n      parameterName: null,\n      parameterLocation: null,\n      oauthAuthorizationUrl: flow ? trimOrNull(asString(flow.authorizationUrl)) : null,\n      oauthTokenUrl: flow ? trimOrNull(asString(flow.tokenUrl)) : null,\n      oauthScopes,\n      reason: `OpenAPI security scheme \"${input.name}\" declares OAuth2`,\n    };\n  }\n\n  if (type === \"http\") {\n    const scheme = asString(input.scheme.scheme)?.toLowerCase() ?? \"\";\n    if (scheme === \"bearer\") {\n      return {\n        name: input.name,\n        kind: \"bearer\",\n        supported: true,\n        headerName: \"Authorization\",\n        prefix: \"Bearer \",\n        parameterName: null,\n        parameterLocation: null,\n        oauthAuthorizationUrl: null,\n        oauthTokenUrl: null,\n        oauthScopes: input.scopes,\n        reason: `OpenAPI security scheme \"${input.name}\" declares HTTP bearer auth`,\n      };\n    }\n\n    if (scheme === \"basic\") {\n      return {\n        name: input.name,\n        kind: \"basic\",\n        supported: false,\n        headerName: \"Authorization\",\n        prefix: \"Basic \",\n        parameterName: null,\n        parameterLocation: null,\n        oauthAuthorizationUrl: null,\n        oauthTokenUrl: null,\n        oauthScopes: input.scopes,\n        reason: `OpenAPI security scheme \"${input.name}\" declares HTTP basic auth`,\n      };\n    }\n  }\n\n  if (type === \"apiKey\") {\n    const location = asString(input.scheme.in);\n    const parameterLocation = location === \"header\" || location === \"query\" || location === \"cookie\"\n      ? location\n      : null;\n\n    return {\n      name: input.name,\n      kind: \"apiKey\",\n      supported: false,\n      headerName: parameterLocation === \"header\" ? trimOrNull(asString(input.scheme.name)) : null,\n      prefix: null,\n      parameterName: trimOrNull(asString(input.scheme.name)),\n      parameterLocation,\n      oauthAuthorizationUrl: null,\n      oauthTokenUrl: null,\n      oauthScopes: input.scopes,\n      reason: `OpenAPI security scheme \"${input.name}\" declares API key auth`,\n    };\n  }\n\n  return {\n    name: input.name,\n    kind: \"unknown\",\n    supported: false,\n    headerName: null,\n    prefix: null,\n    parameterName: null,\n    parameterLocation: null,\n    oauthAuthorizationUrl: null,\n    oauthTokenUrl: null,\n    oauthScopes: input.scopes,\n    reason: `OpenAPI security scheme \"${input.name}\" uses unsupported type ${type || \"unknown\"}`,\n  };\n};\n\nconst inferOpenApiAuth = (document: Record<string, unknown>): SourceAuthInference => {\n  const components = isRecord(document.components) ? document.components : {};\n  const securitySchemes = isRecord(components.securitySchemes)\n    ? components.securitySchemes\n    : {};\n  const appliedCandidates = collectAppliedSecurityCandidates(document);\n\n  if (appliedCandidates.length === 0) {\n    if (Object.keys(securitySchemes).length === 0) {\n      return noneAuthInference(\"OpenAPI document does not declare security requirements\");\n    }\n\n    const fallbackCandidate = Object.entries(securitySchemes)\n      .map(([name, value]) => securityCandidateFromScheme({\n        name,\n        scopes: [],\n        scheme: resolveSecurityScheme(document, value) ?? {},\n      }))\n      .sort((left, right) => {\n        const priority = { oauth2: 0, bearer: 1, apiKey: 2, basic: 3, unknown: 4 } as const;\n        return priority[left.kind] - priority[right.kind] || left.name.localeCompare(right.name);\n      })[0];\n\n    if (!fallbackCandidate) {\n      return noneAuthInference(\"OpenAPI document does not declare security requirements\");\n    }\n\n    const confidence = fallbackCandidate.kind === \"unknown\" ? \"low\" : \"medium\";\n    if (fallbackCandidate.kind === \"oauth2\") {\n      return supportedAuthInference(\"oauth2\", {\n        confidence,\n        reason: `${fallbackCandidate.reason}; scheme is defined but not explicitly applied to operations`,\n        headerName: fallbackCandidate.headerName,\n        prefix: fallbackCandidate.prefix,\n        parameterName: fallbackCandidate.parameterName,\n        parameterLocation: fallbackCandidate.parameterLocation,\n        oauthAuthorizationUrl: fallbackCandidate.oauthAuthorizationUrl,\n        oauthTokenUrl: fallbackCandidate.oauthTokenUrl,\n        oauthScopes: fallbackCandidate.oauthScopes,\n      });\n    }\n\n    if (fallbackCandidate.kind === \"bearer\") {\n      return supportedAuthInference(\"bearer\", {\n        confidence,\n        reason: `${fallbackCandidate.reason}; scheme is defined but not explicitly applied to operations`,\n        headerName: fallbackCandidate.headerName,\n        prefix: fallbackCandidate.prefix,\n        parameterName: fallbackCandidate.parameterName,\n        parameterLocation: fallbackCandidate.parameterLocation,\n        oauthAuthorizationUrl: fallbackCandidate.oauthAuthorizationUrl,\n        oauthTokenUrl: fallbackCandidate.oauthTokenUrl,\n        oauthScopes: fallbackCandidate.oauthScopes,\n      });\n    }\n\n    if (fallbackCandidate.kind === \"apiKey\") {\n      return unsupportedAuthInference(\"apiKey\", {\n        confidence,\n        reason: `${fallbackCandidate.reason}; scheme is defined but not explicitly applied to operations`,\n        headerName: fallbackCandidate.headerName,\n        prefix: fallbackCandidate.prefix,\n        parameterName: fallbackCandidate.parameterName,\n        parameterLocation: fallbackCandidate.parameterLocation,\n        oauthAuthorizationUrl: fallbackCandidate.oauthAuthorizationUrl,\n        oauthTokenUrl: fallbackCandidate.oauthTokenUrl,\n        oauthScopes: fallbackCandidate.oauthScopes,\n      });\n    }\n\n    if (fallbackCandidate.kind === \"basic\") {\n      return unsupportedAuthInference(\"basic\", {\n        confidence,\n        reason: `${fallbackCandidate.reason}; scheme is defined but not explicitly applied to operations`,\n        headerName: fallbackCandidate.headerName,\n        prefix: fallbackCandidate.prefix,\n        parameterName: fallbackCandidate.parameterName,\n        parameterLocation: fallbackCandidate.parameterLocation,\n        oauthAuthorizationUrl: fallbackCandidate.oauthAuthorizationUrl,\n        oauthTokenUrl: fallbackCandidate.oauthTokenUrl,\n        oauthScopes: fallbackCandidate.oauthScopes,\n      });\n    }\n\n    return unknownAuthInference(\n      `${fallbackCandidate.reason}; scheme is defined but not explicitly applied to operations`,\n    );\n  }\n\n  const resolvedCandidates = appliedCandidates\n    .map(({ name, scopes }) => {\n      const scheme = resolveSecurityScheme(document, securitySchemes[name]);\n      return scheme == null ? null : securityCandidateFromScheme({ name, scopes, scheme });\n    })\n    .filter((candidate): candidate is OpenApiSecurityCandidate => candidate !== null)\n    .sort((left, right) => {\n      const priority = { oauth2: 0, bearer: 1, apiKey: 2, basic: 3, unknown: 4 } as const;\n      return priority[left.kind] - priority[right.kind] || left.name.localeCompare(right.name);\n    });\n\n  const selected = resolvedCandidates[0];\n  if (!selected) {\n    return unknownAuthInference(\n      \"OpenAPI security requirements reference schemes that could not be resolved\",\n    );\n  }\n\n  if (selected.kind === \"oauth2\") {\n    return supportedAuthInference(\"oauth2\", {\n      confidence: \"high\",\n      reason: selected.reason,\n      headerName: selected.headerName,\n      prefix: selected.prefix,\n      parameterName: selected.parameterName,\n      parameterLocation: selected.parameterLocation,\n      oauthAuthorizationUrl: selected.oauthAuthorizationUrl,\n      oauthTokenUrl: selected.oauthTokenUrl,\n      oauthScopes: selected.oauthScopes,\n    });\n  }\n\n  if (selected.kind === \"bearer\") {\n    return supportedAuthInference(\"bearer\", {\n      confidence: \"high\",\n      reason: selected.reason,\n      headerName: selected.headerName,\n      prefix: selected.prefix,\n      parameterName: selected.parameterName,\n      parameterLocation: selected.parameterLocation,\n      oauthAuthorizationUrl: selected.oauthAuthorizationUrl,\n      oauthTokenUrl: selected.oauthTokenUrl,\n      oauthScopes: selected.oauthScopes,\n    });\n  }\n\n  if (selected.kind === \"apiKey\") {\n    return unsupportedAuthInference(\"apiKey\", {\n      confidence: \"high\",\n      reason: selected.reason,\n      headerName: selected.headerName,\n      prefix: selected.prefix,\n      parameterName: selected.parameterName,\n      parameterLocation: selected.parameterLocation,\n      oauthAuthorizationUrl: selected.oauthAuthorizationUrl,\n      oauthTokenUrl: selected.oauthTokenUrl,\n      oauthScopes: selected.oauthScopes,\n    });\n  }\n\n  if (selected.kind === \"basic\") {\n    return unsupportedAuthInference(\"basic\", {\n      confidence: \"high\",\n      reason: selected.reason,\n      headerName: selected.headerName,\n      prefix: selected.prefix,\n      parameterName: selected.parameterName,\n      parameterLocation: selected.parameterLocation,\n      oauthAuthorizationUrl: selected.oauthAuthorizationUrl,\n      oauthTokenUrl: selected.oauthTokenUrl,\n      oauthScopes: selected.oauthScopes,\n    });\n  }\n\n  return unknownAuthInference(selected.reason);\n};\n\nconst deriveOpenApiEndpoint = (input: {\n  normalizedUrl: string;\n  document: Record<string, unknown>;\n}): string => {\n  const servers = input.document.servers;\n  if (Array.isArray(servers)) {\n    const first = servers.find(isRecord);\n    const serverUrl = first ? trimOrNull(asString(first.url)) : null;\n    if (serverUrl) {\n      try {\n        return new URL(serverUrl, input.normalizedUrl).toString();\n      } catch {\n        return input.normalizedUrl;\n      }\n    }\n  }\n\n  return new URL(input.normalizedUrl).origin;\n};\n\nexport const detectOpenApiSource = (\n  input: SourceDiscoveryProbeInput,\n): Effect.Effect<SourceDiscoveryResult | null, never, never> =>\n  Effect.gen(function* () {\n    const response = yield* Effect.either(executeHttpProbe({\n      method: \"GET\",\n      url: input.normalizedUrl,\n      headers: input.headers,\n    }));\n\n    if (Either.isLeft(response)) {\n      console.warn(\n        `[discovery] OpenAPI probe HTTP fetch failed for ${input.normalizedUrl}:`,\n        response.left.message,\n      );\n      return null;\n    }\n\n    if (response.right.status < 200 || response.right.status >= 300) {\n      console.warn(\n        `[discovery] OpenAPI probe got status ${response.right.status} for ${input.normalizedUrl}`,\n      );\n      return null;\n    }\n\n    const manifest = yield* Effect.either(\n      extractOpenApiManifest(input.normalizedUrl, response.right.text),\n    );\n    if (Either.isLeft(manifest)) {\n      console.warn(\n        `[discovery] OpenAPI manifest extraction failed for ${input.normalizedUrl}:`,\n        manifest.left instanceof Error ? manifest.left.message : String(manifest.left),\n      );\n      return null;\n    }\n\n    const document = yield* Effect.either(Effect.try({\n      try: () => parseOpenApiDocument(response.right.text) as unknown,\n      catch: (cause) => cause instanceof Error ? cause : new Error(String(cause)),\n    }));\n\n    const parsedDocument = Either.isRight(document) && isRecord(document.right)\n      ? document.right\n      : {};\n    const endpoint = deriveOpenApiEndpoint({\n      normalizedUrl: input.normalizedUrl,\n      document: parsedDocument,\n    });\n    const name = trimOrNull(\n      asString(parsedDocument.info && isRecord(parsedDocument.info) ? parsedDocument.info.title : null),\n    ) ?? defaultNameFromEndpoint(endpoint);\n\n    return {\n      detectedKind: \"openapi\",\n      confidence: \"high\",\n      endpoint,\n      specUrl: input.normalizedUrl,\n      name,\n      namespace: namespaceFromSourceName(name),\n      transport: null,\n      authInference: inferOpenApiAuth(parsedDocument),\n      toolCount: manifest.right.tools.length,\n      warnings: [],\n    } satisfies SourceDiscoveryResult;\n  }).pipe(\n    Effect.catchAll((error: unknown) => {\n      console.warn(\n        `[discovery] OpenAPI detection unexpected error for ${input.normalizedUrl}:`,\n        error instanceof Error ? error.message : String(error),\n      );\n      return Effect.succeed(null);\n    }),\n  );\n"
  },
  {
    "path": "packages/sources/openapi/src/document.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport { assertInclude, assertTrue } from \"@effect/vitest/utils\";\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\n\nimport { parseOpenApiDocument } from \"./document\";\n\ndescribe(\"openapi-document\", () => {\n  it.effect(\"parses JSON OpenAPI document text\", () =>\n    Effect.gen(function* () {\n      const parsed = parseOpenApiDocument(\n        JSON.stringify({ openapi: \"3.1.0\", paths: {} }),\n      ) as { openapi: string };\n\n      expect(parsed.openapi).toBe(\"3.1.0\");\n    }),\n  );\n\n  it.effect(\"parses YAML OpenAPI document text\", () =>\n    Effect.gen(function* () {\n      const parsed = parseOpenApiDocument([\n        \"openapi: 3.1.0\",\n        \"paths:\",\n        \"  /health:\",\n        \"    get:\",\n        \"      operationId: health\",\n        \"      responses:\",\n        \"        '200':\",\n        \"          description: ok\",\n      ].join(\"\\n\")) as { openapi: string };\n\n      expect(parsed.openapi).toBe(\"3.1.0\");\n    }),\n  );\n\n  it.effect(\"fails for empty document\", () =>\n    Effect.gen(function* () {\n      const outcome = yield* Effect.either(\n        Effect.try({\n          try: () => parseOpenApiDocument(\"   \"),\n          catch: (error: unknown) =>\n            error instanceof Error ? error : new Error(String(error)),\n        }),\n      );\n\n      assertTrue(Either.isLeft(outcome));\n      if (Either.isLeft(outcome) && outcome.left instanceof Error) {\n        assertInclude(outcome.left.message, \"OpenAPI document is empty\");\n      }\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/document.ts",
    "content": "import { parse as parseYaml } from \"yaml\";\n\nimport type { OpenApiJsonObject } from \"./types\";\n\nconst isOpenApiJsonObject = (value: unknown): value is OpenApiJsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst parseJsonDocument = (input: string): unknown => JSON.parse(input);\n\nconst parseYamlDocument = (input: string): unknown => parseYaml(input);\n\nconst parseDocument = (input: string): unknown => {\n  try {\n    return parseJsonDocument(input);\n  } catch {\n    return parseYamlDocument(input);\n  }\n};\n\nexport const parseOpenApiDocument = (input: string): OpenApiJsonObject => {\n  const text = input.trim();\n  if (text.length === 0) {\n    throw new Error(\"OpenAPI document is empty\");\n  }\n\n  try {\n    const parsed = parseDocument(text);\n    if (!isOpenApiJsonObject(parsed)) {\n      throw new Error(\"OpenAPI document must parse to an object\");\n    }\n\n    return parsed;\n  } catch (cause) {\n    throw new Error(\n      `Unable to parse OpenAPI document as JSON or YAML: ${\n        cause instanceof Error ? cause.message : String(cause)\n      }`,\n    );\n  }\n};\n\nexport const fetchOpenApiDocument = async (url: string): Promise<string> => {\n  const response = await fetch(url);\n  if (!response.ok) {\n    throw new Error(`Failed fetching OpenAPI spec (${response.status})`);\n  }\n\n  return response.text();\n};\n"
  },
  {
    "path": "packages/sources/openapi/src/extraction.real-specs.test.ts",
    "content": "import { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\nimport type { ToolDefinition, ToolInput } from \"@executor/codemode-core\";\n\nimport { extractOpenApiManifest } from \"./extraction\";\nimport { createOpenApiToolsFromManifest } from \"./tools\";\nimport type { OpenApiJsonObject } from \"./types\";\n\nconst VERCEL_OPENAPI_SPEC_URL = \"https://openapi.vercel.sh/\";\n\nconst fetchVercelOpenApiSpec = Effect.tryPromise({\n  try: async () => {\n    const response = await fetch(VERCEL_OPENAPI_SPEC_URL);\n    if (!response.ok) {\n      throw new Error(`Failed to fetch Vercel OpenAPI spec: HTTP ${response.status} ${response.statusText}`);\n    }\n\n    return response.json() as Promise<unknown>;\n  },\n  catch: (cause) =>\n    cause instanceof Error ? cause : new Error(String(cause)),\n});\n\ntype ParsedInputSchema = {\n  type?: string;\n  properties?: Record<string, unknown>;\n  required?: Array<string>;\n};\n\nconst parseInputSchema = (inputSchema: unknown): ParsedInputSchema | null =>\n  inputSchema ? (inputSchema as ParsedInputSchema) : null;\n\nconst resolveToolDefinition = (value: ToolInput): ToolDefinition =>\n  \"tool\" in value ? value : { tool: value };\n\nconst expectedTools = [\n  {\n    toolId: \"createAuthToken\",\n    method: \"post\",\n    path: \"/v3/user/tokens\",\n    tags: [\"authentication\"],\n    requiredInputs: [\"body\"],\n    expectedPath: \"source.vercel.authentication.createAuthToken\",\n  },\n  {\n    toolId: \"getProjectMembers\",\n    method: \"get\",\n    path: \"/v1/projects/{idOrName}/members\",\n    tags: [\"projectMembers\"],\n    requiredInputs: [\"idOrName\"],\n    expectedPath: \"source.vercel.projectMembers.getProjectMembers\",\n  },\n  {\n    toolId: \"addProjectDomain\",\n    method: \"post\",\n    path: \"/v10/projects/{idOrName}/domains\",\n    tags: [\"projects\"],\n    requiredInputs: [\"body\", \"idOrName\"],\n    expectedPath: \"source.vercel.projects.addProjectDomain\",\n  },\n  {\n    toolId: \"getDeploymentEvents\",\n    method: \"get\",\n    path: \"/v3/deployments/{idOrUrl}/events\",\n    tags: [\"deployments\"],\n    requiredInputs: [\"idOrUrl\"],\n    expectedPath: \"source.vercel.deployments.getDeploymentEvents\",\n  },\n  {\n    toolId: \"create-event\",\n    method: \"post\",\n    path: \"/v1/installations/{integrationConfigurationId}/events\",\n    tags: [\"marketplace\"],\n    requiredInputs: [\"body\", \"integrationConfigurationId\"],\n    expectedPath: \"source.vercel.marketplace.createEvent\",\n  },\n] as const;\n\ndescribe(\"openapi-extraction real specs\", () => {\n  it.effect(\"extracts and derives tool paths from Vercel's live OpenAPI spec\", () =>\n    Effect.gen(function* () {\n      const spec = (yield* fetchVercelOpenApiSpec) as OpenApiJsonObject;\n      const manifest = yield* extractOpenApiManifest(\"vercel\", spec);\n\n      expect(manifest.version).toBe(2);\n      expect(manifest.tools.length).toBeGreaterThan(250);\n\n      const selectedTools = expectedTools.map((expectedTool) => {\n        const tool = manifest.tools.find((candidate) => candidate.toolId === expectedTool.toolId);\n\n        expect(tool).toBeDefined();\n        expect(tool?.method).toBe(expectedTool.method);\n        expect(tool?.path).toBe(expectedTool.path);\n        expect(tool?.tags).toEqual(expectedTool.tags);\n\n        return tool!;\n      });\n\n      const tools = createOpenApiToolsFromManifest({\n        manifest: {\n          ...manifest,\n          tools: selectedTools,\n        },\n        baseUrl: \"https://api.vercel.com\",\n        namespace: \"source.vercel\",\n      });\n\n      expect(Object.keys(tools).sort()).toEqual(\n        expectedTools.map((tool) => tool.expectedPath).sort(),\n      );\n\n      for (const expectedTool of expectedTools) {\n        const resolved = resolveToolDefinition(tools[expectedTool.expectedPath]!);\n        const inputSchema = parseInputSchema(resolved.metadata?.contract?.inputSchema);\n\n        expect(inputSchema?.type).toBe(\"object\");\n        expect(Object.keys(inputSchema?.properties ?? {})).toEqual(\n          expect.arrayContaining([...expectedTool.requiredInputs]),\n        );\n        expect(inputSchema?.required ?? []).toEqual(\n          expect.arrayContaining([...expectedTool.requiredInputs]),\n        );\n      }\n    }),\n  120_000);\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/extraction.ts",
    "content": "import * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport { pipe } from \"effect/Function\";\nimport * as ParseResult from \"effect/ParseResult\";\nimport * as Schema from \"effect/Schema\";\n\nimport { parseOpenApiDocument } from \"./document\";\nimport { extractOpenApiManifestJsonWithWasm } from \"./extractor-wasm\";\nimport {\n  OpenApiToolManifestSchema,\n  type OpenApiExtractedTool,\n  type OpenApiHeader,\n  type OpenApiSecurityRequirement,\n  type OpenApiServer,\n  type OpenApiJsonObject,\n  type OpenApiSpecInput,\n  type OpenApiToolManifest,\n} from \"./types\";\n\ntype OpenApiExtractionStage = \"validate\" | \"extract\";\n\nexport class OpenApiExtractionError extends Data.TaggedError(\"OpenApiExtractionError\")<{\n  sourceName: string;\n  stage: OpenApiExtractionStage;\n  message: string;\n  details: string | null;\n}> {}\n\nconst manifestFromJsonSchema = Schema.parseJson(OpenApiToolManifestSchema);\nconst decodeManifestFromJson = Schema.decodeUnknown(manifestFromJsonSchema);\n\nconst toExtractionError = (\n  sourceName: string,\n  stage: OpenApiExtractionStage,\n  cause: unknown,\n): OpenApiExtractionError =>\n  cause instanceof OpenApiExtractionError\n    ? cause\n    : new OpenApiExtractionError({\n        sourceName,\n        stage,\n        message: \"OpenAPI extraction failed\",\n        details: ParseResult.isParseError(cause)\n          ? ParseResult.TreeFormatter.formatErrorSync(cause)\n          : String(cause),\n      });\n\nconst normalizeOpenApiDocumentText = (\n  sourceName: string,\n  openApiSpec: OpenApiSpecInput,\n): Effect.Effect<string, OpenApiExtractionError> => {\n  if (typeof openApiSpec === \"string\") {\n    return Effect.succeed(openApiSpec);\n  }\n\n  return Effect.try({\n    try: () => JSON.stringify(openApiSpec),\n    catch: (cause) =>\n      new OpenApiExtractionError({\n        sourceName,\n        stage: \"validate\",\n        message: \"Unable to serialize OpenAPI input\",\n        details: String(cause),\n      }),\n  });\n};\n\nconst asObject = (value: unknown): Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst asArray = (value: unknown): ReadonlyArray<unknown> =>\n  Array.isArray(value) ? value : [];\n\nconst asTrimmedString = (value: unknown): string | undefined =>\n  typeof value === \"string\" && value.trim().length > 0\n    ? value.trim()\n    : undefined;\n\nconst stableJsonValue = (value: unknown): unknown => {\n  if (Array.isArray(value)) {\n    return value.map((entry) => stableJsonValue(entry));\n  }\n\n  if (value !== null && typeof value === \"object\") {\n    return Object.fromEntries(\n      Object.entries(value as Record<string, unknown>)\n        .sort(([left], [right]) => left.localeCompare(right))\n        .map(([key, entry]) => [key, stableJsonValue(entry)]),\n    );\n  }\n\n  return value;\n};\n\nconst stableJsonStringify = (value: unknown): string =>\n  JSON.stringify(stableJsonValue(value));\n\nconst collectRefKeys = (\n  value: unknown,\n  refs: Set<string>,\n): void => {\n  if (Array.isArray(value)) {\n    for (const item of value) {\n      collectRefKeys(item, refs);\n    }\n    return;\n  }\n\n  if (value === null || typeof value !== \"object\") {\n    return;\n  }\n\n  const record = value as Record<string, unknown>;\n  if (typeof record.$ref === \"string\" && record.$ref.startsWith(\"#/\")) {\n    refs.add(record.$ref);\n  }\n\n  for (const nested of Object.values(record)) {\n    collectRefKeys(nested, refs);\n  }\n};\n\nconst resolvePointerSegment = (segment: string): string =>\n  segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n\nconst resolveLocalRef = (\n  document: OpenApiJsonObject,\n  value: unknown,\n  activeRefs: ReadonlySet<string> = new Set<string>(),\n): unknown => {\n  const object = asObject(value);\n  const ref = typeof object.$ref === \"string\" ? object.$ref : null;\n  if (!ref || !ref.startsWith(\"#/\") || activeRefs.has(ref)) {\n    return value;\n  }\n\n  const resolved = ref\n    .slice(2)\n    .split(\"/\")\n    .reduce<unknown>((current, segment) => {\n      if (current === undefined || current === null) {\n        return undefined;\n      }\n\n      return asObject(current)[resolvePointerSegment(segment)];\n    }, document);\n\n  if (resolved === undefined) {\n    return value;\n  }\n\n  const nextActiveRefs = new Set(activeRefs);\n  nextActiveRefs.add(ref);\n\n  const resolvedObject = asObject(resolveLocalRef(document, resolved, nextActiveRefs));\n  const { $ref: _ignoredRef, ...rest } = object;\n\n  return Object.keys(rest).length > 0\n    ? { ...resolvedObject, ...rest }\n    : resolvedObject;\n};\n\nconst responseStatusRank = (statusCode: string): number => {\n  if (/^2\\d\\d$/.test(statusCode)) {\n    return 0;\n  }\n\n  if (statusCode === \"default\") {\n    return 1;\n  }\n\n  return 2;\n};\n\nconst preferredContentEntry = (\n  content: unknown,\n): readonly [string, Record<string, unknown>] | undefined => {\n  const entries = Object.entries(asObject(content))\n    .sort(([left], [right]) => left.localeCompare(right))\n    .map(([mediaType, value]) => [mediaType, asObject(value)] as const);\n\n  return entries.find(([mediaType]) => mediaType === \"application/json\")\n    ?? entries.find(([mediaType]) => mediaType.toLowerCase().includes(\"+json\"))\n    ?? entries.find(([mediaType]) => mediaType.toLowerCase().includes(\"json\"))\n    ?? entries[0];\n};\n\nconst contentSchemaFromOperationContent = (\n  content: unknown,\n): unknown | undefined => {\n  return preferredContentEntry(content)?.[1].schema;\n};\n\nconst contentEntriesFromContent = (\n  document: OpenApiJsonObject,\n  content: unknown,\n): ReadonlyArray<{\n  mediaType: string;\n  schema?: unknown;\n  examples?: Array<{\n    valueJson: string;\n    mediaType?: string;\n    label?: string;\n  }>;\n}> => {\n  const entries = Object.entries(asObject(content))\n    .sort(([left], [right]) => left.localeCompare(right))\n    .map(([mediaType, mediaValue]) => {\n      const mediaRecord = asObject(resolveLocalRef(document, mediaValue));\n      const examples = examplesFromMediaType(mediaType, mediaRecord);\n\n      return {\n        mediaType,\n        ...(mediaRecord.schema !== undefined ? { schema: mediaRecord.schema } : {}),\n        ...(examples.length > 0 ? { examples } : {}),\n      };\n    });\n\n  return entries;\n};\n\nconst examplesFromValue = (\n  value: unknown,\n  input: {\n    label?: string;\n    mediaType?: string;\n  } = {},\n): Array<{\n  valueJson: string;\n  mediaType?: string;\n  label?: string;\n}> => {\n  const record = asObject(value);\n  const examples: Array<{\n    valueJson: string;\n    mediaType?: string;\n    label?: string;\n  }> = [];\n\n  if (record.example !== undefined) {\n    examples.push({\n      valueJson: stableJsonStringify(record.example),\n      ...(input.mediaType ? { mediaType: input.mediaType } : {}),\n      ...(input.label ? { label: input.label } : {}),\n    });\n  }\n\n  const exampleEntries = Object.entries(asObject(record.examples))\n    .sort(([left], [right]) => left.localeCompare(right));\n  for (const [key, exampleValue] of exampleEntries) {\n    const exampleRecord = asObject(exampleValue);\n    examples.push({\n      valueJson: stableJsonStringify(\n        exampleRecord.value !== undefined ? exampleRecord.value : exampleValue,\n      ),\n      ...(input.mediaType ? { mediaType: input.mediaType } : {}),\n      label: key,\n    });\n  }\n\n  return examples;\n};\n\nconst examplesFromSchema = (\n  schema: unknown,\n): Array<{\n  valueJson: string;\n  mediaType?: string;\n  label?: string;\n}> => examplesFromValue(schema);\n\nconst examplesFromMediaType = (\n  mediaType: string,\n  mediaTypeRecord: Record<string, unknown>,\n): Array<{\n  valueJson: string;\n  mediaType?: string;\n  label?: string;\n}> => {\n  const direct = examplesFromValue(mediaTypeRecord, { mediaType });\n  if (direct.length > 0) {\n    return direct;\n  }\n\n  return examplesFromSchema(mediaTypeRecord.schema).map((example) => ({\n    ...example,\n    mediaType,\n  }));\n};\n\nconst headerFromValue = (\n  document: OpenApiJsonObject,\n  name: string,\n  value: unknown,\n): OpenApiHeader | undefined => {\n  const header = asObject(resolveLocalRef(document, value));\n  if (Object.keys(header).length === 0) {\n    return undefined;\n  }\n\n  const content = contentEntriesFromContent(document, header.content);\n  const directExamples =\n    content.length > 0\n      ? []\n      : examplesFromValue(header);\n\n  return {\n    name,\n    ...(asTrimmedString(header.description)\n      ? { description: asTrimmedString(header.description) }\n      : {}),\n    ...(typeof header.required === \"boolean\" ? { required: header.required } : {}),\n    ...(typeof header.deprecated === \"boolean\" ? { deprecated: header.deprecated } : {}),\n    ...(header.schema !== undefined ? { schema: header.schema } : {}),\n    ...(content.length > 0 ? { content } : {}),\n    ...(asTrimmedString(header.style)\n      ? { style: asTrimmedString(header.style) }\n      : {}),\n    ...(typeof header.explode === \"boolean\" ? { explode: header.explode } : {}),\n    ...(directExamples.length > 0 ? { examples: directExamples } : {}),\n  };\n};\n\nconst headersFromValue = (\n  document: OpenApiJsonObject,\n  value: unknown,\n): ReadonlyArray<OpenApiHeader> => Object.entries(asObject(value))\n  .sort(([left], [right]) => left.localeCompare(right))\n  .flatMap(([name, headerValue]) => {\n    const header = headerFromValue(document, name, headerValue);\n    return header ? [header] : [];\n  });\n\nconst serversFromValue = (\n  value: unknown,\n): ReadonlyArray<OpenApiServer> =>\n  asArray(value)\n    .map((entry) => asObject(entry))\n    .flatMap((server) => {\n      const url = asTrimmedString(server.url);\n      if (!url) {\n        return [];\n      }\n\n      const variables = Object.fromEntries(\n        Object.entries(asObject(server.variables))\n          .sort(([left], [right]) => left.localeCompare(right))\n          .flatMap(([name, variableValue]) => {\n            const variableRecord = asObject(variableValue);\n            const defaultValue = asTrimmedString(variableRecord.default);\n            return defaultValue ? [[name, defaultValue] as const] : [];\n          }),\n      );\n\n      return [{\n        url,\n        ...(asTrimmedString(server.description)\n          ? { description: asTrimmedString(server.description) }\n          : {}),\n        ...(Object.keys(variables).length > 0 ? { variables } : {}),\n      }];\n    });\n\nconst pathItemForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): Record<string, unknown> =>\n  asObject(asObject(document.paths)[tool.path]);\n\nconst parameterKey = (input: {\n  location: string;\n  name: string;\n}): string => `${input.location}:${input.name}`;\n\nconst parameterRecordMapForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): ReadonlyMap<string, Record<string, unknown>> => {\n  const merged = new Map<string, Record<string, unknown>>();\n  const pathItem = pathItemForTool(document, tool);\n  const operation = operationForTool(document, tool);\n\n  for (const parameterValue of asArray(pathItem.parameters)) {\n    const parameter = asObject(resolveLocalRef(document, parameterValue));\n    const name = asTrimmedString(parameter.name);\n    const location = asTrimmedString(parameter.in);\n    if (!name || !location) {\n      continue;\n    }\n\n    merged.set(parameterKey({ location, name }), parameter);\n  }\n\n  for (const parameterValue of asArray(operation.parameters)) {\n    const parameter = asObject(resolveLocalRef(document, parameterValue));\n    const name = asTrimmedString(parameter.name);\n    const location = asTrimmedString(parameter.in);\n    if (!name || !location) {\n      continue;\n    }\n\n    merged.set(parameterKey({ location, name }), parameter);\n  }\n\n  return merged;\n};\n\nconst operationForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): Record<string, unknown> =>\n  asObject(\n    asObject(asObject(document.paths)[tool.path])[tool.method],\n  );\n\nconst requestBodySchemaForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): unknown | undefined => {\n  const operation = operationForTool(document, tool);\n  if (Object.keys(operation).length === 0) {\n    return undefined;\n  }\n\n  const requestBody = resolveLocalRef(document, operation.requestBody);\n  return contentSchemaFromOperationContent(asObject(requestBody).content);\n};\n\nconst requestBodyPayloadForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): OpenApiExtractedTool[\"invocation\"][\"requestBody\"] => {\n  const operation = operationForTool(document, tool);\n  if (Object.keys(operation).length === 0) {\n    return tool.invocation.requestBody;\n  }\n\n  const requestBody = asObject(resolveLocalRef(document, operation.requestBody));\n  if (Object.keys(requestBody).length === 0) {\n    return tool.invocation.requestBody;\n  }\n\n  const contents = contentEntriesFromContent(document, requestBody.content);\n  const contentTypes = contents.map((content) => content.mediaType);\n\n  return {\n    required:\n      typeof requestBody.required === \"boolean\"\n        ? requestBody.required\n        : (tool.invocation.requestBody?.required ?? false),\n    contentTypes,\n    ...(contents.length > 0 ? { contents } : {}),\n  };\n};\n\nconst responseSchemaForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): unknown | undefined => {\n  const operation = operationForTool(document, tool);\n  if (Object.keys(operation).length === 0) {\n    return undefined;\n  }\n\n  const responseEntries = Object.entries(asObject(operation.responses));\n  const preferredResponses = responseEntries\n    .filter(([status]) => /^2\\d\\d$/.test(status))\n    .sort(([left], [right]) => left.localeCompare(right));\n  const fallbackResponses = responseEntries.filter(([status]) => status === \"default\");\n\n  for (const [, responseValue] of [...preferredResponses, ...fallbackResponses]) {\n    const response = resolveLocalRef(document, responseValue);\n    const schema = contentSchemaFromOperationContent(asObject(response).content);\n    if (schema !== undefined) {\n      return schema;\n    }\n  }\n\n  return undefined;\n};\n\nconst responseVariantsForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): OpenApiExtractedTool[\"responses\"] => {\n  const operation = operationForTool(document, tool);\n  if (Object.keys(operation).length === 0) {\n    return undefined;\n  }\n\n  const responseEntries = Object.entries(asObject(operation.responses))\n    .sort(([left], [right]) =>\n      responseStatusRank(left) - responseStatusRank(right) || left.localeCompare(right),\n    );\n\n  const responses = responseEntries.map(([statusCode, responseValue]) => {\n    const response = asObject(resolveLocalRef(document, responseValue));\n    const contents = contentEntriesFromContent(document, response.content);\n    const contentTypes = contents.map((content) => content.mediaType);\n    const preferredContent = preferredContentEntry(response.content);\n    const examples = preferredContent\n      ? examplesFromMediaType(preferredContent[0], preferredContent[1])\n      : [];\n    const headers = headersFromValue(document, response.headers);\n\n    return {\n      statusCode,\n      ...(asTrimmedString(response.description)\n        ? { description: asTrimmedString(response.description) }\n        : {}),\n      contentTypes,\n      ...(contentSchemaFromOperationContent(response.content) !== undefined\n        ? { schema: contentSchemaFromOperationContent(response.content) }\n        : {}),\n      ...(examples.length > 0 ? { examples } : {}),\n      ...(contents.length > 0 ? { contents } : {}),\n      ...(headers.length > 0 ? { headers } : {}),\n    };\n  });\n\n  return responses.length > 0 ? responses : undefined;\n};\n\nconst documentServersFromDocument = (\n  document: OpenApiJsonObject,\n): OpenApiExtractedTool[\"documentServers\"] => {\n  const servers = serversFromValue(document.servers);\n  return servers.length > 0 ? servers : undefined;\n};\n\nconst operationServersForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): OpenApiExtractedTool[\"servers\"] => {\n  const operation = operationForTool(document, tool);\n  if (Object.keys(operation).length === 0) {\n    return undefined;\n  }\n\n  const operationServers = serversFromValue(operation.servers);\n  if (operationServers.length > 0) {\n    return operationServers;\n  }\n\n  const pathItemServers = serversFromValue(pathItemForTool(document, tool).servers);\n  return pathItemServers.length > 0 ? pathItemServers : undefined;\n};\n\nconst securityRequirementFromValue = (\n  value: unknown,\n): OpenApiSecurityRequirement | undefined => {\n  const requirementEntries = asArray(value);\n  if (requirementEntries.length === 0) {\n    return {\n      kind: \"none\",\n    };\n  }\n\n  const anyOfItems = requirementEntries.flatMap((entry) => {\n    const schemes = Object.entries(asObject(entry))\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([schemeName, rawScopes]) => {\n        const scopes = asArray(rawScopes)\n          .flatMap((scope) =>\n            typeof scope === \"string\" && scope.trim().length > 0\n              ? [scope.trim()]\n              : [],\n          );\n\n        return {\n          kind: \"scheme\" as const,\n          schemeName,\n          ...(scopes.length > 0 ? { scopes } : {}),\n        };\n      });\n\n    if (schemes.length === 0) {\n      return [];\n    }\n\n    return [\n      schemes.length === 1\n        ? schemes[0]!\n        : {\n            kind: \"allOf\" as const,\n            items: schemes,\n          },\n    ];\n  });\n\n  if (anyOfItems.length === 0) {\n    return undefined;\n  }\n\n  return anyOfItems.length === 1\n    ? anyOfItems[0]\n    : {\n        kind: \"anyOf\",\n        items: anyOfItems,\n      };\n};\n\nconst authRequirementForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): OpenApiSecurityRequirement | undefined => {\n  const operation = operationForTool(document, tool);\n  if (Object.keys(operation).length === 0) {\n    return undefined;\n  }\n\n  if (Object.prototype.hasOwnProperty.call(operation, \"security\")) {\n    return securityRequirementFromValue(operation.security);\n  }\n\n  return securityRequirementFromValue(document.security);\n};\n\nconst collectReferencedSecuritySchemeNames = (\n  authRequirement: OpenApiSecurityRequirement | undefined,\n  names: Set<string>,\n): void => {\n  if (!authRequirement) {\n    return;\n  }\n\n  switch (authRequirement.kind) {\n    case \"none\":\n      return;\n    case \"scheme\":\n      names.add(authRequirement.schemeName);\n      return;\n    case \"allOf\":\n    case \"anyOf\":\n      for (const item of authRequirement.items) {\n        collectReferencedSecuritySchemeNames(item, names);\n      }\n  }\n};\n\nconst oauthFlowRecord = (\n  value: unknown,\n): Record<string, {\n  authorizationUrl?: string;\n  tokenUrl?: string;\n  refreshUrl?: string;\n  scopes?: Record<string, string>;\n}> | undefined => {\n  const result = Object.fromEntries(\n    Object.entries(asObject(value))\n      .sort(([left], [right]) => left.localeCompare(right))\n      .map(([flowName, flowValue]) => {\n        const flowRecord = asObject(flowValue);\n        const scopes = Object.fromEntries(\n          Object.entries(asObject(flowRecord.scopes))\n            .sort(([left], [right]) => left.localeCompare(right))\n            .map(([scope, description]) => [scope, asTrimmedString(description) ?? \"\"]),\n        );\n\n        return [flowName, {\n          ...(asTrimmedString(flowRecord.authorizationUrl)\n            ? { authorizationUrl: asTrimmedString(flowRecord.authorizationUrl) }\n            : {}),\n          ...(asTrimmedString(flowRecord.tokenUrl)\n            ? { tokenUrl: asTrimmedString(flowRecord.tokenUrl) }\n            : {}),\n          ...(asTrimmedString(flowRecord.refreshUrl)\n            ? { refreshUrl: asTrimmedString(flowRecord.refreshUrl) }\n            : {}),\n          ...(Object.keys(scopes).length > 0 ? { scopes } : {}),\n        }];\n      }),\n  );\n\n  return Object.keys(result).length > 0 ? result : undefined;\n};\n\nconst securitySchemesForTool = (\n  document: OpenApiJsonObject,\n  authRequirement: OpenApiSecurityRequirement | undefined,\n): OpenApiExtractedTool[\"securitySchemes\"] => {\n  if (!authRequirement || authRequirement.kind === \"none\") {\n    return undefined;\n  }\n\n  const schemeNames = new Set<string>();\n  collectReferencedSecuritySchemeNames(authRequirement, schemeNames);\n\n  const securitySchemes = asObject(asObject(document.components).securitySchemes);\n  const resolved = [...schemeNames]\n    .sort((left, right) => left.localeCompare(right))\n    .flatMap((schemeName) => {\n      const rawScheme = securitySchemes[schemeName];\n      if (rawScheme === undefined) {\n        return [];\n      }\n\n      const scheme = asObject(resolveLocalRef(document, rawScheme));\n      const schemeType = asTrimmedString(scheme.type);\n      if (!schemeType) {\n        return [];\n      }\n      const normalizedSchemeType: \"apiKey\" | \"http\" | \"oauth2\" | \"openIdConnect\" =\n        schemeType === \"apiKey\"\n        || schemeType === \"http\"\n        || schemeType === \"oauth2\"\n        || schemeType === \"openIdConnect\"\n          ? schemeType\n          : \"http\";\n\n      const placementIn = asTrimmedString(scheme.in);\n      const normalizedPlacementIn: \"header\" | \"query\" | \"cookie\" | undefined =\n        placementIn === \"header\" || placementIn === \"query\" || placementIn === \"cookie\"\n          ? placementIn\n          : undefined;\n\n      return [{\n        schemeName,\n        schemeType: normalizedSchemeType,\n        ...(asTrimmedString(scheme.description)\n          ? { description: asTrimmedString(scheme.description) }\n          : {}),\n        ...(normalizedPlacementIn\n          ? { placementIn: normalizedPlacementIn }\n          : {}),\n        ...(asTrimmedString(scheme.name)\n          ? { placementName: asTrimmedString(scheme.name) }\n          : {}),\n        ...(asTrimmedString(scheme.scheme)\n          ? { scheme: asTrimmedString(scheme.scheme) }\n          : {}),\n        ...(asTrimmedString(scheme.bearerFormat)\n          ? { bearerFormat: asTrimmedString(scheme.bearerFormat) }\n          : {}),\n        ...(asTrimmedString(scheme.openIdConnectUrl)\n          ? { openIdConnectUrl: asTrimmedString(scheme.openIdConnectUrl) }\n          : {}),\n        ...(oauthFlowRecord(scheme.flows)\n          ? { flows: oauthFlowRecord(scheme.flows) }\n          : {}),\n      }];\n    });\n\n  return resolved.length > 0 ? resolved : undefined;\n};\n\nconst mergeRefHintTable = (\n  document: OpenApiJsonObject,\n  manifest: OpenApiToolManifest,\n  extraRefKeys: ReadonlySet<string>,\n): OpenApiToolManifest[\"refHintTable\"] => {\n  const merged: Record<string, string> = {\n    ...manifest.refHintTable,\n  };\n  const queue = [...extraRefKeys].sort((left, right) => left.localeCompare(right));\n  const seen = new Set<string>(Object.keys(merged));\n\n  while (queue.length > 0) {\n    const refKey = queue.shift()!;\n    if (seen.has(refKey)) {\n      continue;\n    }\n    seen.add(refKey);\n\n    const resolved = resolveLocalRef(document, { $ref: refKey });\n    merged[refKey] = stableJsonStringify(resolved);\n\n    const nestedRefs = new Set<string>();\n    collectRefKeys(resolved, nestedRefs);\n    for (const nestedRef of [...nestedRefs].sort((left, right) => left.localeCompare(right))) {\n      if (!seen.has(nestedRef)) {\n        queue.push(nestedRef);\n      }\n    }\n  }\n\n  return Object.keys(merged).length > 0 ? merged : undefined;\n};\n\nconst enrichManifestFromDocument = (\n  document: OpenApiJsonObject,\n  manifest: OpenApiToolManifest,\n): OpenApiToolManifest => {\n  const extraRefKeys = new Set<string>();\n  const documentServers = documentServersFromDocument(document);\n  const tools = manifest.tools.map((tool) => {\n    const parameterRecords = parameterRecordMapForTool(document, tool);\n    const invocationParameters = tool.invocation.parameters.map((parameter) => {\n      const record = parameterRecords.get(parameterKey({\n        location: parameter.location,\n        name: parameter.name,\n      }));\n      const content = contentEntriesFromContent(document, record?.content);\n\n      return {\n        ...parameter,\n        ...(asTrimmedString(record?.style) ? { style: asTrimmedString(record?.style) } : {}),\n        ...(typeof record?.explode === \"boolean\" ? { explode: record.explode } : {}),\n        ...(typeof record?.allowReserved === \"boolean\" ? { allowReserved: record.allowReserved } : {}),\n        ...(content.length > 0 ? { content } : {}),\n      };\n    });\n    const requestBody = requestBodyPayloadForTool(document, tool);\n    const inputSchema = tool.typing?.inputSchema ?? requestBodySchemaForTool(document, tool);\n    const outputSchema = tool.typing?.outputSchema ?? responseSchemaForTool(document, tool);\n    const responses = responseVariantsForTool(document, tool);\n    const authRequirement = authRequirementForTool(document, tool);\n    const securitySchemes = securitySchemesForTool(document, authRequirement);\n    const operationServers = operationServersForTool(document, tool);\n\n    for (const parameter of invocationParameters) {\n      for (const content of parameter.content ?? []) {\n        collectRefKeys(content.schema, extraRefKeys);\n      }\n    }\n\n    for (const content of requestBody?.contents ?? []) {\n      collectRefKeys(content.schema, extraRefKeys);\n    }\n\n    for (const response of responses ?? []) {\n      collectRefKeys(response.schema, extraRefKeys);\n      for (const content of response.contents ?? []) {\n        collectRefKeys(content.schema, extraRefKeys);\n      }\n      for (const header of response.headers ?? []) {\n        collectRefKeys(header.schema, extraRefKeys);\n        for (const content of header.content ?? []) {\n          collectRefKeys(content.schema, extraRefKeys);\n        }\n      }\n    }\n\n    return {\n      ...tool,\n      invocation: {\n        ...tool.invocation,\n        parameters: invocationParameters,\n        requestBody,\n      },\n      ...((inputSchema !== undefined || outputSchema !== undefined)\n        ? {\n            typing: {\n              ...tool.typing,\n              ...(inputSchema !== undefined ? { inputSchema } : {}),\n              ...(outputSchema !== undefined ? { outputSchema } : {}),\n            },\n          }\n        : {}),\n      ...(responses ? { responses } : {}),\n      ...(authRequirement ? { authRequirement } : {}),\n      ...(securitySchemes ? { securitySchemes } : {}),\n      ...(documentServers ? { documentServers } : {}),\n      ...(operationServers ? { servers: operationServers } : {}),\n    };\n  });\n\n  return {\n    ...manifest,\n    tools,\n    refHintTable: mergeRefHintTable(document, manifest, extraRefKeys),\n  };\n};\n\nexport const extractOpenApiManifest = (\n  sourceName: string,\n  openApiSpec: OpenApiSpecInput,\n): Effect.Effect<OpenApiToolManifest, OpenApiExtractionError> =>\n  Effect.gen(function* () {\n    const openApiDocumentText = yield* normalizeOpenApiDocumentText(\n      sourceName,\n      openApiSpec,\n    );\n\n    const manifestJson = yield* Effect.tryPromise({\n      try: () => extractOpenApiManifestJsonWithWasm(sourceName, openApiDocumentText),\n      catch: (cause) => toExtractionError(sourceName, \"extract\", cause),\n    });\n\n    const manifest = yield* pipe(\n      decodeManifestFromJson(manifestJson),\n      Effect.mapError((cause) => toExtractionError(sourceName, \"extract\", cause)),\n    );\n\n    const parsedDocument = yield* Effect.try({\n      try: () => parseOpenApiDocument(openApiDocumentText),\n      catch: (cause) => toExtractionError(sourceName, \"validate\", cause),\n    });\n\n    return enrichManifestFromDocument(parsedDocument, manifest);\n  });\n"
  },
  {
    "path": "packages/sources/openapi/src/extractor-wasm.ts",
    "content": "import initWasmExtractor, {\n  extract_manifest_json_wasm,\n} from \"./openapi-extractor-wasm/openapi_extractor.js\";\n\nlet initPromise: Promise<void> | undefined;\n\nconst wasmAssetUrl = new URL(\n  \"./openapi-extractor-wasm/openapi_extractor_bg.wasm\",\n  import.meta.url,\n);\n\nconst formatCause = (cause: unknown): string =>\n  cause instanceof Error ? cause.message : String(cause);\n\nconst initUsingRuntimeUrl = async (): Promise<void> => {\n  await initWasmExtractor({ module_or_path: wasmAssetUrl });\n};\n\nconst initUsingNodeFileSystem = async (): Promise<void> => {\n  const [{ readFile }, { fileURLToPath }] = await Promise.all([\n    import(\"node:fs/promises\"),\n    import(\"node:url\"),\n  ]);\n\n  const wasmPath = fileURLToPath(wasmAssetUrl);\n  const wasmBytes = await readFile(wasmPath);\n  await initWasmExtractor({ module_or_path: wasmBytes });\n};\n\nconst ensureWasmReady = (): Promise<void> => {\n  if (!initPromise) {\n    initPromise = (async () => {\n      let runtimeUrlError: unknown;\n\n      try {\n        await initUsingRuntimeUrl();\n        return;\n      } catch (cause) {\n        runtimeUrlError = cause;\n      }\n\n      try {\n        await initUsingNodeFileSystem();\n        return;\n      } catch (filesystemError) {\n        throw new Error(\n          [\n            \"Unable to initialize OpenAPI extractor wasm.\",\n            `runtime-url failed: ${formatCause(runtimeUrlError)}`,\n            `node-fs fallback failed: ${formatCause(filesystemError)}`,\n          ].join(\" \"),\n        );\n      }\n    })().catch((error) => {\n      initPromise = undefined;\n      throw error;\n    });\n  }\n\n  return initPromise;\n};\n\nexport const extractOpenApiManifestJsonWithWasm = (\n  sourceName: string,\n  openApiDocumentText: string,\n): Promise<string> =>\n  ensureWasmReady().then(() =>\n    extract_manifest_json_wasm(sourceName, openApiDocumentText),\n  );\n"
  },
  {
    "path": "packages/sources/openapi/src/http-serialization.ts",
    "content": "type OpenApiSerializableLocation = \"path\" | \"query\" | \"header\" | \"cookie\";\n\nexport type OpenApiSerializableContent = {\n  mediaType: string;\n};\n\nexport type OpenApiSerializableParameter = {\n  name: string;\n  location: OpenApiSerializableLocation;\n  style?: string;\n  explode?: boolean;\n  allowReserved?: boolean;\n  content?: ReadonlyArray<OpenApiSerializableContent>;\n};\n\nexport type OpenApiSerializableRequestBody = {\n  contentTypes?: ReadonlyArray<string>;\n  contents?: ReadonlyArray<OpenApiSerializableContent>;\n};\n\nexport type HttpBodyDecodingMode = \"json\" | \"text\" | \"bytes\";\n\nexport type SerializedOpenApiRequestBody = {\n  contentType: string;\n  body: string | Uint8Array;\n};\n\nexport type SerializedOpenApiQueryEntry = {\n  name: string;\n  value: string;\n  allowReserved?: boolean;\n};\n\nexport type SerializedOpenApiParameterValue =\n  | {\n      kind: \"path\" | \"header\";\n      value: string;\n    }\n  | {\n      kind: \"query\";\n      entries: ReadonlyArray<SerializedOpenApiQueryEntry>;\n    }\n  | {\n      kind: \"cookie\";\n      pairs: ReadonlyArray<{\n        name: string;\n        value: string;\n      }>;\n    };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value);\n\nconst textEncoder = new TextEncoder();\n\nconst normalizeMediaType = (value: string | undefined | null): string =>\n  (value ?? \"\")\n    .split(\";\", 1)[0]\n    ?.trim()\n    .toLowerCase()\n    ?? \"\";\n\nconst primitiveString = (value: unknown): string => {\n  if (typeof value === \"string\") {\n    return value;\n  }\n\n  if (\n    typeof value === \"number\"\n    || typeof value === \"boolean\"\n    || typeof value === \"bigint\"\n  ) {\n    return String(value);\n  }\n\n  if (value === null || value === undefined) {\n    return \"\";\n  }\n\n  try {\n    return JSON.stringify(value);\n  } catch {\n    return String(value);\n  }\n};\n\nexport const isJsonMediaType = (mediaType: string | undefined | null): boolean => {\n  const normalized = normalizeMediaType(mediaType);\n  return normalized === \"application/json\"\n    || normalized.endsWith(\"+json\")\n    || normalized.includes(\"json\");\n};\n\nexport const isTextMediaType = (mediaType: string | undefined | null): boolean => {\n  const normalized = normalizeMediaType(mediaType);\n  if (normalized.length === 0) {\n    return false;\n  }\n\n  return normalized.startsWith(\"text/\")\n    || normalized === \"application/xml\"\n    || normalized.endsWith(\"+xml\")\n    || normalized.endsWith(\"/xml\")\n    || normalized === \"application/x-www-form-urlencoded\"\n    || normalized === \"application/javascript\"\n    || normalized === \"application/ecmascript\"\n    || normalized === \"application/graphql\"\n    || normalized === \"application/sql\"\n    || normalized === \"application/x-yaml\"\n    || normalized === \"application/yaml\"\n    || normalized === \"application/toml\"\n    || normalized === \"application/csv\"\n    || normalized === \"image/svg+xml\"\n    || normalized.endsWith(\"+yaml\")\n    || normalized.endsWith(\"+toml\");\n};\n\nexport const httpBodyModeFromContentType = (\n  mediaType: string | undefined | null,\n): HttpBodyDecodingMode => {\n  if (isJsonMediaType(mediaType)) {\n    return \"json\";\n  }\n\n  if (isTextMediaType(mediaType)) {\n    return \"text\";\n  }\n\n  const normalized = normalizeMediaType(mediaType);\n  if (normalized.length === 0) {\n    return \"text\";\n  }\n\n  return \"bytes\";\n};\n\nconst objectEntries = (value: unknown): Array<[string, unknown]> =>\n  Object.entries(isRecord(value) ? value : {})\n    .sort(([left], [right]) => left.localeCompare(right));\n\nconst defaultStyle = (location: OpenApiSerializableLocation): string => {\n  switch (location) {\n    case \"path\":\n    case \"header\":\n      return \"simple\";\n    case \"cookie\":\n    case \"query\":\n      return \"form\";\n  }\n};\n\nconst defaultExplode = (location: OpenApiSerializableLocation, style: string): boolean =>\n  location === \"query\" || location === \"cookie\"\n    ? style === \"form\"\n    : false;\n\nconst selectedStyle = (parameter: OpenApiSerializableParameter): string =>\n  parameter.style ?? defaultStyle(parameter.location);\n\nconst selectedExplode = (parameter: OpenApiSerializableParameter): boolean =>\n  parameter.explode ?? defaultExplode(parameter.location, selectedStyle(parameter));\n\nconst encodePathPart = (value: unknown): string =>\n  encodeURIComponent(primitiveString(value));\n\nconst encodeQueryValue = (value: string, allowReserved: boolean): string => {\n  const encoded = encodeURIComponent(value);\n  if (!allowReserved) {\n    return encoded;\n  }\n\n  return encoded\n    .replace(/%3A/gi, \":\")\n    .replace(/%2F/gi, \"/\")\n    .replace(/%3F/gi, \"?\")\n    .replace(/%23/gi, \"#\")\n    .replace(/%5B/gi, \"[\")\n    .replace(/%5D/gi, \"]\")\n    .replace(/%40/gi, \"@\")\n    .replace(/%21/gi, \"!\")\n    .replace(/%24/gi, \"$\")\n    .replace(/%26/gi, \"&\")\n    .replace(/%27/gi, \"'\")\n    .replace(/%28/gi, \"(\")\n    .replace(/%29/gi, \")\")\n    .replace(/%2A/gi, \"*\")\n    .replace(/%2B/gi, \"+\")\n    .replace(/%2C/gi, \",\")\n    .replace(/%3B/gi, \";\")\n    .replace(/%3D/gi, \"=\");\n};\n\nconst preferredContentType = (input: {\n  contents?: ReadonlyArray<OpenApiSerializableContent>;\n  contentTypes?: ReadonlyArray<string>;\n}): string | undefined => {\n  const candidates = [\n    ...(input.contents ?? []).map((content) => content.mediaType),\n    ...(input.contentTypes ?? []),\n  ];\n  if (candidates.length === 0) {\n    return undefined;\n  }\n\n  return candidates.find((mediaType) => mediaType === \"application/json\")\n    ?? candidates.find((mediaType) => mediaType.toLowerCase().includes(\"+json\"))\n    ?? candidates.find((mediaType) => mediaType.toLowerCase().includes(\"json\"))\n    ?? candidates[0];\n};\n\nconst serializeBinaryContentValue = (value: unknown): Uint8Array => {\n  if (value instanceof Uint8Array) {\n    return value;\n  }\n\n  if (value instanceof ArrayBuffer) {\n    return new Uint8Array(value);\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n  }\n\n  if (typeof value === \"string\") {\n    return textEncoder.encode(value);\n  }\n\n  if (\n    Array.isArray(value)\n    && value.every((entry) =>\n      typeof entry === \"number\"\n      && Number.isInteger(entry)\n      && entry >= 0\n      && entry <= 255)\n  ) {\n    return Uint8Array.from(value);\n  }\n\n  throw new Error(\"Binary OpenAPI request bodies must be bytes, a string, or an array of byte values\");\n};\n\nconst serializeContentValue = (value: unknown, mediaType: string): string => {\n  const normalized = mediaType.toLowerCase();\n  if (\n    normalized === \"application/json\"\n    || normalized.includes(\"+json\")\n    || normalized.includes(\"json\")\n  ) {\n    return JSON.stringify(value);\n  }\n\n  if (normalized === \"application/x-www-form-urlencoded\") {\n    const params = new URLSearchParams();\n    for (const [key, entryValue] of objectEntries(value)) {\n      if (Array.isArray(entryValue)) {\n        for (const item of entryValue) {\n          params.append(key, primitiveString(item));\n        }\n        continue;\n      }\n\n      params.append(key, primitiveString(entryValue));\n    }\n    return params.toString();\n  }\n\n  return primitiveString(value);\n};\n\nconst serializeQueryParameter = (\n  parameter: OpenApiSerializableParameter,\n  value: unknown,\n): SerializedOpenApiParameterValue => {\n  const style = selectedStyle(parameter);\n  const explode = selectedExplode(parameter);\n  const allowReserved = parameter.allowReserved === true;\n  const contentType = preferredContentType({ contents: parameter.content });\n\n  if (contentType) {\n    return {\n      kind: \"query\",\n      entries: [{\n        name: parameter.name,\n        value: serializeContentValue(value, contentType),\n        allowReserved,\n      }],\n    };\n  }\n\n  if (Array.isArray(value)) {\n    if (style === \"spaceDelimited\") {\n      return {\n        kind: \"query\",\n        entries: [{\n          name: parameter.name,\n          value: value.map((entry) => primitiveString(entry)).join(\" \"),\n          allowReserved,\n        }],\n      };\n    }\n\n    if (style === \"pipeDelimited\") {\n      return {\n        kind: \"query\",\n        entries: [{\n          name: parameter.name,\n          value: value.map((entry) => primitiveString(entry)).join(\"|\"),\n          allowReserved,\n        }],\n      };\n    }\n\n    return {\n      kind: \"query\",\n      entries:\n        explode\n          ? value.map((entry) => ({\n              name: parameter.name,\n              value: primitiveString(entry),\n              allowReserved,\n            }))\n          : [{\n              name: parameter.name,\n              value: value.map((entry) => primitiveString(entry)).join(\",\"),\n              allowReserved,\n            }],\n    };\n  }\n\n  if (isRecord(value)) {\n    const entries = objectEntries(value);\n\n    if (style === \"deepObject\") {\n      return {\n        kind: \"query\",\n        entries: entries.map(([key, entryValue]) => ({\n          name: `${parameter.name}[${key}]`,\n          value: primitiveString(entryValue),\n          allowReserved,\n        })),\n      };\n    }\n\n    return {\n      kind: \"query\",\n      entries:\n        explode\n          ? entries.map(([key, entryValue]) => ({\n              name: key,\n              value: primitiveString(entryValue),\n              allowReserved,\n            }))\n          : [{\n              name: parameter.name,\n              value: entries.flatMap(([key, entryValue]) => [key, primitiveString(entryValue)]).join(\",\"),\n              allowReserved,\n            }],\n    };\n  }\n\n  return {\n    kind: \"query\",\n    entries: [{\n      name: parameter.name,\n      value: primitiveString(value),\n      allowReserved,\n    }],\n  };\n};\n\nconst serializeHeaderParameter = (\n  parameter: OpenApiSerializableParameter,\n  value: unknown,\n): SerializedOpenApiParameterValue => {\n  const explode = selectedExplode(parameter);\n  const contentType = preferredContentType({ contents: parameter.content });\n  if (contentType) {\n    return {\n      kind: \"header\",\n      value: serializeContentValue(value, contentType),\n    };\n  }\n\n  if (Array.isArray(value)) {\n    return {\n      kind: \"header\",\n      value: value.map((entry) => primitiveString(entry)).join(\",\"),\n    };\n  }\n\n  if (isRecord(value)) {\n    const entries = objectEntries(value);\n    return {\n      kind: \"header\",\n      value:\n        explode\n          ? entries.map(([key, entryValue]) => `${key}=${primitiveString(entryValue)}`).join(\",\")\n          : entries.flatMap(([key, entryValue]) => [key, primitiveString(entryValue)]).join(\",\"),\n    };\n  }\n\n  return {\n    kind: \"header\",\n    value: primitiveString(value),\n  };\n};\n\nconst serializeCookieParameter = (\n  parameter: OpenApiSerializableParameter,\n  value: unknown,\n): SerializedOpenApiParameterValue => {\n  const explode = selectedExplode(parameter);\n  const contentType = preferredContentType({ contents: parameter.content });\n  if (contentType) {\n    return {\n      kind: \"cookie\",\n      pairs: [{\n        name: parameter.name,\n        value: serializeContentValue(value, contentType),\n      }],\n    };\n  }\n\n  if (Array.isArray(value)) {\n    return {\n      kind: \"cookie\",\n      pairs:\n        explode\n          ? value.map((entry) => ({\n              name: parameter.name,\n              value: primitiveString(entry),\n            }))\n          : [{\n              name: parameter.name,\n              value: value.map((entry) => primitiveString(entry)).join(\",\"),\n            }],\n    };\n  }\n\n  if (isRecord(value)) {\n    const entries = objectEntries(value);\n    return {\n      kind: \"cookie\",\n      pairs:\n        explode\n          ? entries.map(([key, entryValue]) => ({\n              name: key,\n              value: primitiveString(entryValue),\n            }))\n          : [{\n              name: parameter.name,\n              value: entries.flatMap(([key, entryValue]) => [key, primitiveString(entryValue)]).join(\",\"),\n            }],\n    };\n  }\n\n  return {\n    kind: \"cookie\",\n    pairs: [{\n      name: parameter.name,\n      value: primitiveString(value),\n    }],\n  };\n};\n\nconst serializePathParameter = (\n  parameter: OpenApiSerializableParameter,\n  value: unknown,\n): SerializedOpenApiParameterValue => {\n  const style = selectedStyle(parameter);\n  const explode = selectedExplode(parameter);\n  const contentType = preferredContentType({ contents: parameter.content });\n  if (contentType) {\n    return {\n      kind: \"path\",\n      value: encodePathPart(serializeContentValue(value, contentType)),\n    };\n  }\n\n  if (Array.isArray(value)) {\n    if (style === \"label\") {\n      return {\n        kind: \"path\",\n        value: `.${value.map((entry) => encodePathPart(entry)).join(explode ? \".\" : \",\")}`,\n      };\n    }\n\n    if (style === \"matrix\") {\n      return {\n        kind: \"path\",\n        value:\n          explode\n            ? value.map((entry) => `;${encodeURIComponent(parameter.name)}=${encodePathPart(entry)}`).join(\"\")\n            : `;${encodeURIComponent(parameter.name)}=${value.map((entry) => encodePathPart(entry)).join(\",\")}`,\n      };\n    }\n\n    return {\n      kind: \"path\",\n      value: value.map((entry) => encodePathPart(entry)).join(\",\"),\n    };\n  }\n\n  if (isRecord(value)) {\n    const entries = objectEntries(value);\n\n    if (style === \"label\") {\n      return {\n        kind: \"path\",\n        value:\n          explode\n            ? `.${entries.map(([key, entryValue]) => `${encodePathPart(key)}=${encodePathPart(entryValue)}`).join(\".\")}`\n            : `.${entries.flatMap(([key, entryValue]) => [encodePathPart(key), encodePathPart(entryValue)]).join(\",\")}`,\n      };\n    }\n\n    if (style === \"matrix\") {\n      return {\n        kind: \"path\",\n        value:\n          explode\n            ? entries.map(([key, entryValue]) => `;${encodeURIComponent(key)}=${encodePathPart(entryValue)}`).join(\"\")\n            : `;${encodeURIComponent(parameter.name)}=${entries.flatMap(([key, entryValue]) => [\n                encodePathPart(key),\n                encodePathPart(entryValue),\n              ]).join(\",\")}`,\n      };\n    }\n\n    return {\n      kind: \"path\",\n      value:\n        explode\n          ? entries.map(([key, entryValue]) => `${encodePathPart(key)}=${encodePathPart(entryValue)}`).join(\",\")\n          : entries.flatMap(([key, entryValue]) => [encodePathPart(key), encodePathPart(entryValue)]).join(\",\"),\n    };\n  }\n\n  if (style === \"label\") {\n    return {\n      kind: \"path\",\n      value: `.${encodePathPart(value)}`,\n    };\n  }\n\n  if (style === \"matrix\") {\n    return {\n      kind: \"path\",\n      value: `;${encodeURIComponent(parameter.name)}=${encodePathPart(value)}`,\n    };\n  }\n\n  return {\n    kind: \"path\",\n    value: encodePathPart(value),\n  };\n};\n\nexport const serializeOpenApiParameterValue = (\n  parameter: OpenApiSerializableParameter,\n  value: unknown,\n): SerializedOpenApiParameterValue => {\n  switch (parameter.location) {\n    case \"path\":\n      return serializePathParameter(parameter, value);\n    case \"query\":\n      return serializeQueryParameter(parameter, value);\n    case \"header\":\n      return serializeHeaderParameter(parameter, value);\n    case \"cookie\":\n      return serializeCookieParameter(parameter, value);\n  }\n};\n\nexport const withSerializedQueryEntries = (\n  url: URL,\n  entries: ReadonlyArray<SerializedOpenApiQueryEntry>,\n): string => {\n  if (entries.length === 0) {\n    return url.toString();\n  }\n\n  const suffix = entries\n    .map((entry) =>\n      `${encodeURIComponent(entry.name)}=${encodeQueryValue(entry.value, entry.allowReserved === true)}`\n    )\n    .join(\"&\");\n\n  const urlText = url.toString();\n  const [withoutHash, hashFragment] = urlText.split(\"#\", 2);\n  const separator =\n    withoutHash.includes(\"?\")\n      ? (withoutHash.endsWith(\"?\") || withoutHash.endsWith(\"&\") ? \"\" : \"&\")\n      : \"?\";\n\n  return `${withoutHash}${separator}${suffix}${hashFragment ? `#${hashFragment}` : \"\"}`;\n};\n\nexport const serializeOpenApiRequestBody = (input: {\n  requestBody: OpenApiSerializableRequestBody;\n  body: unknown;\n}): SerializedOpenApiRequestBody => {\n  const contentType = preferredContentType(input.requestBody) ?? \"application/json\";\n\n  if (httpBodyModeFromContentType(contentType) === \"bytes\") {\n    return {\n      contentType,\n      body: serializeBinaryContentValue(input.body),\n    };\n  }\n\n  return {\n    contentType,\n    body: serializeContentValue(input.body, contentType),\n  };\n};\n"
  },
  {
    "path": "packages/sources/openapi/src/index.ts",
    "content": "export { fetchOpenApiDocument, parseOpenApiDocument } from \"./document\";\nexport { OpenApiExtractionError, extractOpenApiManifest } from \"./extraction\";\nexport { detectOpenApiSource } from \"./discovery\";\nexport { OpenApiLocalConfigBindingSchema } from \"./local-config\";\nexport {\n  compileOpenApiToolDefinitions,\n  openApiProviderDataFromDefinition,\n  OpenApiToolDefinitionSchema,\n  type OpenApiToolDefinition,\n} from \"./definitions\";\nexport {\n  buildOpenApiToolPresentation,\n  openApiOutputTypeSignatureFromSchema,\n  type OpenApiToolPresentation,\n} from \"./tool-presentation\";\nexport {\n  httpBodyModeFromContentType,\n  isJsonMediaType,\n  isTextMediaType,\n  serializeOpenApiParameterValue,\n  serializeOpenApiRequestBody,\n  withSerializedQueryEntries,\n  type HttpBodyDecodingMode,\n  type OpenApiSerializableContent,\n  type OpenApiSerializableParameter,\n  type OpenApiSerializableRequestBody,\n  type SerializedOpenApiRequestBody,\n  type SerializedOpenApiParameterValue,\n  type SerializedOpenApiQueryEntry,\n} from \"./http-serialization\";\nexport {\n  OpenApiToolInvocationError,\n  createOpenApiToolFromDefinition,\n  createOpenApiToolsFromManifest,\n  createOpenApiToolsFromSpec,\n} from \"./tools\";\nexport {\n  resolveSchemaWithRefHints,\n  resolveTypingSchemasWithRefHints,\n} from \"./schema-refs\";\nexport {\n  OPEN_API_HTTP_METHODS,\n  OPEN_API_PARAMETER_LOCATIONS,\n  DiscoveryTypingPayloadSchema,\n  OpenApiExtractedToolSchema,\n  OpenApiHttpMethodSchema,\n  OpenApiInvocationPayloadSchema,\n  OpenApiParameterLocationSchema,\n  OpenApiToolManifestSchema,\n  OpenApiToolParameterSchema,\n  OpenApiToolRequestBodySchema,\n  OpenApiMediaContentSchema,\n  OpenApiHeaderSchema,\n  OpenApiServerSchema,\n  OpenApiExampleSchema,\n  OpenApiResponseVariantSchema,\n  OpenApiParameterDocumentationSchema,\n  OpenApiRequestBodyDocumentationSchema,\n  OpenApiResponseDocumentationSchema,\n  OpenApiToolDocumentationSchema,\n  OpenApiSecurityRequirementSchema,\n  OpenApiSecuritySchemeTypeSchema,\n  OpenApiOAuthFlowSchema,\n  OpenApiSecuritySchemeSchema,\n  OpenApiToolProviderDataSchema,\n  OpenApiRefHintTableSchema,\n  OpenApiRefHintValueSchema,\n  type DiscoveryTypingPayload,\n  type OpenApiExtractedTool,\n  type OpenApiHttpMethod,\n  type OpenApiInvocationPayload,\n  type OpenApiJsonObject,\n  type OpenApiJsonPrimitive,\n  type OpenApiJsonValue,\n  type OpenApiParameterLocation,\n  type OpenApiSpecInput,\n  type OpenApiToolManifest,\n  type OpenApiToolProviderData,\n  type OpenApiRefHintTable,\n  type OpenApiRefHintValue,\n  type OpenApiToolParameter,\n  type OpenApiToolRequestBody,\n  type OpenApiMediaContent,\n  type OpenApiHeader,\n  type OpenApiServer,\n  type OpenApiResponseVariant,\n  type OpenApiSecurityRequirement,\n  type OpenApiSecuritySchemeType,\n  type OpenApiOAuthFlow,\n  type OpenApiSecurityScheme,\n} from \"./types\";\nexport type {\n  OpenApiExample,\n  OpenApiParameterDocumentation,\n  OpenApiRequestBodyDocumentation,\n  OpenApiResponseDocumentation,\n  OpenApiToolDocumentation,\n} from \"./types\";\nexport * from \"./catalog\";\nexport * from \"./adapter\";\n"
  },
  {
    "path": "packages/sources/openapi/src/local-config.ts",
    "content": "import * as Schema from \"effect/Schema\";\n\nimport { StringMapSchema } from \"@executor/source-core\";\n\nexport const OpenApiLocalConfigBindingSchema = Schema.Struct({\n  specUrl: Schema.String,\n  defaultHeaders: Schema.optional(Schema.NullOr(StringMapSchema)),\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/openapi-extractor-wasm/openapi_extractor.d.ts",
    "content": "/* tslint:disable */\n/* eslint-disable */\n\nexport function extract_manifest_json_wasm(source_name: string, openapi_document_text: string): string;\n\nexport type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;\n\nexport interface InitOutput {\n    readonly memory: WebAssembly.Memory;\n    readonly extract_manifest_json_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];\n    readonly __wbindgen_externrefs: WebAssembly.Table;\n    readonly __wbindgen_malloc: (a: number, b: number) => number;\n    readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;\n    readonly __externref_table_dealloc: (a: number) => void;\n    readonly __wbindgen_free: (a: number, b: number, c: number) => void;\n    readonly __wbindgen_start: () => void;\n}\n\nexport type SyncInitInput = BufferSource | WebAssembly.Module;\n\n/**\n * Instantiates the given `module`, which can either be bytes or\n * a precompiled `WebAssembly.Module`.\n *\n * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.\n *\n * @returns {InitOutput}\n */\nexport function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;\n\n/**\n * If `module_or_path` is {RequestInfo} or {URL}, makes a request and\n * for everything else, calls `WebAssembly.instantiate` directly.\n *\n * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.\n *\n * @returns {Promise<InitOutput>}\n */\nexport default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;\n"
  },
  {
    "path": "packages/sources/openapi/src/openapi-extractor-wasm/openapi_extractor.js",
    "content": "/* @ts-self-types=\"./openapi_extractor.d.ts\" */\n\n/**\n * @param {string} source_name\n * @param {string} openapi_document_text\n * @returns {string}\n */\nexport function extract_manifest_json_wasm(source_name, openapi_document_text) {\n    let deferred4_0;\n    let deferred4_1;\n    try {\n        const ptr0 = passStringToWasm0(source_name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len0 = WASM_VECTOR_LEN;\n        const ptr1 = passStringToWasm0(openapi_document_text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n        const len1 = WASM_VECTOR_LEN;\n        const ret = wasm.extract_manifest_json_wasm(ptr0, len0, ptr1, len1);\n        var ptr3 = ret[0];\n        var len3 = ret[1];\n        if (ret[3]) {\n            ptr3 = 0; len3 = 0;\n            throw takeFromExternrefTable0(ret[2]);\n        }\n        deferred4_0 = ptr3;\n        deferred4_1 = len3;\n        return getStringFromWasm0(ptr3, len3);\n    } finally {\n        wasm.__wbindgen_free(deferred4_0, deferred4_1, 1);\n    }\n}\n\nfunction __wbg_get_imports() {\n    const import0 = {\n        __proto__: null,\n        __wbindgen_cast_0000000000000001: function(arg0, arg1) {\n            // Cast intrinsic for `Ref(String) -> Externref`.\n            const ret = getStringFromWasm0(arg0, arg1);\n            return ret;\n        },\n        __wbindgen_init_externref_table: function() {\n            const table = wasm.__wbindgen_externrefs;\n            const offset = table.grow(4);\n            table.set(0, undefined);\n            table.set(offset + 0, undefined);\n            table.set(offset + 1, null);\n            table.set(offset + 2, true);\n            table.set(offset + 3, false);\n        },\n    };\n    return {\n        __proto__: null,\n        \"./openapi_extractor_bg.js\": import0,\n    };\n}\n\nfunction getStringFromWasm0(ptr, len) {\n    ptr = ptr >>> 0;\n    return decodeText(ptr, len);\n}\n\nlet cachedUint8ArrayMemory0 = null;\nfunction getUint8ArrayMemory0() {\n    if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n        cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n    }\n    return cachedUint8ArrayMemory0;\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n    if (realloc === undefined) {\n        const buf = cachedTextEncoder.encode(arg);\n        const ptr = malloc(buf.length, 1) >>> 0;\n        getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n        WASM_VECTOR_LEN = buf.length;\n        return ptr;\n    }\n\n    let len = arg.length;\n    let ptr = malloc(len, 1) >>> 0;\n\n    const mem = getUint8ArrayMemory0();\n\n    let offset = 0;\n\n    for (; offset < len; offset++) {\n        const code = arg.charCodeAt(offset);\n        if (code > 0x7F) break;\n        mem[ptr + offset] = code;\n    }\n    if (offset !== len) {\n        if (offset !== 0) {\n            arg = arg.slice(offset);\n        }\n        ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n        const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n        const ret = cachedTextEncoder.encodeInto(arg, view);\n\n        offset += ret.written;\n        ptr = realloc(ptr, len, offset, 1) >>> 0;\n    }\n\n    WASM_VECTOR_LEN = offset;\n    return ptr;\n}\n\nfunction takeFromExternrefTable0(idx) {\n    const value = wasm.__wbindgen_externrefs.get(idx);\n    wasm.__externref_table_dealloc(idx);\n    return value;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n    numBytesDecoded += len;\n    if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n        cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n        cachedTextDecoder.decode();\n        numBytesDecoded = len;\n    }\n    return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n    cachedTextEncoder.encodeInto = function (arg, view) {\n        const buf = cachedTextEncoder.encode(arg);\n        view.set(buf);\n        return {\n            read: arg.length,\n            written: buf.length\n        };\n    };\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet wasmModule, wasm;\nfunction __wbg_finalize_init(instance, module) {\n    wasm = instance.exports;\n    wasmModule = module;\n    cachedUint8ArrayMemory0 = null;\n    wasm.__wbindgen_start();\n    return wasm;\n}\n\nasync function __wbg_load(module, imports) {\n    if (typeof Response === 'function' && module instanceof Response) {\n        if (typeof WebAssembly.instantiateStreaming === 'function') {\n            try {\n                return await WebAssembly.instantiateStreaming(module, imports);\n            } catch (e) {\n                const validResponse = module.ok && expectedResponseType(module.type);\n\n                if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n                    console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n                } else { throw e; }\n            }\n        }\n\n        const bytes = await module.arrayBuffer();\n        return await WebAssembly.instantiate(bytes, imports);\n    } else {\n        const instance = await WebAssembly.instantiate(module, imports);\n\n        if (instance instanceof WebAssembly.Instance) {\n            return { instance, module };\n        } else {\n            return instance;\n        }\n    }\n\n    function expectedResponseType(type) {\n        switch (type) {\n            case 'basic': case 'cors': case 'default': return true;\n        }\n        return false;\n    }\n}\n\nfunction initSync(module) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (module !== undefined) {\n        if (Object.getPrototypeOf(module) === Object.prototype) {\n            ({module} = module)\n        } else {\n            console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n        }\n    }\n\n    const imports = __wbg_get_imports();\n    if (!(module instanceof WebAssembly.Module)) {\n        module = new WebAssembly.Module(module);\n    }\n    const instance = new WebAssembly.Instance(module, imports);\n    return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n    if (wasm !== undefined) return wasm;\n\n\n    if (module_or_path !== undefined) {\n        if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n            ({module_or_path} = module_or_path)\n        } else {\n            console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n        }\n    }\n\n    if (module_or_path === undefined) {\n        module_or_path = new URL('openapi_extractor_bg.wasm', import.meta.url);\n    }\n    const imports = __wbg_get_imports();\n\n    if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n        module_or_path = fetch(module_or_path);\n    }\n\n    const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n    return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync, __wbg_init as default };\n"
  },
  {
    "path": "packages/sources/openapi/src/openapi-extractor-wasm/openapi_extractor_bg.wasm.d.ts",
    "content": "/* tslint:disable */\n/* eslint-disable */\nexport const memory: WebAssembly.Memory;\nexport const extract_manifest_json_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];\nexport const __wbindgen_externrefs: WebAssembly.Table;\nexport const __wbindgen_malloc: (a: number, b: number) => number;\nexport const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;\nexport const __externref_table_dealloc: (a: number) => void;\nexport const __wbindgen_free: (a: number, b: number, c: number) => void;\nexport const __wbindgen_start: () => void;\n"
  },
  {
    "path": "packages/sources/openapi/src/real-spec-coverage.test.ts",
    "content": "import { fileURLToPath } from \"node:url\";\n\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport { compileOpenApiToolDefinitions } from \"./definitions\";\nimport { parseOpenApiDocument } from \"./document\";\nimport { extractOpenApiManifest } from \"./extraction\";\nimport { buildOpenApiToolPresentation } from \"./tool-presentation\";\nimport type {\n  OpenApiExtractedTool,\n  OpenApiJsonObject,\n  OpenApiToolManifest,\n} from \"./types\";\n\nconst readFixture = (name: string) =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) =>\n      fs.readFileString(\n        fileURLToPath(\n          new URL(`../../../platform/control-plane/src/runtime/fixtures/${name}`, import.meta.url),\n        ),\n        \"utf8\",\n      )\n    ),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\nconst asObject = (value: unknown): Record<string, unknown> =>\n  value !== null && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst pointerSegment = (segment: string): string =>\n  segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n\nconst resolveLocalRef = (\n  document: OpenApiJsonObject,\n  value: unknown,\n  activeRefs: ReadonlySet<string> = new Set<string>(),\n): unknown => {\n  const object = asObject(value);\n  const ref = typeof object.$ref === \"string\" ? object.$ref : null;\n  if (!ref || !ref.startsWith(\"#/\") || activeRefs.has(ref)) {\n    return value;\n  }\n\n  const resolved = ref\n    .slice(2)\n    .split(\"/\")\n    .reduce<unknown>((current, segment) => {\n      if (current === undefined || current === null) {\n        return undefined;\n      }\n\n      return asObject(current)[pointerSegment(segment)];\n    }, document);\n\n  if (resolved === undefined) {\n    return value;\n  }\n\n  const nextActiveRefs = new Set(activeRefs);\n  nextActiveRefs.add(ref);\n  const resolvedObject = asObject(resolveLocalRef(document, resolved, nextActiveRefs));\n  const { $ref: _ignoredRef, ...rest } = object;\n\n  return Object.keys(rest).length > 0\n    ? { ...resolvedObject, ...rest }\n    : resolvedObject;\n};\n\nconst jsonContentSchema = (\n  content: unknown,\n): unknown | undefined => {\n  const entries = Object.entries(asObject(content));\n  const preferredEntry = entries.find(([mediaType]) => mediaType === \"application/json\")\n    ?? entries.find(([mediaType]) => mediaType.toLowerCase().includes(\"+json\"))\n    ?? entries.find(([mediaType]) => mediaType.toLowerCase().includes(\"json\"));\n\n  return preferredEntry ? asObject(preferredEntry[1]).schema : undefined;\n};\n\nconst operationForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): Record<string, unknown> =>\n  asObject(asObject(asObject(document.paths)[tool.path])[tool.method]);\n\nconst requestBodySchemaForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): unknown | undefined => {\n  const requestBody = resolveLocalRef(document, operationForTool(document, tool).requestBody);\n  return jsonContentSchema(asObject(requestBody).content);\n};\n\nconst responseSchemaForTool = (\n  document: OpenApiJsonObject,\n  tool: OpenApiExtractedTool,\n): unknown | undefined => {\n  const responseEntries = Object.entries(asObject(operationForTool(document, tool).responses));\n  const preferredResponses = responseEntries\n    .filter(([status]) => /^2\\d\\d$/.test(status))\n    .sort(([left], [right]) => left.localeCompare(right));\n  const fallbackResponses = responseEntries.filter(([status]) => status === \"default\");\n\n  for (const [, responseValue] of [...preferredResponses, ...fallbackResponses]) {\n    const response = resolveLocalRef(document, responseValue);\n    const schema = jsonContentSchema(asObject(response).content);\n    if (schema !== undefined) {\n      return schema;\n    }\n  }\n\n  return undefined;\n};\n\nconst normalizeSchema = (\n  document: OpenApiJsonObject,\n  schema: unknown,\n  depth: number = 4,\n  activeRefs: ReadonlySet<string> = new Set<string>(),\n): unknown => {\n  if (depth < 0) {\n    return \"...\";\n  }\n\n  if (Array.isArray(schema)) {\n    return schema.map((entry) => normalizeSchema(document, entry, depth - 1, activeRefs));\n  }\n\n  const object = asObject(schema);\n  const ref = typeof object.$ref === \"string\" ? object.$ref : null;\n  if (ref && ref.startsWith(\"#/\")) {\n    if (activeRefs.has(ref)) {\n      return { $ref: ref };\n    }\n\n    return normalizeSchema(\n      document,\n      resolveLocalRef(document, object, activeRefs),\n      depth,\n      new Set([...activeRefs, ref]),\n    );\n  }\n\n  if (Object.keys(object).length === 0) {\n    return object;\n  }\n\n  const normalized: Record<string, unknown> = {};\n\n  if (typeof object.type === \"string\") {\n    normalized.type = object.type;\n  }\n  if (typeof object.format === \"string\") {\n    normalized.format = object.format;\n  }\n  if (typeof object.nullable === \"boolean\") {\n    normalized.nullable = object.nullable;\n  }\n  if (object.const !== undefined) {\n    normalized.const = object.const;\n  }\n  if (Array.isArray(object.enum)) {\n    normalized.enum = [...object.enum];\n  }\n  if (Array.isArray(object.required)) {\n    normalized.required = [...object.required].sort();\n  }\n  if (object.additionalProperties !== undefined) {\n    normalized.additionalProperties =\n      typeof object.additionalProperties === \"boolean\"\n        ? object.additionalProperties\n        : normalizeSchema(document, object.additionalProperties, depth - 1, activeRefs);\n  }\n  if (object.items !== undefined) {\n    normalized.items = normalizeSchema(document, object.items, depth - 1, activeRefs);\n  }\n  if (Array.isArray(object.oneOf)) {\n    normalized.oneOf = object.oneOf.map((entry) =>\n      normalizeSchema(document, entry, depth - 1, activeRefs)\n    );\n  }\n  if (Array.isArray(object.anyOf)) {\n    normalized.anyOf = object.anyOf.map((entry) =>\n      normalizeSchema(document, entry, depth - 1, activeRefs)\n    );\n  }\n  if (Array.isArray(object.allOf)) {\n    normalized.allOf = object.allOf.map((entry) =>\n      normalizeSchema(document, entry, depth - 1, activeRefs)\n    );\n  }\n\n  const properties = asObject(object.properties);\n  if (Object.keys(properties).length > 0) {\n    normalized.properties = Object.fromEntries(\n      Object.keys(properties)\n        .sort()\n        .map((key) => [\n          key,\n          normalizeSchema(document, properties[key], depth - 1, activeRefs),\n        ]),\n    );\n  }\n\n  return normalized;\n};\n\nconst schemaMatchesExpected = (expected: unknown, actual: unknown): boolean => {\n  if (expected === actual) {\n    return true;\n  }\n\n  if (\n    expected !== null\n    && typeof expected === \"object\"\n    && !Array.isArray(expected)\n    && typeof asObject(expected).$ref === \"string\"\n  ) {\n    return actual !== undefined;\n  }\n\n  if (Array.isArray(expected)) {\n    return Array.isArray(actual)\n      && expected.length === actual.length\n      && expected.every((entry, index) =>\n        schemaMatchesExpected(entry, actual[index]),\n      );\n  }\n\n  if (\n    expected !== null\n    && typeof expected === \"object\"\n    && !Array.isArray(expected)\n  ) {\n    const expectedObject = asObject(expected);\n    const actualObject = asObject(actual);\n\n    return Object.entries(expectedObject).every(([key, value]) =>\n      schemaMatchesExpected(value, actualObject[key]),\n    );\n  }\n\n  return false;\n};\n\nconst manifestToolMap = (\n  manifest: OpenApiToolManifest,\n): Map<string, OpenApiExtractedTool> =>\n  new Map(\n    manifest.tools.map((tool) => [`${tool.method} ${tool.path} ${tool.operationHash}`, tool]),\n  );\n\nconst collectOpenApiPresentationMismatches = (input: {\n  document: OpenApiJsonObject;\n  manifest: OpenApiToolManifest;\n}): string[] => {\n  const manifestToolByKey = manifestToolMap(input.manifest);\n  const mismatches: string[] = [];\n\n  for (const definition of compileOpenApiToolDefinitions(input.manifest)) {\n    const manifestTool = manifestToolByKey.get(\n      `${definition.method} ${definition.path} ${definition.operationHash}`,\n    );\n    if (!manifestTool) {\n      mismatches.push(`missing manifest tool for ${definition.toolId}`);\n      continue;\n    }\n\n    const presentation = buildOpenApiToolPresentation({\n      definition,\n      refHintTable: input.manifest.refHintTable,\n    });\n\n    const expectedRequestSchema = requestBodySchemaForTool(input.document, manifestTool);\n    if (expectedRequestSchema !== undefined) {\n      const actualBodySchema = asObject(asObject(presentation.inputSchema).properties).body;\n      if (actualBodySchema === undefined) {\n        mismatches.push(`${definition.toolId}: missing body schema`);\n      } else if (!schemaMatchesExpected(\n        normalizeSchema(input.document, expectedRequestSchema),\n        normalizeSchema(input.document, actualBodySchema),\n      )) {\n        mismatches.push(`${definition.toolId}: request body schema mismatch`);\n      }\n\n      if (manifestTool.typing?.inputSchema === undefined) {\n        mismatches.push(`${definition.toolId}: missing typing.inputSchema`);\n      }\n    }\n\n    const expectedResponseSchema = responseSchemaForTool(input.document, manifestTool);\n    if (expectedResponseSchema !== undefined) {\n      if (presentation.outputSchema === undefined) {\n        mismatches.push(`${definition.toolId}: missing output schema`);\n      } else if (!schemaMatchesExpected(\n        normalizeSchema(input.document, expectedResponseSchema),\n        normalizeSchema(input.document, presentation.outputSchema),\n      )) {\n        mismatches.push(`${definition.toolId}: response schema mismatch`);\n      }\n\n      if (manifestTool.typing?.outputSchema === undefined) {\n        mismatches.push(`${definition.toolId}: missing typing.outputSchema`);\n      }\n    }\n  }\n\n  return mismatches;\n};\n\ndescribe(\"openapi real spec coverage\", () => {\n  for (const fixture of [\n    {\n      name: \"Vercel\",\n      filename: \"vercel-openapi.json\",\n      expectedMinimumTools: 250,\n    },\n    {\n      name: \"Neon\",\n      filename: \"neon-openapi.json\",\n      expectedMinimumTools: 50,\n    },\n  ] as const) {\n    it.effect(\n      `projects every ${fixture.name} operation with request/response schemas that match the raw spec`,\n      () =>\n        Effect.gen(function* () {\n          const specText = yield* readFixture(fixture.filename);\n          const document = parseOpenApiDocument(specText);\n          const manifest = yield* extractOpenApiManifest(\n            fixture.name.toLowerCase(),\n            specText,\n          );\n          const mismatches = collectOpenApiPresentationMismatches({\n            document,\n            manifest,\n          });\n\n          expect(manifest.tools.length).toBeGreaterThan(fixture.expectedMinimumTools);\n          expect(mismatches).toEqual([]);\n        }),\n      120_000,\n    );\n  }\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/schema-refs.ts",
    "content": "type JsonObject = Record<string, unknown>;\ntype RefHintValue = string | JsonObject;\n\ntype DiscoveryTypingLike = {\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n};\n\nconst isJsonObject = (value: unknown): value is JsonObject =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst parseJson = (value: string): unknown | null => {\n  try {\n    return JSON.parse(value) as unknown;\n  } catch {\n    return null;\n  }\n};\n\nconst resolveSchemaNode = (\n  value: unknown,\n  refHintTable: Readonly<Record<string, RefHintValue>>,\n  parsedHintCache: Map<string, unknown>,\n  activeRefs: ReadonlySet<string>,\n): unknown => {\n  if (Array.isArray(value)) {\n    return value.map((item) =>\n      resolveSchemaNode(item, refHintTable, parsedHintCache, activeRefs)\n    );\n  }\n\n  if (!isJsonObject(value)) {\n    return value;\n  }\n\n  const ref = typeof value.$ref === \"string\" ? value.$ref : null;\n  if (ref && ref.startsWith(\"#/\") && !activeRefs.has(ref)) {\n    let resolvedRefValue = parsedHintCache.get(ref);\n\n    if (resolvedRefValue === undefined) {\n      const rawHint = refHintTable[ref];\n      resolvedRefValue =\n        typeof rawHint === \"string\"\n          ? parseJson(rawHint)\n          : isJsonObject(rawHint)\n            ? rawHint\n            : null;\n      parsedHintCache.set(ref, resolvedRefValue);\n    }\n\n    if (resolvedRefValue !== null && resolvedRefValue !== undefined) {\n      const nextActiveRefs = new Set(activeRefs);\n      nextActiveRefs.add(ref);\n\n      const { $ref: _ignoredRef, ...rest } = value;\n      const resolvedTarget = resolveSchemaNode(\n        resolvedRefValue,\n        refHintTable,\n        parsedHintCache,\n        nextActiveRefs,\n      );\n\n      if (Object.keys(rest).length === 0) {\n        return resolvedTarget;\n      }\n\n      const resolvedRest = resolveSchemaNode(\n        rest,\n        refHintTable,\n        parsedHintCache,\n        activeRefs,\n      );\n\n      if (isJsonObject(resolvedTarget) && isJsonObject(resolvedRest)) {\n        return { ...resolvedTarget, ...resolvedRest };\n      }\n\n      return resolvedTarget;\n    }\n  }\n\n  const next: JsonObject = {};\n  for (const [key, nestedValue] of Object.entries(value)) {\n    next[key] = resolveSchemaNode(\n      nestedValue,\n      refHintTable,\n      parsedHintCache,\n      activeRefs,\n    );\n  }\n\n  return next;\n};\n\nexport const resolveSchemaWithRefHints = (\n  schema: unknown,\n  refHintTable: Readonly<Record<string, RefHintValue>> | undefined,\n): unknown | null => {\n  if (schema === undefined || schema === null) {\n    return null;\n  }\n\n  if (!refHintTable || Object.keys(refHintTable).length === 0) {\n    return schema;\n  }\n\n  const resolved = resolveSchemaNode(\n    schema,\n    refHintTable,\n    new Map<string, unknown>(),\n    new Set<string>(),\n  );\n  return resolved;\n};\n\nexport const resolveTypingSchemasWithRefHints = (\n  typing: DiscoveryTypingLike | undefined,\n  refHintTable: Readonly<Record<string, RefHintValue>> | undefined,\n): {\n  inputSchema: unknown | null;\n  outputSchema: unknown | null;\n} => ({\n  inputSchema: resolveSchemaWithRefHints(\n    typing?.inputSchema,\n    refHintTable,\n  ),\n  outputSchema: resolveSchemaWithRefHints(\n    typing?.outputSchema,\n    refHintTable,\n  ),\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/tool-presentation.test.ts",
    "content": "import { fileURLToPath } from \"node:url\";\n\nimport { FileSystem } from \"@effect/platform\";\nimport { NodeFileSystem } from \"@effect/platform-node\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport * as Effect from \"effect/Effect\";\n\nimport type { OpenApiToolDefinition } from \"./definitions\";\nimport { compileOpenApiToolDefinitions } from \"./definitions\";\nimport { extractOpenApiManifest } from \"./extraction\";\nimport { buildOpenApiToolPresentation } from \"./tool-presentation\";\n\nconst readFixture = (name: string) =>\n  FileSystem.FileSystem.pipe(\n    Effect.flatMap((fs) =>\n      fs.readFileString(\n        fileURLToPath(\n          new URL(`../../../platform/control-plane/src/runtime/fixtures/${name}`, import.meta.url),\n        ),\n        \"utf8\",\n      )\n    ),\n    Effect.provide(NodeFileSystem.layer),\n  );\n\ndescribe(\"buildOpenApiToolPresentation\", () => {\n  it(\"adds parameter descriptions to flattened call schemas\", () => {\n    const definition: OpenApiToolDefinition = {\n      toolId: \"accessGroups.deleteProject\",\n      rawToolId: \"deleteAccessGroupProject\",\n      name: \"Delete an access group project\",\n      description: \"Allows deletion of an access group project\",\n      group: \"accessGroups\",\n      leaf: \"deleteProject\",\n      tags: [],\n      versionSegment: \"v1\",\n      method: \"delete\",\n      path: \"/v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n      invocation: {\n        method: \"delete\",\n        pathTemplate: \"/v1/access-groups/{accessGroupIdOrName}/projects/{projectId}\",\n        parameters: [\n          {\n            name: \"accessGroupIdOrName\",\n            location: \"path\",\n            required: true,\n          },\n          {\n            name: \"projectId\",\n            location: \"path\",\n            required: true,\n          },\n          {\n            name: \"teamId\",\n            location: \"query\",\n            required: false,\n          },\n          {\n            name: \"slug\",\n            location: \"query\",\n            required: false,\n          },\n        ],\n        requestBody: null,\n      },\n      operationHash: \"deadbeefcafebabe\",\n      typing: {\n        inputSchema: {\n          type: \"object\",\n          properties: {\n            accessGroupIdOrName: { type: \"string\" },\n            projectId: { type: \"string\" },\n            teamId: { type: \"string\" },\n            slug: { type: \"string\" },\n          },\n          required: [\"accessGroupIdOrName\", \"projectId\"],\n          additionalProperties: false,\n        },\n      },\n      documentation: {\n        summary: \"Delete an access group project\",\n        parameters: [\n          {\n            name: \"accessGroupIdOrName\",\n            location: \"path\",\n            required: true,\n            description: \"The access group identifier or slug.\",\n          },\n          {\n            name: \"projectId\",\n            location: \"path\",\n            required: true,\n            description: \"The project identifier.\",\n          },\n          {\n            name: \"teamId\",\n            location: \"query\",\n            required: false,\n            description: \"The Team identifier to perform the request on behalf of.\",\n          },\n          {\n            name: \"slug\",\n            location: \"query\",\n            required: false,\n            description: \"The Team slug to perform the request on behalf of.\",\n          },\n        ],\n      },\n    };\n\n    const presentation = buildOpenApiToolPresentation({ definition });\n    const schema = presentation.inputSchema as {\n      properties?: Record<string, { description?: string }>;\n    };\n\n    expect(schema.properties?.accessGroupIdOrName?.description).toBe(\n      \"The access group identifier or slug.\",\n    );\n    expect(schema.properties?.projectId?.description).toBe(\n      \"The project identifier.\",\n    );\n    expect(schema.properties?.teamId?.description).toBe(\n      \"The Team identifier to perform the request on behalf of.\",\n    );\n    expect(schema.properties?.slug?.description).toBe(\n      \"The Team slug to perform the request on behalf of.\",\n    );\n  });\n\n  it(\"uses the request body property schema instead of nesting the full input schema\", () => {\n    const definition: OpenApiToolDefinition = {\n      toolId: \"projects.update\",\n      rawToolId: \"updateProject\",\n      name: \"Update project\",\n      description: \"Updates a project.\",\n      group: \"projects\",\n      leaf: \"update\",\n      tags: [],\n      versionSegment: \"v1\",\n      method: \"patch\",\n      path: \"/v1/projects/{projectId}\",\n      invocation: {\n        method: \"patch\",\n        pathTemplate: \"/v1/projects/{projectId}\",\n        parameters: [\n          {\n            name: \"projectId\",\n            location: \"path\",\n            required: true,\n          },\n        ],\n        requestBody: {\n          required: true,\n          contentTypes: [\"application/json\"],\n        },\n      },\n      operationHash: \"feedfacecafebeef\",\n      typing: {\n        inputSchema: {\n          type: \"object\",\n          properties: {\n            projectId: {\n              type: \"string\",\n            },\n            body: {\n              type: \"object\",\n              properties: {\n                name: {\n                  type: \"string\",\n                },\n              },\n              required: [\"name\"],\n              additionalProperties: false,\n            },\n          },\n          required: [\"projectId\", \"body\"],\n          additionalProperties: false,\n        },\n      },\n      documentation: {\n        parameters: [\n          {\n            name: \"projectId\",\n            location: \"path\",\n            required: true,\n            description: \"The project identifier.\",\n          },\n        ],\n        requestBody: {\n          description: \"Project update payload.\",\n        },\n      },\n    };\n\n    const presentation = buildOpenApiToolPresentation({ definition });\n    const schema = presentation.inputSchema as {\n      properties?: Record<string, unknown>;\n    };\n    const body = schema.properties?.body as {\n      description?: string;\n      properties?: Record<string, unknown>;\n    };\n\n    expect(body.description).toBe(\"Project update payload.\");\n    expect(body.properties?.name).toEqual({ type: \"string\" });\n    expect(body.properties?.body).toBeUndefined();\n  });\n\n  it.effect(\n    \"resolves request and response schemas from ref hints for the real Neon OpenAPI spec\",\n    () =>\n      Effect.gen(function* () {\n        const specText = yield* readFixture(\"neon-openapi.json\");\n        const manifest = yield* extractOpenApiManifest(\"neon\", specText);\n        const definition = compileOpenApiToolDefinitions(manifest).find(\n          (candidate) => candidate.toolId === \"apiKey.createApiKey\",\n        );\n\n        expect(definition).toBeDefined();\n\n        const presentation = buildOpenApiToolPresentation({\n          definition: definition!,\n          refHintTable: manifest.refHintTable,\n        });\n\n        expect(presentation.inputTypePreview).toContain(\"body\");\n        expect(presentation.inputTypePreview).toContain(\"key_name\");\n        expect(presentation.outputTypePreview).toContain(\"key\");\n        expect(presentation.inputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            body: {\n              type: \"object\",\n              properties: {\n                key_name: {\n                  type: \"string\",\n                },\n              },\n              required: [\"key_name\"],\n            },\n          },\n          required: [\"body\"],\n        });\n        expect(presentation.outputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            id: {\n              type: \"integer\",\n            },\n            key: {\n              type: \"string\",\n            },\n            name: {\n              type: \"string\",\n            },\n          },\n        });\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"preserves response wrappers for response-only Neon operations\",\n    () =>\n      Effect.gen(function* () {\n        const specText = yield* readFixture(\"neon-openapi.json\");\n        const manifest = yield* extractOpenApiManifest(\"neon\", specText);\n        const definition = compileOpenApiToolDefinitions(manifest).find(\n          (candidate) => candidate.toolId === \"apiKey.listApiKeys\",\n        );\n\n        expect(definition).toBeDefined();\n\n        const presentation = buildOpenApiToolPresentation({\n          definition: definition!,\n          refHintTable: manifest.refHintTable,\n        });\n\n        expect(presentation.inputTypePreview).toBe(\"unknown\");\n        expect(presentation.outputTypePreview).toContain(\"id\");\n        expect(presentation.outputTypePreview).toContain(\"name\");\n        expect(presentation.outputSchema).toMatchObject({\n          type: \"array\",\n          items: {\n            type: \"object\",\n            properties: {\n              id: {\n                type: \"integer\",\n              },\n              name: {\n                type: \"string\",\n              },\n            },\n          },\n        });\n      }),\n    120_000,\n  );\n\n  it.effect(\n    \"extracts parameter schemas and descriptions for parameter-only Vercel operations\",\n    () =>\n      Effect.gen(function* () {\n        const specText = yield* readFixture(\"vercel-openapi.json\");\n        const manifest = yield* extractOpenApiManifest(\"vercel\", specText);\n        const definition = compileOpenApiToolDefinitions(manifest).find(\n          (candidate) => candidate.toolId === \"accessGroups.listAccessGroupProjects\",\n        );\n\n        expect(definition).toBeDefined();\n\n        const presentation = buildOpenApiToolPresentation({\n          definition: definition!,\n          refHintTable: manifest.refHintTable,\n        });\n\n        expect(definition?.documentation?.parameters).toEqual(\n          expect.arrayContaining([\n            expect.objectContaining({\n              name: \"idOrName\",\n              description: \"The ID or name of the Access Group.\",\n            }),\n            expect.objectContaining({\n              name: \"limit\",\n              description: \"Limit how many access group projects should be returned.\",\n            }),\n          ]),\n        );\n        expect(presentation.inputSchema).toMatchObject({\n          type: \"object\",\n          properties: {\n            idOrName: {\n              type: \"string\",\n              description: \"The ID or name of the Access Group.\",\n            },\n            limit: {\n              type: \"integer\",\n              description: \"Limit how many access group projects should be returned.\",\n              minimum: 1,\n              maximum: 100,\n            },\n            next: {\n              type: \"string\",\n              description: \"Continuation cursor to retrieve the next page of results.\",\n            },\n            teamId: {\n              type: \"string\",\n              description: \"The Team identifier to perform the request on behalf of.\",\n            },\n            slug: {\n              type: \"string\",\n              description: \"The Team slug to perform the request on behalf of.\",\n            },\n          },\n          required: [\"idOrName\"],\n        });\n      }),\n    120_000,\n  );\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/tool-presentation.ts",
    "content": "import * as Match from \"effect/Match\";\nimport { typeSignatureFromSchema } from \"@executor/codemode-core\";\n\nimport type {\n  OpenApiExample,\n  OpenApiMediaContent,\n  OpenApiInvocationPayload,\n  OpenApiRefHintTable,\n  OpenApiResponseVariant,\n  OpenApiToolDocumentation,\n  OpenApiToolProviderData,\n} from \"./types\";\nimport {\n  openApiProviderDataFromDefinition,\n  type OpenApiToolDefinition,\n} from \"./definitions\";\nimport {\n  resolveSchemaWithRefHints,\n  resolveTypingSchemasWithRefHints,\n} from \"./schema-refs\";\n\nconst asRecord = (value: unknown): Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : {};\n\nconst isStrictEmptyObjectSchema = (value: unknown): boolean => {\n  const schema = asRecord(value);\n  if (schema.type !== \"object\" && schema.properties === undefined) {\n    return false;\n  }\n\n  const properties = asRecord(schema.properties);\n  return Object.keys(properties).length === 0 && schema.additionalProperties === false;\n};\n\nexport const openApiOutputTypeSignatureFromSchema = (\n  schema: unknown,\n  maxLength: number = 320,\n ): string => {\n  if (schema === undefined || schema === null) {\n    return \"void\";\n  }\n\n  if (isStrictEmptyObjectSchema(schema)) {\n    return \"{}\";\n  }\n\n  return typeSignatureFromSchema(schema, \"unknown\", maxLength);\n};\n\nconst firstExample = (\n  examples: ReadonlyArray<OpenApiExample> | undefined,\n): OpenApiExample | undefined => examples?.[0];\n\nconst schemaProperty = (\n  schema: unknown,\n  propertyName: string,\n): unknown | undefined => {\n  const record = asRecord(schema);\n  const properties = asRecord(record.properties);\n  return properties[propertyName];\n};\n\nconst groupedSchemaForParameter = (\n  schema: unknown,\n  location: OpenApiInvocationPayload[\"parameters\"][number][\"location\"],\n  name: string,\n): unknown | undefined => {\n  const direct = schemaProperty(schema, name);\n  if (direct !== undefined) {\n    return direct;\n  }\n\n  const groupKey =\n    location === \"header\"\n      ? \"headers\"\n      : location === \"cookie\"\n        ? \"cookies\"\n        : location;\n  const groupSchema = schemaProperty(schema, groupKey);\n  return groupSchema === undefined ? undefined : schemaProperty(groupSchema, name);\n};\n\nconst preferredContentSchema = (\n  contents: ReadonlyArray<OpenApiMediaContent> | undefined,\n): unknown | undefined => {\n  if (!contents || contents.length === 0) {\n    return undefined;\n  }\n\n  const preferred = [...contents].sort((left, right) => left.mediaType.localeCompare(right.mediaType))\n    .find((content) => content.mediaType === \"application/json\")\n    ?? [...contents].find((content) => content.mediaType.toLowerCase().includes(\"+json\"))\n    ?? [...contents].find((content) => content.mediaType.toLowerCase().includes(\"json\"))\n    ?? contents[0];\n\n  return preferred?.schema;\n};\n\nconst withDescription = (\n  schema: unknown,\n  description: string | undefined,\n): unknown => {\n  if (!description) {\n    return schema;\n  }\n\n  const record = asRecord(schema);\n  if (Object.keys(record).length === 0) {\n    return schema;\n  }\n\n  return {\n    ...record,\n    description,\n  };\n};\n\nconst callInputSchemaFromInvocation = (input: {\n  invocation: OpenApiInvocationPayload;\n  documentation?: OpenApiToolDocumentation;\n  parameterSourceSchema?: unknown;\n  requestBodySchema?: unknown;\n}): Record<string, unknown> | undefined => {\n  const invocation = input.invocation;\n  const properties: Record<string, unknown> = {};\n  const required: string[] = [];\n\n  for (const parameter of invocation.parameters) {\n    const matchingDocs = input.documentation?.parameters.find((candidate) =>\n      candidate.name === parameter.name && candidate.location === parameter.location\n    );\n    const parameterSchema = groupedSchemaForParameter(\n      input.parameterSourceSchema,\n      parameter.location,\n      parameter.name,\n    ) ?? preferredContentSchema(parameter.content) ?? {\n      type: \"string\",\n    };\n\n    properties[parameter.name] = withDescription(\n      parameterSchema,\n      matchingDocs?.description,\n    );\n    if (parameter.required) {\n      required.push(parameter.name);\n    }\n  }\n\n  if (invocation.requestBody) {\n    properties.body = withDescription(\n      input.requestBodySchema ?? preferredContentSchema(invocation.requestBody.contents) ?? {\n        type: \"object\",\n      },\n      input.documentation?.requestBody?.description,\n    );\n    if (invocation.requestBody.required) {\n      required.push(\"body\");\n    }\n  }\n\n  return Object.keys(properties).length > 0\n    ? {\n      type: \"object\",\n      properties,\n      ...(required.length > 0 ? { required } : {}),\n      additionalProperties: false,\n    }\n    : undefined;\n};\n\nconst schemaRefPlaceholder = (\n  refHintKey: string | undefined,\n): Record<string, string> | undefined =>\n  typeof refHintKey === \"string\" && refHintKey.length > 0\n    ? { $ref: refHintKey }\n    : undefined;\n\nconst inferRefHintPlaceholders = (\n  definition: OpenApiToolDefinition,\n): {\n  requestBodySchema?: Record<string, string>;\n  outputSchema?: Record<string, string>;\n} => {\n  const refHintKeys = definition.typing?.refHintKeys ?? [];\n\n  return Match.value(definition.invocation.requestBody).pipe(\n    Match.when(null, () => ({\n      outputSchema: schemaRefPlaceholder(refHintKeys[0]),\n    })),\n    Match.orElse(() => ({\n      requestBodySchema: schemaRefPlaceholder(refHintKeys[0]),\n      outputSchema: schemaRefPlaceholder(refHintKeys[1]),\n    })),\n  );\n};\n\nconst resolvePresentationSchemas = (input: {\n  definition: OpenApiToolDefinition;\n  refHintTable?: Readonly<OpenApiRefHintTable>;\n}): {\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n} => {\n  const resolvedTyping = resolveTypingSchemasWithRefHints(\n    input.definition.typing,\n    input.refHintTable,\n  );\n  const inferredRefPlaceholders = inferRefHintPlaceholders(input.definition);\n  const resolvedRequestBodySchema = resolveSchemaWithRefHints(\n    inferredRefPlaceholders.requestBodySchema,\n    input.refHintTable,\n  );\n  const requestBodySchema =\n    schemaProperty(resolvedTyping.inputSchema, \"body\")\n    ?? schemaProperty(resolvedTyping.inputSchema, \"input\")\n    ?? (resolvedRequestBodySchema !== undefined && resolvedRequestBodySchema !== null\n      ? resolvedRequestBodySchema\n      : undefined);\n\n  const inputSchema = callInputSchemaFromInvocation({\n    invocation: input.definition.invocation,\n    documentation: input.definition.documentation,\n    parameterSourceSchema: resolvedTyping.inputSchema,\n    ...(requestBodySchema !== undefined\n      ? { requestBodySchema }\n      : {}),\n  })\n    ?? resolvedTyping.inputSchema\n    ?? undefined;\n  const outputSchema =\n    resolvedTyping.outputSchema\n    ?? resolveSchemaWithRefHints(\n      inferredRefPlaceholders.outputSchema,\n      input.refHintTable,\n    );\n\n  return {\n    ...(inputSchema !== undefined && inputSchema !== null ? { inputSchema } : {}),\n    ...(outputSchema !== undefined && outputSchema !== null ? { outputSchema } : {}),\n  };\n};\n\nconst resolveResponseVariantsWithRefHints = (input: {\n  variants: ReadonlyArray<OpenApiResponseVariant> | undefined;\n  refHintTable?: Readonly<OpenApiRefHintTable>;\n}): ReadonlyArray<OpenApiResponseVariant> | undefined => {\n  if (!input.variants || input.variants.length === 0) {\n    return undefined;\n  }\n\n  return input.variants.map((variant) => {\n    const resolvedSchema = resolveSchemaWithRefHints(\n      variant.schema,\n      input.refHintTable,\n    );\n\n    return {\n      ...variant,\n      ...(resolvedSchema !== undefined ? { schema: resolvedSchema } : {}),\n    };\n  });\n};\n\nconst buildExampleInput = (\n  documentation: OpenApiToolDocumentation | undefined,\n): Record<string, unknown> | undefined => {\n  if (!documentation) {\n    return undefined;\n  }\n\n  const input: Record<string, unknown> = {};\n\n  for (const parameter of documentation.parameters) {\n    const example = firstExample(parameter.examples);\n    if (!example) {\n      continue;\n    }\n\n    input[parameter.name] = JSON.parse(example.valueJson) as unknown;\n  }\n\n  const requestBodyExample = firstExample(documentation.requestBody?.examples);\n  if (requestBodyExample) {\n    input.body = JSON.parse(requestBodyExample.valueJson) as unknown;\n  }\n\n  return Object.keys(input).length > 0 ? input : undefined;\n};\n\nconst buildExampleOutput = (\n  documentation: OpenApiToolDocumentation | undefined,\n): unknown | undefined => {\n  const example = firstExample(documentation?.response?.examples)?.valueJson;\n  return example ? JSON.parse(example) as unknown : undefined;\n};\n\nexport type OpenApiToolPresentation = {\n  inputTypePreview: string;\n  outputTypePreview: string;\n  inputSchema?: unknown;\n  outputSchema?: unknown;\n  exampleInput?: unknown;\n  exampleOutput?: unknown;\n  providerData: OpenApiToolProviderData;\n};\n\nexport const buildOpenApiToolPresentation = (input: {\n  definition: OpenApiToolDefinition;\n  refHintTable?: Readonly<OpenApiRefHintTable>;\n}): OpenApiToolPresentation => {\n  const { inputSchema, outputSchema } = resolvePresentationSchemas(input);\n  const responses = resolveResponseVariantsWithRefHints({\n    variants: input.definition.responses,\n    refHintTable: input.refHintTable,\n  });\n  const exampleInput = buildExampleInput(input.definition.documentation);\n  const exampleOutput = buildExampleOutput(input.definition.documentation);\n\n  return {\n    inputTypePreview: typeSignatureFromSchema(inputSchema, \"unknown\", Infinity),\n    outputTypePreview: openApiOutputTypeSignatureFromSchema(outputSchema, Infinity),\n    ...(inputSchema !== undefined ? { inputSchema } : {}),\n    ...(outputSchema !== undefined ? { outputSchema } : {}),\n    ...(exampleInput !== undefined ? { exampleInput } : {}),\n    ...(exampleOutput !== undefined ? { exampleOutput } : {}),\n    providerData: {\n      ...openApiProviderDataFromDefinition(input.definition),\n      ...(responses ? { responses } : {}),\n    } satisfies OpenApiToolProviderData,\n  };\n};\n"
  },
  {
    "path": "packages/sources/openapi/src/tools.test.ts",
    "content": "import { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\n\nimport {\n  HttpApi,\n  HttpApiBuilder,\n  HttpApiEndpoint,\n  HttpApiGroup,\n  HttpApiSchema,\n  HttpClient,\n  HttpClientResponse,\n  OpenApi,\n} from \"@effect/platform\";\nimport * as NodeHttpServer from \"@effect/platform-node/NodeHttpServer\";\nimport { describe, expect, it } from \"@effect/vitest\";\nimport { assertInclude, assertTrue } from \"@effect/vitest/utils\";\n\nimport * as Either from \"effect/Either\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport { Schema } from \"effect\";\n\nimport type { ToolDefinition, ToolInput, ToolMap } from \"@executor/codemode-core\";\n\nimport { extractOpenApiManifest } from \"./extraction\";\nimport { createOpenApiToolsFromManifest, createOpenApiToolsFromSpec } from \"./tools\";\n\ntype TestServer = {\n  baseUrl: string;\n  requests: Array<{\n    method: string;\n    path: string;\n    query: string;\n    body: string;\n    headers: Record<string, string>;\n  }>;\n  close: () => Promise<void>;\n};\n\ntype BinaryTestServer = {\n  baseUrl: string;\n  close: () => Promise<void>;\n};\n\ntype EffectServerHandler = {\n  handler: (nodeRequest: IncomingMessage, nodeResponse: ServerResponse) => void;\n  dispose: () => Promise<void>;\n};\n\nconst makeEffectServerHandler = (\n  requests: TestServer[\"requests\"],\n): Effect.Effect<EffectServerHandler> =>\n  Effect.gen(function* () {\n    const handlersLayer = HttpApiBuilder.group(GeneratedApi, \"repos\", (handlers) =>\n      handlers\n        .handle(\"getRepo\", ({ path, urlParams }) =>\n          Effect.sync(() => {\n            const include = urlParams.include;\n            requests.push({\n              method: \"GET\",\n              path: `/repos/${path.owner}/${path.repo}`,\n              query: include ? `?include=${encodeURIComponent(include)}` : \"\",\n              body: \"\",\n              headers: {},\n            });\n\n            return {\n              full_name: `${path.owner}/${path.repo}`,\n              include: include ?? null,\n            };\n          }),\n        )\n        .handle(\"createIssue\", ({ path, payload }) =>\n          Effect.sync(() => {\n            const bodyText = JSON.stringify(payload);\n            requests.push({\n              method: \"POST\",\n              path: `/repos/${path.owner}/${path.repo}/issues`,\n              query: \"\",\n              body: bodyText,\n              headers: {},\n            });\n\n            return {\n              created: true,\n              owner: path.owner,\n              repo: path.repo,\n              body: payload,\n            };\n          }),\n        ),\n    );\n\n    const apiLayer = HttpApiBuilder.api(GeneratedApi).pipe(\n      Layer.provide(handlersLayer),\n    );\n\n    const web = HttpApiBuilder.toWebHandler(\n      Layer.mergeAll(apiLayer, NodeHttpServer.layerContext),\n    );\n\n    const handler: EffectServerHandler[\"handler\"] = (nodeRequest, nodeResponse) => {\n      void (async () => {\n        const host = nodeRequest.headers.host ?? \"127.0.0.1\";\n        const url = `http://${host}${nodeRequest.url ?? \"/\"}`;\n\n        const headers = new Headers();\n        for (const [key, value] of Object.entries(nodeRequest.headers)) {\n          if (value === undefined) {\n            continue;\n          }\n\n          if (Array.isArray(value)) {\n            for (const item of value) {\n              headers.append(key, item);\n            }\n          } else {\n            headers.set(key, value);\n          }\n        }\n\n        const method = nodeRequest.method ?? \"GET\";\n        const hasBody = method !== \"GET\" && method !== \"HEAD\";\n        const requestInit: RequestInit & { duplex?: \"half\" } = {\n          method,\n          headers,\n        };\n\n        if (hasBody) {\n          (requestInit as { body?: unknown }).body = nodeRequest;\n          requestInit.duplex = \"half\";\n        }\n\n        const webRequest = new Request(url, requestInit);\n\n        const webResponse = await web.handler(webRequest);\n\n        nodeResponse.statusCode = webResponse.status;\n        webResponse.headers.forEach((value, key) => {\n          nodeResponse.setHeader(key, value);\n        });\n\n        if (!webResponse.body) {\n          nodeResponse.end();\n          return;\n        }\n\n        const reader = webResponse.body.getReader();\n        while (true) {\n          const { done, value } = await reader.read();\n          if (done) {\n            break;\n          }\n\n          nodeResponse.write(Buffer.from(value));\n        }\n\n        nodeResponse.end();\n      })().catch((error: unknown) => {\n        nodeResponse.statusCode = 500;\n        nodeResponse.end(\n          JSON.stringify({\n            error: error instanceof Error ? error.message : String(error),\n          }),\n        );\n      });\n    };\n\n    return {\n      handler,\n      dispose: web.dispose,\n    };\n  });\n\nconst makeTestServer = Effect.acquireRelease(\n  Effect.promise<TestServer>(\n    () =>\n      new Promise<TestServer>((resolve, reject) => {\n        const requests: TestServer[\"requests\"] = [];\n\n        void Effect.runPromise(makeEffectServerHandler(requests))\n          .then(({ handler, dispose }) => {\n            const server = createServer(handler);\n\n            server.once(\"error\", reject);\n            server.listen(0, \"127.0.0.1\", () => {\n              const address = server.address();\n              if (!address || typeof address === \"string\") {\n                reject(new Error(\"failed to resolve test server address\"));\n                return;\n              }\n\n              resolve({\n                baseUrl: `http://127.0.0.1:${address.port}`,\n                requests,\n                close: async () => {\n                  await new Promise<void>((closeResolve, closeReject) => {\n                    server.close((error: Error | undefined) => {\n                      if (error) {\n                        closeReject(error);\n                        return;\n                      }\n                      closeResolve();\n                    });\n                  });\n                  await dispose();\n                },\n              });\n            });\n          })\n          .catch(reject);\n      }),\n  ),\n  (server: TestServer) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n  );\n\nconst makeBinaryTestServer = Effect.acquireRelease(\n  Effect.promise<BinaryTestServer>(\n    () =>\n      new Promise<BinaryTestServer>((resolve, reject) => {\n        const responseBytes = Uint8Array.from([0x00, 0x7f, 0x80, 0xff]);\n        const server = createServer((_, response) => {\n          response.statusCode = 200;\n          response.setHeader(\"content-type\", \"application/octet-stream\");\n          response.end(Buffer.from(responseBytes));\n        });\n\n        server.once(\"error\", reject);\n        server.listen(0, \"127.0.0.1\", () => {\n          const address = server.address();\n          if (!address || typeof address === \"string\") {\n            reject(new Error(\"Failed to bind binary OpenAPI test server\"));\n            return;\n          }\n\n          resolve({\n            baseUrl: `http://127.0.0.1:${address.port}`,\n            close: () =>\n              new Promise<void>((closeResolve, closeReject) => {\n                server.close((error) => {\n                  if (error) {\n                    closeReject(error);\n                    return;\n                  }\n                  closeResolve();\n                });\n              }),\n          });\n        });\n      }),\n  ),\n  (server: BinaryTestServer) =>\n    Effect.tryPromise({\n      try: () => server.close(),\n      catch: (error: unknown) =>\n        error instanceof Error ? error : new Error(String(error)),\n    }).pipe(Effect.orDie),\n);\n\nconst ownerParam = HttpApiSchema.param(\"owner\", Schema.String);\nconst repoParam = HttpApiSchema.param(\"repo\", Schema.String);\n\nconst requestHeadersFromNode = (\n  request: IncomingMessage,\n): Record<string, string> =>\n  Object.fromEntries(\n    Object.entries(request.headers).flatMap(([key, value]) =>\n      value === undefined\n        ? []\n        : [[key, Array.isArray(value) ? value.join(\",\") : value]]),\n  );\n\nclass GeneratedReposApi extends HttpApiGroup.make(\"repos\")\n  .add(\n    HttpApiEndpoint.get(\"getRepo\")`/repos/${ownerParam}/${repoParam}`\n      .setUrlParams(\n        Schema.Struct({\n          include: Schema.optional(Schema.String),\n        }),\n      )\n      .addSuccess(Schema.Unknown),\n  )\n  .add(\n    HttpApiEndpoint.post(\"createIssue\")`/repos/${ownerParam}/${repoParam}/issues`\n      .setPayload(\n        Schema.Struct({\n          title: Schema.String,\n        }),\n      )\n      .addSuccess(Schema.Unknown, { status: 201 }),\n  ) {}\n\nclass GeneratedApi extends HttpApi.make(\"generated\").add(GeneratedReposApi) {}\n\nconst generatedOpenApiSpec = OpenApi.fromApi(GeneratedApi);\n\nconst binaryReportIdParam = HttpApiSchema.param(\"reportId\", Schema.String);\n\nclass GeneratedBinaryReportsApi extends HttpApiGroup.make(\"reports\")\n  .add(\n    HttpApiEndpoint.get(\"getContent\")`/reports/${binaryReportIdParam}/content`\n      .addSuccess(HttpApiSchema.Uint8Array()),\n  ) {}\n\nclass GeneratedBinaryApi extends HttpApi.make(\"generatedBinary\")\n  .add(GeneratedBinaryReportsApi) {}\n\nconst generatedBinaryOpenApiSpec = OpenApi.fromApi(GeneratedBinaryApi);\n\nconst resolveToolDefinition = (value: ToolInput): ToolDefinition =>\n  typeof value === \"object\" && value !== null && \"tool\" in value\n    ? value\n    : { tool: value };\n\nconst resolveToolExecutor = (\n  tools: ToolMap,\n  path: string,\n): ((args: unknown) => Promise<unknown>) => {\n  const candidate = tools[path];\n  if (!candidate) {\n    throw new Error(`Missing tool: ${path}`);\n  }\n\n  const resolved = resolveToolDefinition(candidate);\n  if (!resolved.tool.execute) {\n    throw new Error(`Tool has no execute function: ${path}`);\n  }\n\n  return (args: unknown) => Promise.resolve(resolved.tool.execute?.(args));\n};\n\ndescribe(\"openapi-tools\", () => {\n  it.effect(\"extracts manifest and derives codemode tool paths\", () =>\n    Effect.gen(function* () {\n      const manifest = yield* extractOpenApiManifest(\"demo\", generatedOpenApiSpec);\n\n      const tools = createOpenApiToolsFromManifest({\n        manifest,\n        baseUrl: \"https://example.com\",\n        namespace: \"source.demo\",\n        sourceKey: \"api.demo\",\n      });\n\n      expect(Object.keys(tools).sort()).toEqual([\n        \"source.demo.repos.createIssue\",\n        \"source.demo.repos.getRepo\",\n      ]);\n\n      const resolvedGet = resolveToolDefinition(tools[\"source.demo.repos.getRepo\"]!);\n      expect(resolvedGet.metadata?.sourceKey).toBe(\"api.demo\");\n      expect(resolvedGet.metadata?.providerKind).toBe(\"openapi\");\n      expect(resolvedGet.metadata?.providerData).toMatchObject({ group: \"repos\" });\n      expect(resolvedGet.metadata?.contract?.inputSchema).toBeDefined();\n    }),\n  );\n\n  it.effect(\"enriches extracted manifests with OpenAPI auth and response variants\", () =>\n    Effect.gen(function* () {\n      const manifest = yield* extractOpenApiManifest(\"secure-demo\", {\n        openapi: \"3.1.0\",\n        info: {\n          title: \"Secure Demo\",\n          version: \"1.0.0\",\n        },\n        security: [{\n          bearerToken: [],\n        }],\n        paths: {\n          \"/projects/{id}\": {\n            get: {\n              operationId: \"projects.getProject\",\n              security: [],\n              parameters: [{\n                name: \"id\",\n                in: \"path\",\n                required: true,\n                schema: {\n                  type: \"string\",\n                },\n              }],\n              responses: {\n                \"200\": {\n                  description: \"Project\",\n                  content: {\n                    \"application/json\": {\n                      schema: {\n                        $ref: \"#/$defs/Project\",\n                      },\n                    },\n                  },\n                },\n                \"404\": {\n                  description: \"Missing\",\n                  content: {\n                    \"application/json\": {\n                      schema: {\n                        $ref: \"#/$defs/Missing\",\n                      },\n                    },\n                  },\n                },\n                default: {\n                  description: \"Unexpected\",\n                  content: {\n                    \"application/json\": {\n                      schema: {\n                        type: \"object\",\n                        properties: {\n                          error: {\n                            type: \"string\",\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n              },\n            },\n          },\n          \"/teams\": {\n            get: {\n              operationId: \"teams.listTeams\",\n              security: [\n                { bearerToken: [] },\n                { apiKeyHeader: [] },\n              ],\n              responses: {\n                \"200\": {\n                  description: \"Teams\",\n                  content: {\n                    \"application/json\": {\n                      schema: {\n                        type: \"object\",\n                        properties: {\n                          teams: {\n                            type: \"array\",\n                            items: {\n                              type: \"string\",\n                            },\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n        components: {\n          securitySchemes: {\n            bearerToken: {\n              type: \"http\",\n              scheme: \"bearer\",\n              bearerFormat: \"JWT\",\n              description: \"Bearer access token.\",\n            },\n            apiKeyHeader: {\n              type: \"apiKey\",\n              in: \"header\",\n              name: \"x-api-key\",\n            },\n          },\n        },\n        $defs: {\n          Project: {\n            type: \"object\",\n            properties: {\n              id: {\n                type: \"string\",\n              },\n            },\n            required: [\"id\"],\n          },\n          Missing: {\n            type: \"object\",\n            properties: {\n              code: {\n                type: \"string\",\n              },\n            },\n            required: [\"code\"],\n          },\n        },\n      });\n\n      const projectTool = manifest.tools.find((tool) => tool.toolId === \"projects.getProject\");\n      const teamsTool = manifest.tools.find((tool) => tool.toolId === \"teams.listTeams\");\n\n      expect(projectTool?.authRequirement).toEqual({\n        kind: \"none\",\n      });\n      expect(projectTool?.responses?.map((response) => response.statusCode)).toEqual([\n        \"200\",\n        \"default\",\n        \"404\",\n      ]);\n      expect(projectTool?.responses?.find((response) => response.statusCode === \"404\")?.schema).toMatchObject({\n        $ref: \"#/$defs/Missing\",\n      });\n      expect(teamsTool?.authRequirement).toMatchObject({\n        kind: \"anyOf\",\n      });\n      expect(teamsTool?.securitySchemes).toMatchObject([\n        {\n          schemeName: \"apiKeyHeader\",\n          schemeType: \"apiKey\",\n          placementIn: \"header\",\n          placementName: \"x-api-key\",\n        },\n        {\n          schemeName: \"bearerToken\",\n          schemeType: \"http\",\n          scheme: \"bearer\",\n          bearerFormat: \"JWT\",\n        },\n      ]);\n      expect(Object.keys(manifest.refHintTable ?? {})).toEqual(\n        expect.arrayContaining([\n          \"#/$defs/Project\",\n          \"#/$defs/Missing\",\n        ]),\n      );\n    }),\n  );\n\n  it.effect(\"preserves OpenAPI servers, parameter serialization, and response headers\", () =>\n    Effect.gen(function* () {\n      const manifest = yield* extractOpenApiManifest(\"serialized-demo\", {\n        openapi: \"3.1.0\",\n        info: {\n          title: \"Serialized Demo\",\n          version: \"1.0.0\",\n        },\n        servers: [{\n          url: \"https://api.example.test/{version}\",\n          variables: {\n            version: {\n              default: \"v1\",\n            },\n          },\n        }],\n        paths: {\n          \"/items/{itemId}\": {\n            servers: [{\n              url: \"https://regional.example.test/base\",\n            }],\n            get: {\n              operationId: \"items.getItem\",\n              parameters: [\n                {\n                  name: \"itemId\",\n                  in: \"path\",\n                  required: true,\n                  style: \"label\",\n                  explode: true,\n                  schema: {\n                    type: \"array\",\n                    items: {\n                      type: \"string\",\n                    },\n                  },\n                },\n                {\n                  name: \"filter\",\n                  in: \"query\",\n                  style: \"deepObject\",\n                  explode: true,\n                  schema: {\n                    type: \"object\",\n                    additionalProperties: {\n                      type: \"string\",\n                    },\n                  },\n                },\n                {\n                  name: \"search\",\n                  in: \"query\",\n                  allowReserved: true,\n                  schema: {\n                    type: \"string\",\n                  },\n                },\n              ],\n              responses: {\n                \"200\": {\n                  description: \"Item\",\n                  headers: {\n                    \"x-next-cursor\": {\n                      description: \"Continuation cursor.\",\n                      schema: {\n                        type: \"string\",\n                      },\n                    },\n                  },\n                  content: {\n                    \"application/json\": {\n                      schema: {\n                        type: \"object\",\n                        properties: {\n                          id: {\n                            type: \"string\",\n                          },\n                        },\n                        required: [\"id\"],\n                      },\n                    },\n                    \"text/plain\": {\n                      schema: {\n                        type: \"string\",\n                      },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n      });\n\n      const tool = manifest.tools.find((candidate) => candidate.toolId === \"items.getItem\");\n\n      expect(tool?.documentServers).toMatchObject([\n        {\n          url: \"https://api.example.test/{version}\",\n          variables: {\n            version: \"v1\",\n          },\n        },\n      ]);\n      expect(tool?.servers).toMatchObject([\n        {\n          url: \"https://regional.example.test/base\",\n        },\n      ]);\n      expect(tool?.invocation.parameters).toMatchObject([\n        {\n          name: \"itemId\",\n          style: \"label\",\n          explode: true,\n        },\n        {\n          name: \"filter\",\n          style: \"deepObject\",\n          explode: true,\n        },\n        {\n          name: \"search\",\n          allowReserved: true,\n        },\n      ]);\n      expect(tool?.responses?.[0]).toMatchObject({\n        statusCode: \"200\",\n        contentTypes: [\"application/json\", \"text/plain\"],\n        headers: [\n          {\n            name: \"x-next-cursor\",\n            description: \"Continuation cursor.\",\n          },\n        ],\n      });\n      expect(tool?.responses?.[0]?.contents).toHaveLength(2);\n    }),\n  );\n\n  it.scoped(\"accepts OpenApi.fromApi generated specs\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeTestServer;\n\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"generated\",\n        openApiSpec: generatedOpenApiSpec,\n        baseUrl: server.baseUrl,\n        namespace: \"source.generated\",\n      });\n\n      expect(Object.keys(extracted.tools).sort()).toEqual([\n        \"source.generated.repos.createIssue\",\n        \"source.generated.repos.getRepo\",\n      ]);\n\n      const getRepo = resolveToolExecutor(extracted.tools, \"source.generated.repos.getRepo\");\n      const result = yield* Effect.promise(() =>\n        getRepo({ owner: \"octocat\", repo: \"hello-world\" }),\n      );\n\n      expect(result).toEqual({\n        full_name: \"octocat/hello-world\",\n        include: null,\n      });\n      expect(server.requests).toHaveLength(1);\n      expect(server.requests[0]?.path).toBe(\"/repos/octocat/hello-world\");\n    }),\n  );\n\n  it.scoped(\"decodes binary HTTP responses from generated OpenAPI specs as bytes\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeBinaryTestServer;\n\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"generated-binary\",\n        openApiSpec: generatedBinaryOpenApiSpec,\n        baseUrl: server.baseUrl,\n        namespace: \"source.generatedBinary\",\n      });\n\n      const getContent = resolveToolExecutor(\n        extracted.tools,\n        \"source.generatedBinary.reports.getContent\",\n      );\n      const result = yield* Effect.promise(() =>\n        getContent({ reportId: \"report-123\" }),\n      );\n\n      expect(result).toBeInstanceOf(Uint8Array);\n      expect(Array.from(result as Uint8Array)).toEqual([0x00, 0x7f, 0x80, 0xff]);\n    }),\n  );\n\n  it.scoped(\"executes extracted tools against HTTP endpoint\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeTestServer;\n\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"demo\",\n        openApiSpec: generatedOpenApiSpec,\n        baseUrl: server.baseUrl,\n        namespace: \"source.demo\",\n      });\n\n      const getRepo = resolveToolExecutor(extracted.tools, \"source.demo.repos.getRepo\");\n      const createIssue = resolveToolExecutor(extracted.tools, \"source.demo.repos.createIssue\");\n\n      const getResult = yield* Effect.promise(() =>\n        getRepo({\n          path: { owner: \"octocat\", repo: \"hello-world\" },\n          query: { include: \"all\" },\n        }),\n      );\n\n      expect(getResult).toEqual({\n        full_name: \"octocat/hello-world\",\n        include: \"all\",\n      });\n\n      const postResult = yield* Effect.promise(() =>\n        createIssue({\n          owner: \"octocat\",\n          repo: \"hello-world\",\n          body: { title: \"Bug report\" },\n        }),\n      );\n\n      expect(postResult).toEqual({\n        created: true,\n        owner: \"octocat\",\n        repo: \"hello-world\",\n        body: { title: \"Bug report\" },\n      });\n\n      const missingBody = yield* Effect.either(\n        Effect.tryPromise({\n          try: () =>\n            createIssue({\n              owner: \"octocat\",\n              repo: \"hello-world\",\n            }),\n          catch: (error: unknown) =>\n            error instanceof Error ? error : new Error(String(error)),\n        }),\n      );\n\n      assertTrue(Either.isLeft(missingBody));\n      if (Either.isLeft(missingBody) && missingBody.left instanceof Error) {\n        assertInclude(missingBody.left.message, \"Missing required request body\");\n      }\n\n      expect(\n        server.requests.map(\n          (request: TestServer[\"requests\"][number]) => request.path,\n        ),\n      ).toEqual([\n        \"/repos/octocat/hello-world\",\n        \"/repos/octocat/hello-world/issues\",\n      ]);\n      expect(server.requests[0]?.query).toContain(\"include=all\");\n    }),\n  );\n\n  it.scoped(\"serializes OpenAPI styles, allowReserved, and form bodies when invoking tools\", () =>\n    Effect.gen(function* () {\n      const requests: TestServer[\"requests\"] = [];\n      const server = yield* Effect.acquireRelease(\n        Effect.promise<TestServer>(\n          () =>\n            new Promise<TestServer>((resolve, reject) => {\n              const httpServer = createServer((request, response) => {\n                const url = new URL(\n                  request.url ?? \"/\",\n                  `http://${request.headers.host ?? \"127.0.0.1\"}`,\n                );\n                let body = \"\";\n\n                request.setEncoding(\"utf8\");\n                request.on(\"data\", (chunk) => {\n                  body += chunk;\n                });\n                request.on(\"end\", () => {\n                  requests.push({\n                    method: request.method ?? \"GET\",\n                    path: url.pathname,\n                    query: url.search,\n                    body,\n                    headers: requestHeadersFromNode(request),\n                  });\n                  response.statusCode = 200;\n                  response.setHeader(\"content-type\", \"application/json\");\n                  response.end(JSON.stringify({ ok: true }));\n                });\n              });\n\n              httpServer.once(\"error\", reject);\n              httpServer.listen(0, \"127.0.0.1\", () => {\n                const address = httpServer.address();\n                if (!address || typeof address === \"string\") {\n                  reject(new Error(\"failed to resolve serialization test server address\"));\n                  return;\n                }\n\n                resolve({\n                  baseUrl: `http://127.0.0.1:${address.port}`,\n                  requests,\n                  close: async () => {\n                    await new Promise<void>((closeResolve, closeReject) => {\n                      httpServer.close((error: Error | undefined) => {\n                        if (error) {\n                          closeReject(error);\n                          return;\n                        }\n                        closeResolve();\n                      });\n                    });\n                  },\n                });\n              });\n            }),\n        ),\n        (resource) =>\n          Effect.tryPromise({\n            try: () => resource.close(),\n            catch: (error: unknown) =>\n              error instanceof Error ? error : new Error(String(error)),\n          }).pipe(Effect.orDie),\n      );\n\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"serialized-demo\",\n        openApiSpec: {\n          openapi: \"3.1.0\",\n          info: {\n            title: \"Serialized Demo\",\n            version: \"1.0.0\",\n          },\n          paths: {\n            \"/items/{itemId}\": {\n              get: {\n                operationId: \"items.getItem\",\n                parameters: [\n                  {\n                    name: \"itemId\",\n                    in: \"path\",\n                    required: true,\n                    style: \"label\",\n                    explode: true,\n                    schema: {\n                      type: \"array\",\n                      items: {\n                        type: \"string\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"filter\",\n                    in: \"query\",\n                    style: \"deepObject\",\n                    explode: true,\n                    schema: {\n                      type: \"object\",\n                      additionalProperties: {\n                        type: \"string\",\n                      },\n                    },\n                  },\n                  {\n                    name: \"search\",\n                    in: \"query\",\n                    allowReserved: true,\n                    schema: {\n                      type: \"string\",\n                    },\n                  },\n                  {\n                    name: \"X-Trace\",\n                    in: \"header\",\n                    style: \"simple\",\n                    explode: false,\n                    schema: {\n                      type: \"array\",\n                      items: {\n                        type: \"string\",\n                      },\n                    },\n                  },\n                ],\n                responses: {\n                  \"200\": {\n                    description: \"ok\",\n                    content: {\n                      \"application/json\": {\n                        schema: {\n                          type: \"object\",\n                          properties: {\n                            ok: {\n                              type: \"boolean\",\n                            },\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n              },\n            },\n            \"/forms\": {\n              post: {\n                operationId: \"forms.submit\",\n                requestBody: {\n                  required: true,\n                  content: {\n                    \"application/x-www-form-urlencoded\": {\n                      schema: {\n                        type: \"object\",\n                        properties: {\n                          title: {\n                            type: \"string\",\n                          },\n                          state: {\n                            type: \"string\",\n                          },\n                        },\n                        required: [\"title\"],\n                      },\n                    },\n                  },\n                },\n                responses: {\n                  \"200\": {\n                    description: \"ok\",\n                    content: {\n                      \"application/json\": {\n                        schema: {\n                          type: \"object\",\n                          properties: {\n                            ok: {\n                              type: \"boolean\",\n                            },\n                          },\n                        },\n                      },\n                    },\n                  },\n                },\n              },\n            },\n          },\n        },\n        baseUrl: server.baseUrl,\n        namespace: \"source.serialized\",\n      });\n\n      const getItem = resolveToolExecutor(extracted.tools, \"source.serialized.items.getItem\");\n      const submitForm = resolveToolExecutor(extracted.tools, \"source.serialized.forms.submit\");\n\n      yield* Effect.promise(() =>\n        getItem({\n          itemId: [\"alpha\", \"beta\"],\n          filter: {\n            status: \"open\",\n          },\n          search: \"refs/heads/main?draft=true\",\n          \"X-Trace\": [\"a\", \"b\"],\n        }),\n      );\n      yield* Effect.promise(() =>\n        submitForm({\n          body: {\n            title: \"Bug report\",\n            state: \"open\",\n          },\n        }),\n      );\n\n      expect(requests[0]?.path).toBe(\"/items/.alpha.beta\");\n      expect(requests[0]?.query).toContain(\"filter%5Bstatus%5D=open\");\n      expect(requests[0]?.query).toContain(\"search=refs/heads/main?draft=true\");\n      expect(requests[0]?.headers[\"x-trace\"]).toBe(\"a,b\");\n      expect(requests[1]?.headers[\"content-type\"]).toContain(\"application/x-www-form-urlencoded\");\n      expect(requests[1]?.body).toContain(\"title=Bug+report\");\n      expect(requests[1]?.body).toContain(\"state=open\");\n    }),\n  );\n\n  it.effect(\"throws on non-2xx OpenAPI responses\", () =>\n    Effect.gen(function* () {\n      const manifest = yield* extractOpenApiManifest(\"generated\", generatedOpenApiSpec);\n      const httpClientLayer = Layer.succeed(\n        HttpClient.HttpClient,\n        HttpClient.make((request) =>\n          Effect.sync(() =>\n            HttpClientResponse.fromWeb(\n              request,\n              new Response(\n                JSON.stringify({ error: \"missing\" }),\n                {\n                  status: 404,\n                  headers: {\n                    \"content-type\": \"application/json\",\n                  },\n                },\n              ),\n            ),\n          ),\n        ),\n      );\n      const tools = createOpenApiToolsFromManifest({\n        manifest,\n        baseUrl: \"https://example.com\",\n        namespace: \"source.generated\",\n        httpClientLayer,\n      });\n      const getRepo = resolveToolExecutor(tools, \"source.generated.repos.getRepo\");\n      const failure = yield* Effect.either(\n        Effect.tryPromise({\n          try: () => getRepo({ owner: \"octocat\", repo: \"hello-world\" }),\n          catch: (error: unknown) =>\n            error instanceof Error ? error : new Error(String(error)),\n        }),\n      );\n\n      assertTrue(Either.isLeft(failure));\n      if (Either.isLeft(failure) && failure.left instanceof Error) {\n        assertInclude(failure.left.message, \"HTTP 404\");\n      }\n    }),\n  );\n\n  it.effect(\"preserves base-path URLs when invoking tools\", () =>\n    Effect.gen(function* () {\n      const manifest = yield* extractOpenApiManifest(\"generated\", generatedOpenApiSpec);\n      let capturedUrl: string | null = null;\n      const httpClientLayer = Layer.succeed(\n        HttpClient.HttpClient,\n        HttpClient.make((request, url) =>\n          Effect.sync(() => {\n            capturedUrl = url.toString();\n\n            return HttpClientResponse.fromWeb(\n              request,\n              new Response(\n                JSON.stringify({\n                  full_name: \"octocat/hello-world\",\n                  include: null,\n                }),\n                {\n                  status: 200,\n                  headers: {\n                    \"content-type\": \"application/json\",\n                  },\n                },\n              ),\n            );\n          })\n        ),\n      );\n      const tools = createOpenApiToolsFromManifest({\n        manifest,\n        baseUrl: \"https://example.com/api/v3\",\n        namespace: \"source.generated\",\n        httpClientLayer,\n      });\n      const getRepo = resolveToolExecutor(tools, \"source.generated.repos.getRepo\");\n      const result = yield* Effect.promise(() =>\n        getRepo({ owner: \"octocat\", repo: \"hello-world\" }),\n      );\n\n      expect(result).toEqual({\n        full_name: \"octocat/hello-world\",\n        include: null,\n      });\n\n      expect(capturedUrl).toBe(\"https://example.com/api/v3/repos/octocat/hello-world\");\n    }),\n  );\n\n  it.scoped(\"applies credential placements for query params, cookies, and body values\", () =>\n    Effect.gen(function* () {\n      const requests: TestServer[\"requests\"] = [];\n      const server = yield* Effect.acquireRelease(\n        Effect.promise<TestServer>(\n          () =>\n            new Promise<TestServer>((resolve, reject) => {\n              const httpServer = createServer((request, response) => {\n                const url = new URL(\n                  request.url ?? \"/\",\n                  `http://${request.headers.host ?? \"127.0.0.1\"}`,\n                );\n                let body = \"\";\n\n                request.setEncoding(\"utf8\");\n                request.on(\"data\", (chunk) => {\n                  body += chunk;\n                });\n                request.on(\"end\", () => {\n                  requests.push({\n                    method: request.method ?? \"GET\",\n                    path: url.pathname,\n                    query: url.search,\n                    body,\n                    headers: requestHeadersFromNode(request),\n                  });\n                  response.statusCode = 200;\n                  response.setHeader(\"content-type\", \"application/json\");\n                  response.end(JSON.stringify({ ok: true }));\n                });\n              });\n\n              httpServer.once(\"error\", reject);\n              httpServer.listen(0, \"127.0.0.1\", () => {\n                const address = httpServer.address();\n                if (!address || typeof address === \"string\") {\n                  reject(new Error(\"failed to resolve test server address\"));\n                  return;\n                }\n\n                resolve({\n                  baseUrl: `http://127.0.0.1:${address.port}`,\n                  requests,\n                  close: async () => {\n                    await new Promise<void>((closeResolve, closeReject) => {\n                      httpServer.close((error: Error | undefined) => {\n                        if (error) {\n                          closeReject(error);\n                          return;\n                        }\n                        closeResolve();\n                      });\n                    });\n                  },\n                });\n              });\n            }),\n        ),\n        (resource) =>\n          Effect.tryPromise({\n            try: () => resource.close(),\n            catch: (error: unknown) =>\n              error instanceof Error ? error : new Error(String(error)),\n          }).pipe(Effect.orDie),\n      );\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"demo\",\n        openApiSpec: generatedOpenApiSpec,\n        baseUrl: server.baseUrl,\n        namespace: \"source.demo\",\n        credentialPlacements: {\n          headers: {\n            authorization: \"Bearer top-secret\",\n          },\n          queryParams: {\n            api_key: \"secret-key\",\n          },\n          cookies: {\n            session: \"abc123\",\n          },\n          bodyValues: {\n            \"auth.token\": \"body-secret\",\n          },\n        },\n      });\n\n      const getRepo = resolveToolExecutor(extracted.tools, \"source.demo.repos.getRepo\");\n      const createIssue = resolveToolExecutor(extracted.tools, \"source.demo.repos.createIssue\");\n\n      yield* Effect.promise(() => getRepo({ owner: \"octocat\", repo: \"hello-world\" }));\n      yield* Effect.promise(() =>\n        createIssue({\n          owner: \"octocat\",\n          repo: \"hello-world\",\n          body: { title: \"Bug report\" },\n        }),\n      );\n\n      expect(server.requests).toHaveLength(2);\n      expect(server.requests[0]?.query).toContain(\"api_key=secret-key\");\n      expect(server.requests[0]?.headers.authorization).toBe(\"Bearer top-secret\");\n      expect(server.requests[0]?.headers.cookie).toContain(\"session=abc123\");\n      expect(JSON.parse(server.requests[1]?.body ?? \"{}\")).toEqual({\n        title: \"Bug report\",\n        auth: {\n          token: \"body-secret\",\n        },\n      });\n    }),\n  );\n\n  it.scoped(\"falls back to path-template args when extracted path parameters are missing\", () =>\n    Effect.gen(function* () {\n      const server = yield* makeTestServer;\n\n      const extracted = yield* createOpenApiToolsFromSpec({\n        sourceName: \"generated\",\n        openApiSpec: generatedOpenApiSpec,\n        baseUrl: server.baseUrl,\n        namespace: \"source.generated\",\n      });\n\n      const manifestWithoutPathParameters = {\n        ...extracted.manifest,\n        tools: extracted.manifest.tools.map((tool) =>\n          tool.toolId === \"repos/getRepo\"\n            ? {\n                ...tool,\n                invocation: {\n                  ...tool.invocation,\n                  parameters: [],\n                },\n              }\n            : tool),\n      };\n\n      const tools = createOpenApiToolsFromManifest({\n        manifest: manifestWithoutPathParameters,\n        baseUrl: server.baseUrl,\n        namespace: \"source.generated\",\n      });\n\n      const getRepo = resolveToolExecutor(tools, \"source.generated.repos.getRepo\");\n      const result = yield* Effect.promise(() =>\n        getRepo({ owner: \"octocat\", repo: \"hello-world\" }),\n      );\n\n      expect(result).toEqual({\n        full_name: \"octocat/hello-world\",\n        include: null,\n      });\n      expect(server.requests).toHaveLength(1);\n      expect(server.requests[0]?.path).toBe(\"/repos/octocat/hello-world\");\n    }),\n  );\n\n  it.effect(\"normalizes slash-based operationIds into grouped dotted tool paths\", () =>\n    Effect.gen(function* () {\n      const tools = createOpenApiToolsFromManifest({\n        manifest: {\n          version: 2,\n          sourceHash: \"fixture\",\n          tools: [\n            {\n              toolId: \"actions/create-workflow-dispatch\",\n              operationId: \"actions/create-workflow-dispatch\",\n              tags: [\"actions\"],\n              name: \"Create workflow dispatch\",\n              description: null,\n              method: \"post\",\n              path: \"/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\",\n              invocation: {\n                method: \"post\",\n                pathTemplate: \"/repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches\",\n                parameters: [],\n                requestBody: null,\n              },\n              operationHash: \"hash_actions_create_workflow_dispatch\",\n            },\n            {\n              toolId: \"users/get-authenticated\",\n              operationId: \"users/get-authenticated\",\n              tags: [\"users\"],\n              name: \"Get authenticated user\",\n              description: null,\n              method: \"get\",\n              path: \"/user\",\n              invocation: {\n                method: \"get\",\n                pathTemplate: \"/user\",\n                parameters: [],\n                requestBody: null,\n              },\n              operationHash: \"hash_users_get_authenticated\",\n            },\n          ],\n        },\n        baseUrl: \"https://api.github.com\",\n        namespace: \"source.github\",\n      });\n\n      expect(Object.keys(tools).sort()).toEqual([\n        \"source.github.actions.createWorkflowDispatch\",\n        \"source.github.users.getAuthenticated\",\n      ]);\n    }),\n  );\n});\n"
  },
  {
    "path": "packages/sources/openapi/src/tools.ts",
    "content": "import {\n  FetchHttpClient,\n  HttpClient,\n  HttpClientRequest,\n} from \"@effect/platform\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\n\nimport {\n  applyCookiePlacementsToHeaders,\n  applyHttpQueryPlacementsToUrl,\n  applyJsonBodyPlacements,\n  standardSchemaFromJsonSchema,\n  toTool,\n  type HttpRequestPlacements,\n  type ToolMap,\n  unknownInputSchema,\n} from \"@executor/codemode-core\";\n\nimport {\n  compileOpenApiToolDefinitions,\n  type OpenApiToolDefinition,\n} from \"./definitions\";\nimport {\n  httpBodyModeFromContentType,\n  serializeOpenApiParameterValue,\n  serializeOpenApiRequestBody,\n  withSerializedQueryEntries,\n  type SerializedOpenApiQueryEntry,\n} from \"./http-serialization\";\nimport { buildOpenApiToolPresentation } from \"./tool-presentation\";\nimport { resolveSchemaWithRefHints } from \"./schema-refs\";\nimport {\n  extractOpenApiManifest,\n  type OpenApiExtractionError,\n} from \"./extraction\";\nimport {\n  type OpenApiRefHintTable,\n  type OpenApiInvocationPayload,\n  type OpenApiSpecInput,\n  type OpenApiToolManifest,\n} from \"./types\";\n\ntype OpenApiToolArgs = Record<string, unknown>;\ntype OpenApiToolParameter = OpenApiInvocationPayload[\"parameters\"][number];\n\nexport class OpenApiToolInvocationError extends Data.TaggedError(\n  \"OpenApiToolInvocationError\",\n)<{\n  operation: string;\n  message: string;\n  details: string | null;\n}> {}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n  typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst asToolArgs = (value: unknown): OpenApiToolArgs => {\n  if (!isRecord(value)) {\n    return {};\n  }\n\n  return value;\n};\n\nconst parameterContainerKeys: Record<\n  OpenApiToolParameter[\"location\"],\n  Array<string>\n> = {\n  path: [\"path\", \"pathParams\", \"params\"],\n  query: [\"query\", \"queryParams\", \"params\"],\n  header: [\"headers\", \"header\"],\n  cookie: [\"cookies\", \"cookie\"],\n};\n\nconst readParameterValue = (\n  args: OpenApiToolArgs,\n  parameter: OpenApiToolParameter,\n): unknown => {\n  const directValue = args[parameter.name];\n  if (directValue !== undefined) {\n    return directValue;\n  }\n\n  for (const key of parameterContainerKeys[parameter.location]) {\n    const container = args[key];\n    if (!isRecord(container)) {\n      continue;\n    }\n\n    const nestedValue = container[parameter.name];\n    if (nestedValue !== undefined) {\n      return nestedValue;\n    }\n  }\n\n  return undefined;\n};\n\nconst hasRequestBody = (\n  args: OpenApiToolArgs,\n): args is OpenApiToolArgs & { body: unknown } =>\n  Object.prototype.hasOwnProperty.call(args, \"body\") && args.body !== undefined;\n\nconst replacePathTemplate = (\n  pathTemplate: string,\n  args: OpenApiToolArgs,\n  payload: OpenApiInvocationPayload,\n): string => {\n  let resolvedPath = pathTemplate;\n\n  for (const parameter of payload.parameters) {\n    if (parameter.location !== \"path\") {\n      continue;\n    }\n\n    const parameterValue = readParameterValue(args, parameter);\n    if (parameterValue === undefined || parameterValue === null) {\n      if (parameter.required) {\n        throw new OpenApiToolInvocationError({\n          operation: \"resolve_path\",\n          message: `Missing required path parameter: ${parameter.name}`,\n          details: pathTemplate,\n        });\n      }\n      continue;\n    }\n\n    const serialized = serializeOpenApiParameterValue(parameter, parameterValue);\n    resolvedPath = resolvedPath.replaceAll(\n      `{${parameter.name}}`,\n      serialized.kind === \"path\"\n        ? serialized.value\n        : encodeURIComponent(String(parameterValue)),\n    );\n  }\n\n  const unresolvedPathParameters = [...resolvedPath.matchAll(/\\{([^{}]+)\\}/g)]\n    .map((match) => match[1])\n    .filter((value): value is string => typeof value === \"string\" && value.length > 0);\n\n  for (const parameterName of unresolvedPathParameters) {\n    const parameterValue = args[parameterName]\n      ?? (isRecord(args.path) ? args.path[parameterName] : undefined)\n      ?? (isRecord(args.pathParams) ? args.pathParams[parameterName] : undefined)\n      ?? (isRecord(args.params) ? args.params[parameterName] : undefined);\n\n    if (parameterValue === undefined || parameterValue === null) {\n      continue;\n    }\n\n    resolvedPath = resolvedPath.replaceAll(\n      `{${parameterName}}`,\n      encodeURIComponent(String(parameterValue)),\n    );\n  }\n\n  const stillUnresolvedPathParameters = [...resolvedPath.matchAll(/\\{([^{}]+)\\}/g)]\n    .map((match) => match[1])\n    .filter((value): value is string => typeof value === \"string\" && value.length > 0);\n\n  if (stillUnresolvedPathParameters.length > 0) {\n    const names = [...new Set(stillUnresolvedPathParameters)].sort().join(\", \");\n    throw new OpenApiToolInvocationError({\n      operation: \"resolve_path\",\n      message: `Unresolved path parameters after substitution: ${names}`,\n      details: resolvedPath,\n    });\n  }\n\n  return resolvedPath;\n};\n\nconst normalizeHttpUrl = (value: string): string => {\n  const trimmed = value.trim();\n  if (trimmed.length === 0) {\n    throw new OpenApiToolInvocationError({\n      operation: \"validate_base_url\",\n      message: \"OpenAPI baseUrl is empty\",\n      details: null,\n    });\n  }\n\n  try {\n    const parsed = new URL(trimmed);\n    if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n      throw new OpenApiToolInvocationError({\n        operation: \"validate_base_url\",\n        message: \"OpenAPI baseUrl must be http or https\",\n        details: parsed.toString(),\n      });\n    }\n\n    return parsed.toString();\n  } catch (cause) {\n    if (cause instanceof OpenApiToolInvocationError) {\n      throw cause;\n    }\n\n    throw new OpenApiToolInvocationError({\n      operation: \"validate_base_url\",\n      message: \"OpenAPI baseUrl is invalid\",\n      details: cause instanceof Error ? cause.message : String(cause),\n    });\n  }\n};\n\n\n\nconst decodeHttpClientResponseBody = (\n  response: Awaited<ReturnType<HttpClient.HttpClient[\"execute\"]>> extends Effect.Effect<\n    infer Value,\n    infer _Error,\n    infer _Requirements\n  >\n    ? Value\n    : never,\n): Effect.Effect<unknown, Error, never> => {\n  if (response.status === 204) {\n    return Effect.succeed(null);\n  }\n\n  const bodyMode = httpBodyModeFromContentType(response.headers[\"content-type\"]);\n  if (bodyMode === \"json\") {\n    return response.json.pipe(\n      Effect.mapError((cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n      ),\n    );\n  }\n\n  if (bodyMode === \"bytes\") {\n    return response.arrayBuffer.pipe(\n      Effect.map((buffer) => new Uint8Array(buffer)),\n      Effect.mapError((cause) =>\n        cause instanceof Error ? cause : new Error(String(cause)),\n      ),\n    );\n  }\n\n  return response.text.pipe(\n    Effect.mapError((cause) =>\n      cause instanceof Error ? cause : new Error(String(cause)),\n    ),\n  );\n};\n\nconst summarizeHttpResponseBody = (body: unknown): string | null => {\n  if (body === null || body === undefined) {\n    return null;\n  }\n\n  if (typeof body === \"string\") {\n    const trimmed = body.trim();\n    if (trimmed.length === 0) {\n      return null;\n    }\n\n    return trimmed.length > 500 ? `${trimmed.slice(0, 500)}...` : trimmed;\n  }\n\n  try {\n    const serialized = JSON.stringify(body);\n    return serialized.length > 500 ? `${serialized.slice(0, 500)}...` : serialized;\n  } catch {\n    return String(body);\n  }\n};\n\nconst inputSchemaFromTyping = (input: {\n  inputSchema: unknown;\n  refHintTable?: Readonly<OpenApiRefHintTable>;\n}) => {\n  const resolvedSchema = resolveSchemaWithRefHints(\n    input.inputSchema,\n    input.refHintTable,\n  ) ?? input.inputSchema;\n\n  if (resolvedSchema === undefined || resolvedSchema === null) {\n    return unknownInputSchema;\n  }\n\n  try {\n    return standardSchemaFromJsonSchema(resolvedSchema, {\n      vendor: \"openapi\",\n      fallback: unknownInputSchema,\n    });\n  } catch {\n    return unknownInputSchema;\n  }\n};\n\nexport type CreateOpenApiToolsFromManifestInput = {\n  manifest: OpenApiToolManifest;\n  baseUrl: string;\n  namespace?: string;\n  sourceKey?: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  httpClientLayer?: Layer.Layer<HttpClient.HttpClient, never, never>;\n};\n\nconst resolveRequestUrl = (baseUrl: string, resolvedPath: string): URL => {\n  try {\n    return new URL(resolvedPath);\n  } catch {\n    const base = new URL(baseUrl);\n    const basePath =\n      base.pathname === \"/\"\n        ? \"\"\n        : base.pathname.endsWith(\"/\")\n          ? base.pathname.slice(0, -1)\n          : base.pathname;\n    const pathPart = resolvedPath.startsWith(\"/\") ? resolvedPath : `/${resolvedPath}`;\n\n    base.pathname = `${basePath}${pathPart}`.replace(/\\/{2,}/g, \"/\");\n    base.search = \"\";\n    base.hash = \"\";\n\n    return base;\n  }\n};\n\nconst buildFetchRequest = (input: {\n  payload: OpenApiInvocationPayload;\n  args: OpenApiToolArgs;\n  baseUrl: string;\n  defaultHeaders: Readonly<Record<string, string>>;\n  credentialPlacements: HttpRequestPlacements;\n}): {\n  url: string;\n  method: string;\n  headers: Record<string, string>;\n  body?: string | Uint8Array;\n} => {\n  const resolvedPath = replacePathTemplate(\n    input.payload.pathTemplate,\n    input.args,\n    input.payload,\n  );\n  const url = resolveRequestUrl(input.baseUrl, resolvedPath);\n\n  const headers: Record<string, string> = {\n    ...input.defaultHeaders,\n  };\n  const cookieParts: Array<string> = [];\n  const queryEntries: SerializedOpenApiQueryEntry[] = [];\n\n  for (const parameter of input.payload.parameters) {\n    if (parameter.location === \"path\") {\n      continue;\n    }\n\n    const parameterValue = readParameterValue(input.args, parameter);\n    if (parameterValue === undefined || parameterValue === null) {\n      if (parameter.required) {\n        throw new OpenApiToolInvocationError({\n          operation: \"validate_args\",\n          message: `Missing required ${parameter.location} parameter: ${parameter.name}`,\n          details: input.payload.pathTemplate,\n        });\n      }\n      continue;\n    }\n\n    const serialized = serializeOpenApiParameterValue(parameter, parameterValue);\n\n    if (serialized.kind === \"query\") {\n      queryEntries.push(...serialized.entries);\n    } else if (serialized.kind === \"header\") {\n      headers[parameter.name] = serialized.value;\n    } else if (serialized.kind === \"cookie\") {\n      cookieParts.push(\n        ...serialized.pairs.map((pair) =>\n          `${pair.name}=${encodeURIComponent(pair.value)}`\n        ),\n      );\n    }\n  }\n\n  if (cookieParts.length > 0) {\n    headers.cookie = cookieParts.join(\"; \");\n  }\n\n  let body: string | Uint8Array | undefined;\n  const bodyValues = input.credentialPlacements.bodyValues ?? {};\n  const hasCredentialBodyValues = Object.keys(bodyValues).length > 0;\n\n  if (input.payload.requestBody !== null) {\n    if (!hasRequestBody(input.args) && !hasCredentialBodyValues) {\n      if (input.payload.requestBody.required) {\n        throw new OpenApiToolInvocationError({\n          operation: \"validate_args\",\n          message: \"Missing required request body at args.body\",\n          details: input.payload.pathTemplate,\n        });\n      }\n    } else {\n      const serializedBody = serializeOpenApiRequestBody({\n        requestBody: input.payload.requestBody,\n        body: applyJsonBodyPlacements({\n          body: hasRequestBody(input.args) ? input.args.body : {},\n          bodyValues,\n          label: `${input.payload.method.toUpperCase()} ${input.payload.pathTemplate}`,\n        }),\n      });\n\n      body = serializedBody.body;\n      headers[\"content-type\"] = serializedBody.contentType;\n    }\n  }\n\n  const urlWithAuth = applyHttpQueryPlacementsToUrl({\n    url,\n    queryParams: input.credentialPlacements.queryParams,\n  });\n  const urlWithQueryParams = withSerializedQueryEntries(urlWithAuth, queryEntries);\n  const headersWithAuthCookies = applyCookiePlacementsToHeaders({\n    headers,\n    cookies: input.credentialPlacements.cookies,\n  });\n\n  for (const [key, value] of Object.entries(input.credentialPlacements.headers ?? {})) {\n    headersWithAuthCookies[key] = value;\n  }\n\n  return {\n    url: urlWithQueryParams,\n    method: input.payload.method.toUpperCase(),\n    headers: headersWithAuthCookies,\n    body,\n  };\n};\n\nconst createToolPath = (namespace: string | undefined, definition: OpenApiToolDefinition): string =>\n  namespace ? `${namespace}.${definition.toolId}` : definition.toolId;\n\nexport type CreateOpenApiToolFromDefinitionInput = {\n  definition: OpenApiToolDefinition;\n  path: string;\n  sourceKey: string;\n  baseUrl: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  refHintTable?: Readonly<OpenApiRefHintTable>;\n  httpClientLayer?: Layer.Layer<HttpClient.HttpClient, never, never>;\n};\n\nconst normalizeCredentialPlacements = (input: {\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n}): HttpRequestPlacements => ({\n  headers: {\n    ...input.credentialHeaders,\n    ...input.credentialPlacements?.headers,\n  },\n  queryParams: input.credentialPlacements?.queryParams,\n  cookies: input.credentialPlacements?.cookies,\n  bodyValues: input.credentialPlacements?.bodyValues,\n});\n\nexport const createOpenApiToolFromDefinition = (\n  input: CreateOpenApiToolFromDefinitionInput,\n) => {\n  const defaultHeaders = input.defaultHeaders ?? {};\n  const credentialPlacements = normalizeCredentialPlacements({\n    credentialHeaders: input.credentialHeaders,\n    credentialPlacements: input.credentialPlacements,\n  });\n  const httpClientLayer = input.httpClientLayer ?? FetchHttpClient.layer;\n  const presentation = buildOpenApiToolPresentation({\n    definition: input.definition,\n    refHintTable: input.refHintTable,\n  });\n\n  return toTool({\n    tool: {\n      description: input.definition.description,\n      inputSchema: inputSchemaFromTyping({\n        inputSchema: presentation.inputSchema ?? input.definition.typing?.inputSchema,\n        refHintTable: input.refHintTable,\n      }),\n      execute: async (args: unknown) => {\n        const decodedArgs = asToolArgs(args);\n        const request = buildFetchRequest({\n          payload: input.definition.invocation,\n          args: decodedArgs,\n          baseUrl: input.baseUrl,\n          defaultHeaders,\n          credentialPlacements,\n        });\n\n        return Effect.runPromise(\n          Effect.gen(function* () {\n            const client = yield* HttpClient.HttpClient;\n            let clientRequest = HttpClientRequest.make(\n              request.method as Parameters<typeof HttpClientRequest.make>[0],\n            )(request.url, {\n              headers: request.headers,\n            });\n\n            if (request.body !== undefined) {\n              clientRequest =\n                request.body instanceof Uint8Array\n                  ? HttpClientRequest.bodyUint8Array(\n                      clientRequest,\n                      request.body,\n                      request.headers[\"content-type\"],\n                    )\n                  : HttpClientRequest.bodyText(\n                      clientRequest,\n                      request.body,\n                      request.headers[\"content-type\"],\n                    );\n            }\n\n            const response = yield* client.execute(clientRequest).pipe(\n              Effect.mapError((cause) =>\n                cause instanceof Error ? cause : new Error(String(cause)),\n              ),\n            );\n            const body = yield* decodeHttpClientResponseBody(response);\n\n            if (response.status < 200 || response.status >= 300) {\n              throw new OpenApiToolInvocationError({\n                operation: \"http_response\",\n                message: `OpenAPI request failed with HTTP ${response.status}`,\n                details: summarizeHttpResponseBody(body),\n              });\n            }\n\n            return body;\n          }).pipe(\n            Effect.provide(httpClientLayer),\n          ),\n        );\n      },\n    },\n    metadata: {\n      sourceKey: input.sourceKey,\n      contract: {\n        inputTypePreview: presentation.inputTypePreview,\n        outputTypePreview: presentation.outputTypePreview,\n        ...((presentation.inputSchema ?? input.definition.typing?.inputSchema) !== undefined\n          ? { inputSchema: presentation.inputSchema ?? input.definition.typing?.inputSchema }\n          : {}),\n        ...((presentation.outputSchema ?? input.definition.typing?.outputSchema) !== undefined\n          ? { outputSchema: presentation.outputSchema ?? input.definition.typing?.outputSchema }\n          : {}),\n        ...(presentation.exampleInput !== undefined\n          ? { exampleInput: presentation.exampleInput }\n          : {}),\n        ...(presentation.exampleOutput !== undefined\n          ? { exampleOutput: presentation.exampleOutput }\n          : {}),\n      },\n      providerKind: \"openapi\",\n      providerData: presentation.providerData,\n    },\n  });\n};\n\nexport const createOpenApiToolsFromManifest = (\n  input: CreateOpenApiToolsFromManifestInput,\n): ToolMap => {\n  const baseUrl = normalizeHttpUrl(input.baseUrl);\n  const sourceKey = input.sourceKey ?? \"openapi.generated\";\n  const defaultHeaders = input.defaultHeaders ?? {};\n  const httpClientLayer = input.httpClientLayer ?? FetchHttpClient.layer;\n\n  const definitions = compileOpenApiToolDefinitions(input.manifest);\n  const result: ToolMap = {};\n\n  for (const definition of definitions) {\n    const toolPath = createToolPath(input.namespace, definition);\n    result[toolPath] = createOpenApiToolFromDefinition({\n      definition,\n      path: toolPath,\n      sourceKey,\n      baseUrl,\n      defaultHeaders,\n      credentialHeaders: input.credentialHeaders,\n      credentialPlacements: input.credentialPlacements,\n      refHintTable: input.manifest.refHintTable,\n      httpClientLayer,\n    });\n  }\n\n  return result;\n};\n\nexport const createOpenApiToolsFromSpec = (input: {\n  sourceName: string;\n  openApiSpec: OpenApiSpecInput;\n  baseUrl: string;\n  namespace?: string;\n  sourceKey?: string;\n  defaultHeaders?: Readonly<Record<string, string>>;\n  credentialHeaders?: Readonly<Record<string, string>>;\n  credentialPlacements?: HttpRequestPlacements;\n  httpClientLayer?: Layer.Layer<HttpClient.HttpClient, never, never>;\n}): Effect.Effect<\n  { manifest: OpenApiToolManifest; definitions: Array<OpenApiToolDefinition>; tools: ToolMap },\n  OpenApiExtractionError\n> =>\n  Effect.map(\n    extractOpenApiManifest(input.sourceName, input.openApiSpec),\n    (manifest: OpenApiToolManifest) => ({\n      manifest,\n      definitions: compileOpenApiToolDefinitions(manifest),\n      tools: createOpenApiToolsFromManifest({\n        manifest,\n        baseUrl: input.baseUrl,\n        namespace: input.namespace,\n        sourceKey: input.sourceKey,\n        defaultHeaders: input.defaultHeaders,\n        credentialHeaders: input.credentialHeaders,\n        credentialPlacements: input.credentialPlacements,\n        httpClientLayer: input.httpClientLayer,\n      }),\n    }),\n  );\n"
  },
  {
    "path": "packages/sources/openapi/src/types.ts",
    "content": "import type { OpenAPISpec } from \"@effect/platform/OpenApi\";\n\nimport { Schema } from \"effect\";\n\nexport type OpenApiJsonPrimitive = string | number | boolean | null;\n\nexport type OpenApiJsonValue =\n  | OpenApiJsonPrimitive\n  | OpenApiJsonObject\n  | Array<OpenApiJsonValue>;\n\nexport type OpenApiJsonObject = {\n  [key: string]: OpenApiJsonValue;\n};\n\nexport type OpenApiSpecInput = string | OpenAPISpec | OpenApiJsonObject;\n\nexport const OPEN_API_HTTP_METHODS = [\n  \"get\",\n  \"put\",\n  \"post\",\n  \"delete\",\n  \"patch\",\n  \"head\",\n  \"options\",\n  \"trace\",\n] as const;\n\nexport const OPEN_API_PARAMETER_LOCATIONS = [\n  \"path\",\n  \"query\",\n  \"header\",\n  \"cookie\",\n] as const;\n\nexport const OpenApiHttpMethodSchema = Schema.Literal(...OPEN_API_HTTP_METHODS);\n\nexport const OpenApiParameterLocationSchema = Schema.Literal(\n  ...OPEN_API_PARAMETER_LOCATIONS,\n);\n\nexport const OpenApiToolParameterSchema = Schema.Struct({\n  name: Schema.String,\n  location: OpenApiParameterLocationSchema,\n  required: Schema.Boolean,\n  style: Schema.optional(Schema.String),\n  explode: Schema.optional(Schema.Boolean),\n  allowReserved: Schema.optional(Schema.Boolean),\n  content: Schema.optional(Schema.Array(Schema.suspend(() => OpenApiMediaContentSchema))),\n});\n\nexport const OpenApiMediaContentSchema = Schema.Struct({\n  mediaType: Schema.String,\n  schema: Schema.optional(Schema.Unknown),\n  examples: Schema.optional(Schema.Array(Schema.suspend(() => OpenApiExampleSchema))),\n});\n\nexport const OpenApiHeaderSchema = Schema.Struct({\n  name: Schema.String,\n  description: Schema.optional(Schema.String),\n  required: Schema.optional(Schema.Boolean),\n  deprecated: Schema.optional(Schema.Boolean),\n  schema: Schema.optional(Schema.Unknown),\n  content: Schema.optional(Schema.Array(OpenApiMediaContentSchema)),\n  style: Schema.optional(Schema.String),\n  explode: Schema.optional(Schema.Boolean),\n  examples: Schema.optional(Schema.Array(Schema.suspend(() => OpenApiExampleSchema))),\n});\n\nexport const OpenApiToolRequestBodySchema = Schema.Struct({\n  required: Schema.Boolean,\n  contentTypes: Schema.Array(Schema.String),\n  contents: Schema.optional(Schema.Array(OpenApiMediaContentSchema)),\n});\n\nexport const OpenApiServerSchema = Schema.Struct({\n  url: Schema.String,\n  description: Schema.optional(Schema.String),\n  variables: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nexport const OpenApiInvocationPayloadSchema = Schema.Struct({\n  method: OpenApiHttpMethodSchema,\n  pathTemplate: Schema.String,\n  parameters: Schema.Array(OpenApiToolParameterSchema),\n  requestBody: Schema.NullOr(OpenApiToolRequestBodySchema),\n});\n\nexport const DiscoveryTypingPayloadSchema = Schema.Struct({\n  inputSchema: Schema.optional(Schema.Unknown),\n  outputSchema: Schema.optional(Schema.Unknown),\n  refHintKeys: Schema.optional(Schema.Array(Schema.String)),\n});\n\nexport const OpenApiRefHintValueSchema = Schema.Union(\n  Schema.String,\n  Schema.Record({\n    key: Schema.String,\n    value: Schema.Unknown,\n  }),\n);\n\nexport const OpenApiRefHintTableSchema = Schema.Record({\n  key: Schema.String,\n  value: OpenApiRefHintValueSchema,\n});\n\nexport const OpenApiExampleSchema = Schema.Struct({\n  valueJson: Schema.String,\n  mediaType: Schema.optional(Schema.String),\n  label: Schema.optional(Schema.String),\n});\n\nexport const OpenApiParameterDocumentationSchema = Schema.Struct({\n  name: Schema.String,\n  location: OpenApiParameterLocationSchema,\n  required: Schema.Boolean,\n  description: Schema.optional(Schema.String),\n  examples: Schema.optional(Schema.Array(OpenApiExampleSchema)),\n});\n\nexport const OpenApiRequestBodyDocumentationSchema = Schema.Struct({\n  description: Schema.optional(Schema.String),\n  examples: Schema.optional(Schema.Array(OpenApiExampleSchema)),\n});\n\nexport const OpenApiResponseDocumentationSchema = Schema.Struct({\n  statusCode: Schema.String,\n  description: Schema.optional(Schema.String),\n  contentTypes: Schema.Array(Schema.String),\n  examples: Schema.optional(Schema.Array(OpenApiExampleSchema)),\n});\n\nexport const OpenApiResponseVariantSchema = Schema.Struct({\n  statusCode: Schema.String,\n  description: Schema.optional(Schema.String),\n  contentTypes: Schema.Array(Schema.String),\n  schema: Schema.optional(Schema.Unknown),\n  examples: Schema.optional(Schema.Array(OpenApiExampleSchema)),\n  contents: Schema.optional(Schema.Array(OpenApiMediaContentSchema)),\n  headers: Schema.optional(Schema.Array(OpenApiHeaderSchema)),\n});\n\nexport const OpenApiToolDocumentationSchema = Schema.Struct({\n  summary: Schema.optional(Schema.String),\n  deprecated: Schema.optional(Schema.Boolean),\n  parameters: Schema.Array(OpenApiParameterDocumentationSchema),\n  requestBody: Schema.optional(OpenApiRequestBodyDocumentationSchema),\n  response: Schema.optional(OpenApiResponseDocumentationSchema),\n});\n\nexport type OpenApiSecurityRequirement =\n  | {\n      readonly kind: \"none\";\n    }\n  | {\n      readonly kind: \"scheme\";\n      readonly schemeName: string;\n      readonly scopes?: readonly string[];\n    }\n  | {\n      readonly kind: \"allOf\";\n      readonly items: readonly OpenApiSecurityRequirement[];\n    }\n  | {\n      readonly kind: \"anyOf\";\n      readonly items: readonly OpenApiSecurityRequirement[];\n    };\n\nexport const OpenApiSecurityRequirementSchema = Schema.suspend(() =>\n  Schema.Union(\n    Schema.Struct({\n      kind: Schema.Literal(\"none\"),\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"scheme\"),\n      schemeName: Schema.String,\n      scopes: Schema.optional(Schema.Array(Schema.String)),\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"allOf\"),\n      items: Schema.Array(OpenApiSecurityRequirementSchema),\n    }),\n    Schema.Struct({\n      kind: Schema.Literal(\"anyOf\"),\n      items: Schema.Array(OpenApiSecurityRequirementSchema),\n    }),\n  )\n) as Schema.Schema<OpenApiSecurityRequirement, OpenApiSecurityRequirement, never>;\n\nexport const OpenApiSecuritySchemeTypeSchema = Schema.Literal(\n  \"apiKey\",\n  \"http\",\n  \"oauth2\",\n  \"openIdConnect\",\n);\n\nexport const OpenApiOAuthFlowSchema = Schema.Struct({\n  authorizationUrl: Schema.optional(Schema.String),\n  tokenUrl: Schema.optional(Schema.String),\n  refreshUrl: Schema.optional(Schema.String),\n  scopes: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nexport const OpenApiSecuritySchemeSchema = Schema.Struct({\n  schemeName: Schema.String,\n  schemeType: OpenApiSecuritySchemeTypeSchema,\n  description: Schema.optional(Schema.String),\n  placementIn: Schema.optional(Schema.Literal(\"header\", \"query\", \"cookie\")),\n  placementName: Schema.optional(Schema.String),\n  scheme: Schema.optional(Schema.String),\n  bearerFormat: Schema.optional(Schema.String),\n  openIdConnectUrl: Schema.optional(Schema.String),\n  flows: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: OpenApiOAuthFlowSchema,\n    }),\n  ),\n});\n\nexport const OpenApiToolProviderDataSchema = Schema.Struct({\n  kind: Schema.Literal(\"openapi\"),\n  toolId: Schema.String,\n  rawToolId: Schema.String,\n  operationId: Schema.optional(Schema.String),\n  group: Schema.String,\n  leaf: Schema.String,\n  tags: Schema.Array(Schema.String),\n  versionSegment: Schema.optional(Schema.String),\n  method: OpenApiHttpMethodSchema,\n  path: Schema.String,\n  operationHash: Schema.String,\n  invocation: OpenApiInvocationPayloadSchema,\n  documentation: Schema.optional(OpenApiToolDocumentationSchema),\n  responses: Schema.optional(Schema.Array(OpenApiResponseVariantSchema)),\n  authRequirement: Schema.optional(OpenApiSecurityRequirementSchema),\n  securitySchemes: Schema.optional(Schema.Array(OpenApiSecuritySchemeSchema)),\n  documentServers: Schema.optional(Schema.Array(OpenApiServerSchema)),\n  servers: Schema.optional(Schema.Array(OpenApiServerSchema)),\n});\n\nexport const OpenApiExtractedToolSchema = Schema.Struct({\n  toolId: Schema.String,\n  operationId: Schema.optional(Schema.String),\n  tags: Schema.Array(Schema.String),\n  name: Schema.String,\n  description: Schema.NullOr(Schema.String),\n  method: OpenApiHttpMethodSchema,\n  path: Schema.String,\n  invocation: OpenApiInvocationPayloadSchema,\n  operationHash: Schema.String,\n  typing: Schema.optional(DiscoveryTypingPayloadSchema),\n  documentation: Schema.optional(OpenApiToolDocumentationSchema),\n  responses: Schema.optional(Schema.Array(OpenApiResponseVariantSchema)),\n  authRequirement: Schema.optional(OpenApiSecurityRequirementSchema),\n  securitySchemes: Schema.optional(Schema.Array(OpenApiSecuritySchemeSchema)),\n  documentServers: Schema.optional(Schema.Array(OpenApiServerSchema)),\n  servers: Schema.optional(Schema.Array(OpenApiServerSchema)),\n});\n\nexport const OpenApiToolManifestSchema = Schema.Struct({\n  version: Schema.Literal(2),\n  sourceHash: Schema.String,\n  tools: Schema.Array(OpenApiExtractedToolSchema),\n  refHintTable: Schema.optional(\n    Schema.Record({\n      key: Schema.String,\n      value: Schema.String,\n    }),\n  ),\n});\n\nexport type OpenApiHttpMethod = typeof OpenApiHttpMethodSchema.Type;\nexport type OpenApiParameterLocation = typeof OpenApiParameterLocationSchema.Type;\nexport type OpenApiToolParameter = typeof OpenApiToolParameterSchema.Type;\nexport type OpenApiMediaContent = typeof OpenApiMediaContentSchema.Type;\nexport type OpenApiHeader = typeof OpenApiHeaderSchema.Type;\nexport type OpenApiToolRequestBody = typeof OpenApiToolRequestBodySchema.Type;\nexport type OpenApiServer = typeof OpenApiServerSchema.Type;\nexport type OpenApiInvocationPayload = typeof OpenApiInvocationPayloadSchema.Type;\nexport type DiscoveryTypingPayload = typeof DiscoveryTypingPayloadSchema.Type;\nexport type OpenApiRefHintValue = typeof OpenApiRefHintValueSchema.Type;\nexport type OpenApiRefHintTable = typeof OpenApiRefHintTableSchema.Type;\nexport type OpenApiExample = typeof OpenApiExampleSchema.Type;\nexport type OpenApiParameterDocumentation = typeof OpenApiParameterDocumentationSchema.Type;\nexport type OpenApiRequestBodyDocumentation = typeof OpenApiRequestBodyDocumentationSchema.Type;\nexport type OpenApiResponseDocumentation = typeof OpenApiResponseDocumentationSchema.Type;\nexport type OpenApiResponseVariant = typeof OpenApiResponseVariantSchema.Type;\nexport type OpenApiToolDocumentation = typeof OpenApiToolDocumentationSchema.Type;\nexport type OpenApiOAuthFlow = typeof OpenApiOAuthFlowSchema.Type;\nexport type OpenApiSecuritySchemeType = typeof OpenApiSecuritySchemeTypeSchema.Type;\nexport type OpenApiSecurityScheme = typeof OpenApiSecuritySchemeSchema.Type;\nexport type OpenApiToolProviderData = typeof OpenApiToolProviderDataSchema.Type;\nexport type OpenApiExtractedTool = typeof OpenApiExtractedToolSchema.Type;\nexport type OpenApiToolManifest = typeof OpenApiToolManifestSchema.Type;\n"
  },
  {
    "path": "packages/sources/openapi/tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"ES2022\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"Bundler\",\n    \"strict\": true,\n    \"skipLibCheck\": true,\n    \"noEmit\": true,\n    \"lib\": [\"ES2022\"],\n    \"types\": [\"bun-types\", \"node\"]\n  },\n  \"include\": [\n    \"src/**/*.ts\"\n  ]\n}\n"
  },
  {
    "path": "packages/sources/openapi/vitest.config.ts",
    "content": "import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n  test: {\n    include: [\"src/**/*.test.ts\"],\n  },\n});\n"
  },
  {
    "path": "skills-lock.json",
    "content": "{\n  \"version\": 1,\n  \"skills\": {\n    \"mintlify\": {\n      \"source\": \"mintlify.com\",\n      \"sourceType\": \"well-known\",\n      \"computedHash\": \"fc61ab6703f692dc2c215e74327a8998d02987ca9571084440be20e7ecad6b46\"\n    }\n  }\n}\n"
  },
  {
    "path": "tools/oxlint/README.md",
    "content": "# Oxlint Custom Rules\n\nThis directory contains repo-local Oxlint JS plugin rules for the workspace.\n\nWhy it lives here:\n\n- The root `.oxlintrc.jsonc` runs Oxlint once across the whole monorepo.\n- Custom rules here apply to every workspace under `apps/*` and `packages/*/*`.\n- The setup uses JSONC config on purpose so it works consistently in this Bun repo without relying on Oxlint's experimental TypeScript config loader.\n\nCurrent rules:\n\n- `executor-monorepo/no-async-effect-vitest-tests`\n- `executor-monorepo/no-cross-workspace-relative-imports`\n- `executor-monorepo/no-direct-effect-tag-read`\n- `executor-monorepo/no-effect-run-in-effect-vitest-tests`\n- `executor-monorepo/no-node-fs-with-effect-imports`\n- `executor-monorepo/no-raw-effect-fail-errors`\n- `executor-monorepo/no-yield-effect-fail`\n- `executor-monorepo/no-workspace-src-imports`\n\nTo add another rule:\n\n1. Create `tools/oxlint/rules/<rule-name>.mjs`.\n2. Export it from `tools/oxlint/plugin.mjs`.\n3. Enable it in `.oxlintrc.jsonc`.\n"
  },
  {
    "path": "tools/oxlint/plugin.mjs",
    "content": "import { definePlugin } from \"@oxlint/plugins\";\n\nimport noCrossWorkspaceRelativeImports from \"./rules/no-cross-workspace-relative-imports.mjs\";\nimport noAsyncEffectVitestTests from \"./rules/no-async-effect-vitest-tests.mjs\";\nimport noDirectEffectTagRead from \"./rules/no-direct-effect-tag-read.mjs\";\nimport noEffectRunInEffectVitestTests from \"./rules/no-effect-run-in-effect-vitest-tests.mjs\";\nimport noNodeFsWithEffectImports from \"./rules/no-node-fs-with-effect-imports.mjs\";\nimport noRawEffectFailErrors from \"./rules/no-raw-effect-fail-errors.mjs\";\nimport noYieldEffectFail from \"./rules/no-yield-effect-fail.mjs\";\nimport noWorkspaceSrcImports from \"./rules/no-workspace-src-imports.mjs\";\n\nexport default definePlugin({\n  meta: {\n    name: \"oxlint-plugin-executor-monorepo\",\n  },\n  rules: {\n    \"no-async-effect-vitest-tests\": noAsyncEffectVitestTests,\n    \"no-cross-workspace-relative-imports\": noCrossWorkspaceRelativeImports,\n    \"no-direct-effect-tag-read\": noDirectEffectTagRead,\n    \"no-effect-run-in-effect-vitest-tests\": noEffectRunInEffectVitestTests,\n    \"no-node-fs-with-effect-imports\": noNodeFsWithEffectImports,\n    \"no-raw-effect-fail-errors\": noRawEffectFailErrors,\n    \"no-yield-effect-fail\": noYieldEffectFail,\n    \"no-workspace-src-imports\": noWorkspaceSrcImports,\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-async-effect-vitest-tests.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nimport {\n  createModuleSourceVisitor,\n  readStaticSpecifier,\n} from \"../workspace-utils.mjs\";\n\nconst isEffectVitestSource = (specifier) =>\n  specifier === \"@effect/vitest\" || specifier === \"@effect/vitest/utils\";\n\nconst isEffectSource = (specifier) =>\n  (specifier === \"effect\" ||\n    specifier.startsWith(\"effect/\") ||\n    specifier.startsWith(\"@effect/\")) &&\n  !isEffectVitestSource(specifier);\n\nconst isIdentifierNamed = (node, name) =>\n  node?.type === \"Identifier\" && node.name === name;\n\nconst isTestCallee = (node) => {\n  if (isIdentifierNamed(node, \"it\") || isIdentifierNamed(node, \"test\")) {\n    return true;\n  }\n\n  return (\n    node?.type === \"MemberExpression\" &&\n    node.computed === false &&\n    (isIdentifierNamed(node.object, \"it\") ||\n      isIdentifierNamed(node.object, \"test\"))\n  );\n};\n\nconst isEffectVitestTestCallback = (node) =>\n  (node?.type === \"ArrowFunctionExpression\" ||\n    node?.type === \"FunctionExpression\") &&\n  node.parent?.type === \"CallExpression\" &&\n  node.parent.arguments.includes(node) &&\n  isTestCallee(node.parent.callee);\n\nexport default defineRule({\n  meta: {\n    type: \"problem\",\n    docs: {\n      description:\n        \"Disallow async test callbacks in Effect Vitest files that already use Effect.\",\n      recommended: true,\n    },\n    messages: {\n      noAsyncEffectVitestTests:\n        \"Do not use an `async` test callback in Effect Vitest files. Return an Effect with `it.effect(...)` or `it.scoped(...)` instead of driving the test with plain async/await.\",\n    },\n  },\n  create(context) {\n    let hasEffectImport = false;\n    let hasEffectVitestImport = false;\n\n    const visitSource = (sourceNode) => {\n      const specifier = readStaticSpecifier(sourceNode);\n      if (!specifier) {\n        return;\n      }\n\n      if (isEffectSource(specifier)) {\n        hasEffectImport = true;\n      }\n\n      if (isEffectVitestSource(specifier)) {\n        hasEffectVitestImport = true;\n      }\n    };\n\n    const checkFunction = (node) => {\n      if (\n        !hasEffectImport ||\n        !hasEffectVitestImport ||\n        !node.async ||\n        !isEffectVitestTestCallback(node)\n      ) {\n        return;\n      }\n\n      context.report({\n        node,\n        messageId: \"noAsyncEffectVitestTests\",\n      });\n    };\n\n    return {\n      ...createModuleSourceVisitor(visitSource),\n      ArrowFunctionExpression: checkFunction,\n      FunctionExpression: checkFunction,\n    };\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-cross-workspace-relative-imports.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nimport {\n  createModuleSourceVisitor,\n  getWorkspaceInfo,\n  getWorkspacePackageName,\n  isRelativeSpecifier,\n  readStaticSpecifier,\n  resolveRelativeSpecifier,\n} from \"../workspace-utils.mjs\";\n\nexport default defineRule({\n  meta: {\n    type: \"problem\",\n    docs: {\n      description:\n        \"Disallow relative imports that cross from one monorepo workspace into another.\",\n      recommended: true,\n    },\n    messages: {\n      noCrossWorkspaceRelativeImports:\n        \"Relative import '{{importPath}}' crosses a workspace boundary. Import the target workspace through its package entrypoint instead.{{suggestedPackageHint}}\",\n    },\n  },\n  create(context) {\n    const currentWorkspace = getWorkspaceInfo(context.cwd, context.filename);\n\n    if (!currentWorkspace) {\n      return {};\n    }\n\n    return createModuleSourceVisitor((sourceNode) => {\n      const specifier = readStaticSpecifier(sourceNode);\n\n      if (!specifier || !isRelativeSpecifier(specifier)) {\n        return;\n      }\n\n      const resolvedTarget = resolveRelativeSpecifier(context.filename, specifier);\n      const targetWorkspace = getWorkspaceInfo(context.cwd, resolvedTarget);\n\n      if (!targetWorkspace || targetWorkspace.root === currentWorkspace.root) {\n        return;\n      }\n\n      const targetPackageName = getWorkspacePackageName(targetWorkspace.root);\n\n      context.report({\n        node: sourceNode,\n        messageId: \"noCrossWorkspaceRelativeImports\",\n        data: {\n          importPath: specifier,\n          suggestedPackageHint: targetPackageName\n            ? ` Use ${targetPackageName}.`\n            : \"\",\n        },\n      });\n    });\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-direct-effect-tag-read.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nimport {\n  createModuleSourceVisitor,\n  readStaticSpecifier,\n} from \"../workspace-utils.mjs\";\n\nconst isEffectSource = (specifier) =>\n  specifier === \"effect\"\n  || specifier.startsWith(\"effect/\")\n  || specifier.startsWith(\"@effect/\");\n\nconst isDirectTagRead = (node) =>\n  node?.type === \"MemberExpression\"\n  && node.computed === false\n  && node.property?.type === \"Identifier\"\n  && node.property.name === \"_tag\";\n\nexport default defineRule({\n  meta: {\n    type: \"problem\",\n    docs: {\n      description:\n        \"Disallow reading Effect `_tag` fields directly.\",\n      recommended: true,\n    },\n    messages: {\n      noDirectEffectTagRead:\n        \"Do not read `._tag` directly in Effect code. `_tag` is an internal Effect representation detail. Use Effect's built-in match and predicate helpers instead, such as `Either.isLeft`, `Either.isRight`, `Option.isSome`, `Option.isNone`, `Exit.isSuccess`, or `Exit.isFailure`. If you need examples, see `.reference/effect` in this repo.\",\n    },\n  },\n  create(context) {\n    let hasEffectImport = false;\n\n    const visitSource = (sourceNode) => {\n      const specifier = readStaticSpecifier(sourceNode);\n      if (specifier && isEffectSource(specifier)) {\n        hasEffectImport = true;\n      }\n    };\n\n    return {\n      ...createModuleSourceVisitor(visitSource),\n      MemberExpression(node) {\n        if (!hasEffectImport || !isDirectTagRead(node)) {\n          return;\n        }\n\n        context.report({\n          node: node.property,\n          messageId: \"noDirectEffectTagRead\",\n        });\n      },\n    };\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-effect-run-in-effect-vitest-tests.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nimport {\n  createModuleSourceVisitor,\n  readStaticSpecifier,\n} from \"../workspace-utils.mjs\";\n\nconst isEffectVitestSource = (specifier) =>\n  specifier === \"@effect/vitest\" || specifier === \"@effect/vitest/utils\";\n\nconst isEffectSource = (specifier) =>\n  (specifier === \"effect\" ||\n    specifier.startsWith(\"effect/\") ||\n    specifier.startsWith(\"@effect/\")) &&\n  !isEffectVitestSource(specifier);\n\nconst isIdentifierNamed = (node, name) =>\n  node?.type === \"Identifier\" && node.name === name;\n\nconst isTestCallee = (node) => {\n  if (isIdentifierNamed(node, \"it\") || isIdentifierNamed(node, \"test\")) {\n    return true;\n  }\n\n  return (\n    node?.type === \"MemberExpression\" &&\n    node.computed === false &&\n    (isIdentifierNamed(node.object, \"it\") ||\n      isIdentifierNamed(node.object, \"test\"))\n  );\n};\n\nconst isEffectVitestTestCallback = (node) =>\n  (node?.type === \"ArrowFunctionExpression\" ||\n    node?.type === \"FunctionExpression\") &&\n  node.parent?.type === \"CallExpression\" &&\n  node.parent.arguments.includes(node) &&\n  isTestCallee(node.parent.callee);\n\nconst isEffectRunCall = (node) =>\n  node?.type === \"CallExpression\" &&\n  node.callee?.type === \"MemberExpression\" &&\n  node.callee.computed === false &&\n  isIdentifierNamed(node.callee.object, \"Effect\") &&\n  (isIdentifierNamed(node.callee.property, \"runPromise\") ||\n    isIdentifierNamed(node.callee.property, \"runSync\") ||\n    isIdentifierNamed(node.callee.property, \"runFork\"));\n\nconst getNearestFunctionAncestor = (node) => {\n  let current = node?.parent ?? null;\n\n  while (current) {\n    if (\n      current.type === \"ArrowFunctionExpression\" ||\n      current.type === \"FunctionExpression\" ||\n      current.type === \"FunctionDeclaration\"\n    ) {\n      return current;\n    }\n\n    current = current.parent ?? null;\n  }\n\n  return null;\n};\n\nexport default defineRule({\n  meta: {\n    type: \"problem\",\n    docs: {\n      description:\n        \"Disallow Effect runtime execution helpers inside Effect Vitest test callbacks.\",\n      recommended: true,\n    },\n    messages: {\n      noEffectRunInEffectVitestTests:\n        \"Do not call `Effect.runPromise`, `Effect.runSync`, or `Effect.runFork` directly inside an Effect Vitest test callback. Return the Effect with `it.effect(...)` or `it.scoped(...)` instead.\",\n    },\n  },\n  create(context) {\n    let hasEffectImport = false;\n    let hasEffectVitestImport = false;\n\n    const visitSource = (sourceNode) => {\n      const specifier = readStaticSpecifier(sourceNode);\n      if (!specifier) {\n        return;\n      }\n\n      if (isEffectSource(specifier)) {\n        hasEffectImport = true;\n      }\n\n      if (isEffectVitestSource(specifier)) {\n        hasEffectVitestImport = true;\n      }\n    };\n\n    return {\n      ...createModuleSourceVisitor(visitSource),\n      CallExpression(node) {\n        if (\n          !hasEffectImport ||\n          !hasEffectVitestImport ||\n          !isEffectRunCall(node)\n        ) {\n          return;\n        }\n\n        const nearestFunction = getNearestFunctionAncestor(node);\n        if (!isEffectVitestTestCallback(nearestFunction)) {\n          return;\n        }\n\n        context.report({\n          node: node.callee.property,\n          messageId: \"noEffectRunInEffectVitestTests\",\n        });\n      },\n    };\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-node-fs-with-effect-imports.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nimport {\n  createModuleSourceVisitor,\n  readStaticSpecifier,\n} from \"../workspace-utils.mjs\";\n\nconst isEffectSource = (specifier) =>\n  specifier === \"effect\"\n  || specifier.startsWith(\"effect/\")\n  || specifier.startsWith(\"@effect/\");\n\nconst isNodeFsSource = (specifier) =>\n  specifier === \"node:fs\" || specifier === \"node:fs/promises\";\n\nexport default defineRule({\n  meta: {\n    type: \"suggestion\",\n    docs: {\n      description:\n        \"Disallow node:fs imports in modules that already depend on Effect.\",\n      recommended: true,\n    },\n    messages: {\n      noNodeFsWithEffectImports:\n        \"This module already depends on Effect. Do not import {{moduleName}} here. Depend on `FileSystem.FileSystem` from `@effect/platform` instead, and provide `NodeFileSystem.layer` only at the Node boundary or in tests.\",\n    },\n  },\n  create(context) {\n    let hasEffectImport = false;\n    const nodeFsImports = [];\n\n    const visitSource = (sourceNode) => {\n      const specifier = readStaticSpecifier(sourceNode);\n      if (!specifier) {\n        return;\n      }\n\n      if (isEffectSource(specifier)) {\n        hasEffectImport = true;\n      }\n\n      if (isNodeFsSource(specifier)) {\n        nodeFsImports.push({\n          moduleName: specifier,\n          node: sourceNode,\n        });\n      }\n    };\n\n    return {\n      ...createModuleSourceVisitor(visitSource),\n      \"Program:exit\"() {\n        if (!hasEffectImport) {\n          return;\n        }\n\n        for (const entry of nodeFsImports) {\n          context.report({\n            node: entry.node,\n            messageId: \"noNodeFsWithEffectImports\",\n            data: {\n              moduleName: entry.moduleName,\n            },\n          });\n        }\n      },\n    };\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-raw-effect-fail-errors.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nconst BUILTIN_ERROR_NAMES = new Set([\n  \"AggregateError\",\n  \"Error\",\n  \"EvalError\",\n  \"RangeError\",\n  \"ReferenceError\",\n  \"SyntaxError\",\n  \"TypeError\",\n  \"URIError\",\n]);\n\nconst isIdentifierNamed = (node, name) =>\n  node?.type === \"Identifier\" && node.name === name;\n\nconst isEffectFailCall = (node) =>\n  node?.type === \"CallExpression\"\n  && node.callee?.type === \"MemberExpression\"\n  && node.callee.computed === false\n  && isIdentifierNamed(node.callee.object, \"Effect\")\n  && isIdentifierNamed(node.callee.property, \"fail\");\n\nconst readBuiltinErrorName = (node) => {\n  if (\n    node?.type === \"NewExpression\"\n    && node.callee?.type === \"Identifier\"\n    && BUILTIN_ERROR_NAMES.has(node.callee.name)\n  ) {\n    return node.callee.name;\n  }\n\n  if (\n    node?.type === \"CallExpression\"\n    && node.callee?.type === \"Identifier\"\n    && BUILTIN_ERROR_NAMES.has(node.callee.name)\n  ) {\n    return node.callee.name;\n  }\n\n  return null;\n};\n\nconst readBuiltinFailedErrorName = (node) => {\n  if (!isEffectFailCall(node) || node.arguments.length === 0) {\n    return null;\n  }\n\n  return readBuiltinErrorName(node.arguments[0]);\n};\n\nexport default defineRule({\n  meta: {\n    type: \"problem\",\n    docs: {\n      description:\n        \"Disallow failing Effects with builtin Error constructors instead of tagged Effect errors.\",\n      recommended: true,\n    },\n    messages: {\n      noRawEffectFailErrors:\n        \"Do not pass builtin {{errorName}} to Effect.fail. Use a Data.TaggedError or Schema.TaggedError instead. If no suitable tagged error exists, define one near this module with structured fields and fail with that tagged error rather than interpolating context into a message string.\",\n      noRawYieldedEffectFailErrors:\n        \"Do not `yield* Effect.fail` with builtin {{errorName}}. In Effect.gen, prefer yielding the tagged error directly, for example `yield* new MyTaggedError({ ... })`. If no suitable Data.TaggedError or Schema.TaggedError exists, define one near this module with structured fields instead of interpolating context into a message string.\",\n    },\n  },\n  create(context) {\n    return {\n      CallExpression(node) {\n        const errorName = readBuiltinFailedErrorName(node);\n\n        if (!errorName) {\n          return;\n        }\n\n        if (\n          node.parent?.type === \"YieldExpression\"\n          && node.parent.argument === node\n        ) {\n          return;\n        }\n\n        context.report({\n          node: node.arguments[0],\n          messageId: \"noRawEffectFailErrors\",\n          data: {\n            errorName,\n          },\n        });\n      },\n      YieldExpression(node) {\n        const failedCall = node.argument;\n        const errorName = readBuiltinFailedErrorName(failedCall);\n\n        if (!errorName) {\n          return;\n        }\n\n        context.report({\n          node: failedCall.arguments[0],\n          messageId: \"noRawYieldedEffectFailErrors\",\n          data: {\n            errorName,\n          },\n        });\n      },\n    };\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-workspace-src-imports.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nimport {\n  createModuleSourceVisitor,\n  getExecutorMonorepoSettings,\n  readStaticSpecifier,\n} from \"../workspace-utils.mjs\";\n\nconst reachesIntoWorkspaceSource = (specifier, packageScopes) =>\n  packageScopes.some(\n    (scope) =>\n      specifier.startsWith(scope) &&\n      (specifier.endsWith(\"/src\") || specifier.includes(\"/src/\")),\n  );\n\nexport default defineRule({\n  meta: {\n    type: \"problem\",\n    docs: {\n      description:\n        \"Disallow package imports that reach into another workspace's src tree.\",\n      recommended: true,\n    },\n    messages: {\n      noWorkspaceSrcImports:\n        \"Import '{{importPath}}' reaches into a workspace's src tree. Export a subpath from that package or import its public entrypoint instead.\",\n    },\n  },\n  create(context) {\n    const { packageScopes } = getExecutorMonorepoSettings(context.settings);\n\n    return createModuleSourceVisitor((sourceNode) => {\n      const specifier = readStaticSpecifier(sourceNode);\n\n      if (!specifier || !reachesIntoWorkspaceSource(specifier, packageScopes)) {\n        return;\n      }\n\n      context.report({\n        node: sourceNode,\n        messageId: \"noWorkspaceSrcImports\",\n        data: {\n          importPath: specifier,\n        },\n      });\n    });\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/rules/no-yield-effect-fail.mjs",
    "content": "import { defineRule } from \"@oxlint/plugins\";\n\nconst isIdentifierNamed = (node, name) =>\n  node?.type === \"Identifier\" && node.name === name;\n\nconst isEffectFailCall = (node) =>\n  node?.type === \"CallExpression\"\n  && node.callee?.type === \"MemberExpression\"\n  && node.callee.computed === false\n  && isIdentifierNamed(node.callee.object, \"Effect\")\n  && isIdentifierNamed(node.callee.property, \"fail\");\n\nconst isDirectYieldCandidate = (node) => {\n  if (!node) {\n    return false;\n  }\n\n  if (node.type === \"CallExpression\" || node.type === \"NewExpression\") {\n    return true;\n  }\n\n  if (node.type === \"ParenthesizedExpression\") {\n    return isDirectYieldCandidate(node.expression);\n  }\n\n  return node.type === \"TSAsExpression\" || node.type === \"TSTypeAssertion\";\n};\n\nexport default defineRule({\n  meta: {\n    type: \"suggestion\",\n    docs: {\n      description:\n        \"Disallow `yield* Effect.fail(...)` when the yielded failure value can be yielded directly in Effect.gen.\",\n      recommended: true,\n    },\n    messages: {\n      noYieldEffectFail:\n        \"Avoid `yield* Effect.fail(...)` here. In Effect.gen, yield the tagged or yieldable error expression directly instead, for example `yield* new MyTaggedError({ ... })` or `yield* myTaggedError(...)`.\",\n    },\n  },\n  create(context) {\n    return {\n      YieldExpression(node) {\n        if (!node.delegate) {\n          return;\n        }\n\n        if (!isEffectFailCall(node.argument) || node.argument.arguments.length === 0) {\n          return;\n        }\n\n        if (!isDirectYieldCandidate(node.argument.arguments[0])) {\n          return;\n        }\n\n        context.report({\n          node,\n          messageId: \"noYieldEffectFail\",\n        });\n      },\n    };\n  },\n});\n"
  },
  {
    "path": "tools/oxlint/workspace-utils.mjs",
    "content": "import { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst packageNameCache = new Map();\n\nconst DEFAULT_PACKAGE_SCOPES = [\"@executor/\"];\n\nexport const getExecutorMonorepoSettings = (settings) => {\n  const packageScopes = Array.isArray(settings?.executorMonorepo?.packageScopes)\n    ? settings.executorMonorepo.packageScopes.filter(\n        (scope) => typeof scope === \"string\" && scope.length > 0,\n      )\n    : DEFAULT_PACKAGE_SCOPES;\n\n  return {\n    packageScopes: packageScopes.length > 0 ? packageScopes : DEFAULT_PACKAGE_SCOPES,\n  };\n};\n\nexport const getWorkspaceInfo = (cwd, filePath) => {\n  const relativePath = path.relative(cwd, filePath);\n\n  if (\n    relativePath.length === 0 ||\n    relativePath.startsWith(`..${path.sep}`) ||\n    relativePath === \"..\" ||\n    path.isAbsolute(relativePath)\n  ) {\n    return null;\n  }\n\n  const segments = relativePath.split(path.sep).filter(Boolean);\n\n  if (segments[0] === \"apps\" && segments.length >= 2) {\n    return {\n      kind: \"app\",\n      root: path.join(cwd, \"apps\", segments[1]),\n    };\n  }\n\n  if (segments[0] === \"packages\" && segments.length >= 3) {\n    return {\n      kind: \"package\",\n      root: path.join(cwd, \"packages\", segments[1], segments[2]),\n    };\n  }\n\n  return null;\n};\n\nexport const getWorkspacePackageName = (workspaceRoot) => {\n  if (packageNameCache.has(workspaceRoot)) {\n    return packageNameCache.get(workspaceRoot);\n  }\n\n  let packageName = null;\n\n  try {\n    const packageJson = JSON.parse(\n      readFileSync(path.join(workspaceRoot, \"package.json\"), \"utf8\"),\n    );\n\n    if (typeof packageJson.name === \"string\" && packageJson.name.length > 0) {\n      packageName = packageJson.name;\n    }\n  } catch {\n    packageName = null;\n  }\n\n  packageNameCache.set(workspaceRoot, packageName);\n  return packageName;\n};\n\nexport const isRelativeSpecifier = (specifier) =>\n  specifier.startsWith(\"./\") || specifier.startsWith(\"../\");\n\nexport const resolveRelativeSpecifier = (filename, specifier) =>\n  path.resolve(path.dirname(filename), specifier);\n\nexport const readStaticSpecifier = (node) => {\n  if (!node) {\n    return null;\n  }\n\n  if (node.type === \"Literal\" && typeof node.value === \"string\") {\n    return node.value;\n  }\n\n  if (node.type === \"TemplateLiteral\" && node.expressions.length === 0) {\n    return node.quasis[0]?.value?.cooked ?? null;\n  }\n\n  return null;\n};\n\nexport const createModuleSourceVisitor = (visitSource) => ({\n  ImportDeclaration(node) {\n    visitSource(node.source);\n  },\n  ExportAllDeclaration(node) {\n    if (node.source) {\n      visitSource(node.source);\n    }\n  },\n  ExportNamedDeclaration(node) {\n    if (node.source) {\n      visitSource(node.source);\n    }\n  },\n  ImportExpression(node) {\n    visitSource(node.source);\n  },\n  CallExpression(node) {\n    if (\n      node.callee.type === \"Identifier\" &&\n      node.callee.name === \"require\" &&\n      node.arguments.length > 0\n    ) {\n      visitSource(node.arguments[0]);\n    }\n  },\n});\n"
  },
  {
    "path": "turbo.json",
    "content": "{\n  \"$schema\": \"https://turbo.build/schema.json\",\n  \"tasks\": {\n    \"build\": {\n      \"dependsOn\": [\"^build\"],\n      \"outputs\": [\"dist/**\"]\n    },\n    \"test\": {\n      \"dependsOn\": [\"^test\"],\n      \"outputs\": []\n    },\n    \"typecheck\": {\n      \"dependsOn\": [\"^typecheck\"],\n      \"outputs\": []\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    }\n  }\n}\n"
  }
]